0
私はEXT_discard_framebufferを読んで、名前付きフレームバッファの添付可能なイメージの内容を不定にします。そして、フレームバッファを破棄した後、glReadPixelsからのピクセル値は破棄するフレームバッファと同じです。どうして?そして、この拡張では、フレームをレンダリングした後にフレームバッファコンテンツの格納バックを最適化する方法をOpenGL ESで実装していますか? glDiscardFramebufferEXTのOpenGL ES 2.x:glDiscardFramebufferEXTの後にピクセルを読み取る方法は?
//
// create a texture object
//
GLuint tex;
glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_2D, tex);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texWidth, texHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
glBindTexture(GL_TEXTURE_2D, 0);
//
// create a framebuffer object
//
GLuint fbo;
GLboolean check;
glGenFramebuffers(1, &fbo);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
check = glIsFramebuffer(fbo1);
if (!check) {
__android_log_print(ANDROID_LOG_ERROR, "debug",
"------ check Framebuffer object failed ------\n");
return EGL_FALSE;
}
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex, 0);
if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
__android_log_print(ANDROID_LOG_ERROR, "debug",
"------ fbo not set completely!------\n");
return EGL_FALSE;
}
draw_texture(fbo);
GLubyte sampledColor[4] = {0, 0, 0, 0};
int randX = 128, randY = 128;
GLenum attachments[] = { GL_COLOR_ATTACHMENT0, GL_DEPTH_ATTACHMENT };
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glReadPixels(randX, randY, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, sampledColor);
__android_log_print(ANDROID_LOG_INFO, "debug",
"[LINE: %d] coordinate(%d, %d) color is (%d, %d, %d, %d)\n",
__LINE__, randX, randY, sampledColor[0], sampledColor[1],
sampledColor[2], sampledColor[3]);
glDiscardFramebufferEXT(GL_FRAMEBUFFER, 2, attachments);
glReadPixels(randX, randY, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, sampledColor);
__android_log_print(ANDROID_LOG_INFO, "debug",
"[LINE: %d] coordinate(%d, %d) color is (%d, %d, %d, %d)\n",
__LINE__, randX, randY, sampledColor[0], sampledColor[1],
sampledColor[2], sampledColor[3]);
こんにちは、MārtiņšMožeiko 私はglDiscardFramebufferEXT()をテストしたいですが、次のステップがglDiscardFramebufferEXTを呼び出した後に何か分かりません。あなたは私を見せることができます?どうもありがとう。 –
次のステップはどういう意味ですか? –
私はOpenGL ES2でglDiscardFramebufferEXT funcをテストしたいのですが、どのように正しい機能を使ってチェックするのですか? –