OpenGL NVOGLV64.DLL访问违规
OpenGL nvoglv64.dll access violation
我正在使用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,这引起了线条的问题。
相关文章:
- 从C++dll访问C#中的一行主要参数
- 使用c#访问c++dll中带有char*参数的函数时发生AccessViolationException
- 跨 DLL 边界访问虚拟方法是否安全/可能?
- 在类 12.exe 中0x7B37FF80 (ucrtbased.dll) 引发异常: 0xC0000005:访问冲突读
- 从 exe 和 dll 访问静态库中的 extern 变量
- 从Delphi调用C++DLL时发生访问冲突
- 在 DLL 中嵌入 Python:Py_DECREF列表对象时访问冲突读取位置
- 将 std::string 作为参数从一个 DLL 传递到另一个 DLL 引发访问冲突错误
- 如果使用低于 VS2015 的 vc++ 编译器版本编译,则 DLL 中的访问冲突
- x64 DLL 堆栈访问超出范围?
- Windows错误:异常:使用从C++到Python的ctypes创建DLL时出现访问冲突或Windows错误193
- 在尝试访问 DLL 函数时从 JVM 获取EXCEPTION_ACCESS_VIOLATION
- 如何从调用程序访问 DLL 的变量?
- 访问 DLL 中的 LStrHandle
- C++:使多个进程同时访问 DLL
- 从PHP DLL访问DLL函数
- Python -sip:如何从Python和c++访问DLL
- 访问dll方法时的访问冲突读取位置
- 访问DLL中的重载函数
- 用于c++的Python: wrapper需要访问.dll文件