D3D12엔진 개발-폰트 렌더링, Texture에 실시간으로 써넣기

D3D12용 폰트 렌더링 코드를 작성했다. 오래전부터 써온 방식인데 D3D9, D3D11, D3D12에 따라서 구현은 달라질수밖에 없다. 근간 전략은  동일 내용의 텍스트에 대해서는 텍스쳐로 만들어두고 최대한 재활용한다는 것이다. 즉 “ABCDEF”라는 문자열을 같은 폰트로 렌더링 하는 경우 첫번째 렌더링 시에는 GDI나 DWrite를 이용해 렌더링하고 그걸로 텍스쳐에 써넣지만, 두번때 렌더링시에는 이미 만들어진 텍스쳐와 그 좌표를 캐시로부터 얻어온다. 이 전략을 이전부터 … More D3D12엔진 개발-폰트 렌더링, Texture에 실시간으로 써넣기

Windows 10 디바이스간 파일전송앱 – FileTransfer

https://www.microsoft.com/en-us/store/apps/filetransfer/9nblggh1rmq5 예전 회사에서 만들었던 앱입니다. 로컬 네트워크 상의 Window 10 device간에 파일을 전송할 수 있는 앱입니다. UWP앱이고 당연히 Windows 10 Phone과 태블릿,PC를 모두 지원합니다. UI는 썰렁하지만 기능은 충실히 잘 작동합니다. 무엇보다 작고 빠릅니다. UWP앱으로는 무척 드믈게 C++와 winsock으로 만들었고 코어코드를 공유해서 win32콘솔버전도 개발했습니다. 물론 스토어에는 UWP버전만 올라갔죠. 제가 별5점을 준 리뷰가 한개 있긴 하지만… ‘The … More Windows 10 디바이스간 파일전송앱 – FileTransfer

D3D12에서 Texture의 Row Pitch구하기.

D3D11에선 Map()한번으로 리소스로 사용하는 메모리의 RowPitch를 얻을 수 있었는데 D3D12에선 Map()해봐야 포인터 하나 달랑 나옴. ‘SystemMemory에 잡는 리소스의 경우 Pitch가 따로 없이 Width x SierPerPixel로 딱 맞아떨어지는 것인가! 그래서 CopyResource()할때 알아서 해주는 것인가!’ 라고 생각했으나 UpdateSubresources()소스 코드를 따라가보니 RowPitch를 구해서 카피하고 있다. 역시 그런 자동화 따위 있을리가 있나. 게다가 수동제어를 전면에 내세운 D3D12에서… 하여간 텍스쳐에 … More D3D12에서 Texture의 Row Pitch구하기.

D3D12 – ConstantBuffer, Descriptor Heap의 pooling

D3D12 엔진 개발상황 스프라이트 한개를 가지고 위치를 바꿔가며 찍을 수 있게 됐다. 스샷참고. 같은 스프라이트를(캐릭터 모델의경우도 마찬가지) 위치 바꿔가며 여러번 렌더링한다는게 D3D12에선 간단하지가 않다. D3D11은 즉시 상태를 바꾸로 렌더링하고 그 응답을 받고 다음을 진행한다. 하지만 D3D12는 배치처리를 한다. Command를 레코딩해서 마지막에 Execute하는 방식이라 이전처럼 한개의 ConstantBuffer를 잡아놓고 내용 고쳐써가며 렌더링을 여러번 할 수 없다. 스샷 참고. … More D3D12 – ConstantBuffer, Descriptor Heap의 pooling

D3D12 멀티 텍스쳐링 샘플

슬프게도 github에 개인이 올린 CreateDDSTextureFromFile의 d3d12버전이 제대로 작동하지 않음. d3d12샘플의 miniengine소스에서 긁어다가CreateDDSTextureFromFile()함수 다시 만듦. 1 ConstantBufferView와 2 ShaderResourceView를 하나의 디스크립터힙에 몰아넣어서 RootSignagture로 세팅했다. 리소스 바인딩에 대해서 이제 어느 정도 감 잡았다. … 파일에서 하나 읽고 메모리에서 하나 생성해서 멀티텍스쳐링 예제 만들어서 돌려봤다.

게임엔진을 개발해야하는 이유

물론 상용엔진들의 퀄리티는 대단히 뛰어나다. 그렇지만 여전히 게임엔진을 자체개발해야할 이유는 존재한다. 게임엔진이 그래픽 렌더링만 하는게 아니다. 그래픽 렌더링은 보여지는 모습일 뿐이고 내부적으로 씬관리, 오브젝트 스케쥴링, 게임내 물리처리 등이 필요하다. … mmorpg와 같은 서버 베이스의 온라인 게임이라면 클라이언트와 서버의 동기화 작업이 만만치 않다. 그런데 상용엔진들은 다수의 클라이언트와 서버에 대한 동기화를 위한 고려가 되어있지 않다. 클라이언트에서만 사용하는 … More 게임엔진을 개발해야하는 이유

D3D12 – PipelineState폭발

D3D 12에선 ID3DPipelineState란 놈이 있다. 그러니까 과거에 DepthStencilState과 RasterState와 BlendState를 합치고 거기에 VertexShader와 PixelShader까지 합쳐서 한 세트로 만든 객체다. 이걸 미리 만들어두고 렌더링할때 한번만 set하면 물론 빠르겠지. 기존처럼 각 스테이트를 따로 설정하는거보다 당연히 빠르겠지. … 문제는 쉐이더 폭발에다 각종 스테이트의 조합 상태까지 곱해져서 엄청나게 많은 PipelineState가 미리 생성되어야 한다는 점이다. 성능을 올리기 위해서 정말 눈에 … More D3D12 – PipelineState폭발

DirectX 11 Desktop Game UWP App으로 포팅하기

MS MVP/RD Asia meetup행사때 MS재팬 스튜디오에서 영상을 찍을 기회가 있어서 짧게 발표자료를 만들었습니다. 촬영 이후. 발표자료를 약간 수정하고 뒤에 데모영상 링크를 첨부했습니다. https://doc.co/rtg4c3   이 내용과 관련된 동영상은 유튜브에 올렸습니다. DirectX 11 Game Engine for win32 and UWP(Window 10 ,Windows 10 Mobile) Testing my game engine on Lumia 1520 Testing my game engine on Lumia … More DirectX 11 Desktop Game UWP App으로 포팅하기