16.DX Code 짜기/IManager 분리/Flip Model/삼각형 띄우기/FileManager/AddTCHAR
1.Engine이 만들어질 때 HWND가 연결되어 있어야 한다.
기존 코드는 MainManager 생성 시점에 Engine이 만들어지는데 생성 이후에 설정했음.
그래서 첫번째로
MainManager::Create가 Init에 , Destroy가 Release에 위치하는게 깔끔할 것 같아서
기존 InitInctance 함수를 Initialize로 변경 후 내부에서 MainManager::Create 호출.
Release 함수 추가 후 내부에서 MainManager::Destroy 호출.
두번째로 MainManager::Create 후 Engine Instance -> SetHWND() 이런식으로 따로 초기화 해줬는데
생성 시점에 설정이 되어야 하기 때문에 MainManager::Initialize(HWND )로 매개 인자를 추가했고 기존의 Engine Instance -> SetHWND()
그 내부에서 호출.
2.IManager 분리
IManager -init,release
IManagerLoop - init,release,loop
3. memoryleak 잡음. Engine -> t_renderdata delete
4.Dx Error - Swap설정
이런 에러가 뜸을 볼 수 있는데 알아보니까 Dx12 부터는 Flip Effect 를 써야한다.
그때문에 저걸 권장한다고 띄우는 것이다.
플립 모델은 DWM에 의한 창 모드 프레임 구성에 대한 Direct3D 런타임의 읽기 및 쓰기 수를 줄여 시스템 메모리 사용량을 줄입니다.
그런데 일단은 그냥 Blt Mode로 하려한다.
나중에 코드 다 완성하고 최적화 할때 변경해보고 얼마나 성능이 개선되는지 확인해보려고 한다.
그때 자세히 공부할 것.
https://learn.microsoft.com/ko-kr/windows/win32/api/dxgi/ne-dxgi-dxgi_swap_effect
https://devblogs.microsoft.com/directx/dxgi-flip-model/
5.삼각형 띄워보기
일단 튜토리얼 코드를 보며 삼각형만 띄워봤다.
해당 코드들을 class 화 해서 잘 쪼개보자.
1.Device 생성
2.SwapChain 생성
3. RTV 생성 , ViewPort 생성
4. Shader Code 컴파일
-vs, vs layout
-ps
5.Buffer 생성 (Vertex , Index)
6.IASet
-Vertex, Index
-Topology
7. Shader Set
- VSSetShader
- PSSetShader
8.ClearTarget
9.Draw
10.Present
주의할 점은 Shader 코드에 있다.
VS에서 넘어간 Pos 정보는 나중에 w에 위치한 동차좌표로 나눠져서 프로젝션 행렬로 만드는 작업을 내부적으로 파이프 라인에서 해주는데 저기에 0.f 을 넣는다는 것은 내가 이미 계산한 Projection 정보를 주겠다는 것임.
하지만 그렇지 않으면 1.f 를 꼭 넣어줘야 함.
튜토리얼 코드랑 좀 달라서 0.f 넣었다가 왜 이상하게 나오나 잠깐 고민했음.
6.FileManager
또 주의점이 Device 에서 컴파일 할때 파일 이름을 경로를 잘 보고 입력해야 한다.
Device에서 저 코드를 실행시 코드의 위치를 경로로 잡는게 아니라 실행한 RokaProj 의 상위 경로로 잡힌다.
그래서 FileManager에서 ShaderCode Path를 리턴받을 수 있도록 추가했다.
7.AddTCHAR
문자열 연결해서 새로 배출하도록 변경했다.
외부에서 delete 해줘야 한다.(shared_ptr로 리턴하도록 하면 좋을 것 같음.)