From 9bd5fabe1a6b9d7ad409d904f6fafbc5f4493c07 Mon Sep 17 00:00:00 2001 From: baldurk Date: Sun, 25 Jan 2015 21:11:56 +0000 Subject: [PATCH] Implement axis markers and frustum helper on GL mesh view --- renderdoc/driver/d3d11/d3d11_debug.cpp | 2 +- renderdoc/driver/gl/gl_debug.cpp | 110 +++++++++++++++++++++++-- renderdoc/driver/gl/gl_replay.h | 3 + renderdocui/Code/FormatElement.cs | 3 + renderdocui/Windows/BufferViewer.cs | 9 +- 5 files changed, 113 insertions(+), 14 deletions(-) diff --git a/renderdoc/driver/d3d11/d3d11_debug.cpp b/renderdoc/driver/d3d11/d3d11_debug.cpp index 3ad12fcf2..ec7ec913d 100644 --- a/renderdoc/driver/d3d11/d3d11_debug.cpp +++ b/renderdoc/driver/d3d11/d3d11_debug.cpp @@ -5341,7 +5341,7 @@ void D3D11DebugManager::RenderMesh(uint32_t frameID, uint32_t eventID, const vec m_pImmediateContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_LINELIST); m_pImmediateContext->IASetInputLayout(m_DebugRender.GenericLayout); - pixelData.WireframeColour = Vec3f(0.5f, 0.5f, 0.5f); + pixelData.WireframeColour = Vec3f(1.0f, 1.0f, 1.0f); FillCBuffer(m_DebugRender.GenericPSCBuffer, (float *)&pixelData, sizeof(DebugPixelCBufferData)); m_pImmediateContext->Draw(24, 0); diff --git a/renderdoc/driver/gl/gl_debug.cpp b/renderdoc/driver/gl/gl_debug.cpp index 073bb5387..8ce3a472c 100644 --- a/renderdoc/driver/gl/gl_debug.cpp +++ b/renderdoc/driver/gl/gl_debug.cpp @@ -341,11 +341,64 @@ void GLReplay::InitDebugData() gl.glNamedBufferStorageEXT(DebugData.histogramBuf, sizeof(uint32_t)*HGRAM_NUM_BUCKETS, NULL, GL_MAP_READ_BIT); } - MakeCurrentReplayContext(&m_ReplayCtx); - gl.glGenVertexArrays(1, &DebugData.meshVAO); gl.glBindVertexArray(DebugData.meshVAO); + + gl.glGenVertexArrays(1, &DebugData.axisVAO); + gl.glBindVertexArray(DebugData.axisVAO); + + gl.glGenVertexArrays(1, &DebugData.frustumVAO); + gl.glBindVertexArray(DebugData.frustumVAO); + gl.glGenBuffers(1, &DebugData.axisFrustumBuffer); + gl.glBindBuffer(eGL_ARRAY_BUFFER, DebugData.axisFrustumBuffer); + + Vec3f TLN = Vec3f(-1.0f, 1.0f, 0.0f); // TopLeftNear, etc... + Vec3f TRN = Vec3f( 1.0f, 1.0f, 0.0f); + Vec3f BLN = Vec3f(-1.0f, -1.0f, 0.0f); + Vec3f BRN = Vec3f( 1.0f, -1.0f, 0.0f); + + Vec3f TLF = Vec3f(-1.0f, 1.0f, 1.0f); + Vec3f TRF = Vec3f( 1.0f, 1.0f, 1.0f); + Vec3f BLF = Vec3f(-1.0f, -1.0f, 1.0f); + Vec3f BRF = Vec3f( 1.0f, -1.0f, 1.0f); + + Vec3f axisFrustum[] = { + // axis marker vertices + Vec3f(0.0f, 0.0f, 0.0f), + Vec3f(1.0f, 0.0f, 0.0f), + Vec3f(0.0f, 0.0f, 0.0f), + Vec3f(0.0f, 1.0f, 0.0f), + Vec3f(0.0f, 0.0f, 0.0f), + Vec3f(0.0f, 0.0f, 1.0f), + + // frustum vertices + TLN, TRN, + TRN, BRN, + BRN, BLN, + BLN, TLN, + + TLN, TLF, + TRN, TRF, + BLN, BLF, + BRN, BRF, + + TLF, TRF, + TRF, BRF, + BRF, BLF, + BLF, TLF, + }; + + gl.glNamedBufferStorageEXT(DebugData.axisFrustumBuffer, sizeof(axisFrustum), axisFrustum, 0); + + gl.glBindVertexArray(DebugData.axisVAO); + gl.glVertexAttribPointer(0, 3, eGL_FLOAT, GL_FALSE, sizeof(Vec3f), NULL); + gl.glEnableVertexAttribArray(0); + + gl.glBindVertexArray(DebugData.frustumVAO); + gl.glVertexAttribPointer(0, 3, eGL_FLOAT, GL_FALSE, sizeof(Vec3f), (const void *)( sizeof(Vec3f) * 6 )); + gl.glEnableVertexAttribArray(0); + DebugData.replayQuadProg = CreateShaderProgram(DebugData.blitvsSource.c_str(), DebugData.genericfsSource.c_str()); } @@ -398,10 +451,11 @@ void GLReplay::DeleteDebugData() gl.glDeleteBuffers(1, &DebugData.minmaxResult); gl.glDeleteBuffers(1, &DebugData.histogramBuf); - MakeCurrentReplayContext(&m_ReplayCtx); - gl.glDeleteVertexArrays(1, &DebugData.meshVAO); - + gl.glDeleteVertexArrays(1, &DebugData.axisVAO); + gl.glDeleteVertexArrays(1, &DebugData.frustumVAO); + gl.glDeleteBuffers(1, &DebugData.axisFrustumBuffer); + gl.glDeleteProgram(DebugData.replayQuadProg); } @@ -1503,6 +1557,7 @@ void GLReplay::RenderMesh(uint32_t frameID, uint32_t eventID, const vector