Как перевернуть данные из кадрового буфера - PullRequest
1 голос
/ 24 октября 2019

Я присоединяю PBO к кадровому буферу Opengl и затем использую glMapBuffer () для получения доступа к данным.

Я передаю данные на карту Bluefish для вывода SDI.

Проблема в том, что результирующий вывод выглядит инвертированным.

Как я могу инвертировать ось Y данных, на которые указывает указатель PBO.

glReadBuffer(GL_FRONT);
glBindBuffer(GL_PIXEL_PACK_BUFFER, pbo[writeIndex]);
// copy from framebuffer to PBO asynchronously. it will be ready in the NEXT frame
glReadPixels(0, 0, SCR_WIDTH, SCR_HEIGHT, GL_RGB, GL_UNSIGNED_BYTE, nullptr);
// now read other PBO which should be already in CPU memory
glBindBuffer(GL_PIXEL_PACK_BUFFER, pbo[readIndex]);
// map buffer so we can access it
void* downsampleData = (unsigned char *)glMapBuffer(GL_PIXEL_PACK_BUFFER,GL_READ_ONLY);

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

 unsigned char OriginalData[width * height * 4];
 unsigned char FlippedData[width * height * 4];
 memcpy( OriginalData , downsampleData , sizeof( OriginalData) );  // copy data from the pointer.

 for( int i = sizeof( OriginalData) - 1; i >= 0 ; i-- )
 {
    Flippeddata[k] = OriginalData[sizeof( OriginalData) - 1 - 1];
 }

1 Ответ

3 голосов
/ 24 октября 2019

Вы не можете. OpenGL всегда считает, что первая строка является нижней строкой данных изображения для любой операции с изображением (отправка / получение блоков пикселей, выборка образцов текстуры / данных изображения в шейдере и т. Д.). Поэтому, если вы хотите инвертировать полученные данные, вам придется сделать это вручную, скопировав данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...