[shaderx6]8.2 3d engine tools with c++cli

1,129 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,129
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

[shaderx6]8.2 3d engine tools with c++cli

  1. 1. ShaderX 68.2 3D Engine Tools with C++/CLI ohyecloudyhttp://ohyecloudy.com shader studyhttp://cafe.naver.com/shader
  2. 2. IntroductionWhat Is C++/CLI?General Programming Considerations
  3. 3. MS에서 .NET platform을 밀고 있음.툴 작성이 더 편리해짐. GUI 쪽이 많이 편함. Windows Forms WPF Windows Presentation Foundation 작성했던 C++ 코드를 다 버려야 하나?C++/CLI C++, .NET framework 징검다리 역할.
  4. 4. IntroductionWhat Is C++/CLI?General Programming Considerations
  5. 5. C++ /CLI Compilerhttp://en.wikipedia.org/wiki/Common_Language_Infrastructure
  6. 6. 가능한 애플리케이션3D object visualization toolsLevel editorsConversion tools and plug-ins
  7. 7. 어떻게 달라졌나?heap이 두 종류 pure c++ heap garbage collected heappure c++ heap control * ctrl = new button();garbage collected heap control ^ ctrl = gcnew button();
  8. 8. 어떻게 달라졌나?소멸자에서 Dispose() 호출키워드 추가 property, delegate, eventLanguage Features for Targeting the CLR http://goo.gl/cPq7b
  9. 9. 장점DLLImport 필요 없다. Win32 바로 호출C++ 컴파일러 최적화 젂략 여젂히 유효..NET, C++ 라이브러리를 사용 가능.다른 .NET 언어에서 사용 가능 C++/CLI로 만든 컴포넌트를
  10. 10. 단점컴파일러가 상대적으로 최근에 만들어짐몇 가지 제한 DLLMain에서 .NET 코드를 호출하지 못함managed 와 unmanaged컨텍스트 스위칭에 비용이 크다.
  11. 11. IntroductionWhat Is C++/CLI?General Programming Considerations
  12. 12. Minimize Context Switches컨텍스트 스위칭 비용 native와 managed code 사이 50~300 cycles
  13. 13. Minimize Context SwitchesList<Vector3>^ instancePos = world->GetTreeInstances();for each (Vector3 pos in instancePos) pRenderer->DrawInstance(pGeo, pos.x, pos.y, pos.z);컨텍스트 스위칭이 빈번 List<Vector3>^ : managed DrawInstance : native이런 경우엔 native array를 사용
  14. 14. Force Time-Critical Functions to Be Native컴파일러 동작 과정 먼저 C++ 함수를 MSIL로 컴파일 실패하면 native로 컴파일바로 native로 컴파일 inline, naked, #pragma unmanaged
  15. 15. Double Thunkingmanaged와 native가 섞인 코드 모듈이컴파일됐을 때 entry point를 두 개 생성. 두 개 다 검사하는 double thunking 발생.
  16. 16. Exchanging Dataheap이 두 종류 pure c++ heap garbage collected heap간단한 타입은 잘 동작복잡한 타입인 경우 바로 접근은 불가능 arrays, strings
  17. 17. Exchanging Data컴파일 성공// native function callint adaptersCount = pD3D->GetAdapterCount();this->adaptersTextBox->Text = adaptersCount.ToString();컴파일 실패fwrite( textBox->Text, sizeof(char), textbox->Text->Length, pFile);
  18. 18. Pointers and Keeping References ref class WorldEntity // A managed class { ... private: CMesh* m_graphicalRep; // native pointer };가능
  19. 19. Pointers and Keeping Referencesclass CMesh : public CPlacable3D{...private: WorldEntity^ m_properties // reference managed object};Marshal 클래스가 가능하게 해준다.native VARIANT 구조체를 대신 사용 16 bytes
  20. 20. IntroductionWhat Is C++/CLI?General Programming Considerations

×