2013-02-13 1 views
0

DirectX 프로젝트에서 미리 컴파일 된 HLSL 쉐이더를로드하는 데 실망한 문제가 있습니다. 저는 Visual Studio 2012 Professional과 DirectX SDK (2010 년 6 월)를 사용하고 있습니다. 아래 코드는 링크 오류 LNK2019 : 해결되지 않은 외부 기호 _D3DReadFileToBlob @ 8이 원인입니다.Visual Studio 2012에서 D3DReadFileToBlob을 호출하면 링크 오류가 발생합니다.

#include "GameBase.h" 
#include<D3Dcompiler.h> 

bool GameBase::LoadShaderFromFile(LPCWSTR filePath, ID3DBlob** buffer) 
{ 
    HRESULT result = D3DReadFileToBlob(filePath, buffer); 

    if(FAILED(result)) 
    { 
     return false; 
    } 

    return true; 
} 

라이브러리 d3d11.lib, d3dx11.lib, dxerr.lib, D3dcompiler.lib은 링커> 입력> 추가 종속성에 설정하고, 적절한하는 디렉토리를 포함 라이브러리 디렉토리는 다이렉트 X SDK 위치를 설정 : $ (IncludePath); $ (DXSDK_DIR) Include 및 $ (LibraryPath); $ (DXSDK_DIR) Lib \ x86)에 있습니다.

코드의이 부분을 제거하면 나머지 프로젝트를 아무런 문제없이 컴파일하고 실행할 수 있습니다 (쉐이더가로드되지 않는다는 명백한 예외가 있음).

나는 뭔가 미묘한 부분을 놓치고 있어야한다고 느낍니다.하지만 검색 및 스택 오버플로를 통해 발견 한 것은이 문제를 해결하는 방법에 대한 통찰력을 얻지 못했습니다.

답변

0

아마도 이러한 라이브러리가있는 windows 8 sdk가있는 혼합 라이브러리 일 수 있습니다. 포함 된 라이브러리를보고 d3dcompiler.lib의 출처를 확인하거나 링크를 설정하는 경우 링크 설정을 변경하십시오.

+0

하지만 Windows 7에서 오류가 발생합니다. Windows 8은 아직 그림에 없습니다. 위치를 연결하고 그 위치를 확인하려고합니다. – kveratis

+0

Windows 8.x SDK는 Windows 7에서 개발하고 Windows Vista 이상 버전의 OS를 대상으로합니다. –

1

버전의 D3DCompile이 D3DReadFileToBlob를 지원하지 않는 방식으로 Windows 8.x SDK와 DirectX SDK를 혼합하는 것이 문제입니다.

VS2012/Windows 8.0 SDK 또는 VS2013/Windows 8.1 SDK를 레거시 DirectX SDK와 함께 사용하는 경우 '올바른'동작을 얻으려면 include/lib 경로를 수정해야합니다. 자세한 내용은 MSDN에 있습니다.

또한 항목에서 D3DCompile, DLL 배포 및 버전 정보를 읽어야합니다.

관련 문제