[1]. 텍스쳐를 로드해본다.
[2]. Effect.h 를 추가해서, 결국에 셰이더 파일을 사용할 수 있었던 것 처럼. Texture 또한 DirectX 자체에서 Load 해주는 기능이 없어서 외부 라이브러리 파일을 추가해야만 한다.
[3]. 따라서, DirectX Tool kit 이라는 외부 라이브러리 파일을 추가해야하는데, 이게 특히 좋은게 MIP_MAP 을 설정할 수 있게 도와주기 때문에 (DDS 확장자만) 기존의 텍스쳐 로드 시, 자글자글한 현상 등을 해결해주어, 내 프로젝트 게임의 품질을 훨씬 향상 시켜주는데 좋다.
[4]. DirectTK 2022 버젼을 Github에서 찾아, 다운받고, Effect 때와 마찬 가지로 Debug / Release 로 구분해, Lib 를 추가하고 Engine 프로젝트의 속성 링커 입력 에서 추가를 해준다.
[5]. 그리고 헤더 파일 또한 직접 추가를 해줘야 하므로, Engine 의 Public 폴더에 별도로 DirectXTK 라는 폴더를 만들고 그 안에 다운 받은 헤더 파일들을 복사 붙여넣기 해준다.
[6]. 이제 빌드를 시작하면 잘 추가가 되었고, 텍스쳐를 로드하기 위한 코드를 작성한다.
[7]. 만들어 놓았던 Texture 컴포넌트 헤더 파일에,
ID3D11ShaderResourceView 라는 타입의 벡터를 선언해준다.
[8]. ID3D11ShaderResourceView는 줄여서 SRV 라고 부르겠다.

[9]. 이제 Texture 컴포넌트의 원형을 호출할 때는, 그 로드할 텍스쳐의 경로와, 총 몇 개의 텍스쳐인지를 인자로 받아오게끔 한다. - 한 번에 여러 장 로드할 수 있는 형태로 받아오려고 하는 것이다. TextureName0 / TextureName1 / … → TextureName%d 식으로 하려고.
[10]. wsprintf(sztexturfilepath,에 들어간 ptexturefilepath(서식문자) , i ) 로, 여러 장을 읽어올 수 있게끔, 처리할 것이고, 읽어온 텍스쳐 파일의 확장자를 검색해야 하는데, .dds 일 때와 .tga 일 때, 그 외의 경우에 맞는 함수를 작성한다.
[11]. 제공된 함수들은 2개인데,
.dds 확장자의 경우, CreateDDSTextureFromFile : 원래는 텍스쳐 로드하려면, Texture2D 타입으로 받아와서, ShaderResourceView 로 또 처리하는 2중 작업이 필요했으나, 이제는 알아서 ShaderResourceView 가 써지게끔 해주는 함수라고 보면 될 것 같다. 따라서, Texture2D 가 필요없으니, 3번 째 인자는 nullptr 로 채워주고 4번 째 인자에 srv의 주소를 작성하자.

저렇게, 로드한 ShaderResourceView 를 vector STL 에 push_back 하고 마무리.
[12]. 이제 셰이더에 저 SRV를 던져주는 기능이 필요하다. 셰이더 파일에 있는 전역변수에 정보를 던져주기 위해서, 행렬의 정보를 던져줬던 Bind_Matrix 때와 마찬가지로, Bind_SRV 라는 함수를 통해 이를 진행한다.

저 함수 내에도, 행렬 던져줬을 때와 마찬가지로, As~로 시작한는 AsShaderResource 함수와 거기서 뽑힐 수 있는 SetResource 함수가 있다.
[13]. 이제 저걸 Texture 클래스의 Bind_ShaderResource 함수로 호출하고, 그릴려고 하는 GameObject 객체 중 하나인 BackGround 클래스에서, Texture Component 를 통해서 호출해서 셰이더와 바인딩 한다.


[14]. 따라서, 셰이더 파일에서 texture2D 라는 타입의 전역변수를 하나 만들어 줘야하고, sampler를 선언해줘야 하는데, 다음과 같다.

[15]. 픽셸 세이더의 main 함수 내에서는, 다음과 같이 선언한다.

[16]. 이제 저렇게 하고 Loader 클래스에서 어떤 texture를 load할 것인가, 설정 하고, BackGround 클래스에서, ‘’어떤 셰이더에서, 어떤 이름의 전역변수 핸들로, 몇 번 째 인덱스의 “ 라는 세팅을 설정해주면 해당 텍스쳐가 셰이더와 바인딩해서 로드 되고 출력이 되겠다.

[17]. 참고로 셰이더 파일 내에서, vPosition 은 뷰포트 영역의 좌표이기 때문에, 혹시 만약 픽셸 세이더가 월드 좌표를 알고 싶다하면,

