본문 바로가기
ComputerGraphics/DirectX 11

DirextX 11 텍스처 로드 D3DX11CreateShaderResourceViewFromFile 대체하기 (DirectTex)

by lucidmaj7 2020. 5. 10.
728x90
반응형

D3DX11CreateShaderResourceViewFromFile

요새 DirectX 11튜토리얼을 www.braynzarsoft.net/ 보면서 따라하고 있습니다. 오늘 공부한 튜토리얼은 텍스처입니다.
저는 Visual Studio 2019에서 Windows 10 SDK만 가지고 DirectX를 공부하고 있어 기존에 DirectX SDK에서 쓰이는 라이브러리를 쓰지 않아 약간 차이점이 존재했습니다.(Windows 8부터 DirectX SDK가 Windows SDK에 포함됨)
튜토리얼은 Windows 8 이전의 개발환경 기준으로 설명되어 있기 때문에 약간 변형이 필요했는데 이번에 텍스처 튜토리얼에서 텍스처 파일을 쉐이더리소스로 불러오는 함수 D3DX11CreateShaderResourceViewFromFile가 문제가 되었습니다.

마이크로소프트 MDSN에서 D3DX11CreateShaderResourceViewFromFile를 검색해보면 Windows8 부터 deprecated되었다고 딴거 쓰라고 명시가 되어있습니다.
DirectXTK, DirectTex와 같은 라이브러릴르 별도로 사용하여 쓰라고 되어있습니다.

DirectXTex

마이크로소프트는 DirectX SDK를 Windows SDK와 통합하면서 몇가지 유틸리티와 툴 기능들을 별도의 라이브러리로 분리하여 제공하고 있습니다.

왜...?

그 중에 하나가 바로 DirectXTex라는 라이브러리 입니다. DirextXTex는 텍스처 리소스를 보다 편하게 관리하고 사용할 수 있는 기능을 제공합니다. 라이브러리 소스와 빌드 환경은 Github에 공개되어있습니다. 다만 오픈소스는 아닌 듯합니다.

https://github.com/microsoft/DirectXTex

DirectXTex 빌드하기

우선 DirectXTex프로젝트를 내려받아 빌드를 해야합니다. 저는 Visual Studio 2019를 사용할 것이기 때문에 다운받은 소스에서 DirectXTex_Desktop_2019.sln를 오픈 하였습니다.

솔루션을 오픈하면 다음과같은 프로젝트가 존재합니다. DirectXTex라는 프로젝트가 우리가 사용할 lib 빌드 프로젝트입니다.

별다른 설정없이 빌드 플랫폼만 설정하고 빌드를 누르면 lib파일이 빌드됩니다. 저는 Debug빌드로 사용할 것이기 때문에 output파일에 d를 붙여 빌드 하였습니다.

또 MFC MTd환경에서 사용할 것이기 때문에 c/c++ > code generagtion에서 runtime library를 MTd로 설정하였습니다.

세부 프로젝트 설정은 굳이 하지 않아도 되며 각자의 개발환경에 맞춰 설정합니다.

이제 DirectXTex라이브러리 프로젝트에서 DirextXTex.h,DirectXTex.inl파일과 빌드된 lib파일을 복사하여 해당프로젝트에 넣어줍니다. 그리고 link설정을 해줍니다.

(이건 설명하지 않겠습니다.)

 

 

DirectXTex로 JPG파일 텍스처 로드하기

이제 개발하는 프로젝트에서 다음과 같이 텍스처를 로드 할 수 있습니다.


HRESULT CDirect3D::LoadTexture(CString strTextureFilePath)
{
    ScratchImage image;

    HRESULT hr = 0;
    hr = CoInitializeEx(nullptr, COINITBASE_MULTITHREADED);//COM초기화
    if (FAILED(hr))
    {
        AfxMessageBox(_T("Error CoInitializeEx\r\n") + strTextureFilePath);
        goto EXIT;
    }
//이미지 로드
    hr= LoadFromWICFile(strTextureFilePath.GetBuffer(), WIC_FLAGS_NONE, nullptr, image);

    if (FAILED(hr))
    {
        CString str;
        str.Format(_T("%x\r\n"), hr);
        AfxMessageBox(_T("Error LoadFromWICFile\r\n ")+str + strTextureFilePath);
        goto EXIT;


    }

    hr = CreateShaderResourceView(m_dev, image.GetImages(), image.GetImageCount(), image.GetMetadata(), &m_CubesTexture);

    if (FAILED(hr))
    {
        AfxMessageBox(_T("Error CreateShaderResourceView\r\n") + strTextureFilePath);
        goto EXIT;
    }

EXIT:

    return hr;
}



    if (FAILED(LoadTexture(_T("1.jpg"))))
    {
    ///텍스처로드 fail
    }

LoadFromWICFile를 이용하여 JPG파일을 로드하며, CreateShaderResourceView로 이미지를 텍스처로 로드합니다. 이때 LoadFromWICFile을 사용하기전에 CoInitializeEx를 호출하여 COM초기화를 해야합니다.

텍스처로드를 성공!!

728x90
반응형

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

XMVector3TransformCoord에 대하여  (0) 2020.06.04
DirectX11 3D 엔진 구현하기 데모 영상  (0) 2020.06.01

댓글