How do I swap the buffers when using a Win32 window with Vulkan?












1












$begingroup$


I was recently told here how to manage the integration between Vulkan and Win32.



I am writing a windowing library like "GLFW", that is only going to support Vulkan; I have now come to the point where I need to implement SwapBuffers(Window) type of function; I have tried to reverse engineer Glfw's glfwSwapBuffers(GLFWWindow*) function to see how they implemented it in their framework, but I wasn't able to understand it fully.



How do I "swap the buffers" in a Win32 window?



P.S: The library is written in C










share|improve this question











$endgroup$

















    1












    $begingroup$


    I was recently told here how to manage the integration between Vulkan and Win32.



    I am writing a windowing library like "GLFW", that is only going to support Vulkan; I have now come to the point where I need to implement SwapBuffers(Window) type of function; I have tried to reverse engineer Glfw's glfwSwapBuffers(GLFWWindow*) function to see how they implemented it in their framework, but I wasn't able to understand it fully.



    How do I "swap the buffers" in a Win32 window?



    P.S: The library is written in C










    share|improve this question











    $endgroup$















      1












      1








      1





      $begingroup$


      I was recently told here how to manage the integration between Vulkan and Win32.



      I am writing a windowing library like "GLFW", that is only going to support Vulkan; I have now come to the point where I need to implement SwapBuffers(Window) type of function; I have tried to reverse engineer Glfw's glfwSwapBuffers(GLFWWindow*) function to see how they implemented it in their framework, but I wasn't able to understand it fully.



      How do I "swap the buffers" in a Win32 window?



      P.S: The library is written in C










      share|improve this question











      $endgroup$




      I was recently told here how to manage the integration between Vulkan and Win32.



      I am writing a windowing library like "GLFW", that is only going to support Vulkan; I have now come to the point where I need to implement SwapBuffers(Window) type of function; I have tried to reverse engineer Glfw's glfwSwapBuffers(GLFWWindow*) function to see how they implemented it in their framework, but I wasn't able to understand it fully.



      How do I "swap the buffers" in a Win32 window?



      P.S: The library is written in C







      vulkan






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Dec 9 '18 at 13:00







      Gabriele Vierti

















      asked Dec 9 '18 at 11:48









      Gabriele ViertiGabriele Vierti

      1466




      1466






















          1 Answer
          1






          active

          oldest

          votes


















          2












          $begingroup$


          I have now come to the point where I need to implement SwapBuffers(Window) type of function




          Then stop doing that. You need that function in OpenGL because the windowing code is explicitly not part of OpenGL, so to write cross-platform GL code, you need an encapsulation layer.



          That is not the case for Vulkan. While you still need a layer to create the window, handling the display, swap-chain images, and so forth is all part of the Vulkan API. The user's code should have complete and total control over this stuff; your abstraction layer need not be involved.



          Indeed, since Vulkan has no concept of a "default framebuffer", there's no way for you to abstract away presentable images without user support. Just do what GLFW3 does in its Vulkan support: provide a cross-platform way for the user to create a Vulkan surface.






          share|improve this answer









          $endgroup$













            Your Answer





            StackExchange.ifUsing("editor", function () {
            return StackExchange.using("mathjaxEditing", function () {
            StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
            StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
            });
            });
            }, "mathjax-editing");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "633"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: false,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: null,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcomputergraphics.stackexchange.com%2fquestions%2f8381%2fhow-do-i-swap-the-buffers-when-using-a-win32-window-with-vulkan%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            2












            $begingroup$


            I have now come to the point where I need to implement SwapBuffers(Window) type of function




            Then stop doing that. You need that function in OpenGL because the windowing code is explicitly not part of OpenGL, so to write cross-platform GL code, you need an encapsulation layer.



            That is not the case for Vulkan. While you still need a layer to create the window, handling the display, swap-chain images, and so forth is all part of the Vulkan API. The user's code should have complete and total control over this stuff; your abstraction layer need not be involved.



            Indeed, since Vulkan has no concept of a "default framebuffer", there's no way for you to abstract away presentable images without user support. Just do what GLFW3 does in its Vulkan support: provide a cross-platform way for the user to create a Vulkan surface.






            share|improve this answer









            $endgroup$


















              2












              $begingroup$


              I have now come to the point where I need to implement SwapBuffers(Window) type of function




              Then stop doing that. You need that function in OpenGL because the windowing code is explicitly not part of OpenGL, so to write cross-platform GL code, you need an encapsulation layer.



              That is not the case for Vulkan. While you still need a layer to create the window, handling the display, swap-chain images, and so forth is all part of the Vulkan API. The user's code should have complete and total control over this stuff; your abstraction layer need not be involved.



              Indeed, since Vulkan has no concept of a "default framebuffer", there's no way for you to abstract away presentable images without user support. Just do what GLFW3 does in its Vulkan support: provide a cross-platform way for the user to create a Vulkan surface.






              share|improve this answer









              $endgroup$
















                2












                2








                2





                $begingroup$


                I have now come to the point where I need to implement SwapBuffers(Window) type of function




                Then stop doing that. You need that function in OpenGL because the windowing code is explicitly not part of OpenGL, so to write cross-platform GL code, you need an encapsulation layer.



                That is not the case for Vulkan. While you still need a layer to create the window, handling the display, swap-chain images, and so forth is all part of the Vulkan API. The user's code should have complete and total control over this stuff; your abstraction layer need not be involved.



                Indeed, since Vulkan has no concept of a "default framebuffer", there's no way for you to abstract away presentable images without user support. Just do what GLFW3 does in its Vulkan support: provide a cross-platform way for the user to create a Vulkan surface.






                share|improve this answer









                $endgroup$




                I have now come to the point where I need to implement SwapBuffers(Window) type of function




                Then stop doing that. You need that function in OpenGL because the windowing code is explicitly not part of OpenGL, so to write cross-platform GL code, you need an encapsulation layer.



                That is not the case for Vulkan. While you still need a layer to create the window, handling the display, swap-chain images, and so forth is all part of the Vulkan API. The user's code should have complete and total control over this stuff; your abstraction layer need not be involved.



                Indeed, since Vulkan has no concept of a "default framebuffer", there's no way for you to abstract away presentable images without user support. Just do what GLFW3 does in its Vulkan support: provide a cross-platform way for the user to create a Vulkan surface.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Dec 9 '18 at 14:46









                Nicol BolasNicol Bolas

                3,969419




                3,969419






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Computer Graphics Stack Exchange!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    Use MathJax to format equations. MathJax reference.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcomputergraphics.stackexchange.com%2fquestions%2f8381%2fhow-do-i-swap-the-buffers-when-using-a-win32-window-with-vulkan%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Sphinx de Gizeh

                    Dijon

                    Guerrita