0
\$\begingroup\$

I'm currently learning to properly use multithreading in C++ in combination with OpenGL and GLFW, and I encounter a strange bug in my application. I'm generating a procedurally generated terrain in a sidethread, but everytime I want to create the buffer for the generated terrain(chunk), glGenBuffers() just gives me back the value I put in! It does not create a proper buffer. I even checked with gDEBugger, no VBO's created.

Here's the pseudo code:

void init(){ //This is in the main thread!
    sharedWindow = glfwCreateWindow(1, 1, "shared", NULL, NULL);
    mainWindow = glfwCreateWindow(400, 400, "main", NULL, sharedWindow);
    glfwMakeContextCurrent(mainWindow);
}


void terrainGeneratorLoop() { //This is in another thread!
    glfwMakeContextCurrent(sharedWindow);
    while(running){

        /* Generate vertex data for terrain */

        //Upload generated data into GPU:
        unsigned int m_vbo = -1;
        glGenBuffers(1, &m_vbo); //After this call, m_vbo is still -1 (Well actually 4294967295, but you get the point)
        glBindBuffer(GL_ARRAY_BUFFER, m_vbo);
        glBufferData(GL_ARRAY_BUFFER, data.size() * sizeof(vertex), &data.at(0), GL_STATIC_DRAW);
    }
    glfwMakeContextCurrent(nullptr);
}

I'm pretty sure I'm doing something wrong with my context handling and that shared window. And sorry because of the fact that this is only pseudo code, my structure of the project and classes is way to complex to paste in in here!

EDIT: When I call the terrainGeneratorLoop() in the main thread, everything works as It should.

\$\endgroup\$
  • 1
    \$\begingroup\$ Have you checked what result glGetError() returns in the case where it fails? \$\endgroup\$ – user1118321 Jun 19 '17 at 1:34
1
\$\begingroup\$

Okay, my code above is correct. I didn't properly store the shared GLFW window! That was somewhere else.

| improve this answer | |
\$\endgroup\$

Not the answer you're looking for? Browse other questions tagged or ask your own question.