如何缓冲许多顶点,几何和像素着色器

时间:2013-02-01 06:45:06

标签: c++ c++11 directx shader directx-11

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

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是否在System,(不是GPU),内存中缓冲着一个着色器实例?我可以缓冲多于1个吗?

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

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

谢谢!

1 个答案:

答案 0 :(得分: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。