glReadPixels работает для примера кода, но возвращает 1 в симуляторе NVIDIA FleX - PullRequest
0 голосов
/ 16 марта 2020

Я пытаюсь смоделировать камеру глубины в сцене OpenGL. Я использую симулятор NVIDIA FleX.

Мне удалось успешно смоделировать камеру глубины в небольшом примере кода:

float pixels_d[ 1 ] = { 0 };
glReadPixels( 0, 0, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, pixels_d );
printf("shaders depth %f\n", pixels_d[ 0 ]);


unsigned char pixels[ 1 * 1 * 4 ] = { 0 };
glReadPixels( 0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, pixels );
printf("shaders RGB %i   ", pixels[ 0 ]);

Я выполнил несколько проверок, и я ' Я совершенно уверен, что они возвращают хорошие значения в моем небольшом примере кода. Однако, когда я помещаю эти сегменты кода в симулятор FleX, работает только RGB-пиксельный ридер. Глубина всегда возвращает 1, не показывая десятичных разрядов и появляясь в терминале как int. Я пробовал различные команды для инициализации чтения глубины, включая glEnable(GL_DEPTH_TEST);, glDepthFunc(GL_LESS); и glClear(GL_DEPTH_BUFFER_BIT);, но безрезультатно.

Мне кажется, что есть некоторый флаг openGL в коде рендеринга FleX, который блокирует глубину от чтения, но я не могу понять, что это такое. Вот ссылка на большую часть рендеринга во FleX: https://github.com/henryclever/FleX_PyBind11/blob/master/demo/opengl/shadersGL.cpp

Только этот единственный скрипт содержит более 3000 строк кода, поэтому даже не пытайтесь go пройти через все построчно. Но если вы знаете конкретные флаги, которые я мог бы попробовать, или если вы можете искать в коде, чтобы найти тот, который мешает мне углубиться в чтение, пожалуйста, включите его. Или, если у вас есть какие-либо другие идеи, я был бы признателен.

...