在哪里设置 Shader 文件的入口点(错误 X3501)?
Posted
技术标签:
【中文标题】在哪里设置 Shader 文件的入口点(错误 X3501)?【英文标题】:Where to set the entrypoint of Shader files (error X3501)? 【发布时间】:2015-06-30 20:42:38 【问题描述】:我是 DirectX 的菜鸟,在 Visual Studio 中运行 [this][1] 教程。在编译时,我遇到了这个错误:“错误 X3501:'main':找不到入口点。”现在一些谷歌搜索将我带到[this answer] [2],它说输入我的着色器文件的属性,将着色器类型和入口点设置为您想要的入口点。现在提供的答案很好,我不知道我的入口点应该是什么。起初我认为它应该是我实际调用D3DX11CompileFromFile()
的位置,它位于ColorShaderClass::InitializeShader
中,但我再次遇到错误X3501。做什么?
我的文件如下
ColorVS.hlsl
ColorPS.hlsl
使用名称的方法
bool ColorShaderClass::Initialize(ID3D11Device* device, HWND hwnd)
bool result;
// Initialize the vertex and pixel shaders.
result = InitializeShader(device, hwnd, L"ColorVS.hlsl", L"ColorPS.hlsl");
if (!result)
return false;
return true;
和
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;
// Initialize the pointers this function will use to null.
errorMessage = 0;
vertexShaderBuffer = 0;
pixelShaderBuffer = 0;
// Compile the 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 writen something to the error message.
if (errorMessage)
OutputShaderErrorMessage(errorMessage, hwnd, vsFilename);
// If there was nothing in the error message then it simply could not find the shader file itself.
else
MessageBox(hwnd, vsFilename, L"Missing Shader File", MB_OK);
return false;
// Compile the pixel shader code.
result = D3DX11CompileFromFile(psFilename, NULL, NULL, "ColorPixelShader", "ps_5_0", D3D10_SHADER_ENABLE_STRICTNESS, 0, NULL,
&pixelShaderBuffer, &errorMessage, NULL);
if (FAILED(result))
// If the shader failed to compile it should have writen something to the error message.
if (errorMessage)
OutputShaderErrorMessage(errorMessage, hwnd, psFilename);
// If there was nothing in the error message then it simply could not find the file itself.
else
MessageBox(hwnd, psFilename, L"Missing Shader File", MB_OK);
return false;
//more code
编辑
正如 tsandy 所回答的,入口点是实际执行着色的函数。对于遵循本教程并使用与我对着色器文件相同的方案的任何人
ColorPS.hlsl 有入口点“ColorPixelShader”
ColorVS.hlsl 有入口点“ColorVertexShader”
【问题讨论】:
【参考方案1】:对于每个 hlsl 文件,入口点应该是 hlsl 文件中执行着色的函数的名称。 例如。在以下像素着色器 hlsl 中:
struct PixelInputType
float4 position : SV_POSITION;
float4 color : COLOR;
;
float4 ColorPixelShader(PixelInputType input) : SV_TARGET
return input.color;
您将使用 ColorPixelShader 作为入口点。
【讨论】:
效果很好!谢谢!有关详细信息,请查看我的问题中的编辑 如果你同时拥有顶点和像素着色器怎么办?以上是关于在哪里设置 Shader 文件的入口点(错误 X3501)?的主要内容,如果未能解决你的问题,请参考以下文章
Coreldraw X3出现的corel A.R.M怎么解决?