diff options
| author | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
|---|---|---|
| committer | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
| commit | 39ed87570bdb2f86969d4be821c94b722dc71179 (patch) | |
| tree | abc53757f75f40c80278e87650ea92808274aa59 /mp/src/public/iscratchpad3d.h | |
| download | source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.tar.xz source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.zip | |
First version of the SOurce SDK 2013
Diffstat (limited to 'mp/src/public/iscratchpad3d.h')
| -rw-r--r-- | mp/src/public/iscratchpad3d.h | 326 |
1 files changed, 326 insertions, 0 deletions
diff --git a/mp/src/public/iscratchpad3d.h b/mp/src/public/iscratchpad3d.h new file mode 100644 index 00000000..3f7778af --- /dev/null +++ b/mp/src/public/iscratchpad3d.h @@ -0,0 +1,326 @@ +//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#ifndef ISCRATCHPAD3D_H
+#define ISCRATCHPAD3D_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+// IScratchPad3D will store drawing commands in a file to be viewed by ScratchPad3DViewer.
+// It can be used while stepping through geometry code to visualize what is going on as
+// drawing commands will be immediately visible in ScratchPad3DViewer even while you're stuck
+// in the debugger
+
+// ScratchPad3DViewer initially orbits 100 inches from the origin, so it can be useful
+// to call SetMapping to map what you're drawing input into this cube.
+
+
+#include "mathlib/vector.h"
+#include "mathlib/vector2d.h"
+#include "utlvector.h"
+
+class IFileSystem;
+
+
+class CSPColor
+{
+public:
+ CSPColor()
+ {
+ m_flAlpha = 1;
+ }
+ CSPColor( const Vector &vColor, float flAlpha=1 )
+ {
+ m_vColor = vColor;
+ m_flAlpha = flAlpha;
+ }
+ CSPColor( float r, float g, float b, float a=1 )
+ {
+ m_vColor.Init( r, g, b );
+ m_flAlpha = a;
+ }
+
+ Vector m_vColor;
+ float m_flAlpha;
+};
+
+
+class CSPVert
+{
+public:
+ CSPVert();
+ CSPVert( Vector const &vPos, const CSPColor &vColor=CSPColor( Vector(1, 1, 1), 1 ) );
+
+ void Init( Vector const &vPos, const CSPColor &vColor=CSPColor( Vector(1, 1, 1), 1 ) );
+
+public:
+ Vector m_vPos;
+ CSPColor m_vColor;
+};
+
+
+class CSPVertList
+{
+public:
+ CSPVertList( int nVerts = 0 );
+ CSPVertList(CSPVert const *pVerts, int nVerts);
+ CSPVertList(Vector const *pVerts, int nVerts, CSPColor vColor=CSPColor(1,1,1) );
+
+ CSPVertList(Vector const *pVerts, Vector const *pColors, int nVerts);
+ CSPVertList(Vector const *pVerts, CSPColor const *pColors, int nVerts);
+
+ CSPVertList(Vector const &vert1, CSPColor const &color1,
+ Vector const &vert2, CSPColor const &color2,
+ Vector const &vert3, CSPColor const &color3);
+
+ CUtlVector<CSPVert> m_Verts;
+};
+
+class SPRGBA
+{
+public:
+ unsigned char r,g,b,a;
+};
+
+
+class CTextParams
+{
+public:
+ CTextParams();
+
+
+ Vector m_vColor; // Color of the string (starting color.. at some point,
+ // we can embed commands in the text itself to change the color).
+ float m_flAlpha; // Alpha of the whole thing.
+
+ bool m_bSolidBackground; // Should the background be solid or alpha'd?
+
+ // Draw an outline around the text?
+ bool m_bOutline;
+
+ Vector m_vPos; // Where to render the text.
+ bool m_bCentered; // Centered on m_vPos, or is m_vPos the upper-left corner?
+
+ QAngle m_vAngles; // Orientation of the text.
+ bool m_bTwoSided; // Render the text from both sides?
+
+ float m_flLetterWidth; // Letter width in world space.
+};
+
+
+abstract_class IScratchPad3D
+{
+protected:
+
+ virtual ~IScratchPad3D() {}
+
+
+// Types.
+public:
+
+ enum RenderState
+ {
+ RS_FillMode=0, // val = one of the FillMode enums
+ RS_ZRead,
+ RS_ZBias // val = 0 - 16 to push Z towards viewer
+ };
+
+ enum FillMode
+ {
+ FillMode_Wireframe=0,
+ FillMode_Solid
+ };
+
+
+public:
+
+ virtual void Release() = 0;
+
+ // This sets up a mapping between input coordinates and output coordinates.
+ // This can be used to zoom into an area of interest where you'll be drawing things.
+ // An alternative is to press Z while in VisLibViewer to have it center and zoom on
+ // everything that has been drawn.
+ virtual void SetMapping(
+ Vector const &vInputMin,
+ Vector const &vInputMax,
+ Vector const &vOutputMin,
+ Vector const &vOutputMax ) = 0;
+
+ // Enable/disable auto flush. When set to true (the default), all drawing commands
+ // are immediately written to the file and will show up in VisLibViewer right away.
+ // If you want to draw a lot of things, you can set this to false and call Flush()
+ // manually when you want the file written out.
+ // When you set auto flush to true, it calls Flush().
+ virtual bool GetAutoFlush() = 0;
+ virtual void SetAutoFlush( bool bAutoFlush ) = 0;
+
+ // Draw a point. Point size is (roughly) in world coordinates, so points
+ // get smaller as the viewer moves away.
+ virtual void DrawPoint( CSPVert const &v, float flPointSize ) = 0;
+
+ // Draw a line.
+ virtual void DrawLine( CSPVert const &v1, CSPVert const &v2 ) = 0;
+
+ // Draw a polygon.
+ virtual void DrawPolygon( CSPVertList const &verts ) = 0;
+
+ // Draw 2D rectangles.
+ virtual void DrawRectYZ( float xPos, Vector2D const &vMin, Vector2D const &vMax, const CSPColor &vColor ) = 0;
+ virtual void DrawRectXZ( float yPos, Vector2D const &vMin, Vector2D const &vMax, const CSPColor &vColor ) = 0;
+ virtual void DrawRectXY( float zPos, Vector2D const &vMin, Vector2D const &vMax, const CSPColor &vColor ) = 0;
+
+ // Draw a wireframe box.
+ virtual void DrawWireframeBox( Vector const &vMin, Vector const &vMax, Vector const &vColor ) = 0;
+
+ // Draw some text.
+ virtual void DrawText( const char *pStr, const CTextParams ¶ms ) = 0;
+
+ // Wireframe on/off.
+ virtual void SetRenderState( RenderState state, unsigned long val ) = 0;
+
+ // Clear all the drawing commands.
+ virtual void Clear() = 0;
+
+ // Calling this writes all the commands to the file. If AutoFlush is true, this is called
+ // automatically in all the drawing commands.
+ virtual void Flush() = 0;
+
+
+// Primitives that build on the atomic primitives.
+public:
+
+ // Draw a black and white image.
+ // Corners are in this order: bottom-left, top-left, top-right, bottom-right.
+ // If the corners are NULL, then the image is drawn in the XY plane from (-100,-100) to (100,100).
+ virtual void DrawImageBW(
+ unsigned char const *pData,
+ int width,
+ int height,
+ int pitchInBytes,
+ bool bOutlinePixels=true,
+ bool bOutlineImage=false,
+ Vector *vCorners=NULL ) = 0;
+
+ // Draw an RGBA image.
+ // Corners are in this order: bottom-left, top-left, top-right, bottom-right.
+ virtual void DrawImageRGBA(
+ SPRGBA *pData,
+ int width,
+ int height,
+ int pitchInBytes,
+ bool bOutlinePixels=true,
+ bool bOutlineImage=false,
+ Vector *vCorners=NULL ) = 0;
+};
+
+
+// Just a helper for functions where you want to have a CScratchPad3D around
+// and release it automatically when the function exits.
+class CScratchPadAutoRelease
+{
+public:
+ CScratchPadAutoRelease( IScratchPad3D *pPad ) { m_pPad = pPad; }
+ ~CScratchPadAutoRelease() { if( m_pPad ) m_pPad->Release(); }
+
+ IScratchPad3D *m_pPad;
+};
+
+
+
+IScratchPad3D* ScratchPad3D_Create( char const *pFilename = "scratch.pad" );
+
+
+
+// ------------------------------------------------------------------------------------ //
+// Inlines.
+// ------------------------------------------------------------------------------------ //
+
+inline CTextParams::CTextParams()
+{
+ m_vColor.Init( 1, 1, 1 );
+ m_flAlpha = 1;
+ m_bSolidBackground = true;
+ m_bOutline = true;
+ m_vPos.Init();
+ m_bCentered = true;
+ m_vAngles.Init();
+ m_bTwoSided = true;
+ m_flLetterWidth = 3;
+}
+
+inline CSPVert::CSPVert()
+{
+}
+
+inline CSPVert::CSPVert( Vector const &vPos, const CSPColor &vColor )
+{
+ Init( vPos, vColor );
+}
+
+inline void CSPVert::Init( Vector const &vPos, const CSPColor &vColor )
+{
+ m_vPos = vPos;
+ m_vColor = vColor;
+}
+
+
+inline CSPVertList::CSPVertList( int nVerts )
+{
+ if( nVerts )
+ m_Verts.AddMultipleToTail( nVerts );
+}
+
+inline CSPVertList::CSPVertList(CSPVert const *pVerts, int nVerts )
+{
+ m_Verts.CopyArray( pVerts, nVerts );
+}
+
+inline CSPVertList::CSPVertList(Vector const *pVerts, int nVerts, CSPColor vColor )
+{
+ m_Verts.AddMultipleToTail( nVerts );
+ for( int i=0; i < nVerts; i++ )
+ {
+ m_Verts[i].m_vPos = pVerts[i];
+ m_Verts[i].m_vColor = vColor;
+ }
+}
+
+inline CSPVertList::CSPVertList( Vector const *pVerts, Vector const *pColors, int nVerts )
+{
+ m_Verts.AddMultipleToTail( nVerts );
+ for( int i=0; i < nVerts; i++ )
+ {
+ m_Verts[i].m_vPos = pVerts[i];
+ m_Verts[i].m_vColor = pColors[i];
+ }
+}
+
+inline CSPVertList::CSPVertList( Vector const *pVerts, CSPColor const *pColors, int nVerts )
+{
+ m_Verts.AddMultipleToTail( nVerts );
+ for( int i=0; i < nVerts; i++ )
+ {
+ m_Verts[i].m_vPos = pVerts[i];
+ m_Verts[i].m_vColor = pColors[i];
+ }
+}
+
+inline CSPVertList::CSPVertList(
+ Vector const &vert1, CSPColor const &color1,
+ Vector const &vert2, CSPColor const &color2,
+ Vector const &vert3, CSPColor const &color3 )
+{
+ m_Verts.AddMultipleToTail( 3 );
+ m_Verts[0].Init( vert1, color1 );
+ m_Verts[1].Init( vert2, color2 );
+ m_Verts[2].Init( vert3, color3 );
+}
+
+
+#endif // ISCRATCHPAD3D_H
|