VS 2013 DirectX Project Vertex着色器文件缺失
VS 2013 Directx project Vertex shader file missing
这是我对着色器的第一次体验,我正在遵循DirectX编程教程,并且我的项目中包含了.vs和.ps文件类型中的两个着色器文件。我不确定这些文件类型是否被识别为Visual Studios中HLSL的文件类型。有没有办法可以识别这些文件类型,如果没有,我将如何更改下面的代码以包括不同的Filetype?我的代码编译,它只是返回我的错误消息,说color.vs缺少。
在我的Colorshaderclass的初始化函数下
result = InitializeShader(device, hwnd, L"../Engine/color.hlsl", L"../Engine/color.ps");
初始化函数本身定义如下:
bool ColorShaderClass::InitializeShader(ID3D11Device* device, HWND hwnd, WCHAR* vsFilename, WCHAR* psFilename)
{
HRESULT result;
ID3D10Blob* errorMessage;
ID3D10Blob* vertexShaderBuffer;
ID3D10Blob* pixelShaderBuffer;
D3D11_INPUT_ELEMENT_DESC polygonLayout[2];
unsigned int numElements;
D3D11_BUFFER_DESC matrixBufferDesc;
//initializ the pointers this function will use to null
errorMessage = 0;
vertexShaderBuffer = 0;
pixelShaderBuffer = 0;
//compile vertex shader code
result = D3DX11CompileFromFile(vsFilename, NULL, NULL, "ColorVertexShader", "vs_5_0", D3D10_SHADER_ENABLE_STRICTNESS, 0, NULL,
&vertexShaderBuffer, &errorMessage, NULL);
if (FAILED(result))
{
//if the shader failed to compile it should have written something to error message
if (errorMessage)
{
OutputShaderErrorMessage(errorMessage, hwnd, vsFilename);
}
//if there was nothing in error message then it couldnt find shader file
else
{
MessageBox(hwnd, vsFilename, L"Missing Shader File", MB_OK);
}
return false;
}
//compile pixel shader code
if (FAILED(result))
{
if (errorMessage)
{
OutputShaderErrorMessage(errorMessage, hwnd, psFilename);
}
else
{
MessageBox(hwnd, psFilename, L"Missing Shader File", MB_OK);
}
return false;
}
任何帮助将不胜感激。我不确定这是否是设置问题,还是我是否需要更改Filetype,或者是否需要包含标题(但是尝试了此选项,VS尝试使用C 语法来调试HLSL文件)。
您的着色器中有任何#include
语句吗?如MSDN上的文档中指出的那样,如果您提供了" null"的pinclude处理程序,则任何#include
语句都会失败。
另外,您不必在此处使用Legacy DirectX SDK的不弃用D3DX11库,特别是因为您拥有VS 2013 Toolset。您可以直接使用D3DCompileFromFile
,并应将D3D_COMPILE_STANDARD_FILE_INCLUDE
用于Pinclude处理程序。参见HLSL FXC和D3DCompile以及没有D3DX的生活。
result = D3DCompileFromFile(vsFilename, nullptr,
D3D_COMPILE_STANDARD_FILE_INCLUDE , "ColorVertexShader", "vs_5_0",
D3DCOMPILE_ENABLE_STRICTNESS, 0, &vertexShaderBuffer, &errorMessage );
您可能需要查看本教程,以了解有关创建和使用自己的着色器的一些提示,尤其是如果您想使用Visual Studio在编译时间内将它们构建为.cso,这避免了在运行时根本使用D3DCompileFromFile
。
正如查克(Chuck)所提到的,您正在使用不弃用的API,并且您还需要确保将着色器文件汇编为.cso,因为这是由此可以通过的你的申请。VS 2013在编译.CPP文件时将.HLSL文件自动编译为.cso,因此这不是问题。只需假设编写LoadShaderFile函数时,.cso文件就在那里。从该出色的教程中提取的示例,在"使用着色器"部分下:
#include <fstream>
// this function loads a file into an Array^
Array<byte>^ LoadShaderFile(std::string File)
{
Array<byte>^ FileData = nullptr;
// open the file
std::ifstream VertexFile(File, std::ios::in | std::ios::binary | std::ios::ate);
// if open was successful
if(VertexFile.is_open())
{
// find the length of the file
int Length = (int)VertexFile.tellg();
// collect the file data
FileData = ref new Array<byte>(Length);
VertexFile.seekg(0, std::ios::beg);
VertexFile.read(reinterpret_cast<char*>(FileData->Data), Length);
VertexFile.close();
}
return FileData;
}
//... And this is the call and use.
Array<byte>^ VSFile = LoadShaderFile("VertexShader.cso");
device->CreateVertexShader(VSFile->Data, VSFile->Length, nullptr, &vertexshader);
- 是与视觉C 2017二进制文件兼容的Visual C 2013二进制文件
- 如何将opencv和其他dll文件链接到visual studio 2013的输出exe
- 与Visual Studio 2013编译的EXE文件分发
- VS 2013 DirectX Project Vertex着色器文件缺失
- 如何在带有C++的Visual Studio 2013中创建可执行文件
- Visual Studio 2013 在使用 VS 2010 平台工具集时找不到头文件
- 在Visual Studio 2013中读取文件时出错
- 如何在Visual Studio 2013中设置默认头文件扩展名
- 当我尝试调试它时,在带有更新 2013 .exe 4 中找不到文件
- 打开 cpp 文件或视觉工作室 2013 最终剂量没有调试选项也没有错误列表
- 使用 MSVC 2013 构建 Polycode 后,在哪里可以找到库的文件?
- 警告 C4819 在 Visual Studio C++ 2013 Express - 没有 BOM 的 UTF8 文件
- 使用 Visual Studio 编译 SQLite C++ 2013 抛出 .c 文件的错误
- 如何包含文件夹中的所有源文件?(C++,MS与2013年相比)
- Qt 5.5.1 MSVC 2013,32位 - LNK1181:无法打开输入文件"NIDAQmx.lib"
- 使用Visual Studio express 2013为c++代码创建独立的可执行文件
- 使用Visual studio 2013为本机DLL正确生成PDB文件
- 如何从不同的VS 2013项目中在新的VS 2013项目中使用对话框(资源文件)?
- VS Express 2013 -默认为每个新项目添加.h文件,使其位于相同的目录下
- 无法在Visual Studio 2013中包含文件