aboutsummaryrefslogtreecommitdiff
path: root/mp/src/public/tier2/beamsegdraw.h
diff options
context:
space:
mode:
Diffstat (limited to 'mp/src/public/tier2/beamsegdraw.h')
-rw-r--r--mp/src/public/tier2/beamsegdraw.h119
1 files changed, 119 insertions, 0 deletions
diff --git a/mp/src/public/tier2/beamsegdraw.h b/mp/src/public/tier2/beamsegdraw.h
new file mode 100644
index 00000000..2ea110cf
--- /dev/null
+++ b/mp/src/public/tier2/beamsegdraw.h
@@ -0,0 +1,119 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//===========================================================================//
+#if !defined( BEAMSEGDRAW_H )
+#define BEAMSEGDRAW_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#define NOISE_DIVISIONS 128
+
+
+#include "mathlib/vector.h"
+#include "materialsystem/imesh.h"
+
+//-----------------------------------------------------------------------------
+// Forward declarations
+//-----------------------------------------------------------------------------
+struct BeamTrail_t;
+class IMaterial;
+
+
+//-----------------------------------------------------------------------------
+// CBeamSegDraw is a simple interface to beam rendering.
+//-----------------------------------------------------------------------------
+struct BeamSeg_t
+{
+ Vector m_vPos;
+ Vector m_vColor;
+ float m_flTexCoord; // Y texture coordinate
+ float m_flWidth;
+ float m_flAlpha;
+};
+
+class CBeamSegDraw
+{
+public:
+ CBeamSegDraw() : m_pRenderContext( NULL ) {}
+ // Pass null for pMaterial if you have already set the material you want.
+ void Start( IMatRenderContext *pRenderContext, int nSegs, IMaterial *pMaterial=0, CMeshBuilder *pMeshBuilder = NULL, int nMeshVertCount = 0 );
+ virtual void NextSeg( BeamSeg_t *pSeg );
+ void End();
+
+protected:
+ void SpecifySeg( const Vector &vecCameraPos, const Vector &vNextPos );
+ void ComputeNormal( const Vector &vecCameraPos, const Vector &vStartPos, const Vector &vNextPos, Vector *pNormal );
+
+ CMeshBuilder *m_pMeshBuilder;
+ int m_nMeshVertCount;
+
+ CMeshBuilder m_Mesh;
+ BeamSeg_t m_Seg;
+
+ int m_nTotalSegs;
+ int m_nSegsDrawn;
+
+ Vector m_vNormalLast;
+ IMatRenderContext *m_pRenderContext;
+};
+
+class CBeamSegDrawArbitrary : public CBeamSegDraw
+{
+public:
+ void SetNormal( const Vector &normal );
+ void NextSeg( BeamSeg_t *pSeg );
+
+protected:
+ void SpecifySeg( const Vector &vNextPos );
+
+ BeamSeg_t m_PrevSeg;
+};
+
+#if 0
+int ScreenTransform( const Vector& point, Vector& screen );
+
+void DrawSegs( int noise_divisions, float *prgNoise, const model_t* spritemodel,
+ float frame, int rendermode, const Vector& source, const Vector& delta,
+ float startWidth, float endWidth, float scale, float freq, float speed, int segments,
+ int flags, float* color, float fadeLength, float flHDRColorScale = 1.0f );
+void DrawTeslaSegs( int noise_divisions, float *prgNoise, const model_t* spritemodel,
+ float frame, int rendermode, const Vector& source, const Vector& delta,
+ float startWidth, float endWidth, float scale, float freq, float speed, int segments,
+ int flags, float* color, float fadeLength, float flHDRColorScale = 1.0f );
+void DrawSplineSegs( int noise_divisions, float *prgNoise,
+ const model_t* beammodel, const model_t* halomodel, float flHaloScale,
+ float frame, int rendermode, int numAttachments, Vector* attachment,
+ float startWidth, float endWidth, float scale, float freq, float speed, int segments,
+ int flags, float* color, float fadeLength, float flHDRColorScale = 1.0f );
+void DrawHalo(IMaterial* pMaterial, const Vector& source, float scale, float const* color, float flHDRColorScale = 1.0f );
+void BeamDrawHalo( const model_t* spritemodel, float frame, int rendermode, const Vector& source,
+ float scale, float* color, float flHDRColorScale = 1.0f );
+void DrawDisk( int noise_divisions, float *prgNoise, const model_t* spritemodel,
+ float frame, int rendermode, const Vector& source, const Vector& delta,
+ float width, float scale, float freq, float speed,
+ int segments, float* color, float flHDRColorScale = 1.0f );
+void DrawCylinder( int noise_divisions, float *prgNoise, const model_t* spritemodel,
+ float frame, int rendermode, const Vector& source,
+ const Vector& delta, float width, float scale, float freq,
+ float speed, int segments, float* color, float flHDRColorScale = 1.0f );
+void DrawRing( int noise_divisions, float *prgNoise, void (*pfnNoise)( float *noise, int divs, float scale ),
+ const model_t* spritemodel, float frame, int rendermode,
+ const Vector& source, const Vector& delta, float width, float amplitude,
+ float freq, float speed, int segments, float* color, float flHDRColorScale = 1.0f );
+void DrawBeamFollow( const model_t* spritemodel, BeamTrail_t* pHead, int frame, int rendermode, Vector& delta,
+ Vector& screen, Vector& screenLast, float die, const Vector& source,
+ int flags, float width, float amplitude, float freq, float* color, float flHDRColorScale = 1.0f );
+
+void DrawBeamQuadratic( const Vector &start, const Vector &control, const Vector &end, float width, const Vector &color, float scrollOffset, float flHDRColorScale = 1.0f );
+#endif
+
+//-----------------------------------------------------------------------------
+// Assumes the material has already been bound
+//-----------------------------------------------------------------------------
+void DrawSprite( const Vector &vecOrigin, float flWidth, float flHeight, color32 color );
+
+#endif // BEAMDRAW_H