发明内容
本发明实施例提供一种图像渲染方法、装置、设备及存储介质,以实现更加准确且流畅地进行图像渲染,从而使得应用程序可以适用于更多的非移动终端,提升应用程序的用户体验。
第一方面,本发明实施例提供了一种图像渲染方法,包括:
获取当前终端设备的显卡信息,并依据所述显卡信息确定与所述当前终端设备对应的适配图形库,所述适配图形库包括开放图形库OpenGL或嵌入式开放图形库OpenGLES;
依据所述适配图形库的图形库标识,确定与所述适配图形库对应的预设着色器脚本源代码,并依据待渲染数据,调用所述预设着色器脚本源代码,获得目标渲染图像;
基于所述适配图形库,输出所述目标渲染图像,以完成图像渲染。
可选地,所述获取当前终端设备的显卡信息,并依据所述显卡信息确定与所述当前终端设备对应的适配图形库包括:
获取所述当前终端设备的显卡名称及显卡驱动版本;
依据所述显卡名称和所述显卡驱动版本,遍历显卡与图形库之间的映射关系表,确定所述当前终端设备对应的适配图形库。
可选地,在所述嵌入式开放图形库OpenGLES对应的预设着色器脚本源代码中的起始位置包括数据类型精度限定语句,以使所述预设着色器脚本源代码被正确编译。
可选地,在所述依据所述适配图形库的图形库标识,确定与所述适配图形库对应的预设着色器脚本源代码之前,还包括:
以嵌入式开放图形库标识AA_UseOpenGLES为函数输入参数,调用跨平台C++图形用户界面应用程序开发框架QT中应用程序类QApplication的属性检测静态函数testAttribute,获得函数返回值;
依据所述函数返回值,确定所述适配图形库的图形库标识。
可选地,所述依据待渲染数据,调用所述预设着色器脚本源代码,获得目标渲染图像包括:
依据所述待渲染数据,调用所述预设着色器脚本源代码中的纹理创建函数,创建所述待渲染数据对应的纹理;
基于所述纹理,调用所述预设着色器脚本源代码中的纹理采样函数,获得所述目标渲染图像。
进一步地,所述依据所述待渲染数据,调用所述预设着色器脚本源代码中的纹理创建函数,创建所述待渲染数据对应的纹理包括:
依据所述待渲染数据,以GL_LUMIANCE像素格式为函数输入参数,调用所述预设着色器脚本源代码中的纹理创建函数,创建所述待渲染数据对应的纹理。
进一步地,所述基于所述纹理,调用所述预设着色器脚本源代码中的纹理采样函数,获得所述目标渲染图像包括:
调用所述适配图形库中的索引号获取函数,获取所述纹理的纹理索引号;
调用所述适配图形库中的纹理绑定函数,将所述纹理绑定至显卡中与所述纹理索引号对应的纹理单元;
以所述纹理单元为函数输入参数,调用所述纹理采样函数,获得所述目标渲染图像。
第二方面,本发明实施例还提供了一种图像渲染装置,该装置包括:
适配图形库确定模块,用于获取当前终端设备的显卡信息,并依据所述显卡信息确定与所述当前终端设备对应的适配图形库,所述适配图形库包括开放图形库OpenGL或嵌入式开放图形库OpenGLES;
目标渲染图像获取模块,用于依据所述适配图形库的图形库标识,确定与所述适配图形库对应的预设着色器脚本源代码,并依据待渲染数据,调用所述预设着色器脚本源代码,获得目标渲染图像;
图像渲染模块,基于所述适配图形库,输出所述目标渲染图像,以完成图像渲染。
可选地,所述适配图形库确定模块具体用于:
获取所述当前终端设备的显卡名称及显卡驱动版本;
依据所述显卡名称和所述显卡驱动版本,遍历显卡与图形库之间的映射关系表,确定所述当前终端设备对应的适配图形库。
可选地,在所述嵌入式开放图形库OpenGLES对应的预设着色器脚本源代码中的起始位置包括数据类型精度限定语句,以使所述预设着色器脚本源代码被正确编译。
可选地,在上述装置的基础上,该装置还包括:
图形库标识确定模块,用于在所述依据所述适配图形库的图形库标识,确定与所述适配图形库对应的预设着色器脚本源代码之前,以嵌入式开放图形库标识AA_UseOpenGLES为函数输入参数,调用跨平台C++图形用户界面应用程序开发框架QT中应用程序类QApplication的属性检测静态函数testAttribute,获得函数返回值;
依据所述函数返回值,确定所述适配图形库的图形库标识。
可选地,所述目标渲染图像获取模块包括:
纹理创建子模块,用于依据所述待渲染数据,调用所述预设着色器脚本源代码中的纹理创建函数,创建所述待渲染数据对应的纹理;
目标渲染图像获取子模块,用于基于所述纹理,调用所述预设着色器脚本源代码中的纹理采样函数,获得所述目标渲染图像。
进一步地,所述纹理创建子模块具体用于:
依据所述待渲染数据,以GL_LUMIANCE像素格式为函数输入参数,调用所述预设着色器脚本源代码中的纹理创建函数,创建所述待渲染数据对应的纹理。
进一步地,所述目标渲染图像获取子模块具体用于:
调用所述适配图形库中的索引号获取函数,获取所述纹理的纹理索引号;
调用所述适配图形库中的纹理绑定函数,将所述纹理绑定至显卡中与所述纹理索引号对应的纹理单元;
以所述纹理单元为函数输入参数,调用所述纹理采样函数,获得所述目标渲染图像。
第三方面,本发明实施例还提供了一种设备,该设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明任意实施例所提供的图像渲染方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现本发明任意实施例所提供的图像渲染方法。
本发明实施例通过依据当前终端设备的显卡信息确定当前终端设备对应的适配图形库为开放图形库OpenGL或嵌入式开放图形库OpenGLES,解决了老旧显卡对OpenGL的支持性差而导致的图像渲染应用程序运行错误的问题,能够为当前终端设备提供合适的图形渲染工具,从而使得图像渲染应用程序在配置有老旧显卡的非移动终端上正常运行,扩大了应用程序可运行平台的范围。通过依据所述适配图形库的图形库标识,确定与所述适配图形库对应的预设着色器脚本源代码,并依据待渲染数据,调用所述预设着色器脚本源代码,获得目标渲染图像,能够为应用程序的运行提供合适的着色器脚本源代码,使得应用程序正确运行,进而获得更加准确的目标渲染图像。通过基于所述适配图形库,输出所述目标渲染图像,以完成图像渲染,能够实现更加流畅地进行图像渲染,从而提升用户体验。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
本实施例提供的图像渲染方法可适用于为非移动终端的终端设备开发图像渲染应用程序的情况。该方法可以由图像渲染装置来执行,该装置可以由软件和/或硬件的方式实现,该装置可以集成在支持OpenGL的设备中,例如台式电脑或服务器等。参见图1,本实施例的方法具体包括如下步骤:
S110、获取当前终端设备的显卡信息,并依据显卡信息确定与当前终端设备对应的适配图形库,适配图形库包括开放图形库OpenGL或嵌入式开放图形库OpenGLES。
其中,当前终端设备是指当前正在运行图像渲染应用程序的客户端,例如可以是个人计算机终端(PC终端)或服务器等。显卡信息是指当前终端设备中安装的显卡的相关信息,其用于表征显卡性能,例如可以是供应商名称、显卡名称、显卡驱动名称及显卡驱动版本等。适配图形库是指与当前终端设备的显卡性能相匹配的图形库,其用于开发图形用户界面程序和/或图像渲染程序等,例如可以是开放图形库OpenGL或嵌入式开放图形库(OpenGL for Embedded Systems,OpenGLES)。OpenGL是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形API,它用于二维图像或三维图像渲染,是一个功能强大,调用方便的底层图形库。OpenGLES是OpenGL三维图形API的子集,针对手机、PDA和游戏主机等嵌入式设备而设计,其是从OpenGL裁剪定制而来的,去除了图元的定点定义函数glBegin/glEnd,四边形(GL_QUADS)、多边形(GL_POLYGONS)等复杂图元等许多非绝对必要的特性。
具体地,通常在非嵌入式设备/非移动终端的终端设备中进行图像渲染时,采用的图形渲染工具为开放图形库OpenGL。但是,在一些非移动终端的终端设备中,其显卡性能较差,无法为OpenGL提供良好的硬件运行支持,故在这些非移动终端的终端设备中,图像渲染程序运行效果欠佳。
考虑到嵌入式开放图形库OpenGLES适用于嵌入式设备/移动终端,其对显卡性能要求低于OpenGL的显卡性能要求,尤其是OpenGLES中的浏览器上的WebGL环境(AlmostNative Graphic Layer Engine,ANGLE),其可以实现大部分的OpenGL ES 2.0API,且不要求更高版本的OpenGL驱动程序的支持。故为了提高图像渲染程序兼容性,使其运行于更多的非移动终端平台中,在开发非移动终端的图像渲染程序时,同时启用了两种图形库,即开放图形库OpenGL和嵌入式开放图形库OpenGLES,以便程序运行时,能够根据程序安装平台(当前终端设备)的硬件情况,自动选择更加合适的图形库进行图像渲染。比如,显卡性能较好时,可以选择OpenGL作为当前终端设备的适配图形库,而当显卡性能较差时,则选择OpenGLES作为当前终端设备的适配图形库。
具体实施时,图像渲染应用程序自动获取当前终端设备的显卡信息,并将该显卡信息与不同图形库对应的适配显卡信息进行比较,例如将当前终端设备的显卡信息分别与OpenGL的适配显卡信息和OpenGLES的适配显卡信息进行比较,从而确定出与当前终端设备相匹配的图形库,即适配图形库。
示例性地,获取当前终端设备的显卡信息,并依据显卡信息确定与当前终端设备对应的适配图形库包括:获取当前终端设备的显卡名称及显卡驱动版本;依据显卡名称和显卡驱动版本,遍历显卡与图形库之间的映射关系表,确定当前终端设备对应的适配图形库。
其中,显卡与图形库之间的映射关系表是指预先建立的,能够表征不同的显卡与不同的图形库之间对应关系的表格,其内至少包含显卡名称、显卡驱动版本号及匹配的图形库标识。这里,图形库标识是指能够区分不同图形库的标识,其可以是诸如数字、字母、符号或上述至少两种组合的自定义标识号,也可以是图形库的名称简称或全称等。
具体地,图像渲染应用程序的主程序获取当前终端设备中安装的显卡的显卡名称及显卡驱动版本。之后,以该显卡名称及显卡驱动版本为查找索引,在显卡与图形库之间的映射关系表中,查找对应的图形库标识,从而确定出当前终端设备对应的适配图形库。
S120、依据适配图形库的图形库标识,确定与所述适配图形库对应的预设着色器脚本源代码,并依据待渲染数据,调用预设着色器脚本源代码,获得目标渲染图像。
其中,预设着色器脚本源代码是指预先编写的,与适配图形库对应的着色器脚本源代码,其是按照适配图形库编程规则编写的,用于图像渲染应用程序中图像绘制子程序的脚本源代码。待渲染数据是指用于进行图像渲染的数据,例如可以是图片、解码后的视频帧图像数据或表征渲染颜色的颜色数组等。目标渲染图像是指用于最终输出的渲染图像。
具体地,图像渲染应用程序中的图像绘制子程序根据适配图形库的图形库标识,确定出匹配的预设着色器脚本源代码,并且调用源代码设置函数glShaderSource,设置着色器脚本源代码,也可理解为将上述预设着色器脚本源代码绑定至着色器对象。然后调用编译函数glCompileShader编译预设着色器脚本源代码。之后,以待渲染数据为基础输入数据,运行选定的预设着色器脚本源代码,以对待渲染数据进行处理,并获得目标渲染图像。
示例性地,依据待渲染数据,调用预设着色器脚本源代码,获得目标渲染图像包括:依据待渲染数据,调用预设着色器脚本源代码中的纹理创建函数,创建待渲染数据对应的纹理;基于纹理,调用预设着色器脚本源代码中的纹理采样函数,获得目标渲染图像。
其中,纹理是表示物体表面细节的一幅或几幅二维图形,其是一个用于保存渲染图像的颜色元素值的OpenGL/OpenGLES缓存。
具体地,图像绘制子程序在依据待渲染数据进行数据处理之前,先获取待渲染数据对应的图像宽度与图像高度。获取图像高度和图像宽度的方式,与待渲染数据的具体数据类型相关,比如待渲染数据为图片,那么可以通过读取图片的属性信息来获取;如果待渲染数据为解码后的图像数据,那么可以通过数据解码过程中的高度参数和宽度参数来获取;如果待渲染数据为颜色数组,那么可以通过数组属性来获取。
之后,以待渲染数据、图像宽度和图像高度为函数输入参数,调用预设着色器脚本源代码中的纹理创建函数glTexImage2D,来创建待渲染数据对应的纹理。获得纹理之后,调用预设着色器脚本源代码中的纹理采样函数texture,对上述获得的纹理进行采样,以确定目标渲染图像中每个像素对应的颜色,即纹理映射,获得目标渲染图像。
S130、基于适配图形库,输出目标渲染图像,以完成图像渲染。
具体地,调用适配图形库中的纹理绘制函数,输出目标渲染图像,以完成图像渲染。
本实施例的技术方案,通过依据当前终端设备的显卡信息确定当前终端设备对应的适配图形库为开放图形库OpenGL或嵌入式开放图形库OpenGLES,解决了老旧显卡对OpenGL的支持性差而导致的图像渲染应用程序运行错误的问题,能够为当前终端设备提供合适的图形渲染工具,从而使得图像渲染应用程序在配置有老旧显卡的非移动终端上正常运行,扩大了应用程序可运行平台的范围。通过依据适配图形库的图形库标识,确定与所述适配图形库对应的预设着色器脚本源代码,并依据待渲染数据,调用预设着色器脚本源代码,获得目标渲染图像,能够为应用程序的运行提供合适的着色器脚本源代码,使得应用程序正确运行,进而获得更加准确的目标渲染图像。通过基于适配图形库,输出目标渲染图像,以完成图像渲染,能够实现更加流畅地进行图像渲染,从而提升用户体验。
实施例二
本实施例在上述实施例一的基础上,增加了“确定适配图形库的图形库标识”的步骤。在此基础上,可以进一步对“依据待渲染数据,调用预设着色器脚本源代码中的纹理创建函数,创建待渲染数据对应的纹理”进行优化。在上述基础上,还可以进一步对“基于纹理,调用预设着色器脚本源代码中的纹理采样函数,获得目标渲染图像”进行优化。其中与上述各实施例相同或相应的术语的解释在此不再赘述。本实施例中以基于跨平台C++图形用户界面应用程序开发框架QT进行图像渲染应用程序的开发为例进行说明。参见图2,本实施例提供的图像渲染方法包括:
S210、获取当前终端设备的显卡信息,并依据显卡信息确定与当前终端设备对应的适配图形库,适配图形库包括开放图形库OpenGL及嵌入式开放图形库OpenGLES。
S220、以嵌入式开放图形库标识AA_UseOpenGLES为函数输入参数,调用跨平台C++图形用户界面应用程序开发框架QT中应用程序类QApplication的属性检测静态函数testAttribute,获得函数返回值。
具体地,由于图像渲染应用程序包含主程序及图像绘制子程序,两者为相对独立的程序段,故在主程序中依据当前终端设备的显卡信息确定的适配图形库信息,在子程序中无法直接获知,需要在子程序内部进行适配图形库信息的获取。具体实施时,以嵌入式开放图形库标识AA_UseOpenGLES为函数输入参数,调用跨平台C++图形用户界面应用程序开发框架QT中应用程序类QApplication的属性检测静态函数testAttribute,获得函数返回值,以获取当前正在使用的图形库标识,即主程序确定的适配图形库的图形库标识。
S230、依据函数返回值,确定适配图形库的图形库标识。
具体地,如果上述函数返回值为true,那么表明当前终端设备中正在使用的适配图形库为OpenGLES,则图形库标识为OpenGLES。反之,如果上述函数返回值为false,那么表明当前终端设备中正在使用的适配图形库为OpenGL,则图形库标识为OpenGL。
S240、依据适配图形库的图形库标识,确定与所述适配图形库对应的预设着色器脚本源代码,其中,在嵌入式开放图形库OpenGLES对应的预设着色器脚本源代码中的起始位置包括数据类型精度限定语句,以使预设着色器脚本源代码被正确编译。
具体地,不同图形库具有不同的编程规则,即便OpenGLES为OpenGL的子集,两者对应的编程规则也存在少许差异。正是基于这些差异的存在,本发明实施例中设置了预设着色器脚本源代码,分别为开图形库OpenGL对应的预设着色器脚本源代码,及嵌入式开放图形库OpenGLES对应的预设着色器脚本源代码,以便根据图形库标识选择相应的预设着色器脚本源代码,保证程序的正确编译及执行。
其中,开放图形库OpenGL对应的预设着色器脚本源代码中的起始位置包括着色器编程语言GLSL的版本声明语句,例如“#version 110”,其表明GLSL要使用的着色器版本为110,对应的OpenGL版本是2.0版本。
嵌入式开放图形库OpenGLES对应的预设着色器脚本源代码中的起始位置包括数据类型精度限定语句,例如“precision high/low/medium float”,其用于指定float型数据的精度。
S250、依据待渲染数据,以GL_LUMIANCE像素格式为函数输入参数,调用预设着色器脚本源代码中的纹理创建函数,创建待渲染数据对应的纹理。
具体地,在进行纹理创建时,纹理创建函数的输入参数包含纹理创建的像素格式参数。该像素格式参数,在OpenGL和OpenGLES对应的编程规则中略有差异,比如OpenGL对应的像素格式参数可以为GL_RED,以表示创建的纹理图像只占用红色通道部分,每个像素只占用一个字节。但是,在OpenGLES中并不支持GL_RED像素格式,而是使用最基本的像素格式GL_LUMIANCE像素格式。
所以,为了解决两种图形库之间的编程代码兼容问题,除了上述分别设置两种预设着色器脚本源代码之外,本实施例中还将纹理创建函数中的像素格式统一设置为最基本的像素格式,即GL_LUMIANCE像素格式。那么,对于待渲染数据为视频帧数据解码后的YUV420图像而言,创建待渲染数据对应纹理的具体实现可以为:
yTexture=glTexImage2D(GL_LUMIANCE,VideoWidth,VideoHeight);
uTexture=glTexImage2D(GL_LUMIANCE,VideoWidth/2,VideoHeight/2);
vTexture=glTextImage2D(GL_LUMIANCE,VideoWidth/2,VideoHeight/2)。
yTexture、uTexture和vTexture分别为纹理Y、纹理U和纹理V,VideoWidth和VideoHeight分别为图像宽度和图像高度。
S260、调用适配图形库中的索引号获取函数,获取纹理的纹理索引号。
其中,纹理索引号是纹理在内存中存储的索引号,OpenGL/OpenGLES中的纹理是用无符号int型数索引来存储的,比如有10个纹理,可以分别用0-9这十个数字作为索引号,来表示每个纹理的存储地址。
具体地,图像绘制子程序中纹理的创建是在CPU内存中实现的,其创建的纹理也存储于CPU内存中,并且以无符号int型数索引来存储。而最终图像的渲染是在显卡GPU中实现的,故需要将CPU内存中的纹理传输至GPU显存中。纹理采样的实现过程就包含了纹理的传输过程。具体来说,图像绘制子程序调用适配图形库OpenGL/OpenGLES中的索引号获取函数glGetUniformLocation,获取CPU内存中纹理的纹理索引号。
对于纹理Y、纹理U和纹理V,其获取索引号的具体实现可以为:
a)获取纹理Y的纹理索引号
以纹理Y的纹理标识字符串yTexture为函数输入参数,调用glGetUniformLocation函数,获取到yTexture的纹理索引号。
b)获取纹理U的纹理索引号
以纹理U的纹理标识字符串uTexture为函数输入参数,调用glGetUniformLocation函数,获取到uTexture的纹理索引号。
c)获取纹理V的纹理索引号
以纹理V的纹理标识字符串vTexture为函数输入参数,调用glGetUniformLocation函数,获取到vTexture的纹理索引号。
S270、调用适配图形库中的纹理绑定函数,将纹理绑定至显卡中与纹理索引号对应的纹理单元。
其中,纹理单元是能够被着色器采样的纹理对象的引用,纹理采样器会通过该纹理单元对纹理进行采样。
具体地,在获取到纹理索引号之后,以纹理索引号为传输桥梁,调用纹理单元设置函数glActiveTexture,设置显存中与纹理索引号对应的纹理单元,并调用纹理绑定函数glUniform1i,将纹理索引号对应的纹理绑定至上述声明的纹理单元。此时,在CPU内存中创建的纹理,已经通过纹理索引号,绑定至GPU显存中对应的纹理单元中。
那么,上述3个纹理绑定的具体实现可以为:
d)绑定纹理Y至相应纹理单元Y
调用glActiveTexture(GL_TEXTURE0)函数,设置当前1号纹理单元,并调用glUniform1i(yTexture,0),将纹理Y与显卡着色器脚本中的纹理单元Y进行绑定。
e)绑定纹理U至相应纹理单元U
调用glActiveTexture(GL_TEXTURE1)函数,设置当前2号纹理单元,并调用glUniform1i(yTexture,1),将纹理U与显卡着色器脚本中的纹理单元U进行绑定。
f)绑定纹理V至相应纹理单元V
调用glActiveTexture(GL_TEXTURE2)函数,设置当前3号纹理单元,并调用glUniform1i(vTexture,2),将纹理V与显卡着色器脚本中的纹理单元V进行绑定。
S280、以纹理单元为函数输入参数,调用纹理采样函数,获得目标渲染图像。
具体地,以目标渲染图像为RGB格式为例,在上述纹理与对应的纹理单元绑定之后,分别以纹理单元Y、纹理单元U和纹理单元V,以及用于纹理采样寻址的纹理坐标o_texcoord为函数输入参数,调用纹理采样函数texture2D,对纹理单元对应的纹理进行采样,从纹理中获取目标渲染图像中每个像素上的颜色值,获得可渲染图像y、可渲染图像u和可渲染图像v,具体实现如下:
vec4y=texture2D(yTexture,o_texcoord);
vec4u=texture2D(uTexture,o_texcoord);
vec4v=texture2D(vTexture,o_texcoord)。
之后,可将可渲染图像y、可渲染图像u和可渲染图像v叠加,以获得RGB格式的目标渲染图像。
S290、基于适配图形库,输出目标渲染图像,以完成图像渲染。
本实施例的技术方案,通过预先设置两种预设着色器脚本源代码,以分别对应开放图形库OpenGL和嵌入式开放图形库OpenGLES,使得在选择了当前终端设备的适配图形库之后,能够直接配置相应的脚本源代码,而不必在已有代码中查找并修改两种图形库之间不兼容的代码语句,减少了两种图形库之间因语句不兼容而导致的程序运行出错率,提高了开发人员的开发效率,进而提高了在非移动终端同时启动两种图形库的可执行性。通过将纹理创建函数的像素格式输入参数统一为基本的GL_LUMIANCE像素格式,进一步减少了两种图形库之间的不兼容语句,从而进一步提高了开发人员开发效率,并进一步提高了在非移动终端同时启动两种图形库的可执行性。
以下是本发明实施例提供的图像渲染装置的实施例,该装置与上述各实施例的图像渲染方法属于同一个发明构思,在图像渲染装置的实施例中未详尽描述的细节内容,可以参考上述图像渲染方法的实施例。
实施例三
本实施例提供一种图像渲染装置,参见图3,该装置具体包括:
适配图形库确定模块310,用于获取当前终端设备的显卡信息,并依据显卡信息确定与当前终端设备对应的适配图形库,适配图形库包括开放图形库OpenGL或嵌入式开放图形库OpenGLES;
目标渲染图像获取模块320,用于依据适配图形库的图形库标识,确定与所述适配图形库对应的预设着色器脚本源代码,并依据待渲染数据,调用预设着色器脚本源代码,获得目标渲染图像;
图像渲染模块330,基于适配图形库,输出目标渲染图像,以完成图像渲染。
可选地,适配图形库确定模块310具体用于:
获取当前终端设备的显卡名称及显卡驱动版本;
依据显卡名称和显卡驱动版本,遍历显卡与图形库之间的映射关系表,确定当前终端设备对应的适配图形库。
可选地,在嵌入式开放图形库OpenGLES对应的预设着色器脚本源代码中的起始位置包括数据类型精度限定语句,以使预设着色器脚本源代码被正确编译。
可选地,在上述装置的基础上,该装置还包括:
图形库标识确定模块,用于在依据适配图形库的图形库标识,确定与适配图形库对应的预设着色器脚本源代码之前,以嵌入式开放图形库标识AA_UseOpenGLES为函数输入参数,调用跨平台C++图形用户界面应用程序开发框架QT中应用程序类QApplication的属性检测静态函数testAttribute,获得函数返回值;
依据函数返回值,确定适配图形库的图形库标识。
可选地,目标渲染图像获取模块320包括:
纹理创建子模块,用于依据待渲染数据,调用预设着色器脚本源代码中的纹理创建函数,创建待渲染数据对应的纹理;
目标渲染图像获取子模块,用于基于纹理,调用预设着色器脚本源代码中的纹理采样函数,获得目标渲染图像。
进一步地,纹理创建子模块具体用于:
依据待渲染数据,以GL_LUMIANCE像素格式为函数输入参数,调用预设着色器脚本源代码中的纹理创建函数,创建待渲染数据对应的纹理。
进一步地,目标渲染图像获取子模块具体用于:
调用适配图形库中的索引号获取函数,获取纹理的纹理索引号;
调用适配图形库中的纹理绑定函数,将纹理绑定至显卡中与纹理索引号对应的纹理单元;
以纹理单元为函数输入参数,调用纹理采样函数,获得目标渲染图像。
通过本发明实施例三的一种图像渲染装置,解决了老旧显卡对OpenGL的支持性差而导致的图像渲染应用程序运行错误的问题,能够为当前终端设备提供合适的图形渲染工具,从而使得图像渲染应用程序在配置有老旧显卡的非移动终端上正常运行,扩大应用程序可运行平台的范围,同时能够实现更加准确且流畅地进行图像渲染,提升用户体验。
本发明实施例所提供的图像渲染装置可执行本发明任意实施例所提供的图像渲染方法,具备执行方法相应的功能模块和有益效果。
值得注意的是,上述图像渲染装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
实施例四
参见图4,本实施例提供了一种设备400,其包括:一个或多个处理器420;存储装置410,用于存储一个或多个程序,当一个或多个程序被一个或多个处理器420执行,使得一个或多个处理器420实现本发明实施例所提供的图像渲染方法,包括:
获取当前终端设备的显卡信息,并依据显卡信息确定与当前终端设备对应的适配图形库,适配图形库包括开放图形库OpenGL或嵌入式开放图形库OpenGLES;
依据适配图形库的图形库标识,确定与所述适配图形库对应的预设着色器脚本源代码,并依据待渲染数据,调用预设着色器脚本源代码,获得目标渲染图像;
基于适配图形库,输出目标渲染图像,以完成图像渲染。
当然,本领域技术人员可以理解,处理器420还可VIS以实现本发明任意实施例所提供的图像渲染方法的技术方案。
图4显示的设备400仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图4所示,该设备400包括处理器420、存储装置410、输入装置430和输出装置440;设备中处理器420的数量可以是一个或多个,图4中以一个处理器420为例;设备中的处理器420、存储装置410、输入装置430和输出装置440可以通过总线或其他方式连接,图4中以通过总线450连接为例。
存储装置410作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的图像渲染方法对应的程序指令/模块(例如,图像渲染装置中的适配图形库确定模块、目标渲染图像获取模块和图像渲染模块)。
存储装置410可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储装置410可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储装置410可进一步包括相对于处理器420远程设置的存储器,这些远程存储器可以通过网络连接至设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置430可用于接收输入的数字或字符信息,以及产生与设备的用户设置以及功能控制有关的键信号输入。输出装置440可包括显示屏等显示设备。
实施例五
本实施例提供一种包含计算机可执行指令的存储介质,该计算机可执行指令在由计算机处理器执行时用于执行一种图像渲染方法,该方法包括:
获取当前终端设备的显卡信息,并依据显卡信息确定与当前终端设备对应的适配图形库,适配图形库包括开放图形库OpenGL或嵌入式开放图形库OpenGLES;
依据适配图形库的图形库标识,确定预设着色器脚本源代码,并依据待渲染数据,调用预设着色器脚本源代码,获得目标渲染图像;
基于适配图形库,输出目标渲染图像,以完成图像渲染。
当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上的方法操作,还可以执行本发明任意实施例所提供的图像渲染方法中的相关操作。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例提供的图像渲染方法。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。