2015-12-22 2 views
0

У меня есть проблема в рамках моего проекта с использованием qt 5.5.1 и openGL GLSL. Я пытаюсь отобразить skybox, и поэтому я создал класс. Этот наследует QOpenGLFunctions_3_1. Этот последний класс содержит много функций gl. Теперь на моем конструкторе с текстурой неба, я инициализировать свои массивы (вершинные и индексные), а затем я это сделать:glGenVertexArrays QOpenGLFunctions_3_1 нарушение прав доступа на чтение

glGenVertexArrays(1, &m_vaoHandle); 
glBindVertexArray(m_vaoHandle); 

GLuint handle[2] = {0, 1}; 
glGenBuffers(2, handle); 

glBindBuffer(GL_ARRAY_BUFFER, handle[0]); 
glBufferData(GL_ARRAY_BUFFER, 24 * 3 * sizeof(float), v, GL_STATIC_DRAW); 

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, handle[1]); 
glBufferData(GL_ELEMENT_ARRAY_BUFFER, 36 * sizeof(GLuint), el, GL_STATIC_DRAW); 

У меня есть нарушение права доступа для чтения на вторую линию. Если я поместил две первые строки в конец, нарушение доступа к чтению будет отображаться на первом glBindBuffer ... Решение должно использовать glew, но я не хочу. Я взял код в начальный, который не использовал этой библиотеки (OpenGL 4.0 Shading Cookbook). Вы знаете, как я могу это исправить?

+0

Просто потому, что вы унаследовали от 'QOpenGLFunctions_3_1', это не значит, что вы можете использовать эти функции. Вы правильно инициализировали все до использования? Пожалуйста, покажите ** полный ** пример, демонстрирующий проблему. Вам не нужно ничего фантастического, просто один 'main.cpp' с классом, который показывает проблему, и любой необходимый код инициализации OpenGL в самом' main'. –

ответ

0

В большинстве случаев у меня была ошибка, проблема заключалась в том, что я пытался инициализировать что-то до того, как OpenGl настроил. В вашем случае я считаю, что проблема будет заключаться в том, что инициализация вашего вершинного массива skybox вызывается до того, как вы установите Glew up или GLUT. Эти функции OpenGl, такие как glGenVertexArrays, поступают не напрямую из opengl32.dll, они могут быть загружены с графического процессора, чтобы он был правильно инициализирован, поэтому вы не можете использовать его без дальнейшей инициализации.

0

Я забыл инициализироватьOpenGLFunctions(); линия. Эта строка необходима в каждом классе с использованием функций QOpenGLFunctions_3_1, а не только в начале конвейера openGL.

Смежные вопросы