DirectX 11编译单独的HLSL文件(不使用效果)

3

首先,我完全不了解DirectX11。随着Windows 8发布,Microsoft已经停用了Effects和D3DX,因此我想使用替代Effects的工具。然而,我不知道如何做到这一点,我只知道每个HLSL文件必须有一个特定着色器(顶点、像素、计算等)的入口点。基本上就是这样,那么,有人知道没有Effects的hlsl着色器的好教程吗?或者有人可以告诉我他们是如何做到的吗?

提前感谢!


即使微软已经弃用了Effects,您仍然可以使用它们。 - Ross Ridge
1
我知道,但我宁愿不这样做。 - Rakete1111
1个回答

5
如果您完全不了解DirectX并想立即跳入Windows 8的最新版本中,您需要的是DirectX 11.1或DirectX 11.2的教程。我建议您使用这个特定的教程来帮助您理解着色器的问题:

http://www.directxtutorial.com/Lesson.aspx?lessonid=111-4-5

这是DirectX 11.1教程的一部分,与Windows 8有关。所以你可以跟随所有教程来学习DX 11.1中你仍不理解的部分。
现在,让我总结一下新世界中没有效果的着色器处理教程。
HLSL着色器文件现在是Visual Studio解决方案的一部分。你应该为顶点和像素着色器创建单独的文件。它们将与程序代码一起编译,因此在运行时应加载已经编译好的二进制代码。你将该代码存储在字节数组中(例如VSFile->Data和PSFile->Data),并使用以下语句创建着色器对象:
//dev is the Device pointer
dev->CreateVertexShader(VSFile->Data, VSFile->Length, nullptr, &vertexshader);
dev->CreatePixelShader(PSFile->Data, PSFile->Length, nullptr, &pixelshader);

然后你可以这样设置活动着色器:

//devcon is the DeviceContext pointer
devcon->VSSetShader(vertexshader.Get(), nullptr, 0);
devcon->PSSetShader(pixelshader.Get(), nullptr, 0);

我希望这能澄清这个问题。


1
以上教程设置了付费墙,只允许访问最基本的着色器编程。例如,在显示付费墙之前,它甚至没有介绍如何设置着色器常量。 - Walt D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接