From becf01701fa69b9486826ec20b66fd874598a870 Mon Sep 17 00:00:00 2001 From: James Fulop Date: Mon, 19 Sep 2016 01:13:31 -0400 Subject: [PATCH] triangle fan support --- renderdoc/data/glsl/debuguniforms.h | 1 + renderdoc/data/glsl/mesh.comp | 8 ++++++++ renderdoc/driver/gl/gl_debug.cpp | 10 ++++++++-- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/renderdoc/data/glsl/debuguniforms.h b/renderdoc/data/glsl/debuguniforms.h index 89f3a0d6b..565a59dd0 100644 --- a/renderdoc/data/glsl/debuguniforms.h +++ b/renderdoc/data/glsl/debuguniforms.h @@ -133,6 +133,7 @@ INST_NAME(general); #define MESH_OTHER 0 // this covers points and lines, logic is the same #define MESH_TRIANGLE_LIST 1 #define MESH_TRIANGLE_STRIP 2 +#define MESH_TRIANGLE_FAN 3 BINDING(0) uniform MeshPickUBOData { vec3 rayPos; diff --git a/renderdoc/data/glsl/mesh.comp b/renderdoc/data/glsl/mesh.comp index 1881cb31d..55423d949 100644 --- a/renderdoc/data/glsl/mesh.comp +++ b/renderdoc/data/glsl/mesh.comp @@ -108,6 +108,14 @@ void trianglePath(uint threadID) idx2 = meshpick.use_indices != 0u ? ib.data[vertid+2] : vertid+2; break; } + case MESH_TRIANGLE_FAN: + { + vertid *= 2; + idx0 = meshpick.use_indices != 0u ? ib.data[0 ] : 0; + idx1 = meshpick.use_indices != 0u ? ib.data[vertid ] : vertid; + idx2 = meshpick.use_indices != 0u ? ib.data[vertid+1] : vertid+1; + break; + } } vec4 pos0 = vb.data[idx0]; diff --git a/renderdoc/driver/gl/gl_debug.cpp b/renderdoc/driver/gl/gl_debug.cpp index 575682aec..7223de9f3 100644 --- a/renderdoc/driver/gl/gl_debug.cpp +++ b/renderdoc/driver/gl/gl_debug.cpp @@ -1092,10 +1092,16 @@ uint32_t GLReplay::PickVertex(uint32_t eventID, const MeshDisplay &cfg, uint32_t isTriangleMesh = true; break; }; - default: + case eTopology_TriangleFan: + { + cdata->meshMode = MESH_TRIANGLE_FAN; + isTriangleMesh = true; + break; + }; + // TODO: TriangleList_Adj, TriangleStrip_Adj + default: // points, lines, patchlists { cdata->meshMode = MESH_OTHER; - RDCWARN("Mesh type defaulting to screenspace point picking"); }; }