CN108958718B - 一种纹理图像绑定方法、装置及可读存储介质 - Google Patents

一种纹理图像绑定方法、装置及可读存储介质 Download PDF

Info

Publication number
CN108958718B
CN108958718B CN201810692145.0A CN201810692145A CN108958718B CN 108958718 B CN108958718 B CN 108958718B CN 201810692145 A CN201810692145 A CN 201810692145A CN 108958718 B CN108958718 B CN 108958718B
Authority
CN
China
Prior art keywords
texture
name
shader
type
calling
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201810692145.0A
Other languages
English (en)
Other versions
CN108958718A (zh
Inventor
杨亮
陈少杰
张文明
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan Douyu Network Technology Co Ltd
Original Assignee
Wuhan Douyu Network Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Wuhan Douyu Network Technology Co Ltd filed Critical Wuhan Douyu Network Technology Co Ltd
Priority to CN201810692145.0A priority Critical patent/CN108958718B/zh
Publication of CN108958718A publication Critical patent/CN108958718A/zh
Application granted granted Critical
Publication of CN108958718B publication Critical patent/CN108958718B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/34Graphical or visual programming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Image Generation (AREA)

Abstract

本发明提供了一种纹理图像绑定方法、装置及可读存储介质。用于提供一种简单易行且准确绑定纹理图像的方法,该方法应用于Direct3D11软件平台,包括:确定基于高阶着色器语言HLSL的着色器脚本中的Texture2D类型的第一纹理,获取所述第一纹理的名称,基于纹理名称与寄存器索引间的对应关系,确定所述第一纹理对应的第一寄存器索引;基于面向对象程序设计语言C++,创建与所述第一纹理对应的ID3D11Texture2D类型的第二纹理,创建所述第二纹理对应的纹理视图;基于所述第一纹理的寄存器索引与所述纹理视图,绑定所述第一纹理与所述第二纹理。

Description

一种纹理图像绑定方法、装置及可读存储介质
技术领域
本发明涉及电子技术领域,尤其涉及一种纹理图像绑定方法、装置及可读存储介质。
背景技术
Direct3D(简称:D3D)是微软公司在Microsoft Windows操作系统上所开发的一套3D绘图编程接口。在Direct3D中的Direct3D11中,为了显示一张图像,必须以ID3D11Texture2D的方式显示,并且在Direct3D11中,除了编写C++代码之外,还必须为显示该纹理编写一个高阶着色器语言HLSL(High Level Shader Language)的着色器脚本。在该脚本中,利用一个Texture2D类型的纹理与C++代码中的ID3D11Texture2D纹理相对应。C++代码中,通过相关的函数,将一个纹理设定到指定的纹理寄存器中,然后在HLSL着色器脚本中,对该纹理进行相关的处理,最终显示在计算机程序中。
在Direct3D11中,通常是调设备上下文接口ID3D11DeviceContext的设置着色器资源方法PSSetShaderResources,将纹理视图设定到纹理寄存器中。当在HLSL脚本中,只使用到一个纹理时,在调用PSSetShaderResources方法时,只需要将该方法的第一个参数设置为0即可,表示将该索引设定到0号纹理寄存器中。使用这种硬编码的方式时,编写的C++代码必须跟HLSL代码紧密的耦合在一起。也就是说,在调用PSSetShaderResources方法,设置多个纹理的纹理寄存器索引时,程序员必须先明确的知道,每个纹理在HLSL脚本中所使用的纹理寄存器索引,从而根据该纹理在HLSL脚本中所使用的寄存器索引,将该寄存器索引值设置到PSSetShaderResources方法中,从而完成ID3D11Texture2D的C++纹理类型与HLSL中的Texture2D的绑定操作。所以,需要消耗程序员较高的人力成本。
并且,由于HLSL脚本是可以动态加载的,也就是外部可以在程序尚未启动时,修改HLSL脚本中的内容,但是C++编译后的程序是不能修改的。这样如果外部修改了HLSL脚本中Texture2D类型的纹理,所使用的纹理寄存器索引,那么由于在C++代码端,在调用PSSetShaderResources时,是通过硬编码纹理寄存器索引的方式,将ID3D11Texture2D绑定到HLSL的Texture2D中的,而此时HLSL中的Texture2D所使用的寄存器索引已经发生了变化。那么最终程序就无法绘制出正常的图像出来。
发明内容
本发明实施例提供了一种纹理图像绑定方法、装置及可读存储介质,用于提供一种简单易行且准确绑定纹理图像的方法。
第一方面,本发明实施例提供了一种纹理图像绑定方法,应用于Direct3D11软件平台,包括:
确定基于高阶着色器语言HLSL的着色器脚本中的Texture2D类型的第一纹理,获取所述第一纹理的名称,基于纹理名称与寄存器索引间的对应关系,确定所述第一纹理对应的第一寄存器索引;
基于面向对象程序设计语言C++,创建与所述第一纹理对应的ID3D11Texture2D类型的第二纹理,创建所述第二纹理对应的纹理视图;
基于所述第一纹理的寄存器索引与所述纹理视图,绑定所述第一纹理与所述第二纹理。
可选的,所述基于纹理名称与寄存器索引间的对应关系,确定所述第一纹理对应的第一寄存器索引,包括:
基于所述第一名称,调用索引获取方法,从纹理索引数据库中确定与所述第一名称对应的第一寄存器索引。
可选的,在所述基于纹理名称与寄存器索引间的对应关系,确定所述第一纹理对应的第一寄存器索引之前,所述方法还包括:
调用所述Direct3D11软件平台的编译方法,对所述着色器脚本进行编译,获得ID3DBlob类型的第一接口,所述第一接口中保存有编译后的所述着色器脚本的字节码;
调用所述第一接口的获取指定缓冲区内容方法,获得所述字节码,以及调用所述第一接口的获取指定缓冲区大小方法,获得所述字节码的字节长度;
基于所述字节码与所述字节长度,调用所述Direct3D11软件平台的返回方法,获得ID3D11ShaderReflection类型的第二接口,调用所述第二接口的获取描述信息方法,获得D3D11_SHADER_DESC类型的第一结构;
针对所第一结构中的BoundResources成员,循环调用所述第二接口的获得资源集合描述信息方法,获得D3D11_SHADER_INPUT_BIND_DESC类型的第二结构,在确定所述第二结构描述的是基于HLSL的脚本纹理时,确定所述第二结构的Name成员为Texture2D类型的纹理的名称,以及确定所述第二结构的BindPoint成员为与所述Texture2D类型的纹理对应的在所述着色器脚本中所使用的寄存器索引,将所述第二结构对应的Name成员和BindPoint成员以键值对的形式保存到所述纹理索引数据库中。
可选的,所述基于所述第一纹理的寄存器索引与所述纹理视图,绑定所述第一纹理与所述第二纹理,包括:
基于所述第一纹理的寄存器索引与所述纹理视图,调用着色器资源设置方法,绑定所述第一纹理与所述第二纹理。
第二方面,本发明实施例提供一种纹理图像绑定装置,应用于Direct3D11软件平台,包括:
确定单元,用于确定基于高阶着色器语言HLSL的着色器脚本中的Texture2D类型的第一纹理,获取所述第一纹理的名称,基于纹理名称与寄存器索引间的对应关系,确定所述第一纹理对应的第一寄存器索引;
创建单元,用于基于面向对象程序设计语言C++,创建与所述第一纹理对应的ID3D11Texture2D类型的第二纹理,创建所述第二纹理对应的纹理视图;
绑定单元,用于基于所述第一纹理的寄存器索引与所述纹理视图,绑定所述第一纹理与所述第二纹理。
可选的,所述确定单元具体用于:
基于所述第一名称,调用索引获取方法,从纹理索引数据库中确定与所述第一名称对应的第一寄存器索引。
可选的,所述装置还包括纹理索引数据库建立单元,所述纹理索引数据库建立单元具体用于:
在所述基于纹理名称与寄存器索引间的对应关系,确定所述第一纹理对应的第一寄存器索引之前,调用所述Direct3D11软件平台的编译方法,对所述着色器脚本进行编译,获得ID3DBlob类型的第一接口,所述第一接口中保存有编译后的所述着色器脚本的字节码;
调用所述第一接口的获取指定缓冲区内容方法,获得所述字节码,以及调用所述第一接口的获取指定缓冲区大小方法,获得所述字节码的字节长度;
基于所述字节码与所述字节长度,调用所述Direct3D11软件平台的返回方法,获得ID3D11ShaderReflection类型的第二接口,调用所述第二接口的获取描述信息方法,获得D3D11_SHADER_DESC类型的第一结构;
针对所第一结构中的BoundResources成员,循环调用所述第二接口的获得资源集合描述信息方法,获得D3D11_SHADER_INPUT_BIND_DESC类型的第二结构,在确定所述第二结构描述的是基于HLSL的脚本纹理时,确定所述第二结构的Name成员为Texture2D类型的纹理的名称,以及确定所述第二结构的BindPoint成员为与所述Texture2D类型的纹理对应的在所述着色器脚本中所使用的寄存器索引,将所述第二结构对应的Name成员和BindPoint成员以键值对的形式保存到所述纹理索引数据库中。
可选的,所述绑定单元具体用于:
调用着色器资源设置方法,绑定所述第一寄存器索引对应的所述第一纹理与所述纹理视图。
第三方面,本发明实施例提供一种纹理图像绑定装置,应用于应用于Direct3D11软件平台,所述目标纹理图像绑定装置包括处理器,所述处理器用于执行存储器中存储的计算机程序时实现如前述第一方面实施例中所述的纹理图像绑定方法的步骤。
第四方面,本发明实施例提供了一种可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如前述第一方面实施例中所述的纹理图像绑定方法的步骤。
本申请实施例中的上述一个或多个技术方案,至少具有如下一种或多种技术效果:
本发明实施例的技术方案,在Direct3D11中,在HLSL着色器脚本中使用了Texture2D类型的第一纹理情况下,可基于纹理名称与寄存器索引间的对应关系,确定第一纹理对应的第一寄存器索引,然后,基于面向对象程序设计语言C++,创建与第一纹理对应的ID3D11Texture2D类型的第二纹理,创建第二纹理对应的纹理视图,最后基于第一纹理的寄存器索引与纹理视图,绑定第一纹理与第二纹理。这样,在C++代码中,只需要获得第一纹理的名称,就可以基于该名称动态的获取到HLSL脚本中第一纹理所使用的第一寄存器索引,从而根据该索引去调用PSSetShaderResources方法,使得第一纹理与第二纹理间能正确绑定,绑定方式简单高效。
附图说明
图1为本发明第一实施例中的纹理图像绑定方法的流程图;
图2为本发明第二实施例中的纹理图像绑定装置的示意图;
图3为本发明第三实施例中纹理图像绑定装置的示意图。
具体实施方式
本发明实施例提供了一种纹理图像绑定方法、装置及可读存储介质,用于提供一种简单易行且准确绑定纹理图像的方法,该方法应用于Direct3D11软件平台,包括:确定基于高阶着色器语言HLSL的着色器脚本中的Texture2D类型的第一纹理,获取所述第一纹理的名称,基于纹理名称与寄存器索引间的对应关系,确定所述第一纹理对应的第一寄存器索引;基于面向对象程序设计语言C++,创建与所述第一纹理对应的ID3D11Texture2D类型的第二纹理,创建所述第二纹理对应的纹理视图;基于所述第一纹理的寄存器索引与所述纹理视图,绑定所述第一纹理与所述第二纹理。
下面通过附图以及具体实施例对本发明技术方案做详细的说明,应当理解本申请实施例以及实施例中的具体特征是对本申请技术方案的详细的说明,而不是对本申请技术方案的限定,在不冲突的情况下,本申请实施例以及实施例中的技术特征可以相互组合。
本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
实施例
请参考图1,本发明第一实施例提供一种纹理图像绑定方法,应用于Direct3D11软件平台,该纹理图像绑定方法包括如下步骤:
S101:确定基于高阶着色器语言HLSL的着色器脚本中的Texture2D类型的第一纹理,获取所述第一纹理的名称,基于纹理名称与寄存器索引间的对应关系,确定所述第一纹理对应的第一寄存器索引;
S102:基于面向对象程序设计语言C++,创建与所述第一纹理对应的ID3D11Texture2D类型的第二纹理,创建所述第二纹理对应的纹理视图;
S103:基于所述第一纹理的寄存器索引与所述纹理视图,绑定所述第一纹理与所述第二纹理。
其中,步骤S101具体实现为:基于所述第一名称,调用索引获取方法,从纹理索引数据库中确定与所述第一名称对应的第一寄存器索引。
步骤S103具体实现为:基于所述第一纹理的寄存器索引与所述纹理视图,调用着色器资源设置方法,绑定所述第一纹理与所述第二纹理。
具体的,本实施例中纹理图像绑定方法,可以应用于基于MicrosoftWindows操作系统的电子设备,例如智能手机、平板电脑之类的移动终端,还可以应用于台式计算机等设备,当然,还可以应用于其它电子设备,在此,本申请不做限制。
电子设备安装有Microsoft Windows操作系统,该操作系统中安装Direct3D11软件。由背景技术中的内容可知,在Direct3D11中,图像必须以ID3D11Texture2D的方式显示,并且在Direct3D11中,编写有HLSL的着色器脚本,该着色器脚本中,包括将多个纹理合成一个RGB类型的图像的代码。以下面的一个HLSL着色器脚本为例子来进行详细说明,该HLSL着色器脚本的伪代码中,其目的是将3个Y、U、V的纹理,合并成一个RGB类型的图像。在着色器脚本中,有三个Texture2D类型的纹理,其名称分别是Y,U,V。如下所示:
Figure BDA0001712845960000071
根据上述HLSL着色器脚本的书写方式可知,Texture2D变量在脚本中的声明先后顺序即为对应的寄存器索引值,即:Y纹理所在的寄存器索引值是0,U纹理的索引值是1,V纹理的索引值就是2。
同时,在C++代码端,还应该创建3个ID3D11Texture2D类型的纹理,与该HLSL脚本中的三个Texture2D纹理进行对应。创建ID3D11Texture2D纹理的步骤如下:
初始化D3D11,调用D3D11CreateDeviceAndSwapchain函数,创建ID3D11Device设备接口,以及ID3D11DeviceContext设备上下文接口。
然后,调用上述中创建的ID3D11Device接口的CreateTexture2D方法,创建ID3D11Texture2D类型的纹理,连续创建三个ID3D11Texture2D,将其分别命名为yTexture,uTexture,vTexture,分别与HLSL着色器脚本中的Y、U、V对应,还应该为每个纹理创建相应的纹理视图接口。在调用PSSetShaderResources方法时,传入的参数类型是ID3D11ShaderResourceView类型的纹理视图接口,而非ID3D11Texture2D类型的纹理接口,所以根据上述所创建的纹理,调用ID3D11Device接口的CreateShaderResourceView方法的,为上述的yTexture,uTexture,vTexture分别创建一个纹理视图,命名为yTextureView,uTextureView,vTextureView。
最后,完成Texture2D类型的纹理与ID3D11Texture2D类型的纹理间的绑定。调用ID3D11DeviceContext接口的PSSetShaderResources来完成ID3D11ShaderResourceView与HLSL着色器脚本中Texture2D纹理的绑定操作。在现有技术中,因为在上述的纹理脚本中,已经事先就知道了Y、U、V纹理的寄存器索引分别为0,1,2。
那么在调用该方法时,就如下面的所示
PSSetShaderResources(0,yTextureView)
PSSetShaderResources(1,uTextureView)
PSSetShaderResources(2,vTextureView)
但是,如果外部将HLSL着色器脚本中的代码改成下面这样的方式
Figure BDA0001712845960000081
Figure BDA0001712845960000091
那么Y,U,V纹理的寄存器索引就变成了2,1,0,这样就完全与之前的索引值完全不同了。但是由于采用的是硬编码索引的方式,这样造成的结果就是将yTextureView绑定到了V纹理中,将uTextureView仍然绑定到U纹理中,将vTextureView绑定到了Y纹理中,这样就引起了Y纹理和V纹理的绑定错乱。最终造成图像显示的错误。
所以,为了解决上述的问题,避免C++代码中调用PSSetShaderResources方法时,以硬编码索引的方式,去设置HLSL着色器脚本中的纹理寄存器索引。本实施例中的纹理图像绑定方法,在C++代码中,动态的获取到HLSL着色器脚本中Texture2D纹理变量所使用的寄存器索引值,从而根据该索引值去调用PSSetShaderResources方法。也就是说,本实施例中根据纹理变量的名称去获取其索引,从而解决硬编码纹理变量的索引而引起的问题。那么根据该规则,上述的纹理绑定过程如下所示:
PSSetShaderResources(textureSlot(“Y”),yTextureView)
PSSetShaderResources(textureSlot(“U”),uTextureView)
PSSetShaderResources(textureSlot(“V”),vTextureView)
其中,调用索引获取方法textureSlot,根据HLSL着色器脚本中Texture2D纹理变量的名称,获取其纹理寄存器的纹理寄存器索引值。为了实现该调用索引获取方法textureSlot的功能,本实施例中的步骤如下:
调用所述Direct3D11软件平台的编译方法,对所述着色器脚本进行编译,获得ID3DBlob类型的第一接口,所述第一接口中保存有编译后的所述着色器脚本的字节码;
调用所述第一接口的获取指定缓冲区内容方法,获得所述字节码,以及调用所述第一接口的获取指定缓冲区大小方法,获得所述字节码的字节长度;
基于所述字节码与所述字节长度,调用所述Direct3D11软件平台的返回方法,获得ID3D11ShaderReflection类型的第二接口,调用所述第二接口的获取描述信息方法,获得D3D11_SHADER_DESC类型的第一结构;
针对所第一结构中的BoundResources成员,循环调用所述第二接口的获得资源集合描述信息方法,获得D3D11_SHADER_INPUT_BIND_DESC类型的第二结构,在确定所述第二结构描述的是基于HLSL的脚本纹理时,确定所述第二结构的Name成员为Texture2D类型的纹理的名称,以及确定所述第二结构的BindPoint成员为与所述Texture2D类型的纹理对应的在所述着色器脚本中所使用的寄存器索引,将所述第二结构对应的Name成员和BindPoint成员以键值对的形式保存到所述纹理索引数据库中。
具体的,本实施例中的方法,需要建立HLSL着色器脚本中所使用的纹理的名称与寄存器索引间的对应关系,保存至纹理索引数据库中。首先编译HLSL着色器脚本,调用系统的D3D11Compile方法,将上述的YUV420ToRGB脚本进行编译,从而获取到一个ID3DBlob的接口,该接口中保存了编译后的HLSL着色器脚本字节码。然后,根据上步中编译生成后的ID3D11Blob接口,调用ID3D11Blob接口的获取指定缓冲区内容方法GetBufferPointer,获取编译后的脚本字节码,调用ID3D11Blob的获取指定缓冲区大小方法GetBufferSize,获取到字节码的字节长度,调用系统的返回方法D3DReflect,并将上述字节码传入到D3DReflect函数的第一个参数中,并将上述字节长度传入到D3DReflect函数的第二个参数中,获得ID3D11ShaderReflection类型的第二接口。在最终生成的ID3D11ShaderReflection的接口中,保存了所有与该HLSL着色器脚本代码中相关的信息。
接着,调用该ID3D11ShaderReflection接口的获取描述信息方法GetDesc,获取到一个D3D11_SHADER_DESC类型的第一结构,该结构中保存了所有对该HLSL着色器脚本的描述信息。
根据上步中,获取到的D3D11_SHADER_DESC结构,根据该结构中的BoundResources成员,从而获取到该HLSL着色器脚本中所有使用到的着色器资源。着色器资源中不仅包括纹理资源,还包括其他的资源,如纹理采样器等。针对BoundResources成员的具体数值,循环的调用前述获得的ID3D11ShaderReflection接口的获得资源集合描述信息方法GetResourceBindingDesc,由此获取到D3D11_SHADER_INPUT_BIND_DESC的第二结构,并判断该结构中的Type成员是否等于D3D_SIT_TEXTURE值,如果等于,则该结构描述的就是一个HLSL着色器脚本纹理。那么该结构中的Name成员就是Texture2D类型纹理的名称,该结构的BindPoint成员就是该Texture2D在该HLSL着色器脚本中所使用的纹理寄存器索引。并将该结构的Name成员和BindPoint成员以键值对的形式,保存到纹理索引数据库m_textureSlots中。
经过上面的步骤,已经完成了纹理索引数据库建立,所以,仅需要根据HLSL着色器脚本中纹理对象的名称,返回其所使用的寄存器索引。也就是从上步中的m_textureSlots中,查找到纹理名称所对应的寄存器索引。
根据本实施例中的textureSlot方法,即使在HLSL着色器脚本中,将Y,U,V的纹理索引变成了2,1,0;那么在调用textureSlot方法时,也能获取Y,U,V的纹理索引,从而将C++中的yTextureView,uTextureView,vTextureView仍然能够对应的绑定到HLSL着色器脚本中的Y,U,V纹理中,从而避免了传统的采用硬编码索引时引起的问题。
本实施例中,第一纹理可以是前述示例中的Y,U,V中任意一个,对应的,第二纹理即为yTexture,uTexture,vTexture,对应的,建立的纹理视图为yTextureView,uTextureView,vTextureView。如果需要将第一纹理Y与第二纹理yTexture绑定时,通过第一纹理的第一名“Y”,调用索引获取方法获得与第一纹理Y对应的第一寄存器索引为textureSlot(“Y”),这样,可调用着色器资源设置方法,PSSetShaderResources(textureSlot(“Y”),yTextureView),完成第一纹理Y与第二纹理yTexture间的绑定。
请参见图2,本发明的第二实施例提供了一种纹理图像绑定装置,应用于Direct3D11软件平台,包括:
确定单元201,用于确定基于高阶着色器语言HLSL的着色器脚本中的Texture2D类型的第一纹理,获取所述第一纹理的名称,基于纹理名称与寄存器索引间的对应关系,确定所述第一纹理对应的第一寄存器索引;
创建单元203,用于基于面向对象程序设计语言C++,创建与所述第一纹理对应的ID3D11Texture2D类型的第二纹理,创建所述第二纹理对应的纹理视图;
绑定单元203,用于基于所述第一纹理的寄存器索引与所述纹理视图,绑定所述第一纹理与所述第二纹理。
在一种可选实现方式中,所述确定单元具体用于:
基于所述第一名称,调用索引获取方法,从纹理索引数据库中确定与所述第一名称对应的第一寄存器索引。
在一种可选实现方式中,所述装置还包括纹理索引数据库建立单元,所述纹理索引数据库建立单元具体用于:
在所述基于纹理名称与寄存器索引间的对应关系,确定所述第一纹理对应的第一寄存器索引之前,调用所述Direct3D11软件平台的编译方法,对所述着色器脚本进行编译,获得ID3DBlob类型的第一接口,所述第一接口中保存有编译后的所述着色器脚本的字节码;
调用所述第一接口的获取指定缓冲区内容方法,获得所述字节码,以及调用所述第一接口的获取指定缓冲区大小方法,获得所述字节码的字节长度;
基于所述字节码与所述字节长度,调用所述Direct3D11软件平台的返回方法,获得ID3D11ShaderReflection类型的第二接口,调用所述第二接口的获取描述信息方法,获得D3D11_SHADER_DESC类型的第一结构;
针对所第一结构中的BoundResources成员,循环调用所述第二接口的获得资源集合描述信息方法,获得D3D11_SHADER_INPUT_BIND_DESC类型的第二结构,在确定所述第二结构描述的是基于HLSL的脚本纹理时,确定所述第二结构的Name成员为Texture2D类型的纹理的名称,以及确定所述第二结构的BindPoint成员为与所述Texture2D类型的纹理对应的在所述着色器脚本中所使用的寄存器索引,将所述第二结构对应的Name成员和BindPoint成员以键值对的形式保存到所述纹理索引数据库中。
在一种可选实现方式中,所述绑定单元具体用于:
调用着色器资源设置方法,绑定所述第一寄存器索引对应的所述第一纹理与所述纹理视图。
请参见图3,本发明的第三实施例提供了一种纹理图像绑定装置,该实施例的装置包括:处理器301、存储器302以及存储在所述存储器中并可在所述处理器上运行的计算机程序,例如第一实施例中纹理图像绑定方法对应的程序。所述处理器执行所述计算机程序时实现上述第一实施例中各路径检测中的步骤。或者,所述处理器执行所述计算机程序时实现上述第二实施例的装置中各模块/单元的功能。
示例性的,所述计算机程序可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器中,并由所述处理器执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序在所述计算机装置中的执行过程。例如,所述计算机程序可以被分割成创建单元、调用单元、处理单元的功能,各单元具体功能如下:
确定单元,用于确定基于高阶着色器语言HLSL的着色器脚本中的Texture2D类型的第一纹理,获取所述第一纹理的名称,基于纹理名称与寄存器索引间的对应关系,确定所述第一纹理对应的第一寄存器索引;
创建单元,用于基于面向对象程序设计语言C++,创建与所述第一纹理对应的ID3D11Texture2D类型的第二纹理,创建所述第二纹理对应的纹理视图;
绑定单元,用于基于所述第一纹理的寄存器索引与所述纹理视图,绑定所述第一纹理与所述第二纹理。
所述装置可包括,但不仅限于,处理器、存储器。本领域技术人员可以理解,所述示意图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还具有以下功能:
基于所述第一名称,调用索引获取方法,从纹理索引数据库中确定与所述第一名称对应的第一寄存器索引。
进一步,该装置所包括的处理器301还具有以下功能:
在所述基于纹理名称与寄存器索引间的对应关系,确定所述第一纹理对应的第一寄存器索引之前,调用所述Direct3D11软件平台的编译方法,对所述着色器脚本进行编译,获得ID3DBlob类型的第一接口,所述第一接口中保存有编译后的所述着色器脚本的字节码;
调用所述第一接口的获取指定缓冲区内容方法,获得所述字节码,以及调用所述第一接口的获取指定缓冲区大小方法,获得所述字节码的字节长度;
基于所述字节码与所述字节长度,调用所述Direct3D11软件平台的返回方法,获得ID3D11ShaderReflection类型的第二接口,调用所述第二接口的获取描述信息方法,获得D3D11_SHADER_DESC类型的第一结构;
针对所第一结构中的BoundResources成员,循环调用所述第二接口的获得资源集合描述信息方法,获得D3D11_SHADER_INPUT_BIND_DESC类型的第二结构,在确定所述第二结构描述的是基于HLSL的脚本纹理时,确定所述第二结构的Name成员为Texture2D类型的纹理的名称,以及确定所述第二结构的BindPoint成员为与所述Texture2D类型的纹理对应的在所述着色器脚本中所使用的寄存器索引,将所述第二结构对应的Name成员和BindPoint成员以键值对的形式保存到所述纹理索引数据库中。
进一步,该装置所包括的处理器301还具有以下功能:
基于所述第一纹理的寄存器索引与所述纹理视图,调用着色器资源设置方法,绑定所述第一纹理与所述第二纹理。
本发明第四实施例提供了一种计算机可读存储介质,其上存储有计算机程序,本发明第二实施例中的所述纹理图像绑定装置集成的功能单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述第一实施例的纹理图像绑定方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (10)

1.一种纹理图像绑定方法,应用于Direct3D11软件平台,其特征在于,包括:
确定基于高阶着色器语言HLSL的着色器脚本中的Texture2D类型的第一纹理,获取所述第一纹理的名称,基于纹理名称与寄存器索引间的对应关系,确定所述第一纹理对应的第一寄存器索引;
基于面向对象程序设计语言C++,创建与所述第一纹理对应的ID3D11Texture2D类型的第二纹理,创建所述第二纹理对应的纹理视图;
基于所述第一纹理的寄存器索引与所述纹理视图,绑定所述第一纹理与所述第二纹理。
2.如权利要求1所述的方法,其特征在于,所述基于纹理名称与寄存器索引间的对应关系,确定所述第一纹理对应的第一寄存器索引,包括:
基于所述第一纹理的名称,调用索引获取方法,从纹理索引数据库中确定与所述第一纹理的名称对应的第一寄存器索引。
3.如权利要求2所述的方法,其特征在于,在所述基于纹理名称与寄存器索引间的对应关系,确定所述第一纹理对应的第一寄存器索引之前,所述方法还包括:
调用所述Direct3D11软件平台的编译方法,对所述着色器脚本进行编译,获得ID3DBlob类型的第一接口,所述第一接口中保存有编译后的所述着色器脚本的字节码;
调用所述第一接口的获取指定缓冲区内容方法,获得所述字节码,以及调用所述第一接口的获取指定缓冲区大小方法,获得所述字节码的字节长度;
基于所述字节码与所述字节长度,调用所述Direct3D11软件平台的返回方法,获得ID3D11ShaderReflection类型的第二接口,调用所述第二接口的获取描述信息方法,获得D3D11_SHADER_DESC类型的第一结构;
针对所第一结构中的BoundResources成员,循环调用所述第二接口的获得资源集合描述信息方法,获得D3D11_SHADER_INPUT_BIND_DESC类型的第二结构,在确定所述第二结构描述的是基于HLSL的脚本纹理时,确定所述第二结构的Name成员为Texture2D类型的纹理的名称,以及确定所述第二结构的BindPoint成员为与所述Texture2D类型的纹理对应的在所述着色器脚本中所使用的寄存器索引,将所述第二结构对应的Name成员和BindPoint成员以键值对的形式保存到所述纹理索引数据库中。
4.如权利要求2所述的方法,其特征在于,所述基于所述第一纹理的寄存器索引与所述纹理视图,绑定所述第一纹理与所述第二纹理,包括:
基于所述第一纹理的寄存器索引与所述纹理视图,调用着色器资源设置方法,绑定所述第一纹理与所述第二纹理。
5.一种纹理图像绑定装置,应用于Direct3D11软件平台,其特征在于,包括:
确定单元,用于确定基于高阶着色器语言HLSL的着色器脚本中的Texture2D类型的第一纹理,获取所述第一纹理的名称,基于纹理名称与寄存器索引间的对应关系,确定所述第一纹理对应的第一寄存器索引;
创建单元,用于基于面向对象程序设计语言C++,创建与所述第一纹理对应的ID3D11Texture2D类型的第二纹理,创建所述第二纹理对应的纹理视图;
绑定单元,用于基于所述第一纹理的寄存器索引与所述纹理视图,绑定所述第一纹理与所述第二纹理。
6.如权利要求5所述的装置,其特征在于,所述确定单元具体用于:
基于所述第一纹理的名称,调用索引获取方法,从纹理索引数据库中确定与所述第一纹理的名称对应的第一寄存器索引。
7.如权利要求6所述的装置,其特征在于,所述装置还包括纹理索引数据库建立单元,所述纹理索引数据库建立单元具体用于:
在所述基于纹理名称与寄存器索引间的对应关系,确定所述第一纹理对应的第一寄存器索引之前,调用所述Direct3D11软件平台的编译方法,对所述着色器脚本进行编译,获得ID3DBlob类型的第一接口,所述第一接口中保存有编译后的所述着色器脚本的字节码;
调用所述第一接口的获取指定缓冲区内容方法,获得所述字节码,以及调用所述第一接口的获取指定缓冲区大小方法,获得所述字节码的字节长度;
基于所述字节码与所述字节长度,调用所述Direct3D11软件平台的返回方法,获得ID3D11ShaderReflection类型的第二接口,调用所述第二接口的获取描述信息方法,获得D3D11_SHADER_DESC类型的第一结构;
针对所第一结构中的BoundResources成员,循环调用所述第二接口的获得资源集合描述信息方法,获得D3D11_SHADER_INPUT_BIND_DESC类型的第二结构,在确定所述第二结构描述的是基于HLSL的脚本纹理时,确定所述第二结构的Name成员为Texture2D类型的纹理的名称,以及确定所述第二结构的BindPoint成员为与所述Texture2D类型的纹理对应的在所述着色器脚本中所使用的寄存器索引,将所述第二结构对应的Name成员和BindPoint成员以键值对的形式保存到所述纹理索引数据库中。
8.如权利要求6所述的装置,其特征在于,所述绑定单元具体用于:
调用着色器资源设置方法,绑定所述第一寄存器索引对应的所述第一纹理与所述纹理视图。
9.一种纹理图像绑定装置,应用于Direct3D11软件平台,其特征在于,所述纹理图像绑定装置包括处理器,所述处理器用于执行存储器中存储的计算机程序时实现如权利要求1-4中任一项所述的纹理图像绑定方法的步骤。
10.一种可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-4中任一项所述的纹理图像绑定方法的步骤。
CN201810692145.0A 2018-06-29 2018-06-29 一种纹理图像绑定方法、装置及可读存储介质 Active CN108958718B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810692145.0A CN108958718B (zh) 2018-06-29 2018-06-29 一种纹理图像绑定方法、装置及可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810692145.0A CN108958718B (zh) 2018-06-29 2018-06-29 一种纹理图像绑定方法、装置及可读存储介质

Publications (2)

Publication Number Publication Date
CN108958718A CN108958718A (zh) 2018-12-07
CN108958718B true CN108958718B (zh) 2021-11-26

Family

ID=64487994

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810692145.0A Active CN108958718B (zh) 2018-06-29 2018-06-29 一种纹理图像绑定方法、装置及可读存储介质

Country Status (1)

Country Link
CN (1) CN108958718B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7385608B1 (en) * 2003-12-31 2008-06-10 3Dlabs Inc. Ltd. State tracking methodology
CN106228581A (zh) * 2016-08-01 2016-12-14 武汉斗鱼网络科技有限公司 通过gpu将像素格式由argb转换为nv12的方法及系统
CN106354888A (zh) * 2016-10-21 2017-01-25 重庆虚拟实境科技有限公司 一种游戏引擎采集卡视频采集方法
CN107480305A (zh) * 2017-09-18 2017-12-15 浙江科澜信息技术有限公司 一种纹理信息加载方法及系统

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7385608B1 (en) * 2003-12-31 2008-06-10 3Dlabs Inc. Ltd. State tracking methodology
CN106228581A (zh) * 2016-08-01 2016-12-14 武汉斗鱼网络科技有限公司 通过gpu将像素格式由argb转换为nv12的方法及系统
CN106354888A (zh) * 2016-10-21 2017-01-25 重庆虚拟实境科技有限公司 一种游戏引擎采集卡视频采集方法
CN107480305A (zh) * 2017-09-18 2017-12-15 浙江科澜信息技术有限公司 一种纹理信息加载方法及系统

Also Published As

Publication number Publication date
CN108958718A (zh) 2018-12-07

Similar Documents

Publication Publication Date Title
US10755376B2 (en) Systems and methods for using an openGL API with a Vulkan graphics driver
CN109889875B (zh) 通信方法、装置、终端设备和计算机可读介质
CN109347898B (zh) 场景信息的发送方法、显示方法以及服务器和移动终端
CN107729246B (zh) 针对目标应用的辅助测试方法、装置、设备及存储介质
KR20130122657A (ko) 범용 그래픽스 프로세싱 유닛에서의 컴퓨테이션 리소스 파이프라이닝
CN112230923A (zh) 用户界面渲染方法、用户界面渲染装置及服务器
CN108345458B (zh) 一种静态编译语言与脚本语言的调用方法及系统
CN114721777A (zh) 用于图形渲染的方法及装置
CN114064172A (zh) 数据渲染方法及装置
US9348625B2 (en) Application access to native and bundled libraries
CN108958718B (zh) 一种纹理图像绑定方法、装置及可读存储介质
CN111143240B (zh) 图像存储方法、系统及终端设备
CN116962813A (zh) 一种yuv数据渲染系统及方法、电子设备和存储介质
CN111949510B (zh) 测试处理方法、装置、电子设备及可读存储介质
CN110069195B (zh) 图像拖拽变形方法和装置
CN111427550A (zh) 一种对象创建方法、终端装置及存储介质
CN108830920B (zh) 一种创建常量缓冲区方法、装置及可读存储介质
CN108845961B (zh) 一种创建顶点缓冲区方法、装置及可读存储介质
US10055201B2 (en) Development of multiple classes of user interfaces for a software application
CN116166547A (zh) 代码变更范围分析方法、装置、设备、存储介质
CN111796812A (zh) 图像渲染的方法、装置、电子设备及计算机可读存储介质
US20150220425A1 (en) Test context generation
CN113590221B (zh) 着色器变体数量的检测方法、装置、电子设备及存储介质
CN113885996A (zh) 用户界面的生成方法及装置
CN110033406B (zh) 用于处理图像的方法和装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant