Android-Openglで画像フィルタ機能を実現
GPUIMageでは既に2 D画像フィルタ機能が実現しており、プロジェクトはパノラマ画像であるため、GPUImageではフィルタ機能のshaderファイルを自分用に持ってくるしかない.
フィルタを切り替えるたびにテクスチャがロードされる流れを記録します
フィルタを修正するだけなので、テクスチャ座標を再ロードするだけで、頂点座標を変更する必要はありません.
フィルタを切り替えるたびにテクスチャがロードされる流れを記録します
GLES20.glUseProgram(mProgram);
GLES20.glDetachShader(mProgram, oldFshId);//detach old shader id
int fshId = this.loadShader(GLES20.GL_FRAGMENT_SHADER, newFragmentShader);//load new fragment shader
GLES20.glAttachShader(mProgram, fshId);// attach new shader id
GLES20.glLinkProgram(mProgram);
GLES20.glDeleteShader(fshId);
filterInputTextureUniform2 = GLES20.glGetUniformLocation(mProgram, "inputImageTexture2");
filterInputTextureUniform3 = GLES20.glGetUniformLocation(mProgram, "inputImageTexture3");
filterInputTextureUniform4 = GLES20.glGetUniformLocation(mProgram, "inputImageTexture4");
filterInputTextureUniform5 = GLES20.glGetUniformLocation(mProgram, "inputImageTexture5");
filterInputTextureUniform6 = GLES20.glGetUniformLocation(mProgram, "inputImageTexture6");
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
GLES20.glBindTexture(GL_TEXTURE_2D, msTextureId);
GLES20.glUniform1i(msTextureLoc, 0);
フィルタを修正するだけなので、テクスチャ座標を再ロードするだけで、頂点座標を変更する必要はありません.