OpenGL GL_R8生成一个0x501,而GL_RGB8不生成

OpenGL GL_R8生成一个0x501,而GL_RGB8不生成,opengl,texturing,Opengl,Texturing,这似乎是一个相当简单的问题(或者至少尽可能接近)。当我通过GL_RGB8、GL_RGBA8或大多数任何多通道内部格式时,下一行不会产生错误 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, fontImgSize, fontImgSize, 0, GL_RED, GL_UNSIGNED_BYTE, NULL); 但是,当我传递GL_R8或任何8位单通道变量时,glGetError返回0x501(无效值) 知道这是怎么回事吗?我目前使用的电脑已经过时,而且功耗很低,

这似乎是一个相当简单的问题(或者至少尽可能接近)。当我通过GL_RGB8、GL_RGBA8或大多数任何多通道内部格式时,下一行不会产生错误

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, fontImgSize, fontImgSize, 0, GL_RED, GL_UNSIGNED_BYTE, NULL);
但是,当我传递GL_R8或任何8位单通道变量时,glGetError返回0x501(无效值)

知道这是怎么回事吗?我目前使用的电脑已经过时,而且功耗很低,但如果这是问题所在,我怀疑RGB8或RGBA8是否能正常工作

对于那些好奇的人,fontImgSize==2048,这是我电脑上的最大纹理大小


编辑:出现GLYRG8和2通道/ 16位格式也产生0x501

<代码> GLYR8是一个很新的(很好,如果您认为POST GL 2.1是“新的”)格式。


尝试使用
GL\u LUMINANCE8

三分量和四分量内部格式(如
GL\u RGB8
GL\u RGBA8
)很久以来一直是OpenGL的核心功能(曾经?),但单分量和双分量内部格式(如
GL\u R8
GL\u RG8
)是一个非常新的功能,需要相当新的硬件和相应的驱动程序(至少OpenGL3,我认为,不再那么新了,但如果你说你的labtop过时了,那么可能太新了)

有较旧的(现已弃用的)1/2分量内部格式,如
GL\u亮度
GL\u亮度
GL\u亮度
(及其各自的大小版本),任何较旧的实现都应支持这些格式。但请注意,与较新的纯彩色格式相比,这些格式的语义和过滤/复制行为略有不同。但对于您的用例来说,它们可能已经足够了


还请注意,作为外部格式(用于读取/写入纹理数据的CPU像素数据格式),格式
GL_RED
(也可能
GL_RG
?)应始终可用(具有各自的语义),但这与内部纹理数据完全无关。

看起来像是驱动程序问题,你在说你的笔记本电脑过时了,你安装了最新的驱动程序吗?嗯,过时的硬件。我每周更新一次,但即使如此,似乎还有另一个驱动程序更新(英特尔集成图形)。我将安装它并编辑我的帖子以反映结果。Intel-graphics的OpenGL兼容性并不为人所知;)正如我所担心的,更新并没有改变什么。似乎我的视频“卡”只支持32位数据,但OpenGL拒绝在24位以下填充任何内容。您的实现报告了什么
GL\u版本
?尽管
GL\u亮度8
GL\u R8
并不完全相同。
glTexImage2D(GL_TEXTURE_2D, 0, GL_R8, fontImgSize, fontImgSize, 0, GL_RED, GL_UNSIGNED_BYTE, NULL);