glCreateShader gây ra lỗi phân đoạn


8

Tôi không thể tạo một shader khi cố gắng sử dụng các shader với sfml. Hàm glCreateShader (GL_VERTEX_SHADER); gây ra lỗi phân khúc. Lúc đầu, tôi đã googled nó và thấy rằng nó làm điều đó khi chương trình không có bối cảnh opengl. Tôi đã thử SDL trước nhưng tài liệu kém và "nhìn vào tiêu đề để biết phải làm gì" khiến tôi đi tìm sfml

mã gây ra lỗi seg là dưới đây

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

    //...

Tôi bao gồm glew, gl.h, sfml-window, sfml-system, sử dụng opengl 2.1 trên gcc linux.

Điều gì còn thiếu?

Câu trả lời:


15

Bạn không kiểm tra các tiện ích mở rộng OpenGL, phiên bản, v.v.

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

Mã này cần phải xảy ra sau khi tạo bối cảnh OpenGL, nhưng trước khi sử dụng bất kỳ chức năng nào không có khả năng tồn tại. Thêm chi tiết trên trang web GLEW


glewInit trả về 1 và glewGetString (err) trả về "1.6.0"
ibrabeicker

trả về '1' là GLEW_ERROR_NO_GL_VERSION. Điều đó có nghĩa là bạn không có bối cảnh OpenGL. Đừng chuyển 'err' vào glewGetString () - chuyển nó vào glewGetErrorString () để lấy phiên bản có thể in của thông báo lỗi.
Trevor Powell

bối cảnh không nên được tạo khi tôi gọi hàm tạo đến sf :: Window?
con rắn hổ mang

Tôi không biết SFML, vì vậy không biết bạn cần làm gì để tạo bối cảnh OpenGL trong thư viện đó (có thể người khác sẽ có thể đăng câu trả lời khác, điền vào kiến ​​thức đó?) Nhưng tôi sử dụng GLEW rất nhiều và giá trị lỗi bạn đã đăng có nghĩa là tại thời điểm bạn gọi glewInit (), không có bối cảnh OpenGL nào được tạo. Vì vậy, có lẽ bạn cần phải làm gì khác?
Trevor Powell

Tôi đã làm theo hướng dẫn SFML trên trang web của họ. Tôi sẽ chấp nhận câu trả lời của bạn nhưng làm thế nào bạn tạo ra một bối cảnh opengl? Tôi cũng không gặp may mắn với SDL
ibrabeicker
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.