我嘗試在 RGBA4444 中渲染我的影像而不轉換為 RGBA8888,但是....
// Define vertices
float vertices[] = {-1.f, 1.f, 0.f, 0.f, 1.f, // left top
1.f, 1.f, 0.f, 1.f, 1.f, // right top
-1.f, -1.f, 0.f, 0.f, 0.f, // left bottom
1.f, -1.f, 0.f, 1.f, 0.f}; // right bottom
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA4, image.width, image.height, 0, GL_BGRA,
GL_UNSIGNED_SHORT_4_4_4_4_REV, image.pixels.data());

uj5u.com熱心網友回復:
默認情況下,OpenGL 假定影像的每一行的開頭對齊到 4 個位元組。這是因為該GL_UNPACK_ALIGNMENT引數默認為4。由于該格式的影像的一個像素GL_UNSIGNED_SHORT_4_4_4_4_REV只需要2個位元組,因此影像的一行大小可能不會對齊到4個位元組。
當影像加載到紋理物件并且2*image.width不能被 4 整除時,GL_UNPACK_ALIGNMENT必須設定為 2,然后再指定紋理影像 glTexImage2D:
glPixelStorei(GL_UNPACK_ALIGNMENT, 2);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA4, image.width, image.height, 0, GL_BGRA,
GL_UNSIGNED_SHORT_4_4_4_4_REV, image.pixels.data());
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/438337.html
