一种Direct3D11在WIN7系统下显示R5G6B5格式纹理图像的方法与装置的制造方法

文档序号:9687230阅读:802来源:国知局
一种Direct3D11在WIN7系统下显示R5G6B5格式纹理图像的方法与装置的制造方法
【专利说明】
法与装置
技术领域
[0001 ]本发明属于图形图像显示技术领域,更具体地,涉及一种Direct3Dll在WIN7系统下显示R5G6B5格式纹理图像的方法与装置。
【背景技术】
[0002]图像的文件格式是图像为了存储信息而使用的对信息的特殊编码方式,它存储在磁盘中或者内存中,但是并不能被图形处理器(Graphics Processing Unit, GPU)所识别,因为以向量计算见长的GHJ对于这些复杂的计算无能为力。图像的格式纹理是能被GPU所识别的像素格式,能被快速寻址并采样。常用的图像文件格式有BMP,TGA,JPG,GIF,PNG等;常用的格式纹理有R5G6B5,A4R4G4B4,A1R5G5B5,R8G8B8,B8G8R8A8等。当这些文件格式被游戏读入后,需要经过中央处理器(Central Processing Unit,CPU)解压成R5G6B5、A4R4G4B4、A1R5G5B5、R8G8B8、B8G8R8A8等像素格式,再传送到GPU端进行使用。其中R5G6B5、A4R4G4B4、A1R5G5B5、R8G8B8、B8G8R8A8均为GUP中可显示的纹理格式。
[0003]Direct3D是由微软公司所制定的3D规格界面,与Windows 95和Windows NT操作系统兼容性好,可绕过图形显示接口(Graphics Device Interface,⑶I)直接进行支持该应用程序接口(Applicat1n Programming Interface ,ΑΡΙ)的各种硬件的底层操作,大大提高了游戏的运行速度。Direct3Dll在WIN7系统下无法直接利用GPU显示R5G6B5格式的纹理,至IJ 了 WIN8及以上系统中才可以直接利用GPU创建并显示R5G6B5格式的纹理。因此当前为了在WIN7系统下显示R5G6B5格式的纹理,通常是由CPU下发转换执行指令在内存中将R5G6B5格式的图像转换成B8G8R8A8格式的图像,然后在Direct3Dl 1中显示,这大大增加了 CPU的工作压力。

【发明内容】

[0004]针对现有技术的以上缺陷或改进需求,本发明提供了一种Direct3Dll在WIN7系统下显示R5G6B5格式纹理的方法与装置,通过将R5G6B5格式纹理图像输入到DXGI_F0RMAT_R8G8JJN0RM格式的纹理中,然后将DXGI_F0RMAT_R8G8_UN0RM格式的纹理中的像素值转化为DXGI_F0RMAT_B8G8R8A8_UN0RM 格式的纹理中的像素值,然后将 DXGI_F0RMAT_B8G8R8A8_UN0RM格式的纹理进行显示,从而实现了通过Direct3Dll在WIN7系统下显示R5G6B5格式纹理图像。
[0005]为了实现上述目的,本发明提供了一种Direct3Dll在WIN7系统下显示R5G6B5格式纹理图像的方法,包括如下步骤:
[0006](1)获取待显示的R5G6B5格式纹理图像的大小;
[0007](2)创建与上述待显示的R5G6B5格式纹理图像大小相同的DXGI_F0RMAT_R8G8_UN0RM格式的纹理;
[0008](3)将上述待显示的R5G6B5格式纹理图像输入到上述DXGI_F0RMAT_R8G8_UN0RM格式的纹理中;
[0009](4)将上述DXGI_F0RMAT_R8G8_UN0RM格式的纹理中各纹理坐标处的像素值转化为DXGI_F0RMAT_B8G8R8A8_UN0RM格式的纹理中对应纹理坐标处的像素值;
[0010](5)将上述DXGI_F0RMAT_B8G8R8A8_UN0RM格式的纹理进行显示。
[0011 ] 本发明的一个实施例中,所述步骤(4)中按照如下规则将DXGI_F0RMAT_R8G8_UN0RM格式的纹理中各纹理坐标处的像素值转化为DXGI_F0RMAT_B8G8R8A8_UN0RM格式的纹理中对应纹理坐标处的像素值:
[0012]DXGI_F0RMAT_B8G8R8A8_UN0RM格式纹理中的[R0-R4]对应DXGI_F0RMAT_R8G8_UN0RM格式纹理中的[B0-B4 ];
[0013]DXGI_F0RMAT_B8G8R8A8_UN0RM 格式纹理中的[B0-B7] = DXGI_F0RMAT_R8G8_UN0RM格式纹理中的([R0-R4 ] *8+ [R0-R2]);
[0014]DXGI_F0RMAT_B8G8R8A8_UN0RM 格式纹理中的[G0-G7] = DXGI_F0RMAT_R8G8_UN0RM格式纹理中的([G0-G2]*32+[R5-R7]*4);
[0015]DXGI_F0RMAT_B8G8R8A8_UN0RM 格式纹理中的[R0-R7] = DXGI_F0RMAT_R8G8_UN0RM格式纹理中的([G3-G7]*8+[G3-G5]);
[0016]DXGI_F0RMAT_B8G8R8A8_UN0RM 格式纹理中的[A0-A7] =255;
[0017]其中DXGI_F0RMAT_R8G8_UN0RM格式纹理图像中,每个像素点包括2个字节的数据,从左往右为从低字节到高字节,表示为[R0-R7][G0-G7],其中[R0-R7]表示每个像素点的红色部分,[G0-G7]表示每个像素点的绿色部分;
[0018]DXGI_F0RMAT_B8G8R8A8_UN0RM格式纹理图像中,每个像素包括4个字节的数据,从左往右为从低字节到高字节,表示为[B0-B7 ] [G0-G7] [R0-R7 ] [A0-A7],其中[B0-B7]表示每个像素点的蓝色部分,[G0-G7]表示每个像素点的绿色部分,[R0-R7]表示每个像素点的绿色部分,[A0-A7]表示每个像素点的透明度。
[0019]本发明的一个实施例中,所述步骤(4)中按照如下方式将DXGI_F0RMAT_R8G8_UN0RM格式的纹理中各纹理坐标处的像素值转化为DXGI_F0RMAT_B8G8R8A8_UN0RM格式的纹理中对应纹理坐标处的像素值:
[0020]r8 = bit(G8,3,7)*8+bit(bit(G8,3,7),0,2);
[0021]lg3 = bit(G8,0,2);
[0022]hg3 = bit(R8,5,7);
[0023]g8 = lg3*32+hg3*4;
[0024]b8 = bit(R8,0,4)*8+bit(bit(R8,0,4),0,2);
[0025]计算最终的B8G8R8A8的值为ARGB(b8,g8,r8,255)。
[0026]其中R8为DXGI_F0RMAT_R8G8_UN0RM格式纹理中的[R0-R7]; G8为DXGI_F0RMAT_R8G8_UN0RM格式纹理中的[G0-G7],bit (byte,start,end)函数为获取一个字节从start比特位到end比特位的值。
[0027]按照本发明的另一方面,还提供了一种Direct3Dll在WIN7系统下显示R5G6B5格式纹理图像的装置,其特征在于,包括图像大小获取模块、R8G8纹理生成模块、R5G6B5图像输入模块、B8G8R8A8纹理转换模块以及B8G8R8A8纹理显示模块,其中:
[0028]所述图像大小获取模块,用于获取待显示的R5G6B5格式纹理图像的大小;
[0029]所述R8G8纹理生成模块,用于创建与上述待显示的R5G6B5格式纹理图像大小相同的 DXGI_F0RMAT_R8G8_UN0RM 格式的纹理;
[0030]所述R5G6B5图像输入模块,用于将上述待显示的R5G6B5格式纹理图像输入到上述DXGI_F0RMAT_R8G8_UN0RM格式的纹理中;
[0031 ] 所述B8G8R8A8纹理转换模块,用于将上述DXGI_F0RMAT_R8G8_UN0RM格式的纹理中各纹理坐标处的像素值转化为DXGI_F0RMAT_B8G8R8A8_UN0RM格式的纹理中对应纹理坐标处的像素值;
[0032]所述B8G8R8A8纹理显示模块,用于将上述DXGI_F0RMAT_B8G8R8A8_UN0RM格式的纹理进行显示。
[0033]本发明的一个实施例中,所述B8G8R8A8纹理显示模块按照如下规则将DXGI_F0RMAT_R8G8_UN0RM格式的纹理中各纹理坐标处的像素值转化为DXGI_F0RMAT_B8G8R8A8_UN0RM格式的纹理中对应纹理坐标处的像素值:
[0034]DXGI_F0RMAT_B8G8R8A8_UN0RM格式纹理中的[R0-R4 ]对应DXGI_F0RMAT_R8G8_UN0RM格式纹理中的[B0-B4 ];
[0035]DXGI_F0RMAT_B8G8R8A8_UN0RM 格式纹理中的[B0-B7] = DXGI_F0RMAT_R8G8_UN0RM格式纹理中的([R0-R4 ] *8+ [R0-R2]);
[0036]DXGI_F0RMAT_B8G8R8A8_UN0RM 格式纹理中的[G0-G7] = DXGI_F0RMAT_R8G8_UN0RM格式纹理中的([G0-G2]*32+[R5-R7]*4);
[0037]DXGI_F0RMAT_B8G8R8A8_UN0RM 格式纹理中的[R0-R7] = DXGI_F0RMAT_R8G8_UN0RM格式纹理中的([G3-G7]*8+[G3-G5]);
[0038]DXGI_F0RMAT_B8G8R8A8_UN0RM 格式纹理中的[A0-A7] =255;
[0039]其中DXGI_F0RMAT_R8G8_UN0RM格式纹理图像中,每个像素点包括2个字节的数据,从左往右为从低字节到高字节,表示为[R0-R7][G0-G7],其中[R0-R7]表示每个
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1