OpenGL загружает данные пикселей из формата 4 * float (C ++)

у меня есть std::container данных изображения в формате:

struct C
{
float r;
float g;
float b;
float a;
}

так это выглядит так:

std::vector<C> colours(width*height);

где ширина и высота — размер моего изображения.

Теперь я хочу вставить это в текстуру в OpenGL.

glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X,0,GL_RGBA8,width,height,0,GL_RGBA,GL_FLOAT,colours.data());

(всего их 6, по одному на каждую сторону моей кубической карты. Ширина и высота также идентичны требованиям кубических карт).

Но я получаю черную текстуру. GLIntercept не дает мне никаких указаний на проблему.

Итак, после просмотра https://www.opengl.org/sdk/docs/man/docbook4/xhtml/glTexImage2D.xml Я считаю, что я должен называть это так:

glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X,0,GL_RGBA8,width,height,0,GL_RGBA32F,GL_FLOAT,colours.data());

Изменение заключается в том, что я указываю, что мои пиксельные данные имеют 32-битные числа с плавающей запятой, и их число равно 4 на пиксель.

Тем не менее, это дает мне черную текстуру, а GLIntercept говорит мне, что этот вызов генерирует GL_INVALID_ENUM,

Просмотр той же документации говорит мне, что glTexImage2D вызовет GL_INVALID_ENUM при некоторых условиях ни с одним из которых я не встречался.

По сути, я просто хочу, чтобы мой контейнер из 4 поплавков превратился в текстуру.

0

Решение

Я думаю, вы должны попробовать

glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGBA32F,
width, height, 0, GL_RGBA, GL_FLOAT, colours.data());

Кажется, что вы использовали internalformat а также format неправильно.

1

Другие решения


По вопросам рекламы [email protected]