summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaszlo Agocs <[email protected]>2018-09-01 19:51:43 +0200
committerLaszlo Agocs <[email protected]>2018-09-06 09:17:53 +0000
commit85f127cb045200fa5fa3608b859e59bb4a9c27b2 (patch)
tree22bba444eb17f95c4d0dfd4a95c215f5b1e9ee92
parent689a1e186b76853144802d9c29f0346856bd5fde (diff)
Revise an incorrect QVulkanWindow doc note
Applying the transformation in question has no effect on the winding order. Rewrite that section. While all the examples are correct, clarify the rules for the geometry they use since the winding order varies. Fix up the triangle example code to use front=CCW for clarity (even though it does not matter much since culling is off there). Change-Id: Icb968c76cc9fa918a5608d3c66b4fccd5668175e Reviewed-by: Christian Stromme <[email protected]>
-rw-r--r--examples/vulkan/hellovulkancubes/renderer.cpp2
-rw-r--r--examples/vulkan/hellovulkantexture/hellovulkantexture.cpp2
-rw-r--r--examples/vulkan/shared/trianglerenderer.cpp4
-rw-r--r--src/gui/vulkan/qvulkanwindow.cpp14
4 files changed, 9 insertions, 13 deletions
diff --git a/examples/vulkan/hellovulkancubes/renderer.cpp b/examples/vulkan/hellovulkancubes/renderer.cpp
index 2e913bcae82..5ada79ce79e 100644
--- a/examples/vulkan/hellovulkancubes/renderer.cpp
+++ b/examples/vulkan/hellovulkancubes/renderer.cpp
@@ -53,7 +53,7 @@
#include <QtConcurrentRun>
#include <QTime>
-static float quadVert[] = {
+static float quadVert[] = { // Y up, front = CW
-1, -1, 0,
-1, 1, 0,
1, -1, 0,
diff --git a/examples/vulkan/hellovulkantexture/hellovulkantexture.cpp b/examples/vulkan/hellovulkantexture/hellovulkantexture.cpp
index ffe1a314425..67ae0ca5dcf 100644
--- a/examples/vulkan/hellovulkantexture/hellovulkantexture.cpp
+++ b/examples/vulkan/hellovulkantexture/hellovulkantexture.cpp
@@ -59,7 +59,7 @@
// Vulkan Y is negated in clip space and the near/far plane is at 0/1 instead
// of -1/1. These will be corrected for by an extra transformation when
// calculating the modelview-projection matrix.
-static float vertexData[] = {
+static float vertexData[] = { // Y up, front = CW
// x, y, z, u, v
-1, -1, 0, 0, 1,
-1, 1, 0, 0, 0,
diff --git a/examples/vulkan/shared/trianglerenderer.cpp b/examples/vulkan/shared/trianglerenderer.cpp
index 6ed7e65ff91..b48f5640036 100644
--- a/examples/vulkan/shared/trianglerenderer.cpp
+++ b/examples/vulkan/shared/trianglerenderer.cpp
@@ -56,7 +56,7 @@
// Vulkan Y is negated in clip space and the near/far plane is at 0/1 instead
// of -1/1. These will be corrected for by an extra transformation when
// calculating the modelview-projection matrix.
-static float vertexData[] = {
+static float vertexData[] = { // Y up, front = CCW
0.0f, 0.5f, 1.0f, 0.0f, 0.0f,
-0.5f, -0.5f, 0.0f, 1.0f, 0.0f,
0.5f, -0.5f, 0.0f, 0.0f, 1.0f
@@ -337,7 +337,7 @@ void TriangleRenderer::initResources()
rs.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO;
rs.polygonMode = VK_POLYGON_MODE_FILL;
rs.cullMode = VK_CULL_MODE_NONE; // we want the back face as well
- rs.frontFace = VK_FRONT_FACE_CLOCKWISE;
+ rs.frontFace = VK_FRONT_FACE_COUNTER_CLOCKWISE;
rs.lineWidth = 1.0f;
pipelineInfo.pRasterizationState = &rs;
diff --git a/src/gui/vulkan/qvulkanwindow.cpp b/src/gui/vulkan/qvulkanwindow.cpp
index 7dea743ea8e..e45a16170eb 100644
--- a/src/gui/vulkan/qvulkanwindow.cpp
+++ b/src/gui/vulkan/qvulkanwindow.cpp
@@ -2694,15 +2694,11 @@ QImage QVulkanWindow::grab()
system differences between OpenGL and Vulkan.
By pre-multiplying the projection matrix with this matrix, applications can
- continue to assume OpenGL-style Y coordinates in clip space (i.e. Y pointing
- upwards), and can set minDepth and maxDepth to 0 and 1, respectively,
- without any further corrections to the vertex Z positions, while using the
- projection matrices retrieved from the QMatrix4x4 functions, such as
- QMatrix4x4::perspective(), as-is.
-
- \note With vertex data following the default OpenGL rules (that is, the
- front face being CCW), the correct winding order in the rasterization state
- after applying this matrix is clockwise (\c{VK_FRONT_FACE_CLOCKWISE}).
+ continue to assume that Y is pointing upwards, and can set minDepth and
+ maxDepth in the viewport to 0 and 1, respectively, without having to do any
+ further corrections to the vertex Z positions. Geometry from OpenGL
+ applications can then be used as-is, assuming a rasterization state matching
+ the OpenGL culling and front face settings.
*/
QMatrix4x4 QVulkanWindow::clipCorrectionMatrix()
{