Opengl 单通道10位图像

Opengl 单通道10位图像,opengl,glsl,textures,Opengl,Glsl,Textures,OpenGL中是否有任何方法可以加载和读取10位图像?在GPU方面,它不必是最佳效率。我只是想在将CPU转移到GPU之前,先将其从everyting转换为8bit 我注意到唯一支持的10位纹理格式是RGB10,这不是我想要的 特定于供应商的扩展是可以的 我只是想在将CPU转移到GPU之前,先将其从everyting转换为8bit 那是不可能的。GPU除了swizzling之外从不进行格式转换,但这确实是DMA的一部分。CPU进行格式转换,这就是为什么避免格式不匹配非常重要的原因 因此,即使Ope

OpenGL中是否有任何方法可以加载和读取10位图像?在GPU方面,它不必是最佳效率。我只是想在将CPU转移到GPU之前,先将其从everyting转换为8bit

我注意到唯一支持的10位纹理格式是RGB10,这不是我想要的

特定于供应商的扩展是可以的

我只是想在将CPU转移到GPU之前,先将其从everyting转换为8bit

那是不可能的。GPU除了swizzling之外从不进行格式转换,但这确实是DMA的一部分。CPU进行格式转换,这就是为什么避免格式不匹配非常重要的原因

因此,即使OpenGL有一种描述10位单通道数据的方法,您仍然需要依靠CPU将其解码为GPU实际使用的格式,即8位。它不会是你的代码进行转换;应该是司机代码。不管怎样,它都在消耗CPU资源

但这与您的需求无关,因为OpenGL无法上传10位单通道数据。你是怎么储存的;像素没有字节对齐


一般来说,建议您尽可能离线进行此类转换,并以最合理的格式存储数据。

rgb10、r12等的性能如何。。。处理格式,驱动程序是否将其转换为16位?@ronag:你是什么意思?我知道没有GL_R12格式。RGB10的工作原理是大小为32位,2位丢失;如果要防止驾驶员侧转换,请使用GL_UNSIGNED_INT_10_10_10_2或GL_UNSIGNED_INT_2_10_10_10_REV上载,并使用GL_RGBA作为上载格式。如果您的数据是10位,最好的解决方案是将其转换为16位并使用GL_R16内部格式。sry,我的意思是ALPHA12而不是R12。@ronag:谁说驱动程序不会在内部将其转换为GL_ALPHA16?这完全是规范允许的。我没有足够的经验知道这是正确的/可以工作,但是你不能使用16位纹理,然后只使用着色器中的10个最低有效位吗?