glCreateShader causa falha de segmentação

8

Não consigo criar um sombreador ao tentar usar sombreadores com sfml. A função glCreateShader (GL_VERTEX_SHADER); causa uma falha de segmentação. No começo, pesquisei no Google e descobri que faz isso quando o programa não possui um contexto de OpenGL. Tentei o SDL primeiro, mas a documentação ruim e "olhe o cabeçalho para saber o que fazer" me levou a usar o sfml

o código que causa a falha seg está abaixo

    sf::Window App(sf::VideoMode(800, 600, 32), "SFML OpenGL");

// Set color and depth clear value
glClearDepth(1.f);
glClearColor(0.f, 0.f, 0.f, 0.f);

// Enable Z-buffer read and write
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);

// Setup a perspective projection
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

GLuint vertShader = glCreateShader(GL_VERTEX_SHADER);

    //...

Estou incluindo o glew, gl.h, sfml-window, sfml-system, usando o opengl 2.1 no gcc linux.

O que está faltando?

ibrabeicker
fonte

Respostas:

15

Você não está verificando extensões, versão ou etc. do OpenGL

GLenum err = glewInit();
if (err != GLEW_OK)
  exit(1); // or handle the error in a nicer way
if (!GLEW_VERSION_2_1)  // check that the machine supports the 2.1 API.
  exit(1); // or handle the error in a nicer way

Esse código precisa acontecer após a criação do contexto OpenGL, mas antes de usar qualquer função potencialmente não existente. Mais detalhes na página da web GLEW

Trevor Powell
fonte
glewInit retorna 1 e glewGetString (err) retorna "1.6.0"
ibrabeicker
esse retorno '1' é GLEW_ERROR_NO_GL_VERSION. Isso significa que você não tem um contexto OpenGL. Não passe 'err' para glewGetString () - passe para glewGetErrorString () para obter a versão imprimível da mensagem de erro.
precisa saber é o seguinte
o contexto não deve ser criado quando eu chamo o construtor para sf :: Window?
Ibrabeicker 23/01/12
Eu não conheço SFML, então não sei o que você precisa fazer para criar o contexto OpenGL nessa biblioteca (talvez alguém possa postar outra resposta, preenchendo esse conhecimento?) Mas eu uso muito o GLEW , e o valor do erro que você postou significa que, no momento em que você chamou glewInit (), nenhum contexto OpenGL foi criado. Então, presumivelmente, há algo mais que você precisa fazer?
Trevor Powell
Eu segui o tutorial SFML no site deles. Aceito sua resposta, mas como você cria um contexto de OpenGL? Eu estou tendo nenhuma sorte com SDL bem
ibrabeicker