Ошибка передачи вершинного массива на видеокарту
Создал переменную GLuint VBO. Функция glGenBuffers работает исправно, а вот glBindBuffer(GL_ARRAY_BUFFER, &VBO) выдает ошибку "Access violating location". В чем может заключатся эта ошибка?
#include <GL\glew.h>
#include <GLFW/glfw3.h>
int main()
{
glewInit();
glfwInit();
GLFWwindow* window = glfwCreateWindow(600, 600, "asd", 0, 0);
glfwMakeContextCurrent(window);
unsigned int VBO;
glGenBuffers(1, &VBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO); // ERROR
}
Ответы (2 шт):
Большинство функций opengl можно вызывать когда контекст OpenGl создан и установлен в качестве текущего контекста для текущего потока. Обычно для этого следует создать окно платформо-специфическим методом и затем создать контекст вызовом eglCreateContext и сделать его текущим для окна в текущем потоке вызовом eglMakeCurrent или аналогичным способом. Всякие библиотеки-обертки, типа SDL, берут эту работу на себя. Соответственно при их использовании функции opengl можно вызывать после инициализации соотв. библиотеки и создания в ней окна для рендеринга.
glewInit никаких из перечисленных действий не производит.
Функция glewInit() должна вызываться после создания контекста.
#include <GL\glew.h>
#include <GLFW/glfw3.h>
int main()
{
glfwInit();
GLFWwindow* window = glfwCreateWindow(600, 600, "asd", 0, 0);
glfwMakeContextCurrent(window);
glewInit(); // !!!!!!!!!!
unsigned int VBO;
glGenBuffers(1, &VBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO); // ERROR
}