어셈블리어 (121.♡.94.55)
2025년 12월 11일 PM 04:06 · 수정됨(12. 12. 09:08)

- 첫밴째 애셋으로 ITextAsset를 제작 했습니다. 접두어 'I'를 보시면 아시겠지만 인터페이스형 클래스 입니다.
- Mark3D부터는 완벽히 분리된 dll 또는 모듈로써.. 완전한 COM객체는 아니지만 COM이랑 최대한 비슷한 구조로 작성 할 예정입니다.
- ITextAsset은 주로 인코딩 관련된 메소드들이 포함되어 있습니다. 윈도우의 경우 기본 인코딩이 CP939지만 Unix계열은 UTF8계열입니다.
- 또한 wchar의 사이즈가 윈도우의 경우 UTF16으로 2바이트이며 Unix계열은 대체적으로 UTF32 4바이트를 사용 합니다.
- JSON 또는 개발용 스트링 테이블 등에서 주로 사용 될듯 합니다.
- 동기, 비동기 로드 모두 구현 했습니다.
------------------------------------------------------------------------------

- IBinaryAsset은 대부분의 애셋 로드(텍스쳐, 모델, 등등)에서 사용될 클래스 입니다.
- 사실 ITextAsset과 IBinaryAsset은 UTF8이상의 유니코드 입장에서는 큰 차이는 없습니다.
- 널포인터 종료 유무의 차이밖에 없다고 보면 됩니다.
- 다만 IBinaryAsset은 유니코드 관련 메소드가 없고 CRC32, CRC64와 같은 해시값을 얻어오는데 집중 되어있습니다.
------------------------------------------------------------------------------

- Direct3D 11의 쉐이더 컴파일 부분 코드 입니다.
- 컴파일후 Reflect기능을 이용해서 쉐이더의 상수구조체, 샘플러 스테이트, 버텍스 구조, 렌더 상태를 얻어 오거나 세팅합니다.
- 언리얼이나 유니티의 경우 컴파일후 Refelct 기능을 이용해서 일종의 메타데이터를 구성 합니다. 하지만 저는 그냥 매번 컴파일해서 Reflect를 돌릴 예정입니다. 무거운 게임을 만들일이 없기 때문에 추후 이부분은 최적화 하는 과제로 남겨둡니다.
- 사실 쉐이더 구조를 작성하는 것이 가장 어려운 고민 이었습니다. D3D9까지만 해도 쉐이더는 일종의 '리소스'로써 취급하며 사용 했는데요.
- D3D11 부터는 사실상 쉐이더는 리소스가 아니라 렌더링 파이프라인을 전담하는 프로그램으로써 진화한 느낌입니다. 그래서 완전히 리소스마냥 컨트롤 하기가 좀 힘듭니다.
- 예를 들어 inputLayout은 버텍스 쉐이더를 컴파일 해야만 생성 할수 있어서 VertexDeclaration과는 다른 방식으로 관리 해야 합니다.
- 각 RenderState역시 동적으로 변경 되었던 과거와 달리 완전한 객체로써 생성해야 됩니다. 그래서 동적 변경이 까다롭습니다.
- 아무튼 이제는 D3D 코드를 작성하기 되어 곧 폴리곤 하나 렌더링 할 수 있겠네요.
------------------------------------------------------------------------------
- mark3d는 COM구조와 비슷하게 작성하게 되면서 외부에는 오직 1개의 Factory 함수만 익스포트 합니다. (BOOL CreateEngineFactory(xxxx, IMark3D** ppOut) 이런식으로요.
- 해당 Factory로 얻게되는 IMark3D라는 인터페이스에서 나머지 ITextAsset, IBinaryAsset, ITexture2D..등등의 리소스 등등을 할당 받을수 있게 됩니다.
- 대부분 COM구조의 dll이 그렇듯 저도 헤더 파일에는 오직 인터페이스만 노출합니다.
- 스마트 포인터가 아닌 IUnknown의 AddRef와 Release를 통해서 참조 카운트를 AddRef하거나 Release해서 삭제여부가 갈립니다.
- 최근 C++11이후 부터는 shared_ptr이나 unique_ptr을 통해서 스마트 포인터로 관리 하는데 직접 사용하기를 좋아하는 저로써는 고민입니다.
- 최근 D3D12 SDK의 샘플을 보면 COM객체용인 ComPtr이 존재 합니다. shared_ptr과 거의 같은 기능을 담당하는데 일단 제외하고 작성 할 예정입니다.
- 추후 클라이언트용 유틸리티 기능에 추가할 생각입니다.
- 아무튼 슬슬 렌더러 제작을 향해 갑니다.
댓글 (2)
-
코코끼리대파
25.12.12 · 61.♡.36.99
-
비비쥬얼씨뿔뿔
→ 코끼리대파 작성자
25.12.12 · 175.♡.10.44
오 영천님 방송 저도 듣는데.. 사석에선 이름부르는 사이라 ㅋㅋㅋ 반갑네요!
댓글을 작성하려면 이 필요합니다.
고수분들은 스마트포인터 이런거 안쓰고 포인터 직접관리하시는거 같아요