【发布时间】:2014-01-08 08:47:23
【问题描述】:
请不要告诉我使用 24 位纹理之类的东西,因为这是我的一个宠物项目,它需要支持 1、4、8、16 和 32 位纹理格式。
现在,上述所有格式都可以使用,即使是 1bpp,除了 4bit 格式。我还应该提到,使用的颜色是 16 种灰色。此外,我使用的纹理都填充到 4 个字节。
例如,假设我想加载这个 4x4 纹理
BYTE Img[4][4] = {
{0xCD, 0xEF, 0x00, 0x00},
{0x89, 0xAB, 0x00, 0x00},
{0x45, 0x67, 0x00, 0x00},
{0x01, 0x23, 0x00, 0x00},
};
每个半字节应该代表一个纹素。 0x00 用于填充目的。
我到底如何加载这样的纹理???
现在,我尝试了
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE4, 4, 4, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, pTex);
但由于某种原因,它与使用 GL_LUMINANCE 的 8 位纹理得到的结果相同,我只在屏幕上看到 2x4 纹理图案,另一半是黑色的。
我也尝试过使用 glPixelMapfv,但我无法让它工作,我得到的只是一个空白纹理。
我希望我已经足够清楚了,如果没有,请告诉我,我会进行更正。
【问题讨论】:
-
您可能需要以某种方式解码,以便每个完整字节都是一个单独的纹素