SDL2 OpenGL Point рендеринг - PullRequest
       53

SDL2 OpenGL Point рендеринг

1 голос
/ 22 сентября 2019

Я хотел бы отображать случайно расположенные точки на экране с помощью SDL2 и OpenGL на Mac.В рамках настройки открывается окно, отображаемое синим цветом (код не показан), но ничего кроме этого не отображается.

Я установил следующие атрибуты:

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, что также является размером окна.

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);
        }
    }

Как указано в комментарии ниже, мой контекст не является последним OpenGLAPI, а скорее получение учебников с минимальными изменениями.

1 Ответ

1 голос
/ 22 сентября 2019

glBegin / glEnd последовательности устарели и не поддерживаются профилем cor Context .
Вам нужно будет создать Shader , Объект Vertex Buffer и Объект Vertex Array .

Если вы хотите использовать Legacy OpenGL и рисовать по glBegin/ glEnd sequencis, тогда вы должны использовать контекст профиля совместимости (SDL_GL_CONTEXT_PROFILE_COMPATIBILITY).

Итак, минимальное исправление для решения проблемы:

SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_COMPATIBILITY);
...