如何替换以下(已弃用)OpenGL函数

How to replace following (deprecated) OpenGL functions?

本文关键字:OpenGL 函数 何替换 替换      更新时间:2023-10-16

我有一个简单的应用程序,显示了使用OpenGL:的自定义帧缓冲区(它有点像帧缓冲区功能的模拟器)

void GLWidget::resizeGL( int w, int h )
{
    glViewport( 0, 0, w, h );
    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    glOrtho( 0, w, 0, h, -1, 1 );
}
void GLWidget::paintGL()
{
    if( pScreen != 0 )
    {
        glRasterPos2i( 0, 2 * pScreen->height );
        glPixelZoom( 2, -2 );
        glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );
        glDrawPixels( pScreen->width, pScreen->height, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, pScreen->pixels );
    }
}

真的,这就是我想要做的,没有着色器,没有花哨的技巧,只有双倍缩放和显示。这段代码已经有好几年的历史了,在将其移植到Windows时,我注意到它不再编译了。起初我以为这是Windows特有的东西,但后来我意识到它实际上是新的OpenGL Windows 7附带的(与我每天使用的Arch Linux不同)。

那该怎么办呢?我真的不想为矩阵安装自定义数学库,我不敢相信最新的OpenGL不能"只显示缓冲区"。

我必须自己回答这个问题。经过长时间的研究,我终于找到了这个案子。这个答案完美地解释了发生了什么。此外,我在Qt下载部分不知何故错过了这个:

默认情况下,Windows脱机安装程序是基于ANGLE的。

简而言之,是什么导致了更复杂的解释:

Windows上的Qt 5可以配置为使用OpenGL驱动程序,或者通过ANGLE库的DirectX驱动程序。

我很惊讶这么少(一个?)so的答案提到了这一点。上下文、四边形、着色器有很多可怕的东西,但解决方案非常简单。希望它能帮助到别人。