SDL2 OpenGL 点渲染

SDL2 OpenGL Point rendering

我想在 Mac 上使用 SDL2 和 OpenGL 在屏幕上渲染随机定位的点。作为设置的一部分,window 打开并呈现为蓝色(代码未显示),但除此之外什么都没有呈现。

我设置了这个属性:

SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 4);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1)

这是SCREEN_WIDTH设置为640的渲染方式,SCREEN_HEIGHT就是480也就是window的大小。

void RunGame()
    {
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        gluOrtho2D(0, SCREEN_WIDTH, SCREEN_HEIGHT, 0);

        glColor3f(1.0, 1.0, 1.0);

        SDL_Event event;
        while (true)
        {
            SDL_PollEvent(&event);
            if (event.type == SDL_QUIT)
                break;

            int sx = rand() % SCREEN_WIDTH;
            int sy = rand() % SCREEN_HEIGHT;

            glBegin(GL_POINTS);
            glVertex2d(sx, sy);
            glEnd();
            SDL_GL_SwapWindow(mainWindow);
        }
    }

正如在下面的评论中所说,我的上下文不是最新的 OpenGL API,而是获得教科书示例 运行 最小的变化。

glBegin/glEnd sequences are deprecated and not supported by a cor profile Context.
您必须创建一个 Shader, a Vertex Buffer Object and a Vertex Array Object.

如果您想使用 Legacy OpenGL 并按 glBegin/glEnd 顺序绘制,则必须使用兼容性配置文件上下文 (SDL_GL_CONTEXT_PROFILE_COMPATIBILITY)。

所以解决问题的最小修复是:

SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_COMPATIBILITY);