From 05532756cfad020f98c9f85b09bc4f3f1faf67b3 Mon Sep 17 00:00:00 2001 From: Florian RICHER Date: Thu, 29 May 2025 16:08:41 +0200 Subject: [PATCH] docs: Add opengl/vulkan diff --- README.md | 6 +- docs/OPENGL_VULKAN_DIFF.md | 11 + docs/images/coord_sys.png | Bin 0 -> 24096 bytes docs/images/normalized_device_coordinates.svg | 219 ++++++++++++++++++ 4 files changed, 235 insertions(+), 1 deletion(-) create mode 100644 docs/OPENGL_VULKAN_DIFF.md create mode 100644 docs/images/coord_sys.png create mode 100644 docs/images/normalized_device_coordinates.svg diff --git a/README.md b/README.md index 6e4bad1..c271fd8 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,16 @@ # Project -Run renderdoc on wayland: +## Notes + +1. Run renderdoc on wayland: ```console WAYLAND_DISPLAY= QT_QPA_PLATFORM=xcb qrenderdoc ``` > Not supported yet https://github.com/baldurk/renderdoc/issues/853 +2. [Difference Between OpenGL and Vulkan](./docs/OPENGL_VULKAN_DIFF.md) + ## Usefull links - https://vulkan-tutorial.com/fr/Introduction diff --git a/docs/OPENGL_VULKAN_DIFF.md b/docs/OPENGL_VULKAN_DIFF.md new file mode 100644 index 0000000..93d0855 --- /dev/null +++ b/docs/OPENGL_VULKAN_DIFF.md @@ -0,0 +1,11 @@ +# Difference between Vulkan and OpenGL + +Viewport: + +- Y axis is flipped like D3D +- Clipped Z axis is not [-1; 1] but [0; 1] + +![normalized viewport coordinates](./images/normalized_device_coordinates.svg) +![coord_sys](./images/coord_sys.png) + +See: [Vulkan Tutorial (Vertex step)](https://vulkan-tutorial.com/Drawing_a_triangle/Graphics_pipeline_basics/Shader_modules) and [VK_KHR_maintenance1 (Allow negative height)](https://registry.khronos.org/vulkan/specs/latest/man/html/VK_KHR_maintenance1.html#_description) diff --git a/docs/images/coord_sys.png b/docs/images/coord_sys.png new file mode 100644 index 0000000000000000000000000000000000000000..6d195f67ca5dbc31bf19457f0d724c1b52dd1597 GIT binary patch literal 24096 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
    XW1uvMN#KLU*8Rt+}~tt-#$T@+2O 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 + + + + + + + + + image/svg+xml + + + + + + + + Framebuffer coordinates + (0, 0) + (1920, 0) + (0, 1080) + (1920, 1080) + + (960, 540) + + Normalized device coordinates + (-1, -1) + (1, -1) + (-1, 1) + (1, 1) + + (0, 0) + +