glGetTexImage неожиданные результаты - PullRequest
1 голос
/ 11 февраля 2020

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

char buffer[size.x * size.y]; // simple one channel buffer
// Copy source to local buffer
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, source);
glGetTexImage(GL_TEXTURE_2D, 0, GL_UNSIGNED_BYTE, GL_ALPHA, buffer);
saveImage("before.pgm", buffer, size.x, size.y);

Во время создание текстуры я делаю так:

glActiveTexture(GL_TEXTURE0);
glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_2D, tex);

// Define texture characteristics with no data. It will be filled later
glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, size.x, size.y, 0, GL_ALPHA, GL_UNSIGNED_BYTE, 0);

/* We require 1 byte alignment when uploading or downloading texture data */
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glPixelStorei(GL_PACK_ALIGNMENT, 1);

1 Ответ

1 голос
/ 11 февраля 2020

Вы поменяли местами аргумент формата и типа в вызове glGetTexImage. Это должно быть:

glGetTexImage(GL_TEXTURE_2D, 0, GL_UNSIGNED_BYTE, GL_ALPHA, buffer);

glGetTexImage(GL_TEXTURE_2D, 0, GL_ALPHA, GL_UNSIGNED_BYTE, buffer);

Поскольку формат и тип не принимаются значения, это приведет к ошибке INVALID_ENUM.

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