一种创建顶点缓冲区方法、装置及可读存储介质与流程

文档序号:15999153发布日期:2018-11-20 19:13阅读:251来源:国知局

本发明涉及电子技术领域,尤其涉及一种创建顶点缓冲区方法、装置及可读存储介质。



背景技术:

Direct3D是微软公司在Microsoft Windows操作系统上所开发的一套3D绘图编程接口。在Direct3D中的Direct3D11中,所有的图像显示都是以最基本的三角形绘制为基础的,比如:为了显示一幅平面图像,必须将一个ID3D11Texture2D类型的纹理帖在一个四边形(矩形)上,而最基本的四边形是由两个三角形合并而成的。在Direct3D11中,用来创建三角形图元的数据缓冲区称之为顶点缓冲区。顶点缓冲区中可以包含用来描述图元位置信息的数据,也可以包含用来描述绘制纹理时每个顶点的纹理坐标信息。同时,在Direct3D11中,还必须编写相关的高阶着色器语言HLSL(High Level Shader Language)的着色器脚本,着色器脚本中基本上可以分为顶点着色器函数和像素着色器函数。其中,顶点缓冲区主要在顶点着色器函数中使用,在顶点着色器函数中,主要对输入的顶点缓冲区中的顶点数据进行顶点坐标变换,将三维立体坐标变换为在2D的计算机显示器中显示的平面坐标,并且,可以将顶点缓冲区中的纹理坐标传递到像素着色器函数中,从而为在像素着色器中的纹理采样提供纹理坐标。

所以,在Direct3D11中进行图元绘制时,声明并创建顶点是一切的开始。一般的,在HLSL顶点着色器函数中,需要声明顶点的输入与输出格式。并且在C++代码中,需要完成顶点布局结构的创建,在Direct3D11中用ID3D11InputLayout接口来表示顶点着色器中的顶点输入结构。在创建ID3D11InputLayout接口时,需要声明一个D3D11_INPUT_ELEMENT_DESC的顶点输入布局描述数组,用来描述在HLSL顶点着色器脚本中的输入结构。在声明D3D11_INPUT_ELEMENT_DESC结构数组时,现有技术中,一般是在已经知道顶点着色器中顶点的输入结构后进行声明的,并且该结构中的每个字段属性必须严格的与顶点着色器中的输入形式保持一致,否则就会造成后面的绘制图元失败。这样做的缺陷就是C++端创建ID3D11InputLayout接口的代码必须与HLSL顶点着色器的代码完全一致的耦合在一起。如果顶点着色器中的顶点输入声明改变了,那么C++的代码也必须重写,导致创建顶点缓冲区的方式复杂且错误率高。



技术实现要素:

本发明实施例提供了一种创建顶点缓冲区方法、装置及可读存储介质,用于提供一种简单易行且准确创建顶点缓冲区的方法。

第一方面,本发明实施例提供了一种创建顶点缓冲区方法,应用于Direct3D11软件平台,包括:

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

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

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

基于所述顶点输入参数字段,构建D3D11_INPUT_ELEMENT_DESC类型的顶点输入布局描述数组,所述顶点输入布局描述数组中保存有与所述顶点输入参数数量一致的顶点输入参数描述信息变量,每个所述顶点输入参数描述信息变量与所述HLSL脚本中所使用的每个顶点输入参数一一对应,每个所述顶点输入参数描述信息变量包括对应顶点输入参数的语义名称、语义索引、数据格式及偏移值;

基于顶点输入布局描述数组与所述顶点输入参数字段,调用设备接口的创建顶点布局结构方法,创建ID3D11InputLayout接口。

可选的,所述基于所述顶点输入参数字段,构建D3D11_INPUT_ELEMENT_DESC类型的顶点输入布局描述数组,包括:

所述顶点输入参数字段的值为M,确定所述HLSL脚本中所使用的M个顶点输入参数,针对所述M个顶点输入参数中每个顶点输入参数,声明D3D11_INPUT_ELEMENT_DESC类型的顶点输入参数描述信息变量,以及声明偏移变量;

调用所述第二接口的获得顶点输入参数描述信息获取方法,获取该顶点输入参数的第一描述信息,将所述第一描述信息中的语义名称保存到所述顶点输入参数描述信息变量的语义名称中,将所述第一描述信息中的语义索引保存到所述顶点输入参数描述信息变量的语义索引中,以及基于所述第一描述信息中的数据格式信息与掩码值,设置所述顶点输入参数描述信息变量的数据格式以及所述偏移变量的偏移值,将所述偏移变量的偏移值保存到所述顶点输入参数描述信息变量的偏移成员中;

将所述顶点输入参数描述信息变量保存至所述顶点输入布局描述数组。

可选的,所述基于所述第一描述信息中的数据格式信息与掩码值,设置所述顶点输入参数描述信息变量的数据格式以及所述偏移变量的偏移值,包括:

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_FLOAT32,掩码值为1,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32_FLOAT,将所述偏移变量的偏移值设置为在初始值上加4;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_FLOAT32,掩码值为3,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32_FLOAT,将所述偏移变量的偏移值设置为在初始值上加8;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_FLOAT32,掩码值为7,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32B32_FLOAT,将所述偏移变量的偏移值设置为在初始值上加12;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_FLOAT32,掩码值为15,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32B32A32_FLOAT,将所述偏移变量的偏移值设置为在初始值上加16。

可选的,所述基于所述第一描述信息中的数据格式信息与掩码值,设置所述顶点输入参数描述信息变量的数据格式以及所述偏移变量的偏移值,包括:

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_SINT32,掩码值为1,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32_SINT,将所述偏移变量的偏移值设置为在初始值上加4;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_SINT32,掩码值为3,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32_SINT,将所述偏移变量的偏移值设置为在初始值上加8;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_SINT32,掩码值为7,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32B32_SINT,将所述偏移变量的偏移值设置为在初始值上加12;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_SINT32,掩码值为15,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32B32A32_SINT,将所述偏移变量的偏移值设置为在初始值上加16。

可选的,所述基于所述第一描述信息中的数据格式信息与掩码值,设置所述顶点输入参数描述信息变量的数据格式以及所述偏移变量的偏移值,包括:

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_UINT32,掩码值为1,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32_UINT,将所述偏移变量的偏移值设置为在初始值上加4;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_UINT32,掩码值为3,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32_UINT,将所述偏移变量的偏移值设置为在初始值上加8;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_UINT32,掩码值为7,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32B32_UINT,将所述偏移变量的偏移值设置为在初始值上加12;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_UINT32,掩码值为15,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32B32A32_UINT,将所述偏移变量的偏移值设置为在初始值上加16。

第二方面,本实施例还提供一种创建顶点缓冲区装置,应用于Direct3D11软件平台,包括:

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

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

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

第一创建单元,用于基于所述顶点输入参数字段,构建D3D11_INPUT_ELEMENT_DESC类型的顶点输入布局描述数组,所述顶点输入布局描述数组中保存有与所述顶点输入参数数量一致的顶点输入参数描述信息变量,每个所述顶点输入参数描述信息变量与所述HLSL脚本中所使用的每个顶点输入参数一一对应,每个所述顶点输入参数描述信息变量包括对应顶点输入参数的语义名称、语义索引、数据格式及偏移值;

第二创建单元,用于基于顶点输入布局描述数组与所述顶点输入参数字段,调用设备接口的创建顶点布局结构方法,创建ID3D11InputLayout接口。

可选的,所述第一创建单元具体用于:

所述顶点输入参数字段的值为M,确定所述HLSL脚本中所使用的M个顶点输入参数,针对所述M个顶点输入参数中每个顶点输入参数,声明D3D11_INPUT_ELEMENT_DESC类型的顶点输入参数描述信息变量,以及声明偏移变量;

调用所述第二接口的获得顶点输入参数描述信息获取方法,获取该顶点输入参数的第一描述信息,将所述第一描述信息中的语义名称保存到所述顶点输入参数描述信息变量的语义名称中,将所述第一描述信息中的语义索引保存到所述顶点输入参数描述信息变量的语义索引中,以及基于所述第一描述信息中的数据格式信息与掩码值,设置所述顶点输入参数描述信息变量的数据格式以及所述偏移变量的偏移值,将所述偏移变量的偏移值保存到所述顶点输入参数描述信息变量的偏移成员中;

将所述顶点输入参数描述信息变量保存至所述顶点输入布局描述数组。

可选的,所述第一创建单元具体用于:

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_FLOAT32,掩码值为1,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32_FLOAT,将所述偏移变量的偏移值设置为在初始值上加4;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_FLOAT32,掩码值为3,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32_FLOAT,将所述偏移变量的偏移值设置为在初始值上加8;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_FLOAT32,掩码值为7,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32B32_FLOAT,将所述偏移变量的偏移值设置为在初始值上加12;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_FLOAT32,掩码值为15,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32B32A32_FLOAT,将所述偏移变量的偏移值设置为在初始值上加16。

可选的,所述第一创建单元具体用于:

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_SINT32,掩码值为1,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32_SINT,将所述偏移变量的偏移值设置为在初始值上加4;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_SINT32,掩码值为3,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32_SINT,将所述偏移变量的偏移值设置为在初始值上加8;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_SINT32,掩码值为7,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32B32_SINT,将所述偏移变量的偏移值设置为在初始值上加12;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_SINT32,掩码值为15,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32B32A32_SINT,将所述偏移变量的偏移值设置为在初始值上加16。

可选的,所述第一创建单元具体用于:

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_UINT32,掩码值为1,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32_UINT,将所述偏移变量的偏移值设置为在初始值上加4;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_UINT32,掩码值为3,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32_UINT,将所述偏移变量的偏移值设置为在初始值上加8;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_UINT32,掩码值为7,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32B32_UINT,将所述偏移变量的偏移值设置为在初始值上加12;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_UINT32,掩码值为15,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32B32A32_UINT,将所述偏移变量的偏移值设置为在初始值上加16。

第三方面,本发明实施例提供一种创建顶点缓冲区装置,应用于Direct3D11软件平台,所述目标创建顶点缓冲区装置包括处理器,所述处理器用于执行存储器中存储的计算机程序时实现如前述第一方面实施例中所述的创建顶点缓冲区方法的步骤。

第四方面,本发明实施例提供了一种可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如前述第一方面实施例中所述的创建顶点缓冲区方法的步骤。

本申请实施例中的上述一个或多个技术方案,至少具有如下一种或多种技术效果:

本发明实施例的技术方案,在Direct3D11中,首先,编译HLSL脚本,获得类型为ID3DBlob的第一接口,第一接口中保存了编译后的HLSL脚本的字节码;调用第一接口的获取指定缓冲区内容方法,获得字节码,以及调用第一接口的获取指定缓冲区大小方法,获得字节码的字节长度,基于字节码与字节长度,调用Direct3D11软件平台的返回方法,获得ID3D11ShaderReflection类型的第二接口;调用第二接口的获取描述信息方法,获得D3D11_SHADER_DESC类型的第一结构,访问第一结构的顶点输入参数字段,确定HLSL脚本中所使用的顶点输入参数数量;基于顶点输入参数字段,构建D3D11_INPUT_ELEMENT_DESC类型的顶点输入布局描述数组,顶点输入布局描述数组中保存有与顶点输入参数数量一致的顶点输入参数描述信息变量,每个顶点输入参数描述信息变量与HLSL脚本中所使用的每个顶点输入参数一一对应,每个顶点输入参数描述信息变量包括对应顶点输入参数的语义名称、语义索引、数据格式及偏移值;基于顶点输入布局描述数组与顶点输入参数字段,调用设备接口的创建顶点布局结构方法,创建ID3D11InputLayout接口。这样,在C++代码中,可以针对任何的HLSL脚本中顶点的输入格式声明,创建出正确的ID3D11InputLayout接口,从而极大提高C++代码的通用性和可重用性,有效降低创建顶点缓冲区的难度。

附图说明

图1为本发明第一实施例中的创建顶点缓冲区方法的流程图;

图2为本发明第二实施例中的创建顶点缓冲区装置的示意图;

图3为本发明第三实施例中创建顶点缓冲区装置的示意图。

具体实施方式

本发明实施例提供了一种创建顶点缓冲区方法、装置及可读存储介质,用于提供一种简单易行且准确创建顶点缓冲区的方法,该方法应用于Direct3D11软件平台,包括:编译HLSL脚本,获得类型为ID3DBlob的第一接口,所述第一接口中保存了编译后的HLSL脚本的字节码;调用所述第一接口的获取指定缓冲区内容方法,获得所述字节码,以及调用所述第一接口的获取指定缓冲区大小方法,获得所述字节码的字节长度,基于所述字节码与所述字节长度,调用所述Direct3D11软件平台的返回方法,获得ID3D11ShaderReflection类型的第二接口;调用所述第二接口的获取描述信息方法,获得D3D11_SHADER_DESC类型的第一结构,访问所述第一结构的顶点输入参数字段,确定所述HLSL脚本中所使用的顶点输入参数数量;基于所述顶点输入参数字段,构建D3D11_INPUT_ELEMENT_DESC类型的顶点输入布局描述数组,所述顶点输入布局描述数组中保存有与所述顶点输入参数数量一致的顶点输入参数描述信息变量,每个所述顶点输入参数描述信息变量与所述HLSL脚本中所使用的每个顶点输入参数一一对应,每个所述顶点输入参数描述信息变量包括对应顶点输入参数的语义名称、语义索引、数据格式及偏移值;基于顶点输入布局描述数组与所述顶点输入参数字段,调用设备接口的创建顶点布局结构方法,创建ID3D11InputLayout接口。

下面通过附图以及具体实施例对本发明技术方案做详细的说明,应当理解本申请实施例以及实施例中的具体特征是对本申请技术方案的详细的说明,而不是对本申请技术方案的限定,在不冲突的情况下,本申请实施例以及实施例中的技术特征可以相互组合。

本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。

实施例

请参考图1,本发明第一实施例提供一种创建顶点缓冲区方法,应用于Direct3D11软件平台,该创建顶点缓冲区方法包括如下步骤:

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

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

S103:调用所述第二接口的获取描述信息方法,获得D3D11_SHADER_DESC类型的第一结构,访问所述第一结构的顶点输入参数字段,确定所述HLSL脚本中所使用的顶点输入参数数量;

S104:基于所述顶点输入参数字段,构建D3D11_INPUT_ELEMENT_DESC类型的顶点输入布局描述数组,所述顶点输入布局描述数组中保存有与所述顶点输入参数数量一致的顶点输入参数描述信息变量,每个所述顶点输入参数描述信息变量与所述HLSL脚本中所使用的每个顶点输入参数一一对应,每个所述顶点输入参数描述信息变量包括对应顶点输入参数的语义名称、语义索引、数据格式及偏移值;

S105:基于顶点输入布局描述数组与所述顶点输入参数字段,调用设备接口的创建顶点布局结构方法,创建ID3D11InputLayout接口。

具体的,本实施例中创建顶点缓冲区方法,可以应用于基于Microsoft Windows操作系统的电子设备,例如智能手机、平板电脑之类的移动终端,还可以应用于台式计算机等设备,当然,还可以应用于其它电子设备,在此,本申请不做限制。电子设备安装有Microsoft Windows操作系统,该操作系统中安装Direct3D11软件。

首先,通过步骤S101,调用系统的D3D11Compile方法,将HLSL脚本进行编译,从而获取到一个ID3DBlob的第一接口,该接口中保存了编译后的HLSL脚本字节码。

然后,通过步骤S102,调用系统的返回方法D3DReflect方法,根据上步中编译生成后的ID3D11Blob的第一接口,获取到一个ID3D11ShaderReflection接口。在调用该方法时,调用ID3D11Blob接口的获取指定缓冲区内容方法GetBufferPointer获取编译后的脚本字节码,并将该字节码传入到D3DReflect函数的第一个参数中,调用ID3D11Blob接口的获取指定缓冲区大小方法GetBufferSize,获取到字节码的长度大小,并将该值传入到D3DReflect函数的第二个参数中。在最终生成的ID3D11ShaderReflection第二的接口中,保存了所有与该HLSL脚本代码中相关的信息。

然后,通过步骤S103,根据步骤S102中获取到的ID3D11ShaderReflection接口,调用该接口的获取描述信息方法GetDesc,获取D3D11_SHADER_DESC类型的第一结构,该第一结构中保存了所有对该HLSL脚本的描述信息。访问该结构中的顶点输入参数字段InputParameters,从而获取到该HLSL脚本中顶点着色器使用的顶点输入参数个数。

然后,通过步骤S104,基于顶点输入参数字段,构建D3D11_INPUT_ELEMENT_DESC类型的顶点输入布局描述数组,该顶点输入布局描述数组中保存有与顶点输入参数数量一致的顶点输入参数描述信息变量,每个所述顶点输入参数描述信息变量与HLSL脚本中所使用的每个顶点输入参数一一对应,每个所述顶点输入参数描述信息变量包括对应顶点输入参数的语义名称、语义索引、数据格式及偏移值,使得创造出的顶点缓冲区的格式满足HLSL脚本的要求。

最后,基于顶点输入布局描述数组与顶点输入参数字段,调用设备接口的创建顶点布局结构方法,创建ID3D11InputLayout接口。

这样,在C++代码中,能够在程序员未知HLSL脚本中所使用的顶点输入参数的情况下自动的获取到顶点着色器函数中所使用到的所有顶点输入参数,并可自动建立其数量一致的ID3D11InputLayout接口。对于任意的顶点输入布局结构,都能够创建出正确的ID3D11InputLayout接口,极大提高代码的可重用性,并且极大降低与HLSL脚本的耦合性,降低了创建顶点缓冲区的难度。

具体的,所述顶点输入参数字段的值为M,确定所述HLSL脚本中所使用的M个顶点输入参数,针对所述M个顶点输入参数中每个顶点输入参数,声明D3D11_INPUT_ELEMENT_DESC类型的顶点输入参数描述信息变量,以及声明偏移变量;

调用所述第二接口的获得顶点输入参数描述信息获取方法,获取该顶点输入参数的第一描述信息,将所述第一描述信息中的语义名称保存到所述顶点输入参数描述信息变量的语义名称中,将所述第一描述信息中的语义索引保存到所述顶点输入参数描述信息变量的语义索引中,以及基于所述第一描述信息中的数据格式信息与掩码值,设置所述顶点输入参数描述信息变量的数据格式以及所述偏移变量的偏移值,将所述偏移变量的偏移值保存到所述顶点输入参数描述信息变量的偏移成员中;

将所述顶点输入参数描述信息变量保存至所述顶点输入布局描述数组。

具体的,在本实施例中,如果InputParameters字段的值为M,表明HLSL脚本中使用的顶点输入参数的个数为M。由此,针对M个顶点输入参数的任意一个输入参数,均会声明D3D11_INPUT_ELEMENT_DESC类型的顶点输入参数描述信息变量element,以及声明偏移变量offset。所以,构建的顶点输入布局描述数组elements中,包括M个类型为D3D11_INPUT_ELEMENT_DESC的顶点输入参数描述信息变量element,该M个element与M个顶点输入参数一一对应。

然后,针对M个顶点输入参数的每个输入参数,调用ID3D11ShaderReflection接口的获得顶点输入参数描述信息获取方法GetInputParameterDesc,获取到该顶点输入参数的第一描述信息inputDesc,将上述中获取到的inputDesc中的SematicName成员保存到element变量的SematicName成员中,完成语义名称设置。然后,将inputDesc变中的SematicIndex保存到element变量中的SematicIndex成员中,完成语义索引设置。针对数据格式设置,本实施例中方法在C++代码中罗列的以下12种情况:

针对顶点的输入类型是float类型,分为以下4种情况:

第1种:如果第一描述信息inputDesc中的成员类型字段ComponentType的值为D3D_REGISTER_COMPONENT_FLOAT32,掩码Mask值为1,此种情况表示该顶点的输入类型是一分量的float类型,则将element成员的格式字段Format字段设置为DXGI_FORMAT_R32_FLOAT,并将偏移变量offset的值在原有基础上加4。

第2种:如果第一描述信息inputDesc中的成员类型字段ComponentType的值为D3D_REGISTER_COMPONENT_FLOAT32,掩码Mask值为3,此种情况表示该顶点的输入类型是二分量的float类型,则将element成员的格式字段Format字段设置为DXGI_FORMAT_R32G32_FLOAT,并将偏移变量offset的值在原有基础上加8。

第3种:如果第一描述信息inputDesc中的成员类型字段ComponentType的值为D3D_REGISTER_COMPONENT_FLOAT32,掩码Mask值为7,此种情况表示该顶点的输入类型是三分量的float类型,则将element成员的格式字段Format字段设置为DXGI_FORMAT_R32G32B32_FLOAT,并将偏移变量offset的值在原有基础上加12。

第4种:如果第一描述信息inputDesc中的成员类型字段ComponentType的值为D3D_REGISTER_COMPONENT_FLOAT32,掩码Mask值为15,此种情况表示该顶点的输入类型是四分量的float类型,则将element成员的格式字段Format字段设置为DXGI_FORMAT_R32G32B32A32_FLOAT,并将偏移变量offset的值在原有基础上加16。

针对顶点的输入类型是有符号32位整数类型,分为以下4种情况:

第1种:如果inputDesc的成员类型字段ComponentTypeComponentType值为D3D_REGISTER_COMPONENT_SINT32,掩码Mask值为1,此种情况表示该顶点的输入类型是一分量的有符号32位整数类型,则将element成员的格式字段Format字段设置为DXGI_FORMAT_R32_SIN,并将偏移变量offset的值在原有基础上加4。

第2种:如果inputDesc的成员类型字段ComponentTypeComponentType值为D3D_REGISTER_COMPONENT_SINT32,掩码Mask值为3,此种情况表示该顶点的输入类型是二分量的有符号32位整数类型,则将element成员的格式字段Format字段设置为DXGI_FORMAT_R32G32_SINT,并将偏移变量offset的值在原有基础上加8。

第3种:如果inputDesc的成员类型字段ComponentTypeComponentType值为D3D_REGISTER_COMPONENT_SINT32,掩码Mask值为7,此种情况表示该顶点的输入类型是三分量的有符号32位整数类型,则将element成员的格式字段Format字段设置为DXGI_FORMAT_R32G32B32_SINT,并将偏移变量offset的值在原有基础上加12。

第4种:如果inputDesc的成员类型字段ComponentTypeComponentType值为D3D_REGISTER_COMPONENT_SINT32,掩码Mask值为15,此种情况表示该顶点的输入类型是四分量的有符号32位整数类型,则将element成员的格式字段Format字段设置为DXGI_FORMAT_R32G32B32A32_SINT,并将偏移变量offset的值在原有基础上加16。

针对顶点的输入类型是无符号32位整数类型,分为以下4种情况:

第1种:如果inputDesc的成员类型字段ComponentTypeComponentType值为D3D_REGISTER_COMPONENT_UINT32,掩码Mask值为1,此种情况表示该顶点的输入类型是一分量的无符号32位整数类型,则将element成员的格式字段Format字段设置为DXGI_FORMAT_R32_UINT,并将偏移变量offset的值在原有基础上加4。

第2种:如果inputDesc的成员类型字段ComponentTypeComponentType值为D3D_REGISTER_COMPONENT_UINT32,掩码Mask值为3,此种情况表示该顶点的输入类型是二分量的无符号32位整数类型,则将element成员的格式字段Format字段设置为DXGI_FORMAT_R32G32_UINT,并将偏移变量offset的值在原有基础上加8。

第3种:如果inputDesc的成员类型字段ComponentTypeComponentType值为D3D_REGISTER_COMPONENT_UINT32,掩码Mask值为7,此种情况表示该顶点的输入类型是三分量的无符号32位整数类型,则将element成员的格式字段Format字段设置为DXGI_FORMAT_R32G32B32_UINT,并将偏移变量offset的值在原有基础上加12。

第4种:如果inputDesc的成员类型字段ComponentTypeComponentType值为D3D_REGISTER_COMPONENT_UINT32,掩码Mask值为15,此种情况表示该顶点的输入类型是四分量的无符号32位整数类型,则将element成员的格式字段Format字段设置为DXGI_FORMAT_R32G32B32A32_UINT,并将偏移变量offset的值在原有基础上加16。

当然,在具体实施过程中,还可以罗列其他格式的数据进行数据格式的设置,在此,本申请不再一一列举,可根据实际需要进行配置。在此,本申请不做限制。

进而,将上述中的offset变量值,赋值给element成员的AlignedByteOffset成员,以完成偏移值的设定。

上述的过程结束后,将保存后D3D11_INPUT_ELEMENT_DESC信息的element变量保存到elements数组中。在elements数组中就保存中M个的D3D11_INPUT_ELEMENT_DESC信息,然后调用ID3D11Device接口的CreateInputLayout方法,将elements数组传入到该方法的第一个参数中,将InputParameters数组个数传入到该方法的第二个参数中,这样最终就会得到所需要的ID3D11InputLayout接口。

下面以一个完整示例进行详细说明,在下面的顶点着色器代码中,顶点的输入结构VertexInput包含顶点的位置信息,以及纹理坐标信息。

其中,代表顶点位置信息的pos成员在HLSL中的变量类型是float3向量类型,包含x,y,z三个坐标,而后面的POSITION0表示其语义(Sematic),在HLSL中所有的顶点输入和输入都必须指定其语义(所谓语义就是要让GPU知道,这个变量是用来做什么的,有什么特定的功能,例如POSITION语义就代表三维世界坐标(而后面的0表示第一组位置坐标),TEXCOORD语义就代表该变量代表一个纹理坐标,后面的数组0表示第一组纹理坐标)。tex成员其变量类型是float2向量类型,包含有两个float类型的纹理坐标值(纹理坐标通常用u,v进行表示,其中u代表水平方向上的坐标,v代表垂直方向上的坐标)。

现有技术中,在Direct3D11中,如何针对上述的VertexInput顶点输入结构,创建出正确的ID3D11InputLayput接口。分为下面的几个步骤完成:

初始化D3D11,调用D3D11CreateDeviceAndSwapchain函数,创建ID3D11Device设备接口,以及ID3D11DeviceContext设备上下文接口。

编译HLSL脚本,调用D3D11Compile方法,将HLSL顶点着色器代码进行编译,并获取一个ID3DBlob结构,该结构中包含有编译后的着色器的二进制字节码。

顶点输入结构声明,现有技术中,因为已经事先知道了VertexInput的声明结构,知道该顶点输入中包含两个变量,一个是12个字节大小的第一组位置坐标,另一个是8字节大小的第一组纹理坐标。那么在C++代码中就会声明一个包含两个成员的D3D11_INPUT_ELEMENT_DESC数组,并且该数组的第一项表示位置信息,第二项表示纹理坐标信息。现将用变量InputDesc[2]表示D3D11_INPUT_ELEMENT_DESC数组,那么传统方法中,声明该顶点的代码应该是下面这样的:

a)声明位置坐标信息

声明语义,InputDesc[0].SematicName=”POSITION”,因为第一个成员表示位置信息,所以把POSITION字符串值赋值给D3D11_INPUT_ELEMENT_DESC结构的SematicName成员。

语义索引,InputDesc[0].SematicIndex=0,因为上述HLSL代码中使用的是POSITION0语义,即第一组位置坐标,所以将0赋值给该结构的SematicIndex成员。

数据格式,InputDesc[0].Format=DXGI_FORMAT_R32G32B32_FLOAT,因为上述HLSL代码中pos成员的类型是float3(表示三分量的float型数据),在C++中,DXGI_FORMAT_R32G32B32_FLOAT格式与其相对应。

成员偏移,成员偏移表示输入结构中顶点的每个成员相对于顶点开始位置的字节偏移量,因为pos成员是第一个成员,故其偏移值是0,即InputDesc[0].AlignedByteOffset=0。

b)声明纹理坐标信息

声明语义,InputDesc[1].SematicName=”TEXCOORD”,因为第二个成员表示纹理坐标信息,所以把TEXCOORD字符串值,赋值给D3D11_INPUT_ELEMENT_DESC结构的SematicName成员。

语义索引,InputDesc[1].SematicIndex=0,因为上述HLSL代码中使用的是TEXCOORD0语义,即第一组纹理坐标,所以将0赋值给该结构的SematicIndex成员。

设置数据格式,InputDesc[1].Format=DXGI_FORMAT_R32G32_FLOAT,因为上述HLSL代码中tex成员的类型是float2(表示二分量的float型数据),在C++中,DXGI_FORMAT_R32G32_FLOAT格式与其相对应。

设置成员偏移,因为tex成员是第二个成员,并且第一个成员pos的大小是12,所以tex成员的偏移量就是12,即InputDesc[1].AlignedByteOffset=12。

这样,声明好D3D11_INPUT_ELEMENT_DESC数组之后,调用ID3D11Device接口的CreateInputLayout方法,将InputDesc数组传入到该方法的第一个参数中,将数字2传入到该方法的第二个参数中,如果调用成功,则获取到最终所需要的ID3D11InputLayout接口。

通过上面的步骤,虽然可以创建出正确的ID3D11InputLayout接口,但是如果将上述的顶点输入结构改成下面这样,那么上述的步骤就会完全不起作用。

即在上述的基础上,又加入了一个成员tex2,用来表示第二组纹理坐标。那么如果继续以上述的步骤创建ID3D11InputLayout接口时,最终就会造成绘制图元失败。因为ID3D11InputLayout结构中描述的顶点结构与HLSL脚本中描述的顶点结构不一致。

而本实施例中的方法,可以在C++代码中,动态的获取到HLSL脚本中顶点输入结构的所有信息,从而根据该信息去创建ID3D11InputLayout接口。例如,按照本实施例中的方法,对于VertexInput结构,就会自动的创建出一个包含两个元素的elements数组,并将该数组中的每一项设置成正确的值。而对于VertexInput2结构,就会自动的创建出一个包含三个元素的elements数组,同样将数组中的每一项设置成正确的值。可以在不改变C++代码的情况下,对于任意的顶点输入布局结构,都能够创建出正确的ID3D11InputLayout接口,极大提高代码的可重用性,并且极大降低与HLSL脚本的耦合性。

请参见图2,本发明的第二实施例提供了一种创建顶点缓冲区装置,应用于Direct3D11软件平台,包括:

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

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

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

第一创建单元204,用于基于所述顶点输入参数字段,构建D3D11_INPUT_ELEMENT_DESC类型的顶点输入布局描述数组,所述顶点输入布局描述数组中保存有与所述顶点输入参数数量一致的顶点输入参数描述信息变量,每个所述顶点输入参数描述信息变量与所述HLSL脚本中所使用的每个顶点输入参数一一对应,每个所述顶点输入参数描述信息变量包括对应顶点输入参数的语义名称、语义索引、数据格式及偏移值;

第二创建单元205,用于基于顶点输入布局描述数组与所述顶点输入参数字段,调用设备接口的创建顶点布局结构方法,创建ID3D11InputLayout接口。

在一种可选实现方式中,所述第一创建单元具体用于:

所述顶点输入参数字段的值为M,确定所述HLSL脚本中所使用的M个顶点输入参数,针对所述M个顶点输入参数中每个顶点输入参数,声明D3D11_INPUT_ELEMENT_DESC类型的顶点输入参数描述信息变量,以及声明偏移变量;

调用所述第二接口的获得顶点输入参数描述信息获取方法,获取该顶点输入参数的第一描述信息,将所述第一描述信息中的语义名称保存到所述顶点输入参数描述信息变量的语义名称中,将所述第一描述信息中的语义索引保存到所述顶点输入参数描述信息变量的语义索引中,以及基于所述第一描述信息中的数据格式信息与掩码值,设置所述顶点输入参数描述信息变量的数据格式以及所述偏移变量的偏移值,将所述偏移变量的偏移值保存到所述顶点输入参数描述信息变量的偏移成员中;

将所述顶点输入参数描述信息变量保存至所述顶点输入布局描述数组。

在一种可选实现方式中,所述第一创建单元具体用于:

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_FLOAT32,掩码值为1,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32_FLOAT,将所述偏移变量的偏移值设置为在初始值上加4;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_FLOAT32,掩码值为3,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32_FLOAT,将所述偏移变量的偏移值设置为在初始值上加8;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_FLOAT32,掩码值为7,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32B32_FLOAT,将所述偏移变量的偏移值设置为在初始值上加12;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_FLOAT32,掩码值为15,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32B32A32_FLOAT,将所述偏移变量的偏移值设置为在初始值上加16。

在一种可选实现方式中,所述第一创建单元具体用于:

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_SINT32,掩码值为1,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32_SINT,将所述偏移变量的偏移值设置为在初始值上加4;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_SINT32,掩码值为3,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32_SINT,将所述偏移变量的偏移值设置为在初始值上加8;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_SINT32,掩码值为7,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32B32_SINT,将所述偏移变量的偏移值设置为在初始值上加12;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_SINT32,掩码值为15,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32B32A32_SINT,将所述偏移变量的偏移值设置为在初始值上加16。

在一种可选实现方式中,所述第一创建单元具体用于:

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_UINT32,掩码值为1,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32_UINT,将所述偏移变量的偏移值设置为在初始值上加4;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_UINT32,掩码值为3,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32_UINT,将所述偏移变量的偏移值设置为在初始值上加8;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_UINT32,掩码值为7,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32B32_UINT,将所述偏移变量的偏移值设置为在初始值上加12;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_UINT32,掩码值为15,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32B32A32_UINT,将所述偏移变量的偏移值设置为在初始值上加16。

请参见图3,本发明的第三实施例提供了一种创建顶点缓冲区装置,该实施例的装置包括:处理器301、存储器302以及存储在所述存储器中并可在所述处理器上运行的计算机程序,例如第一实施例中创建顶点缓冲区方法对应的程序。所述处理器执行所述计算机程序时实现上述第一实施例中各路径检测中的步骤。或者,所述处理器执行所述计算机程序时实现上述第二实施例的装置中各模块/单元的功能。

示例性的,所述计算机程序可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器中,并由所述处理器执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序在所述计算机装置中的执行过程。例如,所述计算机程序可以被分割成编译单元、获取单元、确定单元、第一创建单元、第二创建单元的功能,各单元具体功能如下:

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

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

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

第一创建单元,用于基于所述顶点输入参数字段,构建D3D11_INPUT_ELEMENT_DESC类型的顶点输入布局描述数组,所述顶点输入布局描述数组中保存有与所述顶点输入参数数量一致的顶点输入参数描述信息变量,每个所述顶点输入参数描述信息变量与所述HLSL脚本中所使用的每个顶点输入参数一一对应,每个所述顶点输入参数描述信息变量包括对应顶点输入参数的语义名称、语义索引、数据格式及偏移值;

第二创建单元,用于基于顶点输入布局描述数组与所述顶点输入参数字段,调用设备接口的创建顶点布局结构方法,创建ID3D11InputLayout接口。

所述装置可包括,但不仅限于,处理器、存储器。本领域技术人员可以理解,所述示意图3仅仅是计算机装置的示例,并不构成对装置的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述装置还可以包括输入输出设备、网络接入设备、总线等。

所称处理器301可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述计算机装置的控制中心,利用各种接口和线路连接整个计算机装置的各个部分。

所述存储器302可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述计算机装置的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、视频数据等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

进一步,该装置所包括的处理器301还具有以下功能:

所述顶点输入参数字段的值为M,确定所述HLSL脚本中所使用的M个顶点输入参数,针对所述M个顶点输入参数中每个顶点输入参数,声明D3D11_INPUT_ELEMENT_DESC类型的顶点输入参数描述信息变量,以及声明偏移变量;

调用所述第二接口的获得顶点输入参数描述信息获取方法,获取该顶点输入参数的第一描述信息,将所述第一描述信息中的语义名称保存到所述顶点输入参数描述信息变量的语义名称中,将所述第一描述信息中的语义索引保存到所述顶点输入参数描述信息变量的语义索引中,以及基于所述第一描述信息中的数据格式信息与掩码值,设置所述顶点输入参数描述信息变量的数据格式以及所述偏移变量的偏移值,将所述偏移变量的偏移值保存到所述顶点输入参数描述信息变量的偏移成员中;

将所述顶点输入参数描述信息变量保存至所述顶点输入布局描述数组。

进一步,该装置所包括的处理器301还具有以下功能:

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_FLOAT32,掩码值为1,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32_FLOAT,将所述偏移变量的偏移值设置为在初始值上加4;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_FLOAT32,掩码值为3,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32_FLOAT,将所述偏移变量的偏移值设置为在初始值上加8;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_FLOAT32,掩码值为7,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32B32_FLOAT,将所述偏移变量的偏移值设置为在初始值上加12;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_FLOAT32,掩码值为15,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32B32A32_FLOAT,将所述偏移变量的偏移值设置为在初始值上加16。

进一步,该装置所包括的处理器301还具有以下功能:

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_SINT32,掩码值为1,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32_SINT,将所述偏移变量的偏移值设置为在初始值上加4;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_SINT32,掩码值为3,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32_SINT,将所述偏移变量的偏移值设置为在初始值上加8;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_SINT32,掩码值为7,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32B32_SINT,将所述偏移变量的偏移值设置为在初始值上加12;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_SINT32,掩码值为15,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32B32A32_SINT,将所述偏移变量的偏移值设置为在初始值上加16。

进一步,该装置所包括的处理器301还具有以下功能:

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_UINT32,掩码值为1,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32_UINT,将所述偏移变量的偏移值设置为在初始值上加4;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_UINT32,掩码值为3,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32_UINT,将所述偏移变量的偏移值设置为在初始值上加8;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_UINT32,掩码值为7,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32B32_UINT,将所述偏移变量的偏移值设置为在初始值上加12;

如果所述第一描述信息中的成员类型字段的值为D3D_REGISTER_COMPONENT_UINT32,掩码值为15,将所述顶点输入参数描述信息变量的格式字段设置为DXGI_FORMAT_R32G32B32A32_UINT,将所述偏移变量的偏移值设置为在初始值上加16。

本发明第四实施例提供了一种计算机可读存储介质,其上存储有计算机程序,本发明第二实施例中的所述创建顶点缓冲区装置集成的功能单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述第一实施例的创建顶点缓冲区方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1