📄 shaderapiempty.cpp
字号:
int TextureMemorySize() const;
bool SupportsOverbright() const;
bool SupportsCubeMaps() const;
bool SupportsMipmappedCubemaps() const;
bool SupportsNonPow2Textures() const;
int GetNumTextureStages() const;
int NumVertexShaderConstants() const;
int NumPixelShaderConstants() const;
int MaxNumLights() const;
bool SupportsHardwareLighting() const;
int MaxBlendMatrices() const;
int MaxBlendMatrixIndices() const;
int MaxVertexShaderBlendMatrices() const;
int MaxUserClipPlanes() const;
bool UseFastClipping() const
{
return false;
}
bool UseFastZReject() const
{
return false;
}
const char *GetHWSpecificShaderDLLName() const;
bool NeedsAAClamp() const
{
return false;
}
bool SupportsSpheremapping() const;
bool HasFastZReject() const;
bool ReadPixelsFromFrontBuffer() const;
bool PreferDynamicTextures() const;
bool HasProjectedBumpEnv() const;
void SetSoftwareVertexShader( SoftwareVertexShader_t shader );
void CallSoftwareVertexShader( CMeshBuilder *pMeshBuilder );
void ForceHardwareSync( void );
void DrawDebugText( int desiredLeft, int desiredTop,
MaterialRect_t *pActualRect,
const char *pText );
int GetCurrentNumBones( void ) const;
int GetCurrentLightCombo( void ) const;
int GetCurrentFogType( void ) const;
void RecordString( const char *pStr );
void EvictManagedResources();
void SetTextureTransformDimension( int textureStage, int dimension, bool projected );
void DisableTextureTransform( int textureStage )
{
}
void SetBumpEnvMatrix( int textureStage, float m00, float m01, float m10, float m11 );
// Gets the lightmap dimensions
virtual void GetLightmapDimensions( int *w, int *h );
// Adds/removes precompiled shader dictionaries
virtual ShaderDLL_t AddShaderDLL( );
virtual void RemoveShaderDLL( ShaderDLL_t hShaderDLL );
virtual void AddShaderDictionary( ShaderDLL_t hShaderDLL, IPrecompiledShaderDictionary *pDict );
virtual void SetShaderDLL( ShaderDLL_t hShaderDLL );
virtual void SyncToken( const char *pToken );
// Level of anisotropic filtering
virtual void SetAnisotropicLevel( int nAnisotropyLevel );
bool SupportsHDR() const
{
return true;
}
virtual void EnableSRGBRead( TextureStage_t stage, bool bEnable )
{
}
virtual bool NeedsATICentroidHack() const
{
return false;
}
private:
enum
{
TRANSLUCENT = 0x1,
ALPHATESTED = 0x2,
AMBIENT_CUBE = 0x4,
VERTEX_AND_PIXEL_SHADERS = 0x8,
};
CEmptyMesh m_Mesh;
};
//-----------------------------------------------------------------------------
// Class Factory
//-----------------------------------------------------------------------------
static CShaderAPIEmpty g_ShaderAPIEmpty;
static CShaderShadowEmpty g_ShaderShadow;
EXPOSE_SINGLE_INTERFACE_GLOBALVAR( CShaderAPIEmpty, IShaderAPI,
SHADERAPI_INTERFACE_VERSION, g_ShaderAPIEmpty )
EXPOSE_SINGLE_INTERFACE_GLOBALVAR( CShaderShadowEmpty, IShaderShadow,
SHADERSHADOW_INTERFACE_VERSION, g_ShaderShadow )
EXPOSE_SINGLE_INTERFACE_GLOBALVAR( CShaderAPIEmpty, IMaterialSystemHardwareConfig,
MATERIALSYSTEM_HARDWARECONFIG_INTERFACE_VERSION, g_ShaderAPIEmpty )
//-----------------------------------------------------------------------------
// The main GL Shader util interface
//-----------------------------------------------------------------------------
IShaderUtil* g_pShaderUtil;
IShaderUtil* ShaderUtil()
{
return g_pShaderUtil;
}
//-----------------------------------------------------------------------------
//
// The empty mesh...
//
//-----------------------------------------------------------------------------
CEmptyMesh::CEmptyMesh()
{
m_pVertexMemory = new unsigned char[VERTEX_BUFFER_SIZE];
}
CEmptyMesh::~CEmptyMesh()
{
delete[] m_pVertexMemory;
}
// Locks/ unlocks the vertex buffer, returns the index of the first vertex
// numIndices of -1 means don't lock the index buffer...
void CEmptyMesh::LockMesh( int numVerts, int numIndices, MeshDesc_t& desc )
{
// Who cares about the data?
desc.m_pPosition = (float*)m_pVertexMemory;
desc.m_pNormal = (float*)m_pVertexMemory;
desc.m_pColor = m_pVertexMemory;
int i;
for ( i = 0; i < VERTEX_MAX_TEXTURE_COORDINATES; ++i)
desc.m_pTexCoord[i] = (float*)m_pVertexMemory;
desc.m_pIndices = (unsigned short*)m_pVertexMemory;
desc.m_pBoneWeight = (float*)m_pVertexMemory;
desc.m_pBoneMatrixIndex = (unsigned char*)m_pVertexMemory;
desc.m_pTangentS = (float*)m_pVertexMemory;
desc.m_pTangentT = (float*)m_pVertexMemory;
desc.m_pUserData = (float*)m_pVertexMemory;
desc.m_NumBoneWeights = 2;
desc.m_VertexSize_Position = 0;
desc.m_VertexSize_BoneWeight = 0;
desc.m_VertexSize_BoneMatrixIndex = 0;
desc.m_VertexSize_Normal = 0;
desc.m_VertexSize_Color = 0;
for( i=0; i < VERTEX_MAX_TEXTURE_COORDINATES; i++ )
desc.m_VertexSize_TexCoord[i] = 0;
desc.m_VertexSize_TangentS = 0;
desc.m_VertexSize_TangentT = 0;
desc.m_VertexSize_UserData = 0;
desc.m_ActualVertexSize = 0; // Size of the vertices.. Some of the m_VertexSize_ elements above
desc.m_FirstVertex = 0;
}
void CEmptyMesh::UnlockMesh( int numVerts, int numIndices, MeshDesc_t& desc )
{
}
void CEmptyMesh::ModifyBegin( int firstVertex, int numVerts, int firstIndex, int numIndices, MeshDesc_t& desc )
{
// Who cares about the data?
desc.m_pPosition = (float*)m_pVertexMemory;
desc.m_pNormal = (float*)m_pVertexMemory;
desc.m_pColor = m_pVertexMemory;
int i;
for ( i = 0; i < VERTEX_MAX_TEXTURE_COORDINATES; ++i)
desc.m_pTexCoord[i] = (float*)m_pVertexMemory;
desc.m_pIndices = (unsigned short*)m_pVertexMemory;
desc.m_pBoneWeight = (float*)m_pVertexMemory;
desc.m_pBoneMatrixIndex = (unsigned char*)m_pVertexMemory;
desc.m_pTangentS = (float*)m_pVertexMemory;
desc.m_pTangentT = (float*)m_pVertexMemory;
desc.m_pUserData = (float*)m_pVertexMemory;
desc.m_NumBoneWeights = 2;
desc.m_VertexSize_Position = 0;
desc.m_VertexSize_BoneWeight = 0;
desc.m_VertexSize_BoneMatrixIndex = 0;
desc.m_VertexSize_Normal = 0;
desc.m_VertexSize_Color = 0;
for( i=0; i < VERTEX_MAX_TEXTURE_COORDINATES; i++ )
desc.m_VertexSize_TexCoord[i] = 0;
desc.m_VertexSize_TangentS = 0;
desc.m_VertexSize_TangentT = 0;
desc.m_VertexSize_UserData = 0;
desc.m_ActualVertexSize = 0; // Size of the vertices.. Some of the m_VertexSize_ elements above
desc.m_FirstVertex = 0;
}
void CEmptyMesh::ModifyEnd( )
{
}
// returns the # of vertices (static meshes only)
int CEmptyMesh::NumVertices() const
{
return 0;
}
// Helper methods to create various standard index buffer types
void CEmptyMesh::GenerateSequentialIndexBuffer( unsigned short* pIndexMemory,
int numIndices, int firstVertex )
{
}
void CEmptyMesh::GenerateQuadIndexBuffer( unsigned short* pIndexMemory,
int numIndices, int firstVertex )
{
}
void CEmptyMesh::GeneratePolygonIndexBuffer( unsigned short* pIndexMemory,
int numIndices, int firstVertex )
{
}
void CEmptyMesh::GenerateLineStripIndexBuffer( unsigned short* pIndexMemory,
int numIndices, int firstVertex )
{
}
void CEmptyMesh::GenerateLineLoopIndexBuffer( unsigned short* pIndexMemory,
int numIndices, int firstVertex )
{
}
// Sets the primitive type
void CEmptyMesh::SetPrimitiveType( MaterialPrimitiveType_t type )
{
}
// Draws the entire mesh
void CEmptyMesh::Draw( int firstIndex, int numIndices )
{
}
void CEmptyMesh::Draw(CPrimList *pPrims, int nPrims)
{
}
// Copy verts and/or indices to a mesh builder. This only works for temp meshes!
void CEmptyMesh::CopyToMeshBuilder(
int iStartVert, // Which vertices to copy.
int nVerts,
int iStartIndex, // Which indices to copy.
int nIndices,
int indexOffset, // This is added to each index.
CMeshBuilder &builder )
{
}
// Spews the mesh data
void CEmptyMesh::Spew( int numVerts, int numIndices, MeshDesc_t const& desc )
{
}
void CEmptyMesh::ValidateData( int numVerts, int numIndices, MeshDesc_t const& desc )
{
}
// gets the associated material
IMaterial* CEmptyMesh::GetMaterial()
{
// umm. this don't work none
Assert(0);
return 0;
}
void CEmptyMesh::SetSoftwareVertexShader( SoftwareVertexShader_t shader )
{
}
void CEmptyMesh::CallSoftwareVertexShader( CMeshBuilder *pMeshBuilder )
{
}
//-----------------------------------------------------------------------------
// The shader shadow interface
//-----------------------------------------------------------------------------
CShaderShadowEmpty::CShaderShadowEmpty()
{
m_IsTranslucent = false;
m_IsAlphaTested = false;
m_bUsesVertexAndPixelShaders = false;
}
CShaderShadowEmpty::~CShaderShadowEmpty()
{
}
// Sets the default *shadow* state
void CShaderShadowEmpty::SetDefaultState()
{
m_IsTranslucent = false;
m_IsAlphaTested = false;
m_UsesAmbientCube = false;
m_bUsesVertexAndPixelShaders = false;
}
// Methods related to depth buffering
void CShaderShadowEmpty::DepthFunc( ShaderDepthFunc_t depthFunc )
{
}
void CShaderShadowEmpty::EnableDepthWrites( bool bEnable )
{
}
void CShaderShadowEmpty::EnableDepthTest( bool bEnable )
{
}
void CShaderShadowEmpty::EnablePolyOffset( bool bEnable )
{
}
// Suppresses/activates color writing
void CShaderShadowEmpty::EnableColorWrites( bool bEnable )
{
}
// Suppresses/activates alpha writing
void CShaderShadowEmpty::EnableAlphaWrites( bool bEnable )
{
}
// Methods related to alpha blending
void CShaderShadowEmpty::EnableBlending( bool bEnable )
{
m_IsTranslucent = bEnable;
}
void CShaderShadowEmpty::BlendFunc( ShaderBlendFactor_t srcFactor, ShaderBlendFactor_t dstFactor )
{
}
// A simpler method of dealing with alpha modulation
void CShaderShadowEmpty::EnableAlphaPipe( bool bEnable )
{
}
void CShaderShadowEmpty::EnableConstantAlpha( bool bEnable )
{
}
void CShaderShadowEmpty::EnableVertexAlpha( bool bEnable )
{
}
void CShaderShadowEmpty::EnableTextureAlpha( TextureStage_t stage, bool bEnable )
{
}
// Alpha testing
void CShaderShadowEmpty::EnableAlphaTest( bool bEnable )
{
m_IsAlphaTested = bEnable;
}
void CShaderShadowEmpty::AlphaFunc( ShaderAlphaFunc_t alphaFunc, float alphaRef /* [0-1] */ )
{
}
// Wireframe/filled polygons
void CShaderShadowEmpty::PolyMode( ShaderPolyModeFace_t face, ShaderPolyMode_t polyMode )
{
}
// Back face culling
void CShaderShadowEmpty::EnableCulling( bool bEnable )
{
}
// constant color + transparency
void CShaderShadowEmpty::EnableConstantColor( bool bEnable )
{
}
// Indicates we're preprocessing vertex data
void CShaderShadowEmpty::EnableVertexDataPreprocess( bool bEnable )
{
}
// Indicates the vertex format for use with a vertex shader
// The flags to pass in here come from the VertexFormatFlags_t enum
// If pTexCoordDimensions is *not* specified, we assume all coordinates
// are 2-dimensional
void CShaderShadowEmpty::VertexShaderVertexFormat( unsigned int flags,
int numTexCoords, int* pTexCoordDimensions, int numBoneWeights,
int userDataSize )
{
}
// Indicates we're going to light the model
void CShaderShadowEmpty::EnableLighting( bool bEnable )
{
}
void CShaderShadowEmpty::EnableSpecular( bool bEnable )
{
}
// Indicates we're going to be using the ambient cube on stage0
void CShaderShadowEmpty::EnableAmbientLightCubeOnStage0( bool bEnable )
{
m_UsesAmbientCube = bEnable;
}
// Activate/deactivate skinning
void CShaderShadowEmpty::EnableVertexBlend( bool bEnable )
{
}
// per texture unit stuff
void CShaderShadowEmpty::OverbrightValue( TextureStage_t stage, float value )
{
}
void CShaderShadowEmpty::EnableTexture( TextureStage_t stage, bool bEnable )
{
}
void CShaderShadowEmpty::EnableCustomPixelPipe( bool bEnable )
{
}
void CShaderShadowEmpty::CustomTextureStages( int stageCount )
{
}
void CShaderShadowEmpty::CustomTextureOperation( TextureStage_t stage, ShaderTexChannel_t channel,
ShaderTexOp_t op, ShaderTexArg_t arg1, ShaderTexArg_t arg2 )
{
}
void CShaderShadowEmpty::EnableTexGen( TextureStage_t stage, bool bEnable )
{
}
void CShaderShadowEmpty::TexGen( TextureStage_t stage, ShaderTexGenParam_t param )
{
}
void CShaderShadowEmpty::VertexShaderOverbrightValue( float value )
{
}
// Sets the vertex and pixel shaders
void CShaderShadowEmpty::SetVertexShader( const char *pShaderName, int vshIndex )
{
m_bUsesVertexAndPixelShaders = ( pShaderName != NULL );
}
void CShaderShadowEmpty::EnableBlendingSeparateAlpha( bool bEnable )
{
}
void CShaderShadowEmpty::SetPixelShader( const char *pShaderName, int pshIndex )
{
m_bUsesVertexAndPixelShaders = ( pShaderName != NULL );
}
void CShaderShadowEmpty::BlendFuncSeparateAlpha( ShaderBlendFactor_t srcFactor, ShaderBlendFactor_t dstFactor )
{
}
// indicates what per-vertex data we're providing
void CShaderShadowEmpty::DrawFlags( unsigned int drawFlags )
{
}
//-----------------------------------------------------------------------------
//
// Shader API Empty
//
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// Constructor, destructor
//-----------------------------------------------------------------------------
CShaderAPIEmpty::CShaderAPIEmpty()
{
}
CShaderAPIEmpty::~CShaderAPIEmpty()
{
}
//-----------------------------------------------------------------------------
// Initialization
//-----------------------------------------------------------------------------
bool CShaderAPIEmpty::Init( IShaderUtil* pShaderUtil, IBaseFileSystem* pFileSystem, int nAdapter, int nFlags )
{
// So others can access it
g_pShaderUtil = pShaderUtil;
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -