FreeGlut(类似于 OpenGL)正在拍摄我的桌面而不是绘制形状

FreeGlut (Similar to OpenGL) is taking picture of my desktop instead of drawing shapes

Genpfault 极大地帮助了我编译代码。下面的代码是我目前正在使用的代码的简化版本。但是,Glut 不允许我绘制形状。当我 运行 编译后的可执行文件时,唯一发生的事情是我看到了桌面的屏幕截图。

我该如何补救才能真正在黑屏上绘制彩色三角形和多边形? Screenshot of what the program looks like when it runs

#include <iostream>
#include <GL/freeglut.h>

namespace GameBoxes
{
    template<class T>
    class Box
    {
        public:
            void display( void );
    };
} //GameBoxes

namespace GameBoxes
{
    template <class T>
    void Box<T>::display( void )
    {
        glClearColor( 0.0, 0.0, 0.0, 0.0 );       // black background
        glClear( GL_COLOR_BUFFER_BIT );
        glColor3f( 0.2, 0.2, 0.2 );
        glBegin( GL_TRIANGLES );
        glVertex2f( -0.5, -0.5 );
        glVertex2f(  0.5, -0.5 );
        glVertex2f(  0.0,  0.5 );
        glutSwapBuffers();
    }
} // GameBoxes

int main( int argc, char **argv )
{
    glutInit( &argc, argv );

    int windowPos1 = 0, windowPos2 = 0, windowSize1 = 400, windowSize2 = 400;
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH );
    glutInitWindowPosition( windowPos1, windowPos2 );
    glutInitWindowSize( windowSize1, windowSize2 );
    glutCreateWindow( "square" );

    GameBoxes::Box<double> square;

    glutSetWindowData( &square );
    glutDisplayFunc( []()
    {
        auto instance = static_cast< GameBoxes::Box<double>* >(    glutGetWindowData() );
        instance->display();
    } );
    glutMainLoop();

    return 0;
};

您错过了 glEnd

完成 glBegin/glEnd 序列
template <class T>
void Box<T>::display( void )
{
    glClearColor( 0.0, 0.0, 0.0, 0.0 );       // black background
    glClear( GL_COLOR_BUFFER_BIT );
    glColor3f( 0.2, 0.2, 0.2 );
    glBegin( GL_TRIANGLES );
    glVertex2f( -0.5, -0.5 );
    glVertex2f(  0.5, -0.5 );
    glVertex2f(  0.0,  0.5 );
    glEnd();  // <-------------- add glEnd
    glutSwapBuffers();
}

请注意,几十年来不推荐使用 glBegin/glEnd 序列绘制。 阅读 Fixed Function Pipeline and see Vertex Specification and Shader 了解最先进的渲染方式。