Я пытаюсь скопировать буфер глубины fbo в вектор.
Я изначально начал с использования renderbuffers и glReadPixels
, но это привело к вектору, заполненному нулями, несмотря на то, что glGetErrors()
не выделяет вопросы.
Затем я переключился на текстуры и нарисовал их на экране. Цветная текстура показывает свидетельство проверки глубины, а текстура глубины показывает, что буфер глубины заполнен ожидаемыми значениями.
Я пролистал страницы OpenGL на кадровых буферах, страницу распространенных ошибок и прочитал документы по всем функции, а также прочитать первые 2 страницы результатов поиска Google по запросам, связанным с проблемой, но они не решают проблему и в основном используют старые версии OpenGL.
Я играл с буферами пакетов пикселей, упаковка, включение / отключение случайных настроек + привязка / открепление различных буферов.
Код примерно такой:
std::vector<GLuint> someVector; //also tried unsigned int
someVector.resize( windowWidth * windowHeight ); //also tried .reserve
glBindFramebuffer( GL_FRAMEBUFFER, fbo );
glEnable( GL_DEPTH_TEST );
drawStuff(); //I know this works
//Ive also tried making the depth buffer a depth_stencil buffer and reading a GL_UNSIGNED_INT_24_8
//glReadPixels( 0, 0, windowWidth, windowHeight GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, &someVector[ 0 ] );
glBindTexture( GL_TEXTURE_2D, depthTexture );
glGetTexImage( GL_TEXTURE_2D, 0,
GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, &someVector[ 0 ] );
glBindTexture( GL_TEXTURE_2D, 0 );
glBindeFrameBuffer( GL_FRAMEBUFFER, fbo );
wrapperForGlGetErrors(); //this indicates all is good
Я на Ubuntu 18.04, использую opengl 3.3 и использую последнюю версию Драйверы nvidia.
Выход lspci | grep -i --color 'vga\|3d\|2d'
равен
00:02.0 VGA compatible controller: Intel Corporation HD Graphics 630 (rev 04)
01:00.0 3D controller: NVIDIA Corporation GP107M [GeForce GTX 1050 Mobile] (rev a1)
Обновление
Делает:
unsigned int x;
glReadPixels( 100, 100, 1, 1, GL_DEPTH_COMPONENT,
GL_UNSIGNED_INT, &x );
std::cerr << x;
выводит 4294967295, а не 0.