Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
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.

119 lines
3.9 KiB

5 years ago
//========= 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