diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /vgui2/matsys_controls/vmtpreviewpanel.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'vgui2/matsys_controls/vmtpreviewpanel.cpp')
| -rw-r--r-- | vgui2/matsys_controls/vmtpreviewpanel.cpp | 625 |
1 files changed, 625 insertions, 0 deletions
diff --git a/vgui2/matsys_controls/vmtpreviewpanel.cpp b/vgui2/matsys_controls/vmtpreviewpanel.cpp new file mode 100644 index 0000000..6616df2 --- /dev/null +++ b/vgui2/matsys_controls/vmtpreviewpanel.cpp @@ -0,0 +1,625 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//===========================================================================// + +#include "matsys_controls/vmtpreviewpanel.h" +#include "matsys_controls/matsyscontrols.h" +#include "VGuiMatSurface/IMatSystemSurface.h" +#include "materialsystem/MaterialSystemUtil.h" +#include "materialsystem/imaterialsystem.h" +#include "materialsystem/imaterial.h" +#include "materialsystem/itexture.h" +#include "materialsystem/imesh.h" +#include "tier1/KeyValues.h" + + +using namespace vgui; + + +#define FOV 90.0f +#define ZNEAR 0.1f +#define ZFAR 2000.0f +#define ROTATION_SPEED 40.0f // degrees/sec +#define VIEW_DISTANCE 12.0f + +//----------------------------------------------------------------------------- +// +// VMT Preview panel +// +//----------------------------------------------------------------------------- + + +//----------------------------------------------------------------------------- +// constructor +//----------------------------------------------------------------------------- +CVMTPreviewPanel::CVMTPreviewPanel( vgui::Panel *pParent, const char *pName ) : + BaseClass( pParent, pName ) +{ + SetVMT( "//platform/materials/vgui/vtfnotloaded" ); + + m_pLightmapTexture.Init( "//platform/materials/debug/defaultlightmap", "editor" ); + m_DefaultEnvCubemap.Init( "editor/cubemap", "editor", true ); + m_LightDirection.Init( 0.0f, 1.0f, -1.0f ); + m_LightColor.SetColor( 255, 255, 255, 255 ); + m_flLightIntensity = 2.0f; + m_bDrawIn3DMode = false; + + // Reset the camera direction + m_vecCameraDirection.Init( 1.0f, 0.0f, 0.0f ); + m_flLastRotationTime = Plat_FloatTime(); +} + + +//----------------------------------------------------------------------------- +// Sets the current VMT +//----------------------------------------------------------------------------- +void CVMTPreviewPanel::SetVMT( const char *pMaterialName ) +{ + m_Material.Init( pMaterialName, "editor material" ); + m_VMTName = pMaterialName; +} + + +//----------------------------------------------------------------------------- +// Gets the current VMT +//----------------------------------------------------------------------------- +const char *CVMTPreviewPanel::GetVMT() const +{ + return m_VMTName; +} + + +//----------------------------------------------------------------------------- +// View it in 3D or 2D mode +//----------------------------------------------------------------------------- +void CVMTPreviewPanel::DrawIn3DMode( bool b3DMode ) +{ + m_bDrawIn3DMode = b3DMode; +} + + +//----------------------------------------------------------------------------- +// Sets up lighting state +//----------------------------------------------------------------------------- +void CVMTPreviewPanel::SetupLightingState() +{ + LightDesc_t desc; + memset( &desc, 0, sizeof(desc) ); + + desc.m_Type = MATERIAL_LIGHT_DIRECTIONAL; + + desc.m_Color[0] = m_LightColor.r(); + desc.m_Color[1] = m_LightColor.g(); + desc.m_Color[2] = m_LightColor.b(); + desc.m_Color *= m_flLightIntensity / 255.0f; + + desc.m_Attenuation0 = 1.0f; + desc.m_Attenuation1 = 0.0f; + desc.m_Attenuation2 = 0.0f; + desc.m_Flags = LIGHTTYPE_OPTIMIZATIONFLAGS_HAS_ATTENUATION0; + + desc.m_Direction = m_LightDirection; + VectorNormalize( desc.m_Direction ); + + desc.m_Theta = 0.0f; + desc.m_Phi = 0.0f; + desc.m_Falloff = 1.0f; + + CMatRenderContextPtr pRenderContext( MaterialSystem() ); + + pRenderContext->SetLight( 0, desc ); +} + + +//----------------------------------------------------------------------------- +// Draw a sphere +//----------------------------------------------------------------------------- +void CVMTPreviewPanel::RenderSphere( const Vector &vCenter, float flRadius, int nTheta, int nPhi ) +{ + int nVertices = nTheta * nPhi; + int nIndices = 2 * ( nTheta + 1 ) * ( nPhi - 1 ); + + CMatRenderContextPtr pRenderContext( MaterialSystem() ); + + IMesh* pMesh = pRenderContext->GetDynamicMesh(); + + CMeshBuilder meshBuilder; + meshBuilder.Begin( pMesh, MATERIAL_TRIANGLE_STRIP, nVertices, nIndices ); + + bool bIsUsingLightmap = m_Material->GetPropertyFlag( MATERIAL_PROPERTY_NEEDS_LIGHTMAP ); + bool bIsUsingBumpedLightmap = m_Material->GetPropertyFlag( MATERIAL_PROPERTY_NEEDS_BUMPED_LIGHTMAPS ); + + int nLightmapWidth = m_pLightmapTexture->GetActualWidth(); + float flHalfLuxel = 0.5f / nLightmapWidth; + + // + // Build the index buffer. + // + int i, j; + for ( i = 0; i < nPhi; ++i ) + { + for ( j = 0; j < nTheta; ++j ) + { + float u = j / ( float )(nTheta - 1); + float v = i / ( float )(nPhi - 1); + float theta = ( j != nTheta-1 ) ? 2.0f * M_PI * u : 0.0f; + float phi = M_PI * v; + + Vector vecPos; + vecPos.x = flRadius * sin(phi) * cos(theta); + vecPos.y = flRadius * sin(phi) * sin(theta); + vecPos.z = flRadius * cos(phi); + + Vector vecNormal = vecPos; + VectorNormalize( vecNormal ); + + Vector4D vecTangentS; + Vector vecTangentT; + vecTangentS.Init( vecPos.z, -vecPos.x, 0.0f, 1.0f ); + if ( VectorNormalize( vecTangentS.AsVector3D() ) == 0.0f ) + { + vecTangentS.Init( 1.0f, 0.0f, 0.0f, 1.0f ); + } + + CrossProduct( vecNormal, vecTangentS.AsVector3D(), vecTangentT ); + + unsigned char red = (int)( u * 255.0f ); + unsigned char green = (int)( v * 255.0f ); + unsigned char blue = (int)( v * 255.0f ); + unsigned char alpha = (int)( v * 255.0f ); + + vecPos += vCenter; + + float u1, u2, v1, v2; + u1 = u2 = u; + v1 = v2 = v; + + if ( bIsUsingLightmap ) + { + u1 = RemapVal( u1, 0.0f, 1.0f, flHalfLuxel, 0.25 - flHalfLuxel ); + + if ( bIsUsingBumpedLightmap ) + { + u2 = 0.25f; + v2 = 0.0f; + } + } + + meshBuilder.Position3fv( vecPos.Base() ); + meshBuilder.Normal3fv( vecNormal.Base() ); + meshBuilder.Color4ub( red, green, blue, alpha ); + meshBuilder.TexCoord2f( 0, 2.0f * u, v ); + meshBuilder.TexCoord2f( 1, u1, v1 ); + meshBuilder.TexCoord2f( 2, u2, v2 ); + meshBuilder.TangentS3fv( vecTangentS.Base() ); + meshBuilder.TangentT3fv( vecTangentT.Base() ); + meshBuilder.BoneWeight( 0, 1.0f ); + meshBuilder.BoneMatrix( 0, 0 ); + meshBuilder.UserData( vecTangentS.Base() ); + meshBuilder.AdvanceVertex(); + } + } + + // + // Emit the triangle strips. + // + int idx = 0; + for ( i = 0; i < nPhi - 1; ++i ) + { + for ( j = 0; j < nTheta; ++j ) + { + idx = nTheta * i + j; + + meshBuilder.FastIndex( idx ); + meshBuilder.FastIndex( idx + nTheta ); + } + + // + // Emit a degenerate triangle to skip to the next row without + // a connecting triangle. + // + if ( i < nPhi - 2 ) + { + meshBuilder.FastIndex( idx + 1 ); + meshBuilder.FastIndex( idx + 1 + nTheta ); + } + } + + meshBuilder.End(); + pMesh->Draw(); +} + + +//----------------------------------------------------------------------------- +// Draw sprite-card based materials +//----------------------------------------------------------------------------- +void CVMTPreviewPanel::RenderSpriteCard( const Vector &vCenter, float flRadius ) +{ + CMatRenderContextPtr pRenderContext( MaterialSystem() ); + IMesh *pMesh = pRenderContext->GetDynamicMesh(); + + CMeshBuilder meshBuilder; + meshBuilder.Begin( pMesh, MATERIAL_QUADS, 1 ); + + // Draw a polygon the size of the panel + meshBuilder.Position3fv( vCenter.Base() ); + meshBuilder.Color4ub( 255, 255, 255, 255 ); + meshBuilder.TexCoord4f( 0, 0.0f, 0.0f, 1.0f, 1.0f ); + meshBuilder.TexCoord4f( 1, 0.0f, 0.0f, 1.0f, 1.0f ); + meshBuilder.TexCoord4f( 2, 0.0f, 0.0f, flRadius, 0.0f ); + meshBuilder.TexCoord2f( 3, 0, 0 ); + meshBuilder.AdvanceVertex(); + + meshBuilder.Position3fv( vCenter.Base() ); + meshBuilder.Color4ub( 255, 255, 255, 255 ); + meshBuilder.TexCoord4f( 0, 0.0f, 0.0f, 1.0f, 1.0f ); + meshBuilder.TexCoord4f( 1, 0.0f, 0.0f, 1.0f, 1.0f ); + meshBuilder.TexCoord4f( 2, 0.0f, 0.0f, flRadius, 0.0f ); + meshBuilder.TexCoord2f( 3, 0, 1 ); + meshBuilder.AdvanceVertex(); + + meshBuilder.Position3fv( vCenter.Base() ); + meshBuilder.Color4ub( 255, 255, 255, 255 ); + meshBuilder.TexCoord4f( 0, 0.0f, 0.0f, 1.0f, 1.0f ); + meshBuilder.TexCoord4f( 1, 0.0f, 0.0f, 1.0f, 1.0f ); + meshBuilder.TexCoord4f( 2, 0.0f, 0.0f, flRadius, 0.0f ); + meshBuilder.TexCoord2f( 3, 1, 1 ); + meshBuilder.AdvanceVertex(); + + meshBuilder.Position3fv( vCenter.Base() ); + meshBuilder.Color4ub( 255, 255, 255, 255 ); + meshBuilder.TexCoord4f( 0, 0.0f, 0.0f, 1.0f, 1.0f ); + meshBuilder.TexCoord4f( 1, 0.0f, 0.0f, 1.0f, 1.0f ); + meshBuilder.TexCoord4f( 2, 0.0f, 0.0f, flRadius, 0.0f ); + meshBuilder.TexCoord2f( 3, 1, 0 ); + meshBuilder.AdvanceVertex(); + + meshBuilder.End(); + pMesh->Draw(); +} + + +//----------------------------------------------------------------------------- +// Paints a regular texture +//----------------------------------------------------------------------------- +void CVMTPreviewPanel::DrawRectangle( void ) +{ + // Get the aspect ratio of the material + int tw = m_Material->GetMappingWidth(); + int th = m_Material->GetMappingHeight(); + + if ( tw <= 0 || th <= 0 ) + return; + + int w, h; + GetSize( w, h ); + if ( w == 0 || h == 0 ) + return; + + SetupOrthoMatrix( w, h ); + SetupLightingState(); + + CMatRenderContextPtr pRenderContext( MaterialSystem() ); + + pRenderContext->MatrixMode( MATERIAL_VIEW ); + pRenderContext->LoadIdentity(); + + pRenderContext->MatrixMode( MATERIAL_MODEL ); + pRenderContext->LoadIdentity(); + + IMesh* pMesh = pRenderContext->GetDynamicMesh(); + + CMeshBuilder meshBuilder; + meshBuilder.Begin( pMesh, MATERIAL_TRIANGLE_STRIP, 4, 4 ); + + bool bIsUsingLightmap = m_Material->GetPropertyFlag( MATERIAL_PROPERTY_NEEDS_LIGHTMAP ); + bool bIsUsingBumpedLightmap = m_Material->GetPropertyFlag( MATERIAL_PROPERTY_NEEDS_BUMPED_LIGHTMAPS ); + + int nLightmapWidth = m_pLightmapTexture->GetActualWidth(); + float flHalfLuxel = 0.5f / nLightmapWidth; + Vector2D halfTexel( 0.5f / tw, 0.5f / th ); + + Vector vecNormal( 0.0f, 0.0f, 1.0f ); + Vector4D vecTangentS( 1.0f, 0.0f, 0.0f, 1.0f ); + Vector vecTangentT; + CrossProduct( vecNormal, vecTangentS.AsVector3D(), vecTangentT ); + + float screenaspect = (float)tw / (float)th; + float aspect = (float)w / (float)h; + + float ratio = screenaspect / aspect; + + // Screen is wider, need bars at top and bottom + int x2, y2; + int x, y; + x = y = 0; + int nXBorder = w > 15 ? 5 : w / 3; + int nYBorder = h > 15 ? 5 : h / 3; + w -= 2 * nXBorder; + h -= 2 * nYBorder; + if ( ratio > 1.0f ) + { + int usetall = (float)w / screenaspect; + y = ( h - usetall ) / 2; + h = usetall; + } + // Screen is narrower, need bars at left/right + else + { + int usewide = (float)h * screenaspect; + x = ( w - usewide ) / 2; + w = usewide; + } + x += nXBorder; + y += nYBorder; + + x2 = x+w; y2 = y+h; + + float u = halfTexel.x; + float v = halfTexel.y; + + float u1_l, u1_r, v1_t, v1_b; + float u2_l, u2_r, v2_t, v2_b; + + u1_l = u2_l = u; + u1_r = u2_r = 1.0f - u; + v1_t = v2_t = v; + v1_b = v2_b = 1.0f - v; + + if ( bIsUsingLightmap ) + { + u1_l = v1_t = flHalfLuxel; + u1_r = v1_b = 0.25 - flHalfLuxel; + if ( bIsUsingBumpedLightmap ) + { + u2_l = u2_r = 0.25f; + v2_t = v2_b = 0.0f; + } + } + + meshBuilder.Position3f( x, y2, 0.0f ); + meshBuilder.Normal3fv( vecNormal.Base() ); + meshBuilder.Color4ub( 255, 0, 0, 255 ); + meshBuilder.TexCoord2f( 0, u, v ); + meshBuilder.TexCoord2f( 1, u1_l, v1_t ); + meshBuilder.TexCoord2f( 2, u2_l, v2_t ); + meshBuilder.TangentS3fv( vecTangentS.Base() ); + meshBuilder.TangentT3fv( vecTangentT.Base() ); + meshBuilder.BoneWeight( 0, 1.0f ); + meshBuilder.BoneMatrix( 0, 0 ); + meshBuilder.UserData( vecTangentS.Base() ); + meshBuilder.AdvanceVertex(); + + meshBuilder.Position3f( x, y, 0.0f ); + meshBuilder.Normal3fv( vecNormal.Base() ); + meshBuilder.Color4ub( 255, 255, 255, 64 ); + meshBuilder.TexCoord2f( 0, u, 1.0f - v ); + meshBuilder.TexCoord2f( 1, u1_l, v1_b ); + meshBuilder.TexCoord2f( 2, u2_l, v2_b ); + meshBuilder.TangentS3fv( vecTangentS.Base() ); + meshBuilder.TangentT3fv( vecTangentT.Base() ); + meshBuilder.BoneWeight( 0, 1.0f ); + meshBuilder.BoneMatrix( 0, 0 ); + meshBuilder.UserData( vecTangentS.Base() ); + meshBuilder.AdvanceVertex(); + + meshBuilder.Position3f( x2, y2, 0.0f ); + meshBuilder.Normal3fv( vecNormal.Base() ); + meshBuilder.Color4ub( 0, 0, 255, 255 ); + meshBuilder.TexCoord2f( 0, 1.0f - u, v ); + meshBuilder.TexCoord2f( 1, u1_r, v1_t ); + meshBuilder.TexCoord2f( 2, u2_r, v2_t ); + meshBuilder.TangentS3fv( vecTangentS.Base() ); + meshBuilder.TangentT3fv( vecTangentT.Base() ); + meshBuilder.BoneWeight( 0, 1.0f ); + meshBuilder.BoneMatrix( 0, 0 ); + meshBuilder.UserData( vecTangentS.Base() ); + meshBuilder.AdvanceVertex(); + + meshBuilder.Position3f( x2, y, 0.0f ); + meshBuilder.Normal3fv( vecNormal.Base() ); + meshBuilder.Color4ub( 0, 255, 0, 64 ); + meshBuilder.TexCoord2f( 0, 1.0f - u, 1.0f - v ); + meshBuilder.TexCoord2f( 1, u1_r, v1_b ); + meshBuilder.TexCoord2f( 2, u2_r, v2_b ); + meshBuilder.TangentS3fv( vecTangentS.Base() ); + meshBuilder.TangentT3fv( vecTangentT.Base() ); + meshBuilder.BoneWeight( 0, 1.0f ); + meshBuilder.BoneMatrix( 0, 0 ); + meshBuilder.UserData( vecTangentS.Base() ); + meshBuilder.AdvanceVertex(); + + meshBuilder.FastIndex( 0 ); + meshBuilder.FastIndex( 1 ); + meshBuilder.FastIndex( 2 ); + meshBuilder.FastIndex( 3 ); + + meshBuilder.End(); + pMesh->Draw(); +} + + +//----------------------------------------------------------------------------- +// Paints a cubemap texture +//----------------------------------------------------------------------------- +void CVMTPreviewPanel::DrawSphere( void ) +{ + float flNewTime = Plat_FloatTime(); + + // Circle the camera around the origin + VMatrix rot; + MatrixBuildRotateZ( rot, ROTATION_SPEED * (flNewTime - m_flLastRotationTime ) ); + Vector vecTemp; + Vector3DMultiply( rot, m_vecCameraDirection, vecTemp ); + m_vecCameraDirection = vecTemp; + m_flLastRotationTime = flNewTime; + + int w, h; + GetSize( w, h ); + SetupProjectionMatrix( w, h ); + SetupLightingState(); + + LookAt( vec3_origin, VIEW_DISTANCE ); + + // Draw a sphere at the origin + if ( !m_Material->IsSpriteCard() ) + { + RenderSphere( vec3_origin, 10.0f, 20, 20 ); + } + else + { + RenderSpriteCard( vec3_origin, 10.0f ); + } +} + + +//----------------------------------------------------------------------------- +// Sets the camera to look at the the thing we're spinning around +//----------------------------------------------------------------------------- +void CVMTPreviewPanel::LookAt( const Vector &vecLookAt, float flRadius ) +{ + // Compute the distance to the camera for the object based on its + // radius and fov. + + // since tan( fov/2 ) = f/d + // cos( fov/2 ) = r / r' where r = sphere radius, r' = perp distance from sphere center to max extent of camera + // d/f = r'/d' where d' is distance of camera to sphere + // d' = r' / tan( fov/2 ) * r' = r / ( cos (fov/2) * tan( fov/2 ) ) = r / sin( fov/2 ) + float flFOVx = FOV; + + // Compute fov/2 in radians + flFOVx *= M_PI / 360.0f; + + // Compute an effective fov based on the aspect ratio + // if the height is smaller than the width + int w, h; + GetSize( w, h ); + if ( h < w ) + { + flFOVx = atan( h * tan( flFOVx ) / w ); + } + + float flDistance = flRadius / sin( flFOVx ); + + Vector vecMDLOrigin = vecLookAt; + Vector vecCameraOrigin; + VectorMA( vecMDLOrigin, -flDistance, m_vecCameraDirection, vecCameraOrigin ); + + CMatRenderContextPtr pRenderContext( MaterialSystem() ); + QAngle angles; + VectorAngles( m_vecCameraDirection, angles ); + + pRenderContext->MatrixMode( MATERIAL_VIEW ); + pRenderContext->LoadIdentity(); + + // convert from a right handed system to a left handed system + // since dx for wants it that way. +// pRenderContext->Scale( 1.0f, 1.0f, -1.0f ); + + pRenderContext->Rotate( -90, 1, 0, 0 ); // put Z going up + pRenderContext->Rotate( 90, 0, 0, 1 ); // put Z going up + pRenderContext->Rotate( -angles[2], 1, 0, 0 ); + pRenderContext->Rotate( -angles[0], 0, 1, 0 ); + pRenderContext->Rotate( -angles[1], 0, 0, 1 ); + pRenderContext->Translate( -vecCameraOrigin[0], -vecCameraOrigin[1], -vecCameraOrigin[2] ); +} + + +//----------------------------------------------------------------------------- +// Set up a projection matrix for a 90 degree fov +//----------------------------------------------------------------------------- +void CVMTPreviewPanel::SetupProjectionMatrix( int nWidth, int nHeight ) +{ + VMatrix proj; + float flFOV = FOV; + float flZNear = ZNEAR; + float flZFar = ZFAR; + float flApsectRatio = (nHeight != 0.0f) ? (float)nWidth / (float)nHeight : 100.0f; + + float halfWidth = tan( flFOV * M_PI / 360.0 ); + float halfHeight = halfWidth / flApsectRatio; + + memset( proj.Base(), 0, sizeof( proj ) ); + proj[0][0] = 1.0f / halfWidth; + proj[1][1] = 1.0f / halfHeight; + proj[2][2] = flZFar / ( flZNear - flZFar ); + proj[3][2] = -1.0f; + proj[2][3] = flZNear * flZFar / ( flZNear - flZFar ); + + CMatRenderContextPtr pRenderContext( MaterialSystem() ); + pRenderContext->MatrixMode( MATERIAL_PROJECTION ); + pRenderContext->LoadMatrix( proj ); +} + + +//----------------------------------------------------------------------------- +// Set up a orthographic projection matrix +//----------------------------------------------------------------------------- +void CVMTPreviewPanel::SetupOrthoMatrix( int nWidth, int nHeight ) +{ + CMatRenderContextPtr pRenderContext( MaterialSystem() ); + pRenderContext->MatrixMode( MATERIAL_PROJECTION ); + pRenderContext->LoadIdentity(); + pRenderContext->Ortho( 0, 0, nWidth, nHeight, -1.0f, 1.0f ); +} + + +//----------------------------------------------------------------------------- +// Power of two FB texture +//----------------------------------------------------------------------------- +static CTextureReference s_pPowerOfTwoFrameBufferTexture; + +static ITexture *GetPowerOfTwoFrameBufferTexture( void ) +{ + if( !s_pPowerOfTwoFrameBufferTexture ) + { + s_pPowerOfTwoFrameBufferTexture.Init( vgui::MaterialSystem()->FindTexture( "_rt_PowerOfTwoFB", TEXTURE_GROUP_RENDER_TARGET ) ); + } + + return s_pPowerOfTwoFrameBufferTexture; +} + + +//----------------------------------------------------------------------------- +// Paints the texture +//----------------------------------------------------------------------------- +void CVMTPreviewPanel::Paint( void ) +{ + CMatRenderContextPtr pRenderContext( MaterialSystem() ); + int w, h; + GetSize( w, h ); + vgui::MatSystemSurface()->Begin3DPaint( 0, 0, w, h ); + + // Deal with refraction + if ( m_Material->NeedsPowerOfTwoFrameBufferTexture() ) + { + ITexture *pTexture = GetPowerOfTwoFrameBufferTexture(); + if ( pTexture && !pTexture->IsError() ) + { + pRenderContext->CopyRenderTargetToTexture( pTexture ); + pRenderContext->SetFrameBufferCopyTexture( pTexture ); + } + } + + pRenderContext->ClearColor4ub( 76, 88, 68, 255 ); + pRenderContext->ClearBuffers( true, true ); + + pRenderContext->FogMode( MATERIAL_FOG_NONE ); + pRenderContext->SetNumBoneWeights( 0 ); + pRenderContext->Bind( m_Material ); + pRenderContext->BindLightmapTexture( m_pLightmapTexture ); + pRenderContext->BindLocalCubemap( m_DefaultEnvCubemap ); + + if ( m_bDrawIn3DMode || m_Material->IsSpriteCard() ) + { + DrawSphere(); + } + else + { + DrawRectangle(); + } + + vgui::MatSystemSurface()->End3DPaint( ); +}
\ No newline at end of file |