Графический процессор; OpenGL ES 2.0; Чтение / запись данных; NDK; Tegra2;

#android-ndk #opengl-es-2.0 #shader

#android-ndk #opengl-es-2.0 #шейдер

Вопрос:

Не могли бы вы показать мне, где я получаю ошибку, пожалуйста.

Задача очень проста. Я пытаюсь создать буфер в памяти графического процессора, записать данные в один и прочитать из него. Код для этого см. Ниже.

При выполнении кода возвращаемое значение glCheckFramebufferStatus 0x8D40 (константа GL_FRAMEBUFFER в gl2.h) и, конечно, значение в out buffer не изменяются.

Я могу понять, что я делаю незаконно и почему это не работает. Может быть, необходимо использовать какие-либо специальные флаги для компиляции / ссылки? Есть идеи?!?!?!

Использование: Телефон Motorola основан на процессоре Tegra2, libGLES2.so от NVIDIA NDK. Проект скомпилирован NDK.

Спасибо!

 GLuint xTexID;
GLuint fb;
GLenum status;
const int _wight = 8, _height = 4;

glGenTextures (1, amp;xTexID);
glBindTexture(GL_TEXTURE_2D,xTexID);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, _wight, _height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);

glGenFramebuffers(1,amp;fb);
glBindFramebuffer(GL_FRAMEBUFFER,fb);
glFramebufferTexture2D(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_TEXTURE_2D,xTexID,0);

status = GL_FRAMEBUFFER_COMPLETE;
if((status = glCheckFramebufferStatus(GL_FRAMEBUFFER)) != GL_FRAMEBUFFER_COMPLETE) {
    printf("rnmyGL: CheckFramebufferStatus isn't COMPLETE (0xX)", status);
//      exit(1);
}

glTexSubImage2D(GL_TEXTURE_2D,0,0,0,_wight,_height,GL_RGBA,GL_UNSIGNED_BYTE,data);
glReadPixels(0, 0, _wight, _height,GL_RGBA,GL_UNSIGNED_BYTE,result);
  

Ответ №1:

Я не вижу там никаких реальных вызовов рисования.

До вызова glTexSubImage2D похоже, что вы настраиваете рендеринг в текстуре. Как только вы нажмете на этот вызов glTexSubImage2D, то, что вы пытаетесь сделать, становится неясным. Можно было бы ожидать, что где-то там будет вызов рендеринга, чтобы заполнить фреймбуфер, который вы привязали. Если вы не выполняли рендеринг в фреймбуфере, вы не увидите никаких изменений в текстуре, которую вы к ней привязали.