一种OpenGLES2.0的uniform参数的配置方法及装置与流程

文档序号:24059313发布日期:2021-02-26 13:27阅读:202来源:国知局
一种OpenGLES2.0的uniform参数的配置方法及装置与流程
一种opengl es 2.0的uniform参数的配置方法及装置
技术领域
[0001]
本发明涉及计算机图形渲染技术领域,特别涉及一种opengl es 2.0的uniform参数的配置方法及装置。


背景技术:

[0002]
opengl es(opengl for embedded systems)是openg三维图形api的子集,针对手机、pda和游戏主机等嵌入式设备而设计。该api由khronos集团定义推广,khronos是一个图形软硬件行业协会,该协会主要关注图形和多媒体方面的开放标准。
[0003]
android上面的opengl es一共有三个版本,1.0,2.0以及现在的3.x(3.1,3.2),其中1.0是旧式的api,与桌面版本的opengl非常接近,但是却不太好用。
[0004]
从2.0开始,api有较大变化,具体的渲染相关使用专门的着色语言来表达,然而现有的opengl es 2.0下配置uniform参数通常需要逐个设置传递,在渲染中需要大量地调用uniform参数的接口,导致较大的性能开销。


技术实现要素:

[0005]
(一)要解决的技术问题
[0006]
为了解决现有技术的上述问题,本发明提供一种opengl es 2.0的uniform参数的配置方法及装置,能够有效的减少渲染中uniform参数的接口的调用,降低性能开销。
[0007]
(二)技术方案
[0008]
为了达到上述目的,本发明采用的一种技术方案为:
[0009]
一种opengl es 2.0的uniform参数的配置方法,包括步骤:
[0010]
s1、获取所有的uniform参数,并进行预处理;
[0011]
s2、对所有预处理后的uniform参数进行打包处理,得到一通用数组;
[0012]
s3、根据所述通用数组对opengl es 2.0的着色器中的uniform参数进行配置。
[0013]
为了达到上述目的,本发明采用的一种技术方案为:
[0014]
一种opengl es 2.0的uniform参数的配置装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现以下步骤:
[0015]
s1、获取所有的uniform参数,并进行预处理;
[0016]
s2、对所有预处理后的uniform参数进行打包处理,得到一通用数组;
[0017]
s3、根据所述通用数组对opengl es 2.0的着色器中的uniform参数进行配置。
[0018]
(三)有益效果
[0019]
本发明的有益效果在于:通过先获取所有的uniform参数,并进行预处理,再通过对所有预处理后的uniform参数进行打包处理,得到一通用数组;根据所述通用数组对opengl es 2.0的着色器中的uniform参数进行配置,渲染时只需要调用一次uniform参数的接口,大大的降低了接口调用所产生的性能开销。
附图说明
[0020]
图1为本发明实施例的opengl es 2.0的uniform参数的配置方法的流程图;
[0021]
图2为本发明实施例的opengl es 2.0的uniform参数的配置装置的结构示意图。
[0022]
【附图标记说明】
[0023]
1:opengl es 2.0的uniform参数的配置装置;
[0024]
2:存储器;
[0025]
3:处理器。
具体实施方式
[0026]
为了更好的解释本发明,以便于理解,下面结合附图,通过具体实施方式,对本发明作详细描述。
[0027]
实施例一
[0028]
请参照图1,一种opengl es 2.0的uniform参数的配置方法,包括步骤:
[0029]
s1、获取所有的uniform参数,并进行预处理;
[0030]
步骤s1具体为:
[0031]
获取所有的uniform参数,并根据uniform参数的类型进行相应的预处理。
[0032]
所述的uniform参数的类型包括四维数组、4x4矩阵、三维数组、3x3矩阵、二维数据、float和bool。
[0033]
所述的根据uniform参数的类型进行相应的预处理具体为:
[0034]
若uniform参数为四维数组类型,则直接记录相应的索引和类型;
[0035]
若uniform参数为4x4矩阵类型,则先拆分为4个四维数组,再记录相应的索引和类型;
[0036]
若uniform参数为三维数组类型,则先用预设值填充为四维数组后,再记录相应的索引和类型;
[0037]
若uniform参数为3x3矩阵类型,则先拆分为3个三维数组后,并分别用预设值填充为四维数组后,再记录相应的索引和类型;
[0038]
若uniform参数为二维数组类型,则先进行两两为一组,合成一个四维数组,再记录相应的索引和类型,若存在单个二维数组,则用预设值填充为四维数组;
[0039]
若uniform参数为float和bool类型,则先对用预设值填充的四维数组的预设值进行替换后,再记录相应的索引和类型,若替换后仍存在float和bool类型的uniform参数,则新建四维数组进行填充。
[0040]
s2、对所有预处理后的uniform参数进行打包处理,得到一通用数组;
[0041]
步骤s2具体为:
[0042]
获取预处理后的uniform参数的数量,并根据所述数量生成一数组模板;
[0043]
根据所述数组模板对所有预处理后的uniform参数进行打包处理,得到一通用数组。
[0044]
s3、根据所述通用数组对opengl es 2.0的着色器中的uniform参数进行配置。
[0045]
实施例二
[0046]
本实施例和实施例一的区别在于,本实施例将结合具体的应用场景进一步说明本
发明上述opengl es 2.0的uniform参数的配置方法是如何实现的:
[0047]
1、着色器(shader)预编译阶段
[0048]
(1)获取所有的uniform参数,并根据uniform参数的类型进行相应的重新排序和组合;
[0049]
(2)数据排序和组合
[0050]
若uniform参数为四维数组类型,则直接记录相应的索引和类型,索引是指后续在大的连续存储数组中的起始位置索引;
[0051]
若uniform参数为4x4矩阵类型,则先拆分为4个四维数组,再记录相应的索引和类型;
[0052]
若uniform参数为三维数组类型,则先用预设值填充为四维数组后,再记录相应的索引和类型;
[0053]
若uniform参数为3x3矩阵类型,则先拆分为3个三维数组后,并分别用预设值填充为四维数组后,再记录相应的索引和类型;
[0054]
若uniform参数为二维数组类型,则先进行两两为一组,合成一个四维数组,再记录相应的索引和类型,若存在单个二维数组,则用预设值填充为四维数组;
[0055]
若uniform参数为float和bool类型,则先对用预设值填充的四维数组的预设值进行替换后,再记录相应的索引和类型,若替换后仍存在float和bool类型的uniform参数,则新建四维数组进行填充。
[0056]
(3)替换shader定义
[0057]
获取预处理后的uniform参数的数量n,并根据所述数量生成一4xn大小的数组模板,去掉所有uniform参数的声明,替换为该数组模板;
[0058]
根据所述数组模板对所有预处理后的uniform参数进行打包处理得到一通用数组;
[0059]
具体地,可通过将所有的uniform参数声明变为临时变量的声明,临时变量的取值根据索引和类型从所述通用数组中获取,举例说明如下:
[0060]
原先的shader为
[0061]
uniform vec4 a;
[0062]
uniform vec4 b;
[0063]
uniform vec4 c;
[0064]
void main()
[0065]
{
[0066]
vec4 d=a+b+c;
[0067]
}
[0068]
经过预编译后,shader变为
[0069]
uniform vec4[3]e;
[0070]
void main()
[0071]
{
[0072]
vec4 a=e[0];
[0073]
vec4 b=e[1];
[0074]
vec4 c=e[2];
[0075]
vec4 d=a+b+c;
[0076]
}
[0077]
2、渲染阶段
[0078]
(1)渲染进行时,当设置uniform参数时,实际是设置了一个通用数组,因此,将原有的大量参数设置简化为只设置一次,大大减少了接口调用产生的开销;
[0079]
(2)设置时,需要根据预编译时记录的索引及类型数据来修改四维数组数组的值:
[0080]
当设置四维数组类型的uniform参数时,根据参数对应的索引,将值写入对应四维数组中;
[0081]
当设置4x4矩阵类型类型的uniform参数时,根据参数对应的索引,将值写入数组索引起始的4个四维数组中;
[0082]
当设置三维数组类型的uniform参数时,将值写入对应四维数组的前三位中;
[0083]
当设置3x3矩阵类型的uniform参数时,根据参数对应的索引,将值写入数组索引起始的3个四维数组的前三位中;
[0084]
当设置二维数组类型的uniform参数时,将值写入索引对应的四维数组的对应位置中;
[0085]
当设置float和bool类型的uniform参数时,将值写入索引对应的四维数组中的对应位置中。
[0086]
(3)在渲染提交时,统一提交一次通用数组即可。
[0087]
实施例三
[0088]
请参照图2,一种opengl es 2.0的uniform参数的配置装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现实施例一中的各个步骤。
[0089]
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1