一种变量类型是 uniform。uniform是 OpenGL ES 2.0中被输入着色器的只读值。uniform被使用存储各种着色器需要的数据,例如:转换矩阵、光照参数或者颜色。基本上各种输入着色器的常量参数像顶点和片段(但在编译时并不知道)应该是uniform。
OpenGL ES 2.0必须至少提供128 个顶点着色器 uniform和 16个片段着色器 uniform。
OpenGL ES着色器语言的另一个变量是属性。属性变量仅仅在顶点着色器中被使用,
逐顶点的指定顶点着色器的输入。典型的被用来储存位置、法线、贴图坐标和颜色数据。关键是懂得属性是每个顶点被绘制的详细数据。它实际上是着色器的使用者决定什么数据是属性。
像 uniform一样,硬件对顶点着色器的属性变量数量有限制。最大的属性数通过工具编译支持gl_MaxVertexAttribs确定。(或者使用 GL_MAX_VERTEX_ATTRIBS为参数调用glGetIntegerv查询)最小数是 8。如果为确保你的程序能在任何OpenGL ES 2.0工具上编译,确保你的属性不超过 8。
变量被用来存储顶点着色器的输出和片段着色器的输入。基本上每个顶点着色器把输出数据转变成一个或更多片段着色器的输入。那些变量也被片段着色器声明(类型需匹配),并且在光栅化阶段被线性插补变成基元
像 uniform和属性,变量也有数量的限制(硬件上它们被用来做插补)。工具支持的最大数目是gl_MaxVaryingVectors(使用GL_MAX_VARYING_VECTORS为参数调用 glGetIntegerv查询)。最小数目是 8。
GLSurfaceView
分类: 嵌入式
Render的mode可以设为两种模式,一种是自动循环模式,也就是说GL线程以一 定的时间间隔自动的循环调用用户实现的onDrawFrame()方法进行一帧一帧的绘制,还有一种的“脏”模式,也就是说当用户需要重绘的时候,主动 “拉”这个重绘过程,有点类似于Canvas中的invalidate()
具体的调用方法是在GLSurfaceView中
a.自动模式
setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);
b."脏"模式
.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
当需要重绘时,调用
GLSurfaceView.requestRender()
一般情况下使用脏模式,这样可以有效降低cpu负载。测试结果表明,OpenGL真正绘图时一般会占到30%以上的cp