You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
224 lines
5.4 KiB
224 lines
5.4 KiB
//========= 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 ¶ms ); |
|
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
|
|
|