3D Engine Tools with C++/CLR

민웅 이
민웅 이NCSOFT Client Programmer à NCSOFT
이민웅
참고 ) 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
감사합니다.
1 sur 10

Contenu connexe

Tendances

LlvmLlvm
LlvmLuavis Kang
573 vues32 diapositives
[170403 2주차]C언어 A반[170403 2주차]C언어 A반
[170403 2주차]C언어 A반arundine
257 vues34 diapositives
llvm 소개llvm 소개
llvm 소개Minhyuk Kwon
3.5K vues72 diapositives

Similaire à 3D Engine Tools with C++/CLR(20)

The Future of .NET and C#The Future of .NET and C#
The Future of .NET and C#
명신 김138 vues
Manage book projectManage book project
Manage book project
Ann Byung Hyun1.5K vues
Manage book projectManage book project
Manage book project
Ann Byung Hyun665 vues
flutterflutter
flutter
Wonjun Hwang46 vues

3D Engine Tools with C++/CLR

  • 1. 이민웅 참고 ) ShaderX6 8.2 3D ENGINE TOOLS WITH C++/CLR
  • 2. 3D Engine Tools  엔진은 C++로 툴은 C#으로 개발하고 싶을때 사용  엔진/툴 독립적으로 유지 관리  툴 개발시 GUI부분의 시간 단축  약간의 노가다 작업 필요  서버와 클라이언트 같은 작업 필요
  • 3. CLR  CLR(Common Language Runtime) 공통 언어 런타임  성능 향상  CLR의 JIT 컴파일러를 통해 만들어진 코드는 unmanaged code에 비해 성능이 우수  개체 수명을 관리하는 가비지 수집  CLR의 장점이라기 보다는 .NET Framework 차원 에서 지원하는 장점
  • 4. C#  .Net Framework 사용  Java 와 비슷함  툴 개발이 쉽다  GUI 개발이 편리함  Windows Form  WPF  Xaml 방식, DirectX 랜더링, Shader도 사용가능  C++과 연동하기 위해 CLR를 사용
  • 6. C++과 CLR 코딩 방식  포인터의 사용  C++ : test * temp = new test()  CLR : test^ temp = gcnew temp()  주소값사용은 & -> %  NULL 체크 NULL -> nullptr  클래스  C++ : class Test  CLR : public ref class Test
  • 7. 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(); }
  • 8. Wrapper(CLR)  C++의 데이터를 C#에서 사용하기 위해서는 C++에 사용하는 데이터 구조를 C#쪽에 새로 만듬  저의 경우는 CLR 부분에서는 C++ <-> C#쪽의 데 이터의 변환 부분만 해줌  툴 기능 코드들은 CLR과 C#쪽에서 모두 처리 Engine AData Wrapper(CLR) SetAData UpdateAData Tool ADataInfo
  • 9. Wrapper ※ 이런식의 구조도 될 수 가 있음 참고 ) 툴과 오버 엔지니어링 그리고 벽돌 http://gamedevforever.com/23