3D_Engine_Tools_with_C
Download
Report
Transcript 3D_Engine_Tools_with_C
이민웅
참고 ) ShaderX6 8.2
3D ENGINE TOOLS WITH
C++/CLR
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
C++
CLR
Wrapper
C#
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이전 버전에는 문제가 많았음
msclr::interop::marshal_context ctx;
const char* ch = ctx.marshal_as<const char*> (str);
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();
}
Wrapper(CLR)
C++의 데이터를 C#에서 사용하기 위해서는
C++에 사용하는 데이터 구조를 C#쪽에 새로
만듬
저의 경우는 CLR 부분에서는 C++ <-> C#쪽의 데
이터의 변환 부분만 해줌
툴 기능 코드들은 CLR과 C#쪽에서 모두 처리
Engine
AData
Wrapper(CLR)
SetAData
UpdateAData
Tool
ADataInfo
Wrapper
※ 이런식의 구조도 될 수 가 있음
참고 ) 툴과 오버 엔지니어링 그리고 벽돌 http://gamedevforever.com/23
감사합니다.