如何指定内部格式为 RGBA2 的纹理图像?
How do you specify a texture image with internal format RGBA2?
我认为应该这样做。创建红色纹理:
int width = 64;
int height = 64;
int size = width * height;
byte red = (byte) 0b11_00_00_11; // 2-bit per channel
ByteBuffer buffer = MemoryUtil.memAlloc(size);
for (int p = 0; p < size; p++) buffer.put(red);
texture = glGenTextures();
glBindTexture(GL_TEXTURE_2D, texture);
glPixelStorei(GL_UNPACK_ALIGNMENT,1);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA2, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, buffer.flip());
MemoryUtil.memFree(buffer);
在片段着色器中:
// The RGBA format and Type: UNSIGNED_BYTE should normalize the color values [0,1]
out_color = texture(texture,uv);
但是输出显然是错误的。在 window 中为每个程序执行显示不同的颜色。
我每个提供1个字节。像素。这是错的吗?我认为这就是重点。
I provide 1 byte per. pixel. is this wrong?
是的。类型 UNSIGNED_BYTE
表示每个颜色通道 1 个字节(4 个字节)。您可以使用 GL_UNSIGNED_SHORT_4_4_4_4
将源图像的大小减小到每像素 16 位,但是,没有什么比 GL_UNSIGNED_BYTE_2_2_2_2
更好的了。这意味着您不能将 2-2-2-2 图像直接读入具有内部格式 RGBA2
.
的纹理中
我认为应该这样做。创建红色纹理:
int width = 64;
int height = 64;
int size = width * height;
byte red = (byte) 0b11_00_00_11; // 2-bit per channel
ByteBuffer buffer = MemoryUtil.memAlloc(size);
for (int p = 0; p < size; p++) buffer.put(red);
texture = glGenTextures();
glBindTexture(GL_TEXTURE_2D, texture);
glPixelStorei(GL_UNPACK_ALIGNMENT,1);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA2, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, buffer.flip());
MemoryUtil.memFree(buffer);
在片段着色器中:
// The RGBA format and Type: UNSIGNED_BYTE should normalize the color values [0,1]
out_color = texture(texture,uv);
但是输出显然是错误的。在 window 中为每个程序执行显示不同的颜色。
我每个提供1个字节。像素。这是错的吗?我认为这就是重点。
I provide 1 byte per. pixel. is this wrong?
是的。类型 UNSIGNED_BYTE
表示每个颜色通道 1 个字节(4 个字节)。您可以使用 GL_UNSIGNED_SHORT_4_4_4_4
将源图像的大小减小到每像素 16 位,但是,没有什么比 GL_UNSIGNED_BYTE_2_2_2_2
更好的了。这意味着您不能将 2-2-2-2 图像直接读入具有内部格式 RGBA2
.