SDL_GL_SetAttribute приводит к тому, что некоторые функции opengl становятся нулевыми - PullRequest
0 голосов
/ 12 января 2019

Установка значений выше, например, 32 для SDL_GL_DEPTH_SIZE приводит к тому, что glCreateShader будет нулевым.

Я не знаю, что вызывает такое поведение, потому что я не получаю никаких ошибок при настройке атрибутов и создании контекста. Вот минималистичный пример.

#include <iostream>
#include <SDL2/SDL.h>
#include <GL/glew.h>
#include <SDL2/SDL_opengl.h>

const int WIDTH = 800;
const int HEIGHT = 600;

int main(int argc, char **argv)
{
    SDL_Init(SDL_INIT_EVERYTHING);

    int response;
    response = SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, 
        SDL_GL_CONTEXT_PROFILE_CORE);

    response = SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
    response = SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);
    response = SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);

    if (response < 0) {
        std::cout << "Setting Attribute: DEPTH_SIZE Failed\n";
        return 0;
    }

    SDL_Window *window = SDL_CreateWindow("TestApp", WIDTH >> 1, HEIGHT >> 1, WIDTH, HEIGHT, SDL_WINDOW_OPENGL);

    if (window == nullptr) {
        std::cout << "window not setup\n";
        return 0;
    }

    SDL_GLContext context = SDL_GL_CreateContext(window);
    if (context == nullptr) {
        std::cout << "context failed\n";
        return 0;
    }

    glewExperimental = GL_TRUE;

    if (GLEW_OK != glewInit()) {
        std::cout << "Failed to initialize glew\n";
        return 0;
    }

    glViewport(0, 0, WIDTH, HEIGHT);

    int value; 
    SDL_GL_GetAttribute(SDL_GL_DEPTH_SIZE, &value);
    std::cout << "Querying Depth size: " << value << "\n";

    std::cout << "glEnable: " << (glEnable ? "Available" : "NULL") << "\n";
    std::cout << "glCreateShader: " << (glCreateShader ? "Available" : "NULL") << "\n";

    SDL_GL_DeleteContext(context);
    SDL_DestroyWindow(window);
    SDL_Quit();
    return 0;
}

вывод для DEPTH_SIZE = 24 bits

Querying Depth size: 24
glEnable: Available
glCreateShader: Available

вывод для DEPTH_SIZE = 32 bits

Querying Depth size: 32
glEnable: Available
glCreateShader: NULL
...