summaryrefslogtreecommitdiff
path: root/public/scratchpad3d.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /public/scratchpad3d.h
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'public/scratchpad3d.h')
-rw-r--r--public/scratchpad3d.h224
1 files changed, 224 insertions, 0 deletions
diff --git a/public/scratchpad3d.h b/public/scratchpad3d.h
new file mode 100644
index 0000000..7e9aad6
--- /dev/null
+++ b/public/scratchpad3d.h
@@ -0,0 +1,224 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#ifndef SCRATCHPAD3D_H
+#define SCRATCHPAD3D_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+#include <stdio.h>
+#include "iscratchpad3d.h"
+#include "mathlib/vmatrix.h"
+#include "filesystem.h"
+
+class CFileRead;
+
+
+class CScratchPad3D : public IScratchPad3D
+{
+// Commands that can go in the file.
+public:
+
+ enum
+ {
+ COMMAND_POINT=0,
+ COMMAND_LINE,
+ COMMAND_POLYGON,
+ COMMAND_MATRIX,
+ COMMAND_RENDERSTATE,
+ COMMAND_TEXT,
+ COMMAND_NUMCOMMANDS
+ };
+
+ class ICachedRenderData
+ {
+ public:
+ virtual void Release() = 0;
+ };
+
+ class CBaseCommand
+ {
+ public:
+ CBaseCommand( unsigned char iCommand )
+ {
+ m_iCommand = (unsigned char)iCommand;
+ m_pCachedRenderData = NULL;
+ }
+
+ ~CBaseCommand()
+ {
+ ReleaseCachedRenderData();
+ }
+
+ virtual void Read( CFileRead *pFile ) = 0;
+ virtual void Write( IFileSystem* pFileSystem, FileHandle_t fp ) = 0;
+
+ // Release cached render data. Usually used for releasing things like textures when
+ // the app is resizing..
+ void ReleaseCachedRenderData()
+ {
+ if ( m_pCachedRenderData )
+ {
+ m_pCachedRenderData->Release();
+ m_pCachedRenderData = NULL;
+ }
+ }
+
+ public:
+
+ unsigned char m_iCommand; // One of the COMMAND_ defines.
+
+ // The renderer can cache data with the commands to speedup the rendering after
+ // the first time (text uses this big time).
+ ICachedRenderData *m_pCachedRenderData;
+ };
+
+ class CCommand_Point : public CBaseCommand
+ {
+ public:
+ CCommand_Point() : CBaseCommand( COMMAND_POINT ) {}
+
+ virtual void Read( CFileRead *pFile );
+ virtual void Write( IFileSystem* pFileSystem, FileHandle_t fp );
+
+ float m_flPointSize;
+ CSPVert m_Vert;
+ };
+
+ class CCommand_Line : public CBaseCommand
+ {
+ public:
+ CCommand_Line() : CBaseCommand( COMMAND_LINE ) {}
+
+ virtual void Read( CFileRead *pFile );
+ virtual void Write( IFileSystem* pFileSystem, FileHandle_t fp );
+
+ CSPVert m_Verts[2];
+ };
+
+ class CCommand_Polygon : public CBaseCommand
+ {
+ public:
+ CCommand_Polygon() : CBaseCommand( COMMAND_POLYGON ) {}
+
+ virtual void Read( CFileRead *pFile );
+ virtual void Write( IFileSystem* pFileSystem, FileHandle_t fp );
+
+ CUtlVector<CSPVert> m_Verts;
+ };
+
+ class CCommand_Matrix : public CBaseCommand
+ {
+ public:
+ CCommand_Matrix() : CBaseCommand( COMMAND_MATRIX ) {}
+
+ virtual void Read( CFileRead *pFile );
+ virtual void Write( IFileSystem* pFileSystem, FileHandle_t fp );
+
+ VMatrix m_mMatrix;
+ };
+
+ class CCommand_RenderState : public CBaseCommand
+ {
+ public:
+ CCommand_RenderState() : CBaseCommand( COMMAND_RENDERSTATE ) {}
+
+ virtual void Read( CFileRead *pFile );
+ virtual void Write( IFileSystem* pFileSystem, FileHandle_t fp );
+
+ unsigned long m_State; // One of the RS_ enums.
+ unsigned long m_Val;
+ };
+
+ class CCommand_Text : public CBaseCommand
+ {
+ public:
+ CCommand_Text() : CBaseCommand( COMMAND_TEXT ) {}
+
+ virtual void Read( CFileRead *pFile );
+ virtual void Write( IFileSystem* pFileSystem, FileHandle_t fp );
+
+ CUtlVector<char> m_String; // The string to render.
+ CTextParams m_TextParams;
+ };
+
+
+public:
+
+ CScratchPad3D( char const *pFilename, IFileSystem *pFileSystem, bool bAutoClear );
+
+ void AutoFlush();
+ void DrawRectGeneric( int iPlane, int otherDim1, int otherDim2, float planeDist, Vector2D const &vMin, Vector2D const &vMax, CSPColor const &vColor );
+ void DeleteCommands();
+
+ // Load a file...
+ bool LoadCommandsFromFile( );
+
+
+public:
+
+ virtual void Release();
+
+ virtual void SetMapping(
+ Vector const &vInputMin,
+ Vector const &vInputMax,
+ Vector const &vOutputMin,
+ Vector const &vOutputMax );
+ virtual bool GetAutoFlush();
+ virtual void SetAutoFlush( bool bAutoFlush );
+ virtual void DrawPoint( CSPVert const &v, float flPointSize );
+ virtual void DrawLine( CSPVert const &v1, CSPVert const &v2 );
+ virtual void DrawPolygon( CSPVertList const &verts );
+ virtual void DrawRectYZ( float xPos, Vector2D const &vMin, Vector2D const &vMax, CSPColor const &vColor );
+ virtual void DrawRectXZ( float yPos, Vector2D const &vMin, Vector2D const &vMax, CSPColor const &vColor );
+ virtual void DrawRectXY( float zPos, Vector2D const &vMin, Vector2D const &vMax, CSPColor const &vColor );
+ virtual void DrawWireframeBox( Vector const &vMin, Vector const &vMax, Vector const &vColor );
+ virtual void DrawText( const char *pStr, const CTextParams &params );
+ virtual void SetRenderState( RenderState state, unsigned long val );
+ virtual void Clear();
+ virtual void Flush();
+ virtual void DrawImageBW(
+ unsigned char const *pData,
+ int width,
+ int height,
+ int pitchInBytes,
+ bool bOutlinePixels=true,
+ bool bOutlineImage=false,
+ Vector *vCorners=NULL );
+
+ // 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 );
+
+ void DrawPolygonsForPixels(
+ SPRGBA *pData,
+ int width,
+ int height,
+ int pitchInBytes,
+ Vector *vCorners );
+
+public:
+ IFileSystem* m_pFileSystem;
+ char const *m_pFilename;
+ CUtlVector<CBaseCommand*> m_Commands;
+ bool m_bAutoFlush;
+};
+
+
+IFileSystem* ScratchPad3D_SetupFileSystem();
+
+
+#endif // SCRATCHPAD3D_H