最近在研究高斯模糊,有用到傳數組給着色器這個功能就記錄一下
先貼fragment_shader.glsl代碼
uniform highp float vt[4];
void main() {
gl_FragColor = vec4(vt[0],vt[1],vt[2],vt[3]);
}
一個長度爲4的float數組,根據數組來顯示顏色
根據uniform我們在創建program的時候可以用glGetUniformLocation來取
vtHandle = GLES20.glGetUniformLocation(programId, "vt");
傳遞的時候就可以用glUniform1fv把數組傳入fragment_shader.glsl
float vt[] = {1.0f,0.0f,0.0f,1.0f};
vtBuffer = ByteBuffer.allocateDirect(vt.length * 4)
.order(ByteOrder.nativeOrder())
.asFloatBuffer()
.put(vt);
vtBuffer.position(0);
GLES20.glUniform1fv(vtHandle,4,vtBuffer);
平常傳float數據用glUniform1f,現在傳float數組用glUniform1fv,第二個參數表示數組長度