у меня есть 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 поплавков превратился в текстуру.
Я думаю, вы должны попробовать
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGBA32F,
width, height, 0, GL_RGBA, GL_FLOAT, colours.data());
Кажется, что вы использовали internalformat
а также format
неправильно.