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
감사합니다.