首页 > 解决方案 > SDL2 OpenGL 点渲染

问题描述

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

我已经设置了这个属性:

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设置为 的渲染方法640SCREEN_HEIGHT也是480窗口的大小。

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,而是让教科书示例以最小的更改运行。

标签: openglsdlsdl-2glkit

解决方案


glBegin/glEnd序列已弃用,并且不支持 cor profile Context
您必须创建一个Shader、一个Vertex Buffer Object和一个Vertex Array Object

如果您想使用Legacy OpenGL并通过glBegin/ glEndsequencis 绘制,那么您必须使用兼容性配置文件上下文 ( SDL_GL_CONTEXT_PROFILE_COMPATIBILITY)。

因此,解决问题的最小修复是:

SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_COMPATIBILITY);

推荐阅读