C++ OpenGL:一个纹理可以容纳多少黑白(2色调)图像?

C++ OpenGL:一个纹理可以容纳多少黑白(2色调)图像?,c++,opengl,optimization,graphics,bit-manipulation,C++,Opengl,Optimization,Graphics,Bit Manipulation,我有32个黑白图像(只有两个音调,“开”和“关”)。它们用于从同一主题的不同角度表示照明。所以它们的大小和组成都是一样的。(之所以采用这种方式,是因为对象是2D角色精灵,需要手绘灯光) 有没有一种方法可以在32位纹理中分离出一个位(或者如果没有,则是一个通道),这样OpenGL就可以自己绘制它,从而使每个纹理可以作为32个独立的双色调图像使用?(我的意图是,在隔离后,黑色部分将被设置为透明,白色部分在调制后绘制) 我想知道的原因是,主题的精灵表都非常大(有些超过1000x3000像素)。除了布景

我有32个黑白图像(只有两个音调,“开”和“关”)。它们用于从同一主题的不同角度表示照明。所以它们的大小和组成都是一样的。(之所以采用这种方式,是因为对象是2D角色精灵,需要手绘灯光)

有没有一种方法可以在32位纹理中分离出一个位(或者如果没有,则是一个通道),这样OpenGL就可以自己绘制它,从而使每个纹理可以作为32个独立的双色调图像使用?(我的意图是,在隔离后,黑色部分将被设置为透明,白色部分在调制后绘制)


我想知道的原因是,主题的精灵表都非常大(有些超过1000x3000像素)。除了布景之外,内存中还为不同的角色加载了许多精灵表。我对屏幕上每种不同的角色类型加载了33种纹理进行了测试,1种是精灵片,然后是32种照明片,程序使用了超过300MB的视频内存。如果有可能做到这一点,我可能能够将其削减到一个更可行的30MB范围

您正在使用着色器吗?因为如果您是,这可以使用相对简单的片段着色器来完成。@yzt-我愿意!但我保留了它们,因为我不确定有多少人有支持它们的卡,有多少人没有。因为这将是一个简单而简短的着色器,你可以在较低的着色器模型(即较低的GLSL版本)中编写。实际上,你可以在OpenGL版本2.0(或2.1)的1.10(或1.20)之后的每个GLSL版本中编写它. 我相信,即使是在过去5-6年中制造的最便宜的离散或集成GPU也支持这些版本(以及更多)。我认为可能有办法为固定功能管道实现您想要的功能(使用位平面的压缩RGBA8888纹理作为透明遮罩)。也许使用了模具缓冲技术和/或alpha拒绝技术的组合,但我不知道它们。@yzt-知道这一点,制作着色器看起来更好。我会尝试研究你提到的固定管道,但如果这太让我难以理解的话,有着色器作为依靠是很好的