SDL2 OpenGL点渲染

时间:2019-09-21 23:52:49

标签: opengl sdl sdl-2 glkit

我想在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设置为640的渲染方法,SCREEN_HEIGHT480,这也是窗口的大小。

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,而是使课本示例运行时所做的更改最少。

1 个答案:

答案 0 :(得分:1)

glBegin/glEnd序列已弃用,并且cor配置文件Context不支持该序列。
您将需要创建一个Shader,一个Vertex Buffer Object和一个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);