Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

    Using two QGLShaderProgram for objects in a same 3D scene [SOLVED]

    General and Desktop
    4
    29
    7110
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • B
      billouparis last edited by

      in this case I will see object1, but not object3, :)

      1 Reply Last reply Reply Quote 0
      • Z
        ZapB last edited by

        Hmmm, OK then. Could you post a small compilable example that shows the problem please so that we can take a look on our own machines? The simpler the better.

        Nokia Certified Qt Specialist
        Interested in hearing about Qt related work

        1 Reply Last reply Reply Quote 0
        • B
          billouparis last edited by

          I wish I could, but my program is huge!
          I could try to make a simpler one though, but at least you seem to agree that my way of thinking is correct by calling the bind method twice in the same paintGL call to use different programs for different objects in my scene, right?

          now I tried to recompiled Qt (Windows XP) to be able to get the bind source code to show up when I press F11, but now I can't even recompile my entire code. The link is failing with this message:

          g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mthreads -Wl -Wl,-subsystem,windows -o debug\ws2.exe object_script.ws2.Debug -L"d:_Personal\Progz\Qt\Qt472\lib" -lglu32 -lopengl32 -lgdi32 -luser32 -lmingw32 -lqtmaind -lQtOpenGLd4 -lQtGuid4 -lQtCored4
          mingw32-make[1]: Leaving directory D:/_Work/QTProjectsDir/WS2-build-desktop' mingw32-make: Leaving directory D:/_Work/QTProjectsDir/WS2-build-desktop'
          d:/_personal/progz/qt/qtcreator_21/mingw/bin/../lib/gcc/mingw32/4.4.0/../../../../mingw32/bin/ld.exe: cannot find -lQtOpenGLd4
          collect2: ld returned 1 exit status
          mingw32-make[1]: *** [debug\ws2.exe] Error 1
          mingw32-make: *** [debug] Error 2
          The process "D:_Personal\Progz\Qt\qtcreator_21\mingw\bin\mingw32-make.exe" exited with code 2.
          Error while building project ws2 (target: Desktop)
          When executing build step 'Make'

          1 Reply Last reply Reply Quote 0
          • Z
            ZapB last edited by

            The reason I asked for a small example is that often the action of producing such an example actually allows you to find the bug yourself whilst going through the process.

            Just make a simple class that inherits QGLWidget, provide a coule of very simply drawObjectN() functions and some simple shaders. See if that reproduces the problem. If it does then we can help, if not then the problem is elsewhere in your code but at least we'll know we need to dig deeper and see more of your code.

            Wrt to your linker error, does QtOpenGLd4.lib exist on your system where the linker is looking for it?

            Nokia Certified Qt Specialist
            Interested in hearing about Qt related work

            1 Reply Last reply Reply Quote 0
            • B
              billouparis last edited by

              Yes I agree with your statement and the small openGL program.

              Concerning my new link issue:
              I actually just recompile Qt several times :
              first by calling configure -debug -opengl desktop -> but then the compilation of my application failed because it tried to open a GLES2 directory,
              so I restart by calling
              configure -debug -es2, but I got the same issue,
              i called make distclean which partially failed,
              and then recalled
              configure -debug, and since then I have this link error.
              I know I suck ;)

              1 Reply Last reply Reply Quote 0
              • Z
                ZapB last edited by

                Before reconfiguring Qt, try doing:

                @make confclean@

                I'll keep an eye out for your example.

                Nokia Certified Qt Specialist
                Interested in hearing about Qt related work

                1 Reply Last reply Reply Quote 0
                • B
                  billouparis last edited by

                  Thanks ZapB

                  1 Reply Last reply Reply Quote 0
                  • B
                    billouparis last edited by

                    Hey ZapB,
                    My first use-case was actually wrong, I spent a lot of time on this, and the use cases are as follow:
                    @
                    paintGL()
                    {

                    program1->bind();
                    drawObject1();

                    program2->bind()
                    drawObject2();

                    drawObject3();

                    }

                    then object 1 is drawn using program 1, and object 2 and object 3 are drawn using program 2. which is fine!
                    But now I have this other use case causing the issue:

                    paintGL()
                    {

                    program1->bind();
                    drawObject1();

                    program2->bind()
                    drawObject2();

                    program1->bind()
                    drawObject3();

                    }
                    @
                    then object 1 and object 3 are drawn using program1, whereas object 2 is not drawn at all.

                    It looks like the fact to return to another program (program1) before the end of paintGL function would sort of invalidate the drawing made by program2. Maybe I should add some method to force the rendering in program2, before swapping back to program1?

                    1 Reply Last reply Reply Quote 0
                    • B
                      billouparis last edited by

                      I tried to add some glFinish, and/or glEnd before swapping programs, but none of them helped in anyway to get my object 2 drawn.... Yes, I am Desperate!

                      1 Reply Last reply Reply Quote 0
                      • Z
                        ZapB last edited by

                        Have you got anywehere with preparing the simple example yet?

                        Nokia Certified Qt Specialist
                        Interested in hearing about Qt related work

                        1 Reply Last reply Reply Quote 0
                        • B
                          billouparis last edited by

                          Yes i have a very simple source code to send for you this afternoon.
                          Bill

                          1 Reply Last reply Reply Quote 0
                          • B
                            billouparis last edited by

                            Hello ZapB how do I send yo my source code? it's a zip file. is it possible to send it to you by mail or something?

                            1 Reply Last reply Reply Quote 0
                            • B
                              billouparis last edited by

                              error

                              1 Reply Last reply Reply Quote 0
                              • B
                                billouparis last edited by

                                In the meantime you can download it from here:
                                http://www.mediafire.com/?bdejk5y93gr3wqv

                                In the draw function, you will see there are four different UseCases, you can use the "define" preprocessor directive to activate each one, and see the problems occuring,

                                Thank you,
                                Bill

                                1 Reply Last reply Reply Quote 0
                                • B
                                  billouparis last edited by

                                  Hello ZapB, did you have time to test my source code?
                                  Thank you,
                                  Bill

                                  1 Reply Last reply Reply Quote 0
                                  • Z
                                    ZapB last edited by

                                    I managed to get it built yesterday but when I ran it I got some error complaining about one of your shaders not defining some variable as a varying. I can't recall which it was at the moment. I am really busy today so I'll try to take a proper look tomorrow.

                                    Nokia Certified Qt Specialist
                                    Interested in hearing about Qt related work

                                    1 Reply Last reply Reply Quote 0
                                    • B
                                      billouparis last edited by

                                      In the myWidget.cpp file, you can choose three different options declared as defines.
                                      #define PC_BILL , #define PC_WORK, #define TARGET_IMX
                                      maybe you can switch between the two firsts (either PC_BILL, or PC_WORK), and see if your vertex compiles alright then.
                                      I have this workshop forecast on monday, it could be nice if I can solve the issue before if you are able to help me ;)

                                      Thank you,
                                      Bill

                                      1 Reply Last reply Reply Quote 0
                                      • B
                                        billouparis last edited by

                                        Hello, anybody?

                                        1 Reply Last reply Reply Quote 0
                                        • M
                                          matrixx last edited by

                                          Hey, I got your program compiled using BILL definition. The output of the program:
                                          myWidget::myWidget parent WinID = 0x80650
                                          BILL : InitializeGL
                                          Vertex Shader compiled OK ""
                                          Fragment Shader compiled OK ""
                                          Program 3 linked OK ""
                                          Vertex Shader compiled OK ""
                                          Fragment Shader compiled OK ""
                                          Program 6 linked OK ""
                                          BILL : ResizeGL
                                          BILL : myWidget instance : myWidget(0x9ba6f18)
                                          model draw
                                          Error 1282 myWidget.cpp 436
                                          model draw
                                          model draw
                                          model draw
                                          BILL : myWidget ~myWidget
                                          BILL : myWidget instance : myWidget(0x9ba6f18)

                                          As visual, I saw three identical green triangles.

                                          I dunno if this helps any, I need to dive into shader programs and source code to deeply analyze what the shaders are supposed to do, and are they doing what they are suppose to :)

                                          edit: forgot to say that this output was from USE_CASE1. Running now the rest of them.

                                          edit2: Ran the rest of the use cases and got indeed some missing triangles, now digging into the code :)

                                          Nokia Certified Qt Specialist

                                          1 Reply Last reply Reply Quote 0
                                          • Z
                                            ZapB last edited by

                                            Sorry for the delay on this. I'll try to take another look this weekend too.

                                            Nokia Certified Qt Specialist
                                            Interested in hearing about Qt related work

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post