DirectX 11

220930

슬뷔 2022. 10. 11. 11:33

파일로 존재하는 이미지 파일을 압축포맷이 다양하기 때문에

메모리에 로딩하는 과정에서 포맷에 맞게 역으로 디코딩을 해야한다.

 

리소스들은 무조건 로드라는 함수가 있어야한다.

 

직접적으로 리소스를 로딩할 수 없고 리소스매니저에 있는 크리에이트 함수를 이용해야한다.

ex) 아무데서나 CTexture* pTex = new CTexture;

pTex->Load();

이게 안된다. 리소스매니저에 전혀 등록이 안되기 때문이다.

 

그래서 항상 로딩은 리소스매니저를 통해서 해야한다.

ex) CResMgr::GetInst()->Load<CTexture>("키값", 경로");

 

텍스쳐를 로딩하려면 다이렉트텍스 라이브러리 함수를 사용해야 한다.

먼저 라이브러리를 인크루드 한다.

 

1. 텍스쳐

ScratchImage(다이렉트 텍스에서 제공해주는 클래스)를 포인터가 아닌 멤버 채로 넣으려고 헤더를 직접참조했다.

전방선언으로 포인터로 넘어가면 클래스 사이즈가 몇인지 알 수 없으니까 클래스를 추가할 수가 없다.

 

ScratchImage  -> 어떤 png 파일을 로딩하고자 하면,  다이렉트엑스에서 제공해주는 함수를 이용해서 메모리에 압축을 풀어 메모리 로딩을 시키고 스크리치 이미지 객체가 가지게 된다.

로딩된 실제 메모리를 관리해주는 것이다.

 

스크래치 이미지에게 로드를 이용해서 로딩된 메모리에 픽셀 데이터도 바로바로 접근할 수 있다.

 

m_Image.GetPixels(); 를 해서 메모리에 로딩된 이미지의 첫 픽셀주소를 바로 받아올 수 있음.

즉, 스크래치 이미지는 시스템 메모리상에서 이미지의 시스템 메모리를 관리하는 것이다.

결국 이 메모리를 다시 gpu 메모리로 보내서 쉐이더에서 파이프라인 호출할 때 gpu가 메모리를 가져다 사용할 수 있다.

 

Shader Resource View -> 파이프라인 중간에 그림을 그릴 자원으로 관리

 

확장자에 따라 함수가 분류되어 있다.

 

WIC(Window Image Component) -> png, jpg, bmp 등

DDS(dds) -> LoadFromDDSFile 

TGA(tga) -> LoadFromTGAFile 

 

이걸 이용하면 아직 시스템메모리에 이미지 객체만 만든 것이고 gpu로 보내는 것을 아직 안했다.

CreateShaderResourceView를 이용한다.

 

* 픽셀 정보들은 보간(Interporation)돼서 그라데이션처럼 보임

UV를 이용해서 UV값에 따라 픽셀 정보를 샘플링해서 가져온다.

 

 

 

 

 

'DirectX 11' 카테고리의 다른 글

221005  (0) 2022.10.17
221004  (0) 2022.10.11
220929  (0) 2022.10.10
220928  (0) 2022.10.09
220927  (0) 2022.10.05