как использовать функции opengl в sdl2?

Рейтинг: 0Ответов: 1Опубликовано: 16.04.2023

Всем привет. Я подключил SDL2 к Visual Studio 2022, чтобы сделать окно и работать с openGl. Я подключаю библиотеки SDL_opengl.h, gl/gl.h, gl/glu.h, но функции openGl вызывают ошибку, пишет ссылка на неразрешенный внешний символ. Подскажите как мне подключить функции openGL в SDL?

#include <cstdio>
#include <SDL.h>
#include <SDL_opengl.h>
#include <gl/gl.h>
#include <gl/glu.h>
#include <cstdlib>

int main(int argc, char* args[])
{

    if (SDL_Init(SDL_INIT_VIDEO) < 0) {
        exit(EXIT_FAILURE);
    }

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

    SDL_Window* window = SDL_CreateWindow("Clock",
        100,
        100,
        600,
        600,
        SDL_WINDOW_OPENGL);

    if (window == nullptr) {
        exit(EXIT_FAILURE);
    }

    bool gQuit = false;

    while (!gQuit) {
        SDL_Event e;
        while (SDL_PollEvent(&e) != 0) {
            if (e.type == SDL_QUIT) {
                gQuit = true;
            }

            // здесь вызывается ошибка
            // ссылка на неразрешенный внешний символ __imp_glClearColor в функции SDL_main.    
            glClearColor(0, 0, 0, 1);
            glClear(GL_COLOR_BUFFER_BIT);
            // Обновление и рисование сцены
            //UpdateCurrentScene();
            //DrawCurrentScene();
            // В конце - вывод нарисованного кадра в окно на экране
            SDL_GL_SwapWindow(window);
        }
     }

    SDL_DestroyWindow(window);
    SDL_Quit();

    return 0;
}   

Ответы

▲ 0

Во первых,если я не ошибаюсь SDL2 предоставляет интерфейс для работы с OpenGL и вы его подключили здесь:

#include <SDL/SDL_opengl_.h>

И можно оставить только этот заголовочный файл для взаимодействия с OpenGL через SDL2, нет необходимости подключать:

#include <GL/GL.h>
#include <GL/glu.h>

Ошибка возникает скорее всего со стороны компоновщика(Linker), а не компилятора, так как у вас не подключены .lib/.dll файлы где описана реализация функций из

#include <GL/GL.h>
#include <GL/glu.h>