Я пытаюсь создать объект gl :: Texture, используя данные изображения в качестве байта * с параметрами ниже.
FreeGLUT — я использую это, чтобы создать 2d текстуру и привязать ее к четырехугольнику.
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, textureWidth, textureHeight, 0, GL_BGRA_EXT, GL_UNSIGNED_BYTE, data);
glBindTexture(GL_TEXTURE_2D, 0); etc etc
Это работает нормально, однако я не могу найти способ создать объект gl :: Texture в Cinder.
text = gl::Texture(loadImage(loadAsset("text.jpg"))); // works with images files
text = gl::Texture(data, GL_RGBA8, 640, 480); // BTYE * data This gives me a grey screen -
Это казалось наиболее вероятным, однако я понятия не имею, что делать с Format format = format ();
Texture (const unsigned char *data, int dataFormat, int aWidth, int aHeight, Format format=Format())
Я действительно не понимаю, как это работает, и не могу найти лучшие учебники в Интернете. Благодарю.
по-видимому dataFormat
это параметр формата для glTexImage2D и должен быть что-то вроде GL_RGBA
или же GL_RGB
(или же GL_BGRA_EXT
как в приведенном вами примере)
То, что вы хотите, это «внутренний формат», который устанавливается через Format
структура. Итак, вы устанавливаете это как:
gl::Texture::Format fmt;
fmt.setInternalFormat(GL_RGBA8);
text = gl::Texture(data, GL_RGBA, 640, 480, fmt);
GL_UNSIGNED_BYTE
Формат предварительно установлен в этом конструкторе оболочки Cinder
Иногда проще просто посмотреть на код, чем пытаться найти 100% применимую документацию