glCreateShader verursacht einen Segmentierungsfehler

8

Ich kann keinen Shader erstellen, wenn ich versuche, Shader mit sfml zu verwenden. Die Funktion glCreateShader (GL_VERTEX_SHADER); verursacht einen Segmentierungsfehler. Zuerst habe ich es gegoogelt und festgestellt, dass es das tut, wenn das Programm keinen offenen Kontext hat. Ich habe zuerst SDL ausprobiert, aber die schlechte Dokumentation und "Schauen Sie sich den Header an, um zu wissen, was zu tun ist" haben mich dazu gebracht, mich für sfml zu entscheiden

Der Code, der den Seg-Fehler verursacht, ist unten

    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);

    //...

Ich schließe glew, gl.h, sfml-window, sfml-system mit opengl 2.1 unter gcc linux ein.

Was fehlt?

ibrabeicker
quelle

Antworten:

15

Sie überprüfen keine OpenGL-Erweiterungen, -Versionen usw.

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

Dieser Code muss nach dem Erstellen des OpenGL-Kontexts, jedoch vor der Verwendung möglicherweise nicht vorhandener Funktionen erfolgen. Weitere Details auf der GLEW-Webseite

Trevor Powell
quelle
glewInit gibt 1 zurück und glewGetString (err) gibt "1.6.0" zurück
ibrabeicker
Diese '1'-Rückgabe ist GLEW_ERROR_NO_GL_VERSION. Dies bedeutet, dass Sie keinen OpenGL-Kontext haben. Übergeben Sie 'err' nicht an glewGetString () - übergeben Sie es an glewGetErrorString (), um die druckbare Version der Fehlermeldung zu erhalten.
Trevor Powell
Sollte der Kontext nicht erstellt werden, wenn ich den Konstruktor zu sf :: Window aufrufe?
Ibrabeicker
Ich kenne SFML nicht, also weiß ich nicht, was Sie tun müssen, um den OpenGL-Kontext in dieser Bibliothek zu erstellen (vielleicht kann jemand anderes eine andere Antwort posten und dieses Wissen ausfüllen?) Aber ich benutze GLEW häufig und der von Ihnen veröffentlichte Fehlerwert bedeutet, dass zum Zeitpunkt des Aufrufs von glewInit () kein OpenGL-Kontext erstellt wurde. Vermutlich müssen Sie noch etwas tun?
Trevor Powell
Ich folgte dem SFML-Tutorial auf ihrer Website. Ich werde Ihre Antwort akzeptieren, aber wie erstellen Sie einen offenen Kontext? Ich habe auch kein Glück mit SDL
ibrabeicker