C 通过opengl渲染每像素1位图像

C 通过opengl渲染每像素1位图像,c,opengl,graphics,glfw,C,Opengl,Graphics,Glfw,最近,我开始用C语言实现CHIP-8 emulator。在实现了大多数操作码之后,我遇到了为我的emulator实现显示的问题。经过一些谷歌搜索和阅读,我已经解码给OpenGL一个机会。问题就在这里——显示信息以每像素1位的单色图像的形式存储在最后256字节的CHIP-8内存中(内存是一个大小为4096的uint8\u t数组)。当然,我可以创建另一个数组,以更可用的格式(每像素1字节)存储显示数据,并通过OpenGL将其渲染为纹理,但我想知道的是,在现代OpenGL或其他库/框架中,是否有更优

最近,我开始用C语言实现CHIP-8 emulator。在实现了大多数操作码之后,我遇到了为我的emulator实现显示的问题。经过一些谷歌搜索和阅读,我已经解码给OpenGL一个机会。问题就在这里——显示信息以每像素1位的单色图像的形式存储在最后256字节的CHIP-8内存中(内存是一个大小为4096的
uint8\u t
数组)。当然,我可以创建另一个数组,以更可用的格式(每像素1字节)存储显示数据,并通过OpenGL将其渲染为纹理,但我想知道的是,在现代OpenGL或其他库/框架中,是否有更优雅、更高效的解决方案可以在C编程语言中使用

先谢谢你


p.S.英语不是我的母语,因此希望能够修复错误。

使用现代OpenGL,您可以使用整数纹理和8位单通道图像格式。然后在着色器中,将快速运行坐标除以8以确定texel,剩余部分用于选择位,类似于GLSL中的情况

texelFetch(texture, ivec2(texcoord.x/8, texcoord.y), 0).x &
    (1 << texcoord.x%8) != 0;
texelFetch(纹理,ivec2(texcoord.x/8,texcoord.y),0.x&

(1)谢谢你这么快的回复。我是opengl和GLSL的新手,所以你能详细解释一下如何在GLSL中处理1bpp图像,或者给我一些书或文章的链接吗?