OpenGL ES 2.0을 이용하여 이미지 편집 툴을 구현하고 있습니다. fragment shader를 통해 이미지의 밝기, 대조, 채도 등을 수정할 수 있도록 하였고, 수정된 내용은 실시간으로 반영되어 화면에 표시되도록 하였습니다. 이제 저장 버튼을 누르면 수정된 이미지가 저장되게끔만 구현하면 되는 상황인데요. 아래의 코드를 사용하여 이미지를 저장하면 수정되기 전 원본 이미지만 저장이 됩니다.
public static Bitmap saveTexture(int texture, int width, int height) {
int[] frame = new int[1];
GLES20.glGenFramebuffers(1, frame, 0);
GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, frame[0]);
GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0, GLES20.GL_TEXTURE_2D, texture, 0);
ByteBuffer buffer = ByteBuffer.allocate(width * height * 4);
GLES20.glReadPixels(0, 0, width, height, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, buffer);
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
bitmap.copyPixelsFromBuffer(buffer);
GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0);
GLES20.glDeleteFramebuffers(1, frame, 0);
return bitmap;
}
밝기, 대조, 채도 등이 수정되는 이미지를 실시간으로 화면에 출력하기 위해 다음과 같은 과정을 거치게 됩니다.
1. 텍스쳐 생성 및 바인딩
2. texImage2D를 통해 이미지 bitmap 바인딩
3. vertex, fragment shader를 컴파일하여 프로그램 생성.
4. 3번에서 생성된 프로그램을 사용하여 실시간으로 화면에 드로잉.
그리고 저장 버튼을 눌렀을 때 위에 기재한 saveTexture 메서드의 texture 인수로 1번에서 생성된 texture를 넘겼는데, 저장된 내용이 원본 이미지인 것을 보니 4번을 통해 화면에 드로잉되는 내용은 바인딩된 texture에 반영이 안되는 것 같습니다. 이경우 어떻게 하면 수정된 이미지를 저장할 수 있을까요?
OpenGL ES 초보에게 도움 좀 부탁드려요.