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_”开头。