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?

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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.