gpt4 book ai didi

c++ - 如何缓冲许多顶点、几何和像素着色器

转载 作者:行者123 更新时间:2023-11-28 03:24:01 24 4
gpt4 key购买 nike

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

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 个吗?

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

谢谢!

最佳答案

当您使用 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(就像作为类(class)成员一样)。一旦创建,它们就会上传到您的 gpu,无需再次执行,然后调用 VSSetShader 以选择您要使用的一个。

然后您可以随时使用以下方式将顶点着色器分配给管线:

VSSetShader(vsref1,NULL,0);

VSSetShader(vsref2,NULL,0); 

这不会导致上传,它只是告诉你的 gpu 你想在下一个 Draw 调用中使用哪个顶点着色器。

关于c++ - 如何缓冲许多顶点、几何和像素着色器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14641104/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com