GPU; OpenGL ES 2.0; Чтение / запись данных; NDK; Tegra2; - PullRequest
0 голосов
/ 18 октября 2011

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

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

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

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

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

Спасибо!

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

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

glGenFramebuffers(1,&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("\r\nmyGL: CheckFramebufferStatus isn't COMPLETE (0x%08X)", 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 Ответ

1 голос
/ 01 января 2012

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

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

...