225 lines
5.6 KiB
C++
225 lines
5.6 KiB
C++
//========= Copyright © 1996-2005, 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
|