OpenGL NVOGLV64.DLL访问违规

OpenGL nvoglv64.dll access violation

本文关键字:访问 DLL NVOGLV64 OpenGL      更新时间:2023-10-16

我正在使用OpenGL进行4级渲染管道。在我更改了几件事(并更新驱动程序(后,代码停止工作。错误是由以下功能中的阶段4引起的:

    // 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
                glUnmapBuffer(GL_ARRAY_BUFFER); // Make sure the buffer is unmapped
            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(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);
        glDepthMask(GL_TRUE);
        glDisableVertexAttribArray(5);
        glDisableVertexAttribArray(4);
        glDisableVertexAttribArray(3);
        glDisableVertexAttribArray(2);
// 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);

如果我评论第4阶段,则没有错误。如果我评论第2阶段,则第4阶段正常工作。实际上,我相信FBO2和FBO4中的某些问题会引起问题,它们之间唯一共享的是VAO/VBO。

Google搜索没有提供任何结果。在所有情况下,问题都是由驾驶员或不良指针引起的。正如我提到的那样,它们都在使用分离时都可以工作,因此我的对象初始化毫无疑问。

其他原因包括错误或丢失的属性,我认为这并非如此。

我想知道我缺少什么。

可以在两个帧缓冲区对象中使用相同的VAO/VBO?

编辑:最新驱动程序仍然有问题。

glenableVertexattribarray((仅在创建VAO时被调用。之后,您根本不应该触摸它,绑定适当的VAO会这样做。

通过启用/禁用事物,我正在更改当前附加的VAO,这引起了线条的问题。