【发布时间】:2014-07-31 16:40:19
【问题描述】:
我有非常简单的顶点着色器,例如:
uniform mat4 u_Matrix;
uniform float u_PointSize;
attribute vec4 a_Position;
attribute vec4 a_Color;
varying vec4 v_Color;
void main() {
v_Color = a_Color;
gl_PointSize = u_PointSize;
gl_Position = u_Matrix * a_Position;
}
然后我像这样初始化浮点缓冲区:
floatBuffer = ByteBuffer
.allocateDirect(vertexData.length * Constants.BYTES_PER_FLOAT)
.order(ByteOrder.nativeOrder())
.asFloatBuffer()
.put(vertexData);
其中 vertexData 包含例如 (X, Y, R, G, B) 之类的值:
float[] vertexData = new float[] {100, 100, 1f, 0f, 0f}
当我想改变坐标(在某些情况下我真的需要它并且使用变换矩阵不是解决方案)或颜色时,我需要:
- 更改 vertexData 数组中的必要值
- 创建新的字节缓冲区
这看起来是个糟糕的解决方案,因为每次我想更改颜色/坐标时,它都会通过调用 ByteBuffer.allocateDirect(..) 创建新的字节缓冲区。
您能否澄清一下哪种方式可能更好?
我考虑过使用制服作为颜色,并在每次需要更改/恢复颜色时使用 glUniformMatrix4fv(..),但我不确定这也是好方法。
【问题讨论】:
标签: android opengl-es-2.0