Rory Thoman Rory Thoman - 3 months ago 17
C++ Question

openGL crashing when calling glGenBuffers

I'm learning OpenGL via http://learnopengl.com/ however I am crashing when I am trying to bind the buffers in the 'hello triangle' part of the tutorial. I have prior coding experience in C++ but I can't work out what is wrong.

My Code:

#include <iostream>

#define GLEW_STATIC
#include <GL/glew.h>
#include <GL/glfw3.h>
#include <GL/gl.h>

using namespace std;



const GLuint WIDTH = 800, HEIGHT = 600;

void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode);
int initializeWindow(GLFWwindow* window);
int main() {

GLFWwindow* window;

cout << "Creating Triangles" << endl;
GLfloat triangles[] = {
-0.5f, -0.5f, 0.0f,
0.5f, -0.5f, 0.0f,
0.5f, 0.5f, 0.0f
};

cout << "Initialising GLFW" << endl;
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);

cout << "Initialising Window..." << endl;
window = glfwCreateWindow(WIDTH, HEIGHT, "LearnOpenGL", NULL, NULL);

cout << "Setting Callback Functions..." << endl;
glfwSetKeyCallback(window, key_callback);

cout << "Binding Buffers" << endl;
GLuint VBO;
glGenBuffers(1, &VBO); // <--- Crashing here
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(triangles), triangles, GL_STATIC_DRAW);

if (initializeWindow(window) == -1) {
return -1;
}

while(!glfwWindowShouldClose(window)) {
glfwPollEvents();

glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);

glfwSwapBuffers(window);
}

cout << "Terminating..." << endl;
glfwTerminate();
return 0;
}

int initializeWindow(GLFWwindow* window) {

if (window == NULL) {
cout << "Failed to create GLFW window... exiting" << endl;
glfwTerminate();
return -1;
}

glfwMakeContextCurrent(window);

glewExperimental = GL_TRUE;
if(glewInit() != GLEW_OK) {
cout << "Failed to initialize GLEW... exiting" << endl;
return -1;
}

int width, height;
glfwGetFramebufferSize(window, &width, &height);
glViewport(0, 0, width, height);

return 0;
}

void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode) {
if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) {
glfwSetWindowShouldClose(window, GL_TRUE);
}
}


I am getting just a generic 'not responding' crash, no errors in the console. Any help will be greatly appreciated, thanks.

Answer

You need to call initializeWindow just after the window creation and before any call to gl functions. This is necessary in order to make current windows active and initialize glew (these operations are done inside initializewindow)

Comments