포트폴리오 만들기

16.DX Code 짜기/IManager 분리/Flip Model/삼각형 띄우기/FileManager/AddTCHAR

Roka_is_back 2024. 1. 21.

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 를 써야한다.

그때문에 저걸 권장한다고 띄우는 것이다.

 

https://learn.microsoft.com/ko-kr/windows/win32/api/dxgi/ne-dxgi-dxgi_swap_effect

 

https://devblogs.microsoft.com/directx/dxgi-flip-model/

 

플립 모델은 DWM에 의한 창 모드 프레임 구성에 대한 Direct3D 런타임의 읽기 및 쓰기 수를 줄여 시스템 메모리 사용량을 줄입니다.

그런데 일단은 그냥 Blt Mode로 하려한다.

나중에 코드 다 완성하고 최적화 할때 변경해보고 얼마나 성능이 개선되는지 확인해보려고 한다.

그때 자세히 공부할 것.

https://learn.microsoft.com/ko-kr/windows/win32/api/dxgi/ne-dxgi-dxgi_swap_effect

 

 

DXGI_SWAP_EFFECT(dxgi.h) - Win32 apps

IDXGISwapChain1::P resent1을 호출한 후 디스플레이 화면에서 픽셀을 처리하는 옵션입니다.

learn.microsoft.com

 

 

DXGI_SWAP_EFFECT(dxgi.h) - Win32 apps

IDXGISwapChain1::P resent1을 호출한 후 디스플레이 화면에서 픽셀을 처리하는 옵션입니다.

learn.microsoft.com

https://devblogs.microsoft.com/directx/dxgi-flip-model/

 

For best performance, use DXGI flip model - DirectX Developer Blog

This document picks up where the MSDN “DXGI flip model” article and YouTube DirectX 12: Presentation Modes In Windows 10 and Presentation Enhancements in Windows 10: An Early Look videos left off.  It provides developer guidance on how to maximize per

devblogs.microsoft.com

https://stackoverflow.com/questions/56286975/how-to-fix-this-multisampling-error-when-creating-a-swapchain

 

How to fix this multisampling error when creating a swapchain?

I'm getting an DXGI ERROR about multisampling when creating a swapchain and need some help after hours of trying to resolve this error. I'm setting up a simple window for learning Direct3D 11. I h...

stackoverflow.com

 

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를 리턴받을 수 있도록 추가했다.

filemanager
filemanager

7.AddTCHAR

문자열 연결해서 새로 배출하도록 변경했다.

외부에서 delete 해줘야 한다.(shared_ptr로 리턴하도록 하면 좋을 것 같음.)

rokaSTL_Lib func.cpp

 

 

댓글