Reusing VBO's causing errors.

I realize this thread is a bit old, but I’d rather post here than make a new thread about the same problem.

My renderer has 4 stages, and for whatever reason stages 2 3 and 4 cause issues. They work on their own, and when one of the stages is commented out, but they fail when working together. When everything is enabled and glDrawArrays in stage 4 is called, the application exists with ACCESS VIOLATION error in the nvoglv64.dll file.

I do initialize every opengl object (nothing is 0, and as I mentioned they all work perfectly when at least 1 other stage is commented out). I also checked the FBO, and it didn’t show any errors.

        // STAGE 1 (Solid Render) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            if (subSceneDebugFlag) { std::cout << "         Stage 1..." << std::endl; }

            glBindFramebuffer(GL_FRAMEBUFFER, this->subSceneFBO1);
            glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

            glUseProgram(this->subSceneShaderArray[0]);

                glActiveTexture(GL_TEXTURE0);
                glBindTexture(GL_TEXTURE_2D, this->textureAsset->colorMapID);
                glUniform1i(this->stage1ColorMapLocation, 0);

                glActiveTexture(GL_TEXTURE1);
                glBindTexture(GL_TEXTURE_2D, this->textureAsset->normalMapID);
                glUniform1i(this->stage1NormalMapLocation, 1);

                glActiveTexture(GL_TEXTURE2);
                glBindTexture(GL_TEXTURE_2D, this->textureAsset->specularMapID);
                glUniform1i(this->stage1SpecularMapLocation, 2);

                glActiveTexture(GL_TEXTURE3);
                glBindTexture(GL_TEXTURE_2D, this->textureAsset->lightMapID);
                glUniform1i(this->stage1LightMapLocation, 3);

            glEnable(GL_DEPTH_TEST);
            glDepthMask(GL_TRUE);
            glDisable(GL_BLEND);

            glEnableVertexAttribArray(0);
            glEnableVertexAttribArray(1);
            glEnableVertexAttribArray(2);
            glEnableVertexAttribArray(3);
            glEnableVertexAttribArray(4);
            glEnableVertexAttribArray(5);

            // Binding SSBO
                glBindBuffer(GL_SHADER_STORAGE_BUFFER, this->objectSSBO);
                glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 1, this->objectSSBO);

            // Binding VBO
                glBindVertexArray(this->objectVAO);
                glBindBuffer(GL_ARRAY_BUFFER, this->objectVBO);
                glDrawArrays(GL_TRIANGLES, 0, vertexIndex);

            glDisableVertexAttribArray(5);
            glDisableVertexAttribArray(4);
            glDisableVertexAttribArray(3);
            glDisableVertexAttribArray(2);

        // STAGE 2 (Solid Shading) ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            if (subSceneDebugFlag) { std::cout << "         Stage 2..." << std::endl; }

            glBindFramebuffer(GL_FRAMEBUFFER, this->subSceneFBO2);
            glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

            glUseProgram(this->subSceneShaderArray[1]);

                glActiveTexture(GL_TEXTURE0);
                glBindTexture(GL_TEXTURE_2D, this->stage1ColorMapID);
                glUniform1i(this->stage2ColorMapLocation, 0);

                glActiveTexture(GL_TEXTURE1);
                glBindTexture(GL_TEXTURE_2D, this->stage1NormalMapID);
                glUniform1i(this->stage2NormalMapLocation, 1);

                glActiveTexture(GL_TEXTURE2);
                glBindTexture(GL_TEXTURE_2D, this->stage1SpecularMapID);
                glUniform1i(this->stage2SpecularMapLocation, 2);

                glActiveTexture(GL_TEXTURE3);
                glBindTexture(GL_TEXTURE_2D, this->stage1LightMapID);
                glUniform1i(this->stage2LightMapLocation, 3);

                glActiveTexture(GL_TEXTURE4);
                glBindTexture(GL_TEXTURE_2D, this->stage1DepthMapID);
                glUniform1i(this->stage2DepthMapLocation, 4);

            glEnableVertexAttribArray(0);
            glEnableVertexAttribArray(1);

            glBindVertexArray(this->subSceneVAO);
            glBindBuffer(GL_ARRAY_BUFFER, this->subSceneVBO);
            glDrawArrays(GL_TRIANGLES, 0, 6);

        // STAGE 3 (Alpha Shading) ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////            
            if (subSceneDebugFlag) { std::cout << "         Stage 3..." << std::endl; }

            glUseProgram(this->subSceneShaderArray[2]);

                glActiveTexture(GL_TEXTURE0);
                glBindTexture(GL_TEXTURE_2D, this->textureAsset->colorMapID);
                glUniform1i(this->stage3ColorMapLocation, 0);

                glActiveTexture(GL_TEXTURE1);
                glBindTexture(GL_TEXTURE_2D, this->textureAsset->normalMapID);
                glUniform1i(this->stage3NormalMapLocation, 1);

                glActiveTexture(GL_TEXTURE2);
                glBindTexture(GL_TEXTURE_2D, this->textureAsset->specularMapID);
                glUniform1i(this->stage3SpecularMapLocation, 2);

                glActiveTexture(GL_TEXTURE3);
                glBindTexture(GL_TEXTURE_2D, this->textureAsset->lightMapID);
                glUniform1i(this->stage3LightMapLocation, 3);

            glDepthMask(GL_FALSE);
            glEnable(GL_BLEND);

            glEnableVertexAttribArray(2);
            glEnableVertexAttribArray(3);
            glEnableVertexAttribArray(4);
            glEnableVertexAttribArray(5);

            // Binding SSBO
                glBindBuffer(GL_SHADER_STORAGE_BUFFER, this->objectSSBO);
                glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 1, this->objectSSBO);

            // Binding VBO
                glBindVertexArray(this->objectVAO);
                glBindBuffer(GL_ARRAY_BUFFER, this->objectVBO);
                glDrawArrays(GL_TRIANGLES, 0, vertexIndex);

            glDepthMask(GL_TRUE);

    // STAGE 4 (Draw To Buffer) ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////        
        if (subSceneDebugFlag) { std::cout << "         Stage 4..." << std::endl; }

            glBindFramebuffer(GL_FRAMEBUFFER, this->subSceneFBO4);

            glUseProgram(this->subSceneShaderArray[3]);

                glActiveTexture(GL_TEXTURE0);
                glBindTexture(GL_TEXTURE_2D, this->stage2ColorMapID);
                glUniform1i(this->stage4ColorMapLocation, 0);

                glActiveTexture(GL_TEXTURE1);
                glBindTexture(GL_TEXTURE_2D, this->stage1ControlMapID);
                glUniform1i(this->stage4ControlMapLocation, 1);

            glEnableVertexAttribArray(0);
            glEnableVertexAttribArray(1);

            glBindVertexArray(this->subSceneVAO);
            glBindBuffer(GL_ARRAY_BUFFER, this->subSceneVBO);
            glDrawArrays(GL_TRIANGLES, 0, 6);

I actually think it might be the VBO, since the thing works without either stage 2 or 4. I enabled everything and used glDrawArrays(GL_TRIANGLES, 0, 3) in the stage 4, and it drew exactly 1 triangle as expected, but drawing 2 causes the error.

It is the same VAO/VBO as used in stage 2, which is even more strange.

The VAO/VBO is initialized as:

    // Sub Scene VBO
        glGenBuffers(1, &(this->subSceneVBO));
        glBindBuffer(GL_ARRAY_BUFFER, this->subSceneVBO);
        glBufferData(GL_ARRAY_BUFFER, sizeof(this->subScenePlanePoints), this->subScenePlanePoints, GL_STATIC_DRAW);

        glGenVertexArrays(1, &(this->subSceneVAO));
        glBindVertexArray(this->subSceneVAO);
        glBindBuffer(GL_ARRAY_BUFFER, this->subSceneVBO);
        glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, (3 + 2) * sizeof(GLfloat), NULL);
        glEnableVertexAttribArray(0);
        glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, (3 + 2) * sizeof(GLfloat), (GLvoid*)(3 * sizeof(GLfloat)));
        glEnableVertexAttribArray(1);

I am really lost here, it’s driving me crazy. What are the other ways I can explore to figure out where the problem is?

I updated the drivers to the latest version, and the problem remained.

EDIT:

Never mind that, I realized that I only EnableVertexAttribArray once when I made the VAO. I removed all of those things and it works now.