Part of the Khronos Group
OpenGL.org

The Industry's Foundation for High Performance Graphics

from games to virtual reality, mobile phones to supercomputers

Results 1 to 1 of 1

Thread: Reusing VBO's causing errors.

  1. #1

    Question 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.

    Code :
            // 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:
    Code :
        // 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.
    Last edited by Dark Photon; 02-17-2018 at 06:57 AM. Reason: Found Solution

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •