【问题标题】:SDL2 OpenGL Point renderingSDL2 OpenGL 点渲染
【发布时间】:2019-09-21 23:52:49
【问题描述】:

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

【问题讨论】:

  • 如果你想使用Legacy OpenGL 并通过glBegin/glEnd sequencis 绘制,那么你必须使用兼容性配置文件上下文 (SDL_GL_CONTEXT_PROFILE_COMPATIBILITY)。否则,您必须创建一个Shader,创建一个Vertex Buffer Object 和一个Vertex Array Object。但要解释这一点对于一个问题来说太宽泛了。
  • 嗨@Rabbid76 - 我正在阅读一本相对较旧的关于 3D 计算机图形学的书,只是为了好玩和对算法感兴趣。我的重点是让示例运行(尽可能少的 tweeks),而不是(还)最新的 API。为此,您提到的兼容性上下文非常完美。非常感谢!!

标签: opengl sdl sdl-2 glkit


【解决方案1】:

glBegin/glEnd 序列已被弃用,并且不受 cor 配置文件 Context 的支持。
您必须创建一个Shader、一个Vertex Buffer Object 和一个Vertex Array Object

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

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

SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_COMPATIBILITY);

【讨论】:

    猜你喜欢
    • 2015-05-06
    • 2021-05-14
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多