From 4a02fc26cc1a757c7aab9f443b44a35c1e11a905 Mon Sep 17 00:00:00 2001 From: Robert Beckebans Date: Sun, 24 Mar 2013 15:39:52 +0100 Subject: [PATCH] Fixed some render debugging tools --- neo/renderer/RenderProgs.cpp | 3 + neo/renderer/RenderProgs.h | 41 +++++++++ neo/renderer/RenderWorld_portals.cpp | 4 + neo/renderer/tr_backend_rendertools.cpp | 114 +++++++++++++++++------- 4 files changed, 131 insertions(+), 31 deletions(-) diff --git a/neo/renderer/RenderProgs.cpp b/neo/renderer/RenderProgs.cpp index b59579e5..99387e2c 100644 --- a/neo/renderer/RenderProgs.cpp +++ b/neo/renderer/RenderProgs.cpp @@ -86,6 +86,9 @@ void idRenderProgManager::Init() { { BUILTIN_GUI, "gui.vfp" }, { BUILTIN_COLOR, "color.vfp" }, + // RB begin + { BUILTIN_VERTEXCOLOR, "vertex_color.vfp" }, + // RB end { BUILTIN_SIMPLESHADE, "simpleshade.vfp" }, { BUILTIN_TEXTURED, "texture.vfp" }, { BUILTIN_TEXTURE_VERTEXCOLOR, "texture_color.vfp" }, diff --git a/neo/renderer/RenderProgs.h b/neo/renderer/RenderProgs.h index ba97546f..f6c8d06d 100644 --- a/neo/renderer/RenderProgs.h +++ b/neo/renderer/RenderProgs.h @@ -153,58 +153,79 @@ public: { BindShader_Builtin( BUILTIN_GUI ); } + void BindShader_Color( ) { BindShader_Builtin( BUILTIN_COLOR ); } + + // RB begin + void BindShader_VertexColor( ) + { + BindShader_Builtin( BUILTIN_VERTEXCOLOR ); + } + // RB end + void BindShader_Texture( ) { BindShader_Builtin( BUILTIN_TEXTURED ); } + void BindShader_TextureVertexColor() { BindShader_Builtin( BUILTIN_TEXTURE_VERTEXCOLOR ); }; + void BindShader_TextureVertexColorSkinned() { BindShader_Builtin( BUILTIN_TEXTURE_VERTEXCOLOR_SKINNED ); }; + void BindShader_TextureTexGenVertexColor() { BindShader_Builtin( BUILTIN_TEXTURE_TEXGEN_VERTEXCOLOR ); }; + void BindShader_Interaction() { BindShader_Builtin( BUILTIN_INTERACTION ); } + void BindShader_InteractionSkinned() { BindShader_Builtin( BUILTIN_INTERACTION_SKINNED ); } + void BindShader_InteractionAmbient() { BindShader_Builtin( BUILTIN_INTERACTION_AMBIENT ); } + void BindShader_InteractionAmbientSkinned() { BindShader_Builtin( BUILTIN_INTERACTION_AMBIENT_SKINNED ); } + void BindShader_SimpleShade() { BindShader_Builtin( BUILTIN_SIMPLESHADE ); } + void BindShader_Environment() { BindShader_Builtin( BUILTIN_ENVIRONMENT ); } + void BindShader_EnvironmentSkinned() { BindShader_Builtin( BUILTIN_ENVIRONMENT_SKINNED ); } + void BindShader_BumpyEnvironment() { BindShader_Builtin( BUILTIN_BUMPY_ENVIRONMENT ); } + void BindShader_BumpyEnvironmentSkinned() { BindShader_Builtin( BUILTIN_BUMPY_ENVIRONMENT_SKINNED ); @@ -214,22 +235,27 @@ public: { BindShader_Builtin( BUILTIN_DEPTH ); } + void BindShader_DepthSkinned() { BindShader_Builtin( BUILTIN_DEPTH_SKINNED ); } + void BindShader_Shadow() { BindShader( builtinShaders[BUILTIN_SHADOW], -1 ); } + void BindShader_ShadowSkinned() { BindShader( builtinShaders[BUILTIN_SHADOW_SKINNED], -1 ); } + void BindShader_ShadowDebug() { BindShader_Builtin( BUILTIN_SHADOW_DEBUG ); } + void BindShader_ShadowDebugSkinned() { BindShader_Builtin( BUILTIN_SHADOW_DEBUG_SKINNED ); @@ -239,50 +265,62 @@ public: { BindShader_Builtin( BUILTIN_BLENDLIGHT ); } + void BindShader_Fog() { BindShader_Builtin( BUILTIN_FOG ); } + void BindShader_FogSkinned() { BindShader_Builtin( BUILTIN_FOG_SKINNED ); } + void BindShader_SkyBox() { BindShader_Builtin( BUILTIN_SKYBOX ); } + void BindShader_WobbleSky() { BindShader_Builtin( BUILTIN_WOBBLESKY ); } + void BindShader_StereoDeGhost() { BindShader_Builtin( BUILTIN_STEREO_DEGHOST ); } + void BindShader_StereoWarp() { BindShader_Builtin( BUILTIN_STEREO_WARP ); } + void BindShader_StereoInterlace() { BindShader_Builtin( BUILTIN_STEREO_INTERLACE ); } + void BindShader_PostProcess() { BindShader_Builtin( BUILTIN_POSTPROCESS ); } + void BindShader_ZCullReconstruct() { BindShader_Builtin( BUILTIN_ZCULL_RECONSTRUCT ); } + void BindShader_Bink() { BindShader_Builtin( BUILTIN_BINK ); } + void BindShader_BinkGUI() { BindShader_Builtin( BUILTIN_BINK_GUI ); } + void BindShader_MotionBlur() { BindShader_Builtin( BUILTIN_MOTION_BLUR ); @@ -325,6 +363,9 @@ protected: { BUILTIN_GUI, BUILTIN_COLOR, + // RB begin + BUILTIN_VERTEXCOLOR, + // RB end BUILTIN_SIMPLESHADE, BUILTIN_TEXTURED, BUILTIN_TEXTURE_VERTEXCOLOR, diff --git a/neo/renderer/RenderWorld_portals.cpp b/neo/renderer/RenderWorld_portals.cpp index 81a51542..6937e939 100644 --- a/neo/renderer/RenderWorld_portals.cpp +++ b/neo/renderer/RenderWorld_portals.cpp @@ -1197,6 +1197,10 @@ void idRenderWorldLocal::ShowPortals() GL_Color( 0, 1, 0 ); } + // RB begin + renderProgManager.CommitUniforms(); + // RB end + qglBegin( GL_LINE_LOOP ); for( j = 0; j < w->GetNumPoints(); j++ ) { diff --git a/neo/renderer/tr_backend_rendertools.cpp b/neo/renderer/tr_backend_rendertools.cpp index 79d652c8..36f42659 100644 --- a/neo/renderer/tr_backend_rendertools.cpp +++ b/neo/renderer/tr_backend_rendertools.cpp @@ -136,7 +136,10 @@ static void RB_SimpleSurfaceSetup( const drawSurf_t* drawSurf ) // change the matrix if needed if( drawSurf->space != backEnd.currentSpace ) { - qglLoadMatrixf( drawSurf->space->modelViewMatrix ); + // RB begin + RB_SetMVP( drawSurf->space->mvp ); + //qglLoadMatrixf( drawSurf->space->modelViewMatrix ); + // RB end backEnd.currentSpace = drawSurf->space; } @@ -160,8 +163,10 @@ static void RB_SimpleWorldSetup() { backEnd.currentSpace = &backEnd.viewDef->worldSpace; - - qglLoadMatrixf( backEnd.viewDef->worldSpace.modelViewMatrix ); + // RB begin + //qglLoadMatrixf( backEnd.viewDef->worldSpace.modelViewMatrix ); + RB_SetMVP( backEnd.viewDef->worldSpace.mvp ); + // RB end GL_Scissor( backEnd.viewDef->viewport.x1 + backEnd.viewDef->scissor.x1, backEnd.viewDef->viewport.y1 + backEnd.viewDef->scissor.y1, @@ -579,6 +584,7 @@ static void RB_ShowLightCount() } } +#if 0 /* =============== RB_SetWeaponDepthHack @@ -661,6 +667,7 @@ static void RB_LoadMatrixWithBypass( const float m[16] ) glLoadMatrixf( m ); } +#endif /* ==================== RB_RenderDrawSurfListWithFunction @@ -682,7 +689,19 @@ static void RB_RenderDrawSurfListWithFunction( drawSurf_t** drawSurfs, int numDr { continue; } + assert( drawSurf->space != NULL ); + + // RB begin +#if 1 + if( drawSurf->space != backEnd.currentSpace ) + { + backEnd.currentSpace = drawSurf->space; + + RB_SetMVP( drawSurf->space->mvp ); + } +#else + if( drawSurf->space != NULL ) // is it ever NULL? Do we need to check? { // Set these values ahead of time so we don't have to reconstruct the matrices on the consoles @@ -690,28 +709,30 @@ static void RB_RenderDrawSurfListWithFunction( drawSurf_t** drawSurfs, int numDr { RB_SetWeaponDepthHack(); } - + if( drawSurf->space->modelDepthHack != 0.0f ) { RB_SetModelDepthHack( drawSurf->space->modelDepthHack ); } - + // change the matrix if needed if( drawSurf->space != backEnd.currentSpace ) { RB_LoadMatrixWithBypass( drawSurf->space->modelViewMatrix ); } - + if( drawSurf->space->weaponDepthHack ) { RB_EnterWeaponDepthHack(); } - + if( drawSurf->space->modelDepthHack != 0.0f ) { RB_EnterModelDepthHack( drawSurf->space->modelDepthHack ); } } +#endif + // RB end // change the scissor if needed if( r_useScissor.GetBool() && !backEnd.currentScissor.Equals( drawSurf->scissorRect ) ) @@ -726,10 +747,12 @@ static void RB_RenderDrawSurfListWithFunction( drawSurf_t** drawSurfs, int numDr // render it triFunc_( drawSurf ); - if( drawSurf->space != NULL && ( drawSurf->space->weaponDepthHack || drawSurf->space->modelDepthHack != 0.0f ) ) + // RB begin + /*if( drawSurf->space != NULL && ( drawSurf->space->weaponDepthHack || drawSurf->space->modelDepthHack != 0.0f ) ) { RB_LeaveDepthHack(); - } + }*/ + // RB end backEnd.currentSpace = drawSurf->space; } @@ -756,11 +779,12 @@ static void RB_ShowSilhouette() return; } - // // clear all triangle edges to black - // globalImages->BindNull(); - qglDisable( GL_TEXTURE_2D ); + + // RB begin + renderProgManager.BindShader_Color(); + // RB end GL_Color( 0, 0, 0 ); @@ -772,9 +796,7 @@ static void RB_ShowSilhouette() RB_DrawElementsWithCounters ); - // // now blend in edges that cast silhouettes - // RB_SimpleWorldSetup(); GL_Color( 0.5, 0, 0 ); GL_State( GLS_SRCBLEND_ONE | GLS_DSTBLEND_ONE ); @@ -914,7 +936,6 @@ static void RB_ShowSurfaceInfo( drawSurf_t** drawSurfs, int numDrawSurfs ) } globalImages->BindNull(); - qglDisable( GL_TEXTURE_2D ); GL_Color( 1, 1, 1 ); @@ -949,6 +970,7 @@ static void RB_ShowViewEntitys( viewEntity_t* vModels ) { return; } + if( r_showViewEntitys.GetInteger() >= 2 ) { common->Printf( "view entities: " ); @@ -986,8 +1008,6 @@ static void RB_ShowViewEntitys( viewEntity_t* vModels ) continue; } - - // draw the model bounds in white if directly visible, // or, blue if it is only-for-sahdow idVec4 color; @@ -1062,7 +1082,7 @@ static void RB_ShowTexturePolarity( drawSurf_t** drawSurfs, int numDrawSurfs ) { drawSurf = drawSurfs[i]; tri = drawSurf->frontEndGeo; - if( !tri->verts ) + if( tri == NULL || tri->verts == NULL ) { continue; } @@ -1149,6 +1169,11 @@ static void RB_ShowUnsmoothedTangents( drawSurf_t** drawSurfs, int numDrawSurfs RB_SimpleSurfaceSetup( drawSurf ); tri = drawSurf->frontEndGeo; + if( tri == NULL || tri->verts == NULL ) + { + continue; + } + qglBegin( GL_TRIANGLES ); for( j = 0; j < tri->numIndexes; j += 3 ) { @@ -1199,10 +1224,11 @@ static void RB_ShowTangentSpace( drawSurf_t** drawSurfs, int numDrawSurfs ) RB_SimpleSurfaceSetup( drawSurf ); tri = drawSurf->frontEndGeo; - if( !tri->verts ) + if( tri == NULL || tri->verts == NULL ) { continue; } + qglBegin( GL_TRIANGLES ); for( j = 0; j < tri->numIndexes; j++ ) { @@ -1255,6 +1281,9 @@ static void RB_ShowVertexColor( drawSurf_t** drawSurfs, int numDrawSurfs ) } globalImages->BindNull(); + // RB begin + renderProgManager.BindShader_VertexColor(); + GL_State( GLS_DEPTHFUNC_LESS ); for( i = 0; i < numDrawSurfs; i++ ) @@ -1264,10 +1293,13 @@ static void RB_ShowVertexColor( drawSurf_t** drawSurfs, int numDrawSurfs ) RB_SimpleSurfaceSetup( drawSurf ); tri = drawSurf->frontEndGeo; - if( !tri->verts ) + if( tri == NULL || tri->verts == NULL ) { continue; } + + renderProgManager.CommitUniforms(); + qglBegin( GL_TRIANGLES ); for( j = 0; j < tri->numIndexes; j++ ) { @@ -1280,6 +1312,8 @@ static void RB_ShowVertexColor( drawSurf_t** drawSurfs, int numDrawSurfs ) qglEnd(); } + // RB end + GL_State( GLS_DEFAULT ); } @@ -1334,33 +1368,41 @@ static void RB_ShowNormals( drawSurf_t** drawSurfs, int numDrawSurfs ) RB_SimpleSurfaceSetup( drawSurf ); tri = drawSurf->frontEndGeo; - if( !tri->verts ) + if( tri == NULL || tri->verts == NULL ) { continue; } + // RB begin + renderProgManager.BindShader_VertexColor(); + qglBegin( GL_LINES ); for( j = 0; j < tri->numVerts; j++ ) { const idVec3 normal = tri->verts[j].GetNormal(); const idVec3 tangent = tri->verts[j].GetTangent(); const idVec3 bitangent = tri->verts[j].GetBiTangent(); - GL_Color( 0, 0, 1 ); + + qglColor3f( 0, 0, 1 ); qglVertex3fv( tri->verts[j].xyz.ToFloatPtr() ); VectorMA( tri->verts[j].xyz, size, normal, end ); qglVertex3fv( end.ToFloatPtr() ); - GL_Color( 1, 0, 0 ); + //GL_Color( 1, 0, 0 ); + qglColor3f( 1, 0, 0 ); qglVertex3fv( tri->verts[j].xyz.ToFloatPtr() ); VectorMA( tri->verts[j].xyz, size, tangent, end ); qglVertex3fv( end.ToFloatPtr() ); - GL_Color( 0, 1, 0 ); + //GL_Color( 0, 1, 0 ); + qglColor3f( 0, 1, 0 ); qglVertex3fv( tri->verts[j].xyz.ToFloatPtr() ); VectorMA( tri->verts[j].xyz, size, bitangent, end ); qglVertex3fv( end.ToFloatPtr() ); } qglEnd(); + + // RB end } if( showNumbers ) @@ -1370,7 +1412,7 @@ static void RB_ShowNormals( drawSurf_t** drawSurfs, int numDrawSurfs ) { drawSurf = drawSurfs[i]; tri = drawSurf->frontEndGeo; - if( !tri->verts ) + if( tri == NULL || tri->verts == NULL ) { continue; } @@ -1491,7 +1533,7 @@ static void RB_ShowTextureVectors( drawSurf_t** drawSurfs, int numDrawSurfs ) const srfTriangles_t* tri = drawSurf->frontEndGeo; - if( tri->verts == NULL ) + if( tri == NULL || tri->verts == NULL ) { continue; } @@ -1600,7 +1642,7 @@ static void RB_ShowDominantTris( drawSurf_t** drawSurfs, int numDrawSurfs ) tri = drawSurf->frontEndGeo; - if( !tri->verts ) + if( tri == NULL || tri->verts == NULL ) { continue; } @@ -1964,7 +2006,10 @@ static void RB_DrawText( const char* text, const idVec3& origin, float scale, co { renderProgManager.BindShader_Color(); - + // RB begin + GL_Color( color[0], color[1], color[2], 1 /*color[3]*/ ); + renderProgManager.CommitUniforms(); + // RB end int i, j, len, num, index, charIndex, line; float textLen = 1.0f, spacing = 1.0f; @@ -1973,7 +2018,6 @@ static void RB_DrawText( const char* text, const idVec3& origin, float scale, co if( text && *text ) { qglBegin( GL_LINES ); - qglColor3fv( color.ToFloatPtr() ); if( text[0] == '\n' ) { @@ -2195,6 +2239,11 @@ void RB_ShowDebugLines() // all lines are expressed in world coordinates RB_SimpleWorldSetup(); + // RB begin + renderProgManager.BindShader_VertexColor(); + renderProgManager.CommitUniforms(); + // RB end + globalImages->BindNull(); width = r_debugLineWidth.GetInteger(); @@ -2331,9 +2380,12 @@ void RB_ShowDebugPolygons() // all lines are expressed in world coordinates RB_SimpleWorldSetup(); - globalImages->BindNull(); + // RB begin + renderProgManager.BindShader_VertexColor(); + renderProgManager.CommitUniforms(); + // RB end - qglDisable( GL_TEXTURE_2D ); + globalImages->BindNull(); if( r_debugPolygonFilled.GetBool() ) {