利索能及
我要发布
收藏
专利号: 2018106911270
申请人: 武汉斗鱼网络科技有限公司
专利类型:发明专利
专利状态:无效专利
更新日期:2026-06-16
缴费截止日期: 暂无
联系人

摘要:

权利要求书:

1.一种创建常量缓冲区方法,应用于Direct3D11软件平台,其特征在于,包括:

在像素着色器类中声明类型为ConstBufferDesc的结构体类型的常量缓冲区数组;

编译HLSL脚本,获得类型为ID3DBlob的第一接口,所述第一接口中保存了编译后的HLSL脚本的字节码;

调用设备接口的创建像素着色器方法,创建像素着色器接口,将所述像素着色器接口保存在所述像素着色器类的m_shader字段中;

调用所述第一接口的获取指定缓冲区内容方法,获得所述字节码,以及调用所述第一接口的获取指定缓冲区大小方法,获得所述字节码的字节长度,基于所述字节码与所述字节长度,调用所述Direct3D11软件平台的返回方法,获得ID3D11ShaderReflection类型的第二接口;

调用所述第二接口的获取描述信息方法,获得D3D11_SHADER_DESC类型的第一结构,访问所述第一结构的常量缓冲字段,确定所述HLSL脚本中所使用的常量缓冲区数量;

基于所述常量缓冲字段,构建常量缓冲区数组,所述常量缓冲区数组中保存有与所述常量缓冲区数量一致的ID3D11Buffer接口,每个所述ID3D11Buffer接口与所述HLSL脚本中所使用的每个常量缓冲区一一对应。

2.如权利要求1所述的方法,其特征在于,所述基于所述常量缓冲字段,构建所述常量缓冲区数组,包括:

所述常量缓冲字段的值为M,确定所述HLSL脚本中所使用的M个常量缓冲区,针对所述M个常量缓冲区中每个常量缓冲区,调用所述第二接口的按索引获得常量缓冲区方法,获得该常量缓冲区对应的描述信息结构接口;

基于所述描述信息结构接口,获得D3D11_SHADER_BUFFER_DESC类型的第二结构,声明D3D11_BUFFER_DESC的结构变量bufferDesc将所述bufferDesc变量的BindFlags字段与ByteWidth字段分别设置为D3D11_BIND_CONSTANT_BUFFER以及所述第二结构中的Size字段,基于设置后的bufferDesc变量调用所述设备接口的创建缓存方法,创建获得ID3D11Buffer接口;

创建ConstBufferDesc结构体变量,将所述ID3D11Buffer接口赋值给所述ConstBufferDesc结构体变量的buffer字段,将所述第二结构的Name字段赋值给所述ConstBufferDesc结构体变量的name字段,将所述第二结构的Size字段赋值给所述ConstBufferDesc结构体变量的size字段,通过new操作符创建所述ConstBufferDesc结构体变量中的size字段指示大小的内存缓冲区,并基于所述ConstBufferDesc结构体变量的size字段,赋值所述ConstBufferDesc结构体变量的bufferValue字段,将ConstBufferDesc结构体变量添加至所述常量缓冲区数组。

3.如权利要求2所述的方法,其特征在于,所述方法还包括:

针对所述M个常量缓冲区中每个常量缓冲区,获取该常量缓冲区的Variables字段,所述Variables字段的值为N,确定常量缓冲区中包括N个属性字段,针对每个属性字段,调用ID3D11ShaderReflectionConstantBuffer接口的按索引获得变量的方法,获取该属性字段对应的ID3D11ShaderReflectionVariable接口;

调用所述ID3D11ShaderReflectionVariable接口的获得描述信息方法,获得该属性字段对应的描述结构;

创建ConstBufferVarDesc变量,将所述描述结构的Name字段赋值给所述

ConstBufferVarDesc变量的name字段,将所述描述结构的Size赋值给所述ConstBufferVarDesc变量的size字段,将所述描述结构的StartOffset字段赋值给所述ConstBufferVarDesc变量的offset字段将ConstBufferVarDesc结构以键值对的方式存储到ConstBufferDesc结构体变量的vars字段中。

4.如权利要求3所述的方法,其特征在于,所述方法还包括:

如果检测到调用设置常量缓冲区属性字段方法,确定传入所述调用设置常量缓冲区属性字段方法的待设置属性字段的待设置名称以及待设置值,所述待设置值用于将所述待设置属性字段的缓存数据设置为所述待设置值;

基于所述待设置名称,从所述常量缓冲区数组中获得与之对应的第一

ConstBufferDesc结构体变量;

将所述待设置值拷贝至所述第一ConstBufferDesc结构体变量中的bufferValue字段的指定偏移处;

将所述bufferValue字段中的值更新到所述第一ConstBufferDesc结构体变量对应的第一ID3D11Buffer接口中。

5.如权利要求3所述的方法,其特征在于,所述方法还包括:

如果检测到调用设置着色器方法,基于所述m_shader字段,调用ID3D11DeviceContext接口的PSSetShader方法;

针对所述常量缓冲区数组中每个ConstBufferDesc结构体变量,调用

ID3D11DeviceContext接口的PSSetConstantBuffers方法,将该ConstBufferDesc结构体变量对应的常量缓冲区与ID3D11Buffer接口绑定。

6.一种创建常量缓冲区装置,应用于Direct3D11软件平台,其特征在于,包括:

声明单元,用于在像素着色器类中声明类型为ConstBufferDesc的结构体类型的常量缓冲区数组;

编译单元,用于编译HLSL脚本,获得类型为ID3DBlob的第一接口,所述第一接口中保存了编译后的HLSL脚本的字节码;

第一创建单元,用于调用设备接口的创建像素着色器方法,创建像素着色器接口,将所述像素着色器接口保存在所述像素着色器类的m_shader字段中;

第一调用单元,用于调用所述第一接口的获取指定缓冲区内容方法,获得所述字节码,以及调用所述第一接口的获取指定缓冲区大小方法,获得所述字节码的字节长度,基于所述字节码与所述字节长度,调用所述Direct3D11软件平台的返回方法,获得ID3D11ShaderReflection类型的第二接口;

第二调用单元,用于调用所述第二接口的获取描述信息方法,获得D3D11_SHADER_DESC类型的第一结构,访问所述第一结构的常量缓冲字段,确定所述HLSL脚本中所使用的常量缓冲区数量;

第二创建单元,用于基于所述常量缓冲字段,构建所述常量缓冲区数组,所述常量缓冲区数组中保存有与所述常量缓冲区数量一致的ID3D11Buffer接口,每个所述ID3D11Buffer接口与所述HLSL脚本中所使用的每个常量缓冲区一一对应。

7.如权利要求6所述的装置,其特征在于,所述第二创建单元具体用于:

所述常量缓冲字段的值为M,确定所述HLSL脚本中所使用的M个常量缓冲区,针对所述M个常量缓冲区中每个常量缓冲区,调用所述第二接口的按索引获得常量缓冲区方法,获得该常量缓冲区对应的描述信息结构接口;

基于所述描述信息结构接口,获得D3D11_SHADER_BUFFER_DESC类型的第二结构,声明D3D11_BUFFER_DESC的结构变量bufferDesc将所述bufferDesc变量的BindFlags字段与ByteWidth字段分别设置为D3D11_BIND_CONSTANT_BUFFER以及所述第二结构中的Size字段,基于设置后的bufferDesc变量调用所述设备接口的创建缓存方法,创建获得ID3D11Buffer接口;

创建ConstBufferDesc结构体变量,将所述ID3D11Buffer接口赋值给所述ConstBufferDesc结构体变量的buffer字段,将所述第二结构的Name字段赋值给所述ConstBufferDesc结构体变量的name字段,将所述第二结构的Size字段赋值给所述ConstBufferDesc结构体变量的size字段,通过new操作符创建所述ConstBufferDesc结构体变量中的size字段指示大小的内存缓冲区,并基于所述ConstBufferDesc结构体变量的size字段,赋值所述ConstBufferDesc结构体变量的bufferValue字段,将ConstBufferDesc结构体变量添加至所述常量缓冲区数组。

8.如权利要求7所述的装置,其特征在于,所述第二创建单元还用于:针对所述M个常量缓冲区中每个常量缓冲区,获取该常量缓冲区的Variables字段,所述Variables字段的值为N,确定常量缓冲区中包括N个属性字段,针对每个属性字段,调用ID3D11ShaderReflectionConstantBuffer接口的按索引获得变量的方法,获取该属性字段对应的ID3D11ShaderReflectionVariable接口;

调用所述ID3D11ShaderReflectionVariable接口的获得描述信息方法,获得该属性字段对应的描述结构;

创建ConstBufferVarDesc变量,将所述描述结构的Name字段赋值给所述

ConstBufferVarDesc变量的name字段,将所述描述结构的Size赋值给所述ConstBufferVarDesc变量的size字段,将所述描述结构的StartOffset字段赋值给所述ConstBufferVarDesc变量的offset字段将ConstBufferVarDesc结构以键值对的方式存储到ConstBufferDesc结构体变量的vars字段中。

9.一种创建常量缓冲区装置,应用于Direct3D11软件平台,其特征在于,所述创建常量缓冲区装置包括处理器,所述处理器用于执行存储器中存储的计算机程序时实现如权利要求1‑5中任一项所述的创建常量缓冲区方法的步骤。

10.一种可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1‑5中任一项所述的创建常量缓冲区方法的步骤。