0

将顶点着色器、像素着色器等缓冲到设备/设备上下文中而不必每次都从文件系统重新加载它们的最佳方法是什么?

ID3D11Device::CreateVertexShader http://msdn.microsoft.com/en-us/library/windows/desktop/ff476524(v=vs.85).aspx

ID3D11DeviceContext::VSSetShader http://msdn.microsoft.com/en-us/library/windows/desktop/ff476493(v=vs.85).aspx

Device::CreateVertexShader 是否在系统(不是 GPU)内存中缓冲着色器的单个实例?我可以缓冲超过 1 个吗?

DeviceContext::CreateVertexShader 缓冲 GPU 中着色器的单个实例,(不是系统),内存?我可以缓冲超过 1 个吗?

在系统中缓冲着色器的推荐方法是什么?

谢谢!

4

1 回答 1

2

当您使用 ID3D11Device::CreateVertexShader 时,您检索对它们的引用,将在 gpu 中表示您的顶点着色器,因此如果您有 3 个顶点着色器,您可以这样做:

ID3D11VertexShader* vsref1;
ID3D11VertexShader* vsref2;
ID3D11VertexShader* vsref3;

CreateVertexShader(bytecode1,sizeofbytecode1,NULL,&vsref1);
CreateVertexShader(bytecode2,sizeofbytecode2,NULL,&vsref2);
CreateVertexShader(bytecode3,sizeofbytecode3,NULL,&vsref3);

确保您跟踪 vsref1,2 和 3(就像作为班级成员一样)。一旦创建它们就会上传到您的 gpu,无需再次执行此操作,然后调用 VSSetShader 来选择您要使用的那个。

然后,您可以随时使用以下命令将顶点着色器分配给管道:

VSSetShader(vsref1,NULL,0);

或者

VSSetShader(vsref2,NULL,0); 

这不会导致上传,它只是告诉你的 gpu 你想在下一次 Draw 调用中使用哪个 Vertex Shader。

于 2013-02-01T13:54:56.810 回答