gles小注意

8.尽量使用VBO。

glVertexAttribPointer***传输的数据不是VBO指针的话,那传输的数据越多,耗时越多;除了耗时,这个函数每次调用还会把CPU的数据拷贝一份到GPU,消耗带宽,使用VBO的话可以直接将这份数据cache到GPU,下次就不用再次拷贝了,从而节约了带宽,也就节省了用电。

 

7.glClear(...)也是会耗时2ms~9ms左右的。

所以在效果不影响的情况下,能不clear就不clear。

 

6.尽量少切换FBO

因为切换FBO也是耗时的(大约5~6ms,不同机器不同时间),能在同一个FBO上处理的尽量在同一个上处理。

 

5.片元着色器的输入在图元之间是进行线性插值的。

 

4.glsl中 函数不能被递归调用。

 

3. glsl中,在声明时,属性变量、一致变量、易变变量 都是不能被初始化的。

属性变量、一致变量只能是从程序端赋值过来,而不能在glsl中更改或赋值。

 

2.一张图片占用内存计算:

图像占用内存的公式是:numBytes = width * height * bitsPerPixel / 8

例如,一张1024*1024的RGBA_8888的位图所占用的内存: 1024*1024*(4*8)/8=4M

 

1.GLES20.glGetAttribLocation(mProgramID, propertyName)和GLES20.glGetUniformLocation(mProgramID, propertyName)可能返回-1的情形:

1.1 propertyName在顶点着色器或者片元着色器中没有声明的;

1.2 propertyName在着色器文本中声明了的,但是没有使用到,也会返回-1;(就算使用到了,但是没有实际的应用也没用,例如 vec3 test= aInVec3;aInVec3是声明了的并且可以从外面传值进来的,但是如果我们没有使用到test,那么aInVec3得到的location还是-1)

1.3 propertyName以gl专用的前缀“gl_”开头。

你可能感兴趣的:(android,gles)