OpenGL nvoglv64.dll访问冲突

yws3nbqq  于 2024-01-07  发布在  其他
关注(0)|答案(2)|浏览(274)

我正在使用OpenGL做一个4阶段渲染管道。在我改变了一些事情(并更新了驱动程序)后,代码停止工作。错误是由以下函数中的阶段4引起的:

  1. // STAGE 1 (Solid Render) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  2. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  3. if (subSceneDebugFlag) { std::cout << " Stage 1..." << std::endl; }
  4. glBindFramebuffer(GL_FRAMEBUFFER, this->subSceneFBO1);
  5. glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
  6. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  7. glUseProgram(this->subSceneShaderArray[0]);
  8. glActiveTexture(GL_TEXTURE0);
  9. glBindTexture(GL_TEXTURE_2D, this->textureAsset->colorMapID);
  10. glUniform1i(this->stage1ColorMapLocation, 0);
  11. glActiveTexture(GL_TEXTURE1);
  12. glBindTexture(GL_TEXTURE_2D, this->textureAsset->normalMapID);
  13. glUniform1i(this->stage1NormalMapLocation, 1);
  14. glActiveTexture(GL_TEXTURE2);
  15. glBindTexture(GL_TEXTURE_2D, this->textureAsset->specularMapID);
  16. glUniform1i(this->stage1SpecularMapLocation, 2);
  17. glActiveTexture(GL_TEXTURE3);
  18. glBindTexture(GL_TEXTURE_2D, this->textureAsset->lightMapID);
  19. glUniform1i(this->stage1LightMapLocation, 3);
  20. glEnable(GL_DEPTH_TEST);
  21. glDepthMask(GL_TRUE);
  22. glDisable(GL_BLEND);
  23. glEnableVertexAttribArray(0);
  24. glEnableVertexAttribArray(1);
  25. glEnableVertexAttribArray(2);
  26. glEnableVertexAttribArray(3);
  27. glEnableVertexAttribArray(4);
  28. glEnableVertexAttribArray(5);
  29. // Binding SSBO
  30. glBindBuffer(GL_SHADER_STORAGE_BUFFER, this->objectSSBO);
  31. glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 1, this->objectSSBO);
  32. // Binding VBO
  33. glUnmapBuffer(GL_ARRAY_BUFFER); // Make sure the buffer is unmapped
  34. glBindVertexArray(this->objectVAO);
  35. glBindBuffer(GL_ARRAY_BUFFER, this->objectVBO);
  36. glDrawArrays(GL_TRIANGLES, 0, vertexIndex);
  37. glDisableVertexAttribArray(5);
  38. glDisableVertexAttribArray(4);
  39. glDisableVertexAttribArray(3);
  40. glDisableVertexAttribArray(2);
  41. // STAGE 2 (Solid Shading) ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  42. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  43. if (subSceneDebugFlag) { std::cout << " Stage 2..." << std::endl; }
  44. glBindFramebuffer(GL_FRAMEBUFFER, this->subSceneFBO2);
  45. glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
  46. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  47. glUseProgram(this->subSceneShaderArray[1]);
  48. glActiveTexture(GL_TEXTURE0);
  49. glBindTexture(GL_TEXTURE_2D, this->stage1ColorMapID);
  50. glUniform1i(this->stage2ColorMapLocation, 0);
  51. glActiveTexture(GL_TEXTURE1);
  52. glBindTexture(GL_TEXTURE_2D, this->stage1NormalMapID);
  53. glUniform1i(this->stage2NormalMapLocation, 1);
  54. glActiveTexture(GL_TEXTURE2);
  55. glBindTexture(GL_TEXTURE_2D, this->stage1SpecularMapID);
  56. glUniform1i(this->stage2SpecularMapLocation, 2);
  57. glActiveTexture(GL_TEXTURE3);
  58. glBindTexture(GL_TEXTURE_2D, this->stage1LightMapID);
  59. glUniform1i(this->stage2LightMapLocation, 3);
  60. glActiveTexture(GL_TEXTURE4);
  61. glBindTexture(GL_TEXTURE_2D, this->stage1DepthMapID);
  62. glUniform1i(this->stage2DepthMapLocation, 4);
  63. glEnableVertexAttribArray(0);
  64. glEnableVertexAttribArray(1);
  65. glBindVertexArray(this->subSceneVAO);
  66. glBindBuffer(GL_ARRAY_BUFFER, this->subSceneVBO);
  67. glDrawArrays(GL_TRIANGLES, 0, 6);
  68. // STAGE 3 (Alpha Shading) ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  69. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  70. if (subSceneDebugFlag) { std::cout << " Stage 3..." << std::endl; }
  71. glUseProgram(this->subSceneShaderArray[2]);
  72. glActiveTexture(GL_TEXTURE0);
  73. glBindTexture(GL_TEXTURE_2D, this->textureAsset->colorMapID);
  74. glUniform1i(this->stage3ColorMapLocation, 0);
  75. glActiveTexture(GL_TEXTURE1);
  76. glBindTexture(GL_TEXTURE_2D, this->textureAsset->normalMapID);
  77. glUniform1i(this->stage3NormalMapLocation, 1);
  78. glActiveTexture(GL_TEXTURE2);
  79. glBindTexture(GL_TEXTURE_2D, this->textureAsset->specularMapID);
  80. glUniform1i(this->stage3SpecularMapLocation, 2);
  81. glActiveTexture(GL_TEXTURE3);
  82. glBindTexture(GL_TEXTURE_2D, this->textureAsset->lightMapID);
  83. glUniform1i(this->stage3LightMapLocation, 3);
  84. glDepthMask(GL_FALSE);
  85. glEnable(GL_BLEND);
  86. glEnableVertexAttribArray(0);
  87. glEnableVertexAttribArray(1);
  88. glEnableVertexAttribArray(2);
  89. glEnableVertexAttribArray(3);
  90. glEnableVertexAttribArray(4);
  91. glEnableVertexAttribArray(5);
  92. // Binding SSBO
  93. glBindBuffer(GL_SHADER_STORAGE_BUFFER, this->objectSSBO);
  94. glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 1, this->objectSSBO);
  95. // Binding VBO
  96. glBindVertexArray(this->objectVAO);
  97. glBindBuffer(GL_ARRAY_BUFFER, this->objectVBO);
  98. glDrawArrays(GL_TRIANGLES, 0, vertexIndex);
  99. glDepthMask(GL_TRUE);
  100. glDisableVertexAttribArray(5);
  101. glDisableVertexAttribArray(4);
  102. glDisableVertexAttribArray(3);
  103. glDisableVertexAttribArray(2);
  104. // STAGE 4 (Draw To Buffer) ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  105. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  106. if (subSceneDebugFlag) { std::cout << " Stage 4..." << std::endl; }
  107. glBindFramebuffer(GL_FRAMEBUFFER, this->subSceneFBO4);
  108. glUseProgram(this->subSceneShaderArray[3]);
  109. glActiveTexture(GL_TEXTURE0);
  110. glBindTexture(GL_TEXTURE_2D, this->stage2ColorMapID);
  111. glUniform1i(this->stage4ColorMapLocation, 0);
  112. glActiveTexture(GL_TEXTURE1);
  113. glBindTexture(GL_TEXTURE_2D, this->stage1ControlMapID);
  114. glUniform1i(this->stage4ControlMapLocation, 1);
  115. glEnableVertexAttribArray(0);
  116. glEnableVertexAttribArray(1);
  117. glBindVertexArray(this->subSceneVAO);
  118. glBindBuffer(GL_ARRAY_BUFFER, this->subSceneVBO);
  119. glDrawArrays(GL_TRIANGLES, 0, 6);

字符串
如果我注解掉阶段4,就没有错误。如果我注解掉阶段2,阶段4就能正常工作。事实上,我相信FBO 2和FBO 4中的某些东西导致了这个问题,它们之间唯一共享的是 VAO /VBO。
Google搜索没有提供任何结果。所有情况下的问题都是由驱动程序或错误的指针引起的。正如我提到的,当分开使用时,它们都可以工作,所以我的对象初始化是毫无疑问的。
其他原因包括错误或缺少属性,我不认为这里是这样。
我想知道我错过了什么。
在两个帧缓冲区对象中使用相同的 VAO /VBO是否会成为问题?
编辑:最新的驱动程序仍然有问题。

ao218c7q

ao218c7q1#

glEnableVertexAttribArray()仅在创建 VAO 时调用。之后您不应该再碰它,绑定适当的 VAO 将做到这一点。
通过启用/禁用的东西,我正在改变当前连接的 VAO ,这导致了问题的下线。

thigvfpy

thigvfpy2#

这可能是由一个广泛的事情,因为它是一个驱动程序的错误。在我的情况下,我的错误来自:
glTexImage2D调用使用GL_RGBA而不是GL_RGB。(我的图像没有alpha通道,所以驱动程序试图访问无效的额外内存位)

相关问题