如何指定内部格式为 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.

的纹理中