使用两个不同程序对帧缓冲区进行 OpenGL 渲染无法在 NVidia GeForce RTX 2080 上正常工作

问题描述 投票:0回答:1

我使用 LWJGL 和 Clojure 编写了一个测试套件来测试使用帧缓冲区的 OpenGL 渲染。 以下程序应该将两个四边形渲染到帧缓冲区中。 请参阅此处了解离屏渲染实现。

(def vertex-passthrough
"#version 410 core
in vec3 point;
void main()
{
  gl_Position = vec4(point, 1);
}")

(def fragment-blue
"#version 410 core
out vec3 fragColor;
void main()
{
  fragColor = vec3(0.0, 0.0, 1.0);
}")

(def fragment-red
"#version 410 core
out vec3 fragColor;
void main()
{
  fragColor = vec3(1.0, 0.0, 0.0);
}")

(fact "Correct switching between two vertex array objects and shader programs"
  (offscreen-render 160 120
    (let [indices   [0 1 3 2]
          vertices1 [-1.0 -1.0 0.1, 0.5 -1.0 0.1, -1.0 0.5 0.1, 0.5 0.5 0.1]
          vertices2 [-0.5 -0.5 0.2, 1.0 -0.5 0.2, -0.5 1.0 0.2, 1.0 1.0 0.2]
          program1  (make-program :sfsim.render/vertex [vertex-passthrough] :sfsim.render/fragment [fragment-red])
          program2  (make-program :sfsim.render/vertex [vertex-passthrough] :sfsim.render/fragment [fragment-blue])
          vao1      (make-vertex-array-object program1 indices vertices1 ["point" 3])
          vao2      (make-vertex-array-object program2 indices vertices2 ["point" 3])]
      (clear (vec3 0.0 0.0 0.0))
      (use-program program1)
      (render-quads vao1)
      (use-program program2)
      (render-quads vao2)
      (destroy-vertex-array-object vao2)
      (destroy-vertex-array-object vao1)
      (destroy-program program2)
      (destroy-program program1))) => (is-image "test/sfsim/fixtures/render/objects.png" 0.0))

在 AMD/ATI 卡上我得到了预期的结果:

但是,使用 NVidia GeForce RTX 2080 和专有驱动程序运行相同的测试套件不会显示第一个(红色)四核:

您知道问题可能是什么吗?

linux opengl graphics nvidia lwjgl
1个回答
0
投票

我在很多地方添加了

(println (GL11/glGetError))
,但收到错误 1282。所以我禁用了所有其他测试,现在它可以工作了。我将一一启用其他测试,看看哪一个没有关闭其 OpenGL 上下文属性。

© www.soinside.com 2019 - 2024. All rights reserved.