Upload
wylie
View
43
Download
3
Embed Size (px)
DESCRIPTION
이민웅 참고 ) ShaderX6 8.2. 3D Engine Tools with C++/ CLR. 3D Engine Tools. 엔진은 C++ 로 툴은 C# 으로 개발하고 싶을때 사용 엔진 / 툴 독립적으로 유지 관리 툴 개발시 GUI 부분의 시간 단축 약간의 노가다 작업 필요 서버와 클라이언트 같은 작업 필요. CLR. CLR(Common Language Runtime) 공통 언어 런타임 성능 향상 - PowerPoint PPT Presentation
Citation preview
3D ENGINE TOOLS WITH C++/CLR
이민웅참고 ) ShaderX6 8.2
3D Engine Tools
엔진은 C++ 로 툴은 C# 으로 개발하고 싶을때 사용
엔진 / 툴 독립적으로 유지 관리 툴 개발시 GUI 부분의 시간 단축 약간의 노가다 작업 필요
서버와 클라이언트 같은 작업 필요
CLR
CLR(Common Language Runtime) 공통 언어 런타임
성능 향상 CLR 의 JIT 컴파일러를 통해 만들어진 코드는
unmanaged code 에 비해 성능이 우수 개체 수명을 관리하는 가비지 수집
CLR 의 장점이라기 보다는 .NET Framework 차원에서 지원하는 장점
C#
.Net Framework 사용 Java 와 비슷함 툴 개발이 쉽다
GUI 개발이 편리함 Windows Form WPF
Xaml 방식 , DirectX 랜더링 , Shader 도 사용가능 C++ 과 연동하기 위해 CLR 를 사용
C++/CLR
CLRC++ C#
Wrapper
C++ 과 CLR 코딩 방식
포인터의 사용 C++ : test * temp = new test() CLR : test^ temp = gcnew temp()
주소값사용은 & -> % NULL 체크 NULL -> nullptr
클래스 C++ : class Test CLR : public ref class Test
String 변환
C# 은 기본적으로 Unicode 만 지원 Marshal 라이브러리를 사용하여 간단히
C++ 용으로 변환 닷넷 프레임워크 3.0 부터 지원 3.0 이전 버전에는 문제가 많았음
C# 외부 DLL 링크도 가능public sealed class DevilAPI{ private const string DEVIL_LIBRARY = "Devil.dll"; [DllImport(DEVIL_LIBRARY, CallingConvention = CallingConvention.Winapi), SuppressUnmanagedCodeSecurity] public static extern void ilInit();}
msclr::interop::marshal_context ctx;const char* ch = ctx.marshal_as<const char*> (str);
Wrapper(CLR)
C++ 의 데이터를 C# 에서 사용하기 위해서는 C++ 에 사용하는 데이터 구조를 C# 쪽에 새로 만듬 저의 경우는 CLR 부분에서는 C++ <-> C#
쪽의 데이터의 변환 부분만 해줌 툴 기능 코드들은 CLR 과 C# 쪽에서 모두 처리
Engine
AData
Tool
ADataInfo
Wrapper(CLR)
SetADataUpdateA-
Data
Wrapper
※ 이런식의 구조도 될 수 가 있음
참고 ) 툴과 오버 엔지니어링 그리고 벽돌 http://gamedevforever.com/23
감사합니다 .