Android opengles 傳數組給shader着色器

最近在研究高斯模糊,有用到傳數組給着色器這個功能就記錄一下

先貼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,第二個參數表示數組長度

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章