mirror of
https://github.com/nillerusr/source-engine.git
synced 2024-12-23 22:56:50 +00:00
119 lines
3.9 KiB
C++
119 lines
3.9 KiB
C++
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose:
|
|
//
|
|
// $NoKeywords: $
|
|
//
|
|
//===========================================================================//
|
|
|
|
#ifndef SHADERAPIDX8_H
|
|
#define SHADERAPIDX8_H
|
|
|
|
#include "shaderapibase.h"
|
|
#include "shaderapi/ishadershadow.h"
|
|
#include "locald3dtypes.h"
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Vendor-specific defines
|
|
//-----------------------------------------------------------------------------
|
|
#define ATI_FETCH4_ENABLE MAKEFOURCC('G','E','T','4')
|
|
#define ATI_FETCH4_DISABLE MAKEFOURCC('G','E','T','1')
|
|
#define ATISAMP_FETCH4 D3DSAMP_MIPMAPLODBIAS
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Forward declarations
|
|
//-----------------------------------------------------------------------------
|
|
class CMeshBase;
|
|
class CMeshBuilder;
|
|
struct ShadowState_t;
|
|
class IMaterialInternal;
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// State that matters to buffered meshes... (for debugging only)
|
|
//-----------------------------------------------------------------------------
|
|
struct BufferedState_t
|
|
{
|
|
D3DXMATRIX m_Transform[3];
|
|
D3DVIEWPORT9 m_Viewport;
|
|
int m_BoundTexture[16];
|
|
void *m_VertexShader;
|
|
void *m_PixelShader;
|
|
};
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// The DX8 shader API
|
|
//-----------------------------------------------------------------------------
|
|
// FIXME: Remove this! Either move them into CShaderAPIBase or CShaderAPIDx8
|
|
class IShaderAPIDX8 : public CShaderAPIBase
|
|
{
|
|
public:
|
|
// Draws the mesh
|
|
virtual void DrawMesh( CMeshBase *pMesh ) = 0;
|
|
|
|
// Draw the mesh with the currently bound vertex and index buffers.
|
|
virtual void DrawWithVertexAndIndexBuffers( void ) = 0;
|
|
|
|
// modifies the vertex data when necessary
|
|
virtual void ModifyVertexData( ) = 0;
|
|
|
|
// Gets the current buffered state... (debug only)
|
|
virtual void GetBufferedState( BufferedState_t &state ) = 0;
|
|
|
|
// Gets the current backface cull state....
|
|
virtual D3DCULL GetCullMode() const = 0;
|
|
|
|
// Measures fill rate
|
|
virtual void ComputeFillRate() = 0;
|
|
|
|
// Selection mode methods
|
|
virtual bool IsInSelectionMode() const = 0;
|
|
|
|
// We hit somefin in selection mode
|
|
virtual void RegisterSelectionHit( float minz, float maxz ) = 0;
|
|
|
|
// Get the currently bound material
|
|
virtual IMaterialInternal* GetBoundMaterial() = 0;
|
|
|
|
// These methods are called by the transition table
|
|
// They depend on dynamic state so can't exist inside the transition table
|
|
virtual void ApplyZBias( const ShadowState_t &shaderState ) = 0;
|
|
virtual void ApplyTextureEnable( const ShadowState_t &state, int stage ) = 0;
|
|
virtual void ApplyCullEnable( bool bEnable ) = 0;
|
|
virtual void SetVertexBlendState( int numBones ) = 0;
|
|
virtual void ApplyFogMode( ShaderFogMode_t fogMode, bool bSRGBWritesEnabled, bool bDisableGammaCorrection ) = 0;
|
|
|
|
virtual int GetActualTextureStageCount() const = 0;
|
|
virtual int GetActualSamplerCount() const = 0;
|
|
|
|
virtual bool IsRenderingMesh() const = 0;
|
|
|
|
// Fog methods...
|
|
virtual void FogMode( MaterialFogMode_t fogMode ) = 0;
|
|
|
|
virtual int GetCurrentFrameCounter( void ) const = 0;
|
|
|
|
// Workaround hack for visualization of selection mode
|
|
virtual void SetupSelectionModeVisualizationState() = 0;
|
|
|
|
virtual bool UsingSoftwareVertexProcessing() const = 0;
|
|
|
|
//notification that the SRGB write state is being changed
|
|
virtual void EnabledSRGBWrite( bool bEnabled ) = 0;
|
|
|
|
// Alpha to coverage
|
|
virtual void ApplyAlphaToCoverage( bool bEnable ) = 0;
|
|
|
|
#if defined( _X360 )
|
|
virtual void ApplySRGBReadState( int iTextureStage, bool bSRGBReadEnabled ) = 0; //360 needs to rebind the texture over again instead of setting a sampler state
|
|
#endif
|
|
|
|
virtual void PrintfVA( char *fmt, va_list vargs ) = 0;
|
|
virtual void Printf( PRINTF_FORMAT_STRING const char *fmt, ... ) = 0;
|
|
virtual float Knob( char *knobname, float *setvalue = NULL ) = 0;
|
|
};
|
|
|
|
|
|
#endif // SHADERAPIDX8_H
|