我制作了一个程序,可以改变分辨率,颜色深度......然后在屏幕上渲染简单的纹理。在我切换到8b颜色深度之前,这一切都没有任何问题。然后出现调用不存在的函数(函数指向0x00)的问题,如glCreateShader。这让我很奇怪,我有了想法,这被证明是正确的。创建的上下文版本非常低。
在调用glGetString(GL_VERSION)之后,我收到了上下文版本为1.1.0。颜色深度越高,返回4.4
是否有任何理由减少版本?我查看了google和一些opengl.org页面,但我没有发现任何关于弃用8b颜色深度的内容。即使Windows CAN切换到这种颜色深度,也没有理由说OpenGL不能处理这个问题。
当然,我可以通过减少颜色数来模仿它,记忆不是我所关心的。我只是想知道为什么会这样。程序是实验室实验的原型,因此我需要尽可能多的选项,这只是减少了三分之一。
我要补充的最后一件事是该程序是用C / C ++编写的,带有Winapi和一些WGL函数,但我认为这并不重要。
答案 0 :(得分:1)
如果您请求RGB [ A ](WGL_TYPE_RGBA_ARB
)颜色,大多数驱动程序都不会为您提供硬件加速的8位/像素格式,尤其模式。
当然,我可以通过减少颜色数来模仿它,记忆不是我所关心的。我只是想知道为什么会这样。
要获得8位格式,必须使用索引颜色模式(WGL_TYPE_COLORINDEX_ARB
);调色板渲染。我怀疑现代驱动程序甚至不支持那种东西,除非它们提供兼容性配置文件(排除OS X之类的平台)。
您应该实际尝试的最小RGB颜色深度是RGB555或RGB565。现代硬件支持15/16位颜色。另一方面,索引颜色模式真的会推动你的运气。