将顶点着色器,像素着色器等缓冲到设备/设备上下文中的最佳方法是什么,而不必每次都从文件系统重新加载它们?
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个吗?
在系统内缓冲着色器的推荐方法是什么?
谢谢!
答案 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。