OpenGL rendering to framebuffer with two different programs does not work correctly with NVidia GeForce RTX 2080

121 views Asked by At

I wrote a test suite using LWJGL and Clojure to test OpenGL rendering using frame buffers. The following program is supposed to render two quads into the frame buffer. See here for offscreen rendering implementation.

(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))

On an AMD/ATI card I get the expected result:

AMD/ATI graphics card

However running the same test suite with NVidia GeForce RTX 2080 and proprietary drivers does not show the first (the red) quad:

NVidia GeForce RTX 2080

Do you have any ideas what the problem could be?

1

There are 1 answers

0
wedesoft On

I added (println (GL11/glGetError)) in many places and I was getting error 1282. So I disabled all other tests and now it works. I'll enable the other tests one by one and see which one is not closing its OpenGL context propery.