Создание контекста OpenGL 3.2 / 3.x в SDL 1.3

Я столкнулся с проблемой, когда SDL сообщает, что не поддерживает контексты OpenGL 3.x. Я пытаюсь следовать этому руководству: Создание межплатформенного контекста OpenGL 3.2 в SDL (C / SDL) . В этом случае я использую GLEW, но мне также не удалось заставить gl3.h работать с этим.Это код, с которым я закончил:

#include 
#include     

int Testing::init()
        {
            if(SDL_Init(SDL_INIT_EVERYTHING) < 0)
            {
                DEBUGLINE("Error initializing SDL.");
                printSDLError();
                system("pause");
                return 1; // Error
            }

            //Request OpenGL 3.2 context.
            SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
            SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);

            //set double buffer
            SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);

            //Create window
            window = SDL_CreateWindow("OpenGL 3.2 test",
                SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
                600, 400, SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN);
            if(window == NULL) return 3; // Error

            //Print errors to console if there are any
            printSDLError(__LINE__);

            //Set up OpenGL context.
            glContext = SDL_GL_CreateContext(window);
            printSDLError(__LINE__);
            if(glContext == NULL)
            {
                DEBUGLINE("OpenGL context could not be created.");
                system("pause");
                return 4;
            }

            //Initialize glew
            GLenum err = glewInit();
            if(err != GLEW_OK)
            {
                DEBUGLINE("GLEW unable to be initialized: " << glewGetErrorString(err));
                system("pause");
                return 2;
            }

            return 0; // OK code, no error.
        }

Единственная проблема, о которой сообщается, - это попытка вызвать SDL_GL_CreateContext (window) , где SDL сообщает «GL 3.x не поддерживается». Однако как учебное пособие, так и этот пакет примеров (который я не удосужился тестировать) сообщают об успешном совмещении SDL 1.3 и OpenGL 3.2. Я знаю, что SDL 1.3 находится в середине разработки, но я несколько сомневаюсь, что даже непреднамеренная поддержка будет удалена.

Контекст все еще создается, и GLEW может нормально инициализироваться. (Я не могу понять, хоть убей, как увидеть созданную версию контекста, поскольку это должен быть основной профиль, и я тоже не знаю, как его найти. Согласно руководству, SDL_GL_SetAttribute (SDL_GL_CONTEXT_MAJOR_VERSION, 3) на самом деле ничего не делает, и в этом случае я не знаю, как создать соответствующий контекст или изменить контекст по умолчанию.)

РЕДАКТИРОВАТЬ: После некоторого тестирования благодаря полезная функция, которую дал мне Никол, я обнаружил, что независимо от параметров, которые я передаю в SDL_GL_SetAttribute , контекст всегда имеет версию 1.1. Однако установка любой версии ниже 3.0 не выдаёт ошибку, говоря, что она не поддерживается. Итак, проблема в том, что SDL видит только "базовую" версию 1.1.

Для записи, я использую Visual C ++ 2010 express, GLEW 1.7.0 и последнюю версию SDL 1.3. Я новичок в использовании всех трех из них, и мне пришлось вручную создавать библиотеки SDL как для 32-разрядной, так и для 64-разрядной версии, так что многое может пойти не так.Однако до сих пор 32 и 64-битные версии делают то же самое.

РЕДАКТИРОВАТЬ: Я использую графический процессор nVidia 360M с последней версией драйвера, который, как сообщает OpenGL Extension Viewer 4.04, имеет полную совместимость до OpenGL 3.3.

Любая помощь приветствуется.

ОБНОВЛЕНИЕ : мне удалось заставить SDL перестать кричать на меня, что он не поддерживает контексты 3.x. Проблема заключалась в том, что SDL_GL_SetAttribute должен быть установлен ДО того, как будет вызван SDL_Init :

//Request OpenGL 3.2 context.
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);

//Initialize SDL
if(SDL_Init(SDL_INIT_EVERYTHING) < 0)
{
    DEBUGLINE("Error initializing SDL.");
    return 1; // Error
}

К сожалению, GLEW по-прежнему отказывается подтверждать что-либо выше, чем OpenGL 1.1 (только GLEW_VERSION_1_1 возвращает истину), что по-прежнему озадачил меня. glGetString (GL_VERSION) также сообщает о версии 1.1.0. Кажется, что моя программа просто не знает более высоких версий, как будто они у меня вообще не установлены.

10
задан cpx 13 November 2011 в 22:36
поделиться