포트폴리오 만들기

15.DxRenderer Dll

Roka_is_back 2024. 1. 19.

1.Renderer CDevice class 생성
2.DirectxMath는 전체 프로젝트가 공유
   - Math 는 공유하고 나머지 Dx 함수들은 공유 안되게 하고 싶었다. 
     그런데 다운받은 Simplemath.h 는 d3d11 을 로드하지 않았다면 include 되지 못하게 예외처리가 되어있었다.
     익숙하지 않은 코드라 해당 부분을 지우면 자꾸 에러가 뜨길래 삽질을 좀 오래했다.
     (외부용 Vector를 따로 구현해줘야하나 그건 너무 오래걸릴것 같은데 하면서 구현했다가 지우고 다른 방법해보고 계속 삽질..)
     근데 나중에 보니까 내가 그거 주석 건다고 #pragma once 도 함께 주석 걸어버려서 생긴 문제였다.
     그래서 예외처리 부분 주석걸고 #pragma once 해줌.
     Math는 stl.lib에서 선언해놨다.

RokaSTL_Lib.lib SimpleMath.h 주석한 부분.

3.Render에 Dx명령어를 넣어본다.

 문제 1) CDxDevice에 바로 d3d 자료형들을 변수로 쓰면 안된다. engine에서는 링크가 안되어 있기 때문.

              따라서 innerDevice를 만들어서 래핑했다.

기존

Engine에서 Device를 참조하도록 했다.

하지만 Engine.dll 에서는 Dx 관련 링크가 되어있지 않기 때문에 알 수 없다고 뜬다.

Renderer.dll에서 export 정보를 남긴 CDxDevice에는 외부 공개 하고자 하는 변수만 멤버 변수로 쓸수 있어서

InnerDevice class 를 만들어 래핑했다.

DxDevice class
InnerDevice class

문제 2) engine이 device를 필요로 하기 때문에 renderer 호출 후 engine dll을 호출해야 했다.

            따라서 기존 Engine 내부에서 renderer 호출하던 코드 변경.

Engine.dll에서 Renderer.lib를 링크하고 있다.

 

Engine.dll Render 도 내부에서 Load하던 코드 수정.
Engine.dll Renderer Device 참조.
Engine.dll Renderer Device 참조.

 

그리고 Main 프로젝트에서 호출할 때 아래와 같은 흐름으로 진행되도록 했다.

ScriptManager_DllTestMain - TestCode

 

문제 3) 이상하게 renderer dll 의 함수가 계속 로드가 안됐다.

            이걸로 또 시간 엄청 날린듯.

            external.cpp 와 .h 를 따로 만들어가지고 .cpp에서 external.h가 선언이 안되어 있어서 발생한 문제.

 

호출 잘 된다.

댓글