//===== Copyright © 1996-2005, Valve Corporation, All rights reserved. ======// // // Purpose: Empty implementation of shader API // //===========================================================================// /* This is totally reverse-engineered code and may be wrong */ #include "interfaces/interfaces.h" #include "shaderapi/shareddefs.h" #include "materialsystem/imaterialsystem.h" #include "materialsystem/imesh.h" #include "materialsystem/idebugtextureinfo.h" #include "ishaderutil.h" #include "ishadershadow.h" #include "ishaderapi.h" #include "IHardwareConfigInternal.h" #include "tier0/dbg.h" //----------------------------------------------------------------------------- // Empty mesh //----------------------------------------------------------------------------- class CEmptyMesh : public IMesh { public: CEmptyMesh( bool bIsDynamic ); virtual ~CEmptyMesh(); bool Lock( int nMaxIndexCount, bool bAppend, IndexDesc_t &desc ); bool Lock( int nVertexCount, bool bAppend, VertexDesc_t &desc ); void Unlock( int nWrittenIndexCount, IndexDesc_t &desc ); void Unlock( int nVertexCount, VertexDesc_t &desc ); void ModifyBegin( bool bReadOnly, int nFirstIndex, int nIndexCount, IndexDesc_t &desc ); void ModifyBegin( int firstVertex, int numVerts, int firstIndex, int numIndices, MeshDesc_t &desc ); void ModifyEnd( IndexDesc_t &desc ); void ModifyEnd( MeshDesc_t &desc ); void Spew( int nIndexCount, const IndexDesc_t &desc ); void Spew( int nVertexCount, const VertexDesc_t &desc ); void Spew( int numVerts, int numIndices, const MeshDesc_t &desc ); void ValidateData( int nIndexCount, const IndexDesc_t &desc ); void ValidateData( int nVertexCount, const VertexDesc_t &desc ); void ValidateData( int numVerts, int numIndices, const MeshDesc_t &desc ); bool IsDynamic() const; void BeginCastBuffer( VertexFormat_t format ); void BeginCastBuffer( MaterialIndexFormat_t format ); void EndCastBuffer(); int GetRoomRemaining() const; MaterialIndexFormat_t IndexFormat() const; void LockMesh( int numVerts, int numIndices, MeshDesc_t &desc, MeshBuffersAllocationSettings_t *pSettings ); void UnlockMesh( int numVerts, int numIndices, MeshDesc_t &desc ); void ModifyBeginEx( bool bReadOnly, int firstVertex, int numVerts, int firstIndex, int numIndices, MeshDesc_t &desc ); int VertexCount() const; void SetPrimitiveType( MaterialPrimitiveType_t type ); void Draw( int firstIndex, int numIndices ); void Draw( CPrimList *pLists, int nLists ); void DrawModulated( const Vector4D &vecDiffuseModulation, int firstIndex, int numIndices ); void CopyToMeshBuilder(int iStartVert, int nVerts, int iStartIndex, int nIndices, int indexOffset, CMeshBuilder &builder); IMaterial *GetMaterial(); void SetColorMesh( IMesh *pColorMesh, int nVertexOffset ); int IndexCount() const; void SetFlexMesh( IMesh *pMesh, int nVertexOffset ); void DisableFlexMesh(); void MarkAsDrawn(); VertexFormat_t GetVertexFormat() const; IMesh *GetMesh(); unsigned int ComputeMemoryUsed(); void *AccessRawHardwareDataStream( uint8 nRawStreamIndex, uint32 numBytes, uint32 uiFlags, void *pvContext ); ICachedPerFrameMeshData *GetCachedPerFrameMeshData(); void ReconstructFromCachedPerFrameMeshData( ICachedPerFrameMeshData *pData ); private: unsigned char *m_pVertexMemory; bool m_bIsDynamic; }; //----------------------------------------------------------------------------- // Empty shader device manager //----------------------------------------------------------------------------- class CShaderDeviceMgrEmpty : public CBaseAppSystem { public: bool Connect( CreateInterfaceFn factory ); void Disconnect(); void *QueryInterface( const char *pInterfaceName ); InitReturnVal_t Init(); void Shutdown(); int GetAdapterCount() const; void GetAdapterInfo( int nAdapter, MaterialAdapterInfo_t &info ) const; bool GetRecommendedVideoConfig( int nAdapter, KeyValues *pConfiguration ); bool GetRecommendedConfigurationInfo( int nAdapter, int nDXLevel, KeyValues *pConfiguration ); int GetModeCount( int nAdapter ) const; void GetModeInfo( ShaderDisplayMode_t *pInfo, int nAdapter, int nMode ) const; void GetCurrentModeInfo( ShaderDisplayMode_t *pInfo, int nAdapter ) const; bool SetAdapter( int nAdapter, int nFlags ); CreateInterfaceFn SetMode( void *hWnd, int nAdapter, const ShaderDeviceInfo_t &mode ); void AddModeChangeCallback( ShaderModeChangeCallbackFunc_t func ); void RemoveModeChangeCallback( ShaderModeChangeCallbackFunc_t func ); void AddDeviceDependentObject( IShaderDeviceDependentObject *pObject ); void RemoveDeviceDependentObject( IShaderDeviceDependentObject *pObject ); }; //----------------------------------------------------------------------------- // Empty shader device //----------------------------------------------------------------------------- class CShaderDeviceEmpty : public IShaderDevice { public: CShaderDeviceEmpty(); int GetCurrentAdapter() const; bool IsUsingGraphics() const; void SpewDriverInfo() const; ImageFormat GetBackBufferFormat() const; void GetBackBufferDimensions( int &width, int &height ) const; const AspectRatioInfo_t &GetAspectRatioInfo() const; int StencilBufferBits() const; bool IsAAEnabled() const; void Present(); void GetWindowSize( int &nWidth, int &nHeight ) const; bool AddView( void *hWnd ); void RemoveView( void *hWnd ); void SetView( void *hWnd ); void ReleaseResources( bool bReleaseManagedResources ); void ReacquireResources(); IMesh *CreateStaticMesh( VertexFormat_t vertexFormat, const char *pTextureBudgetGroup, IMaterial *pMaterial, VertexStreamSpec_t *pStreamSpec ); void DestroyStaticMesh( IMesh *mesh ); IShaderBuffer *CompileShader( const char *pProgram, size_t nBufLen, const char *pShaderVersion ); VertexShaderHandle_t CreateVertexShader( IShaderBuffer *pShaderBuffer ); void DestroyVertexShader( VertexShaderHandle_t hShader ); GeometryShaderHandle_t CreateGeometryShader( IShaderBuffer *pShaderBuffer ); void DestroyGeometryShader( GeometryShaderHandle_t hShader ); PixelShaderHandle_t CreatePixelShader( IShaderBuffer *pShaderBuffer ); void DestroyPixelShader( PixelShaderHandle_t hShader ); IVertexBuffer *CreateVertexBuffer( ShaderBufferType_t type, VertexFormat_t fmt, int nVertexCount, const char *pBudgetGroup ); void DestroyVertexBuffer( IVertexBuffer *pVertexBuffer ); IIndexBuffer *CreateIndexBuffer( ShaderBufferType_t bufferType, MaterialIndexFormat_t fmt, int nIndexCount, const char *pBudgetGroup ); void DestroyIndexBuffer( IIndexBuffer *pIndexBuffer ); IVertexBuffer *GetDynamicVertexBuffer( int nStreamID, VertexFormat_t vertexFormat, bool bBuffered ); IIndexBuffer *GetDynamicIndexBuffer(); void SetHardwareGammaRamp( float fGamma, float fGammaTVRangeMin, float fGammaTVRangeMax, float fGammaTVExponent, bool bTVEnabled ); void EnableNonInteractiveMode( MaterialNonInteractiveMode_t mode, ShaderNonInteractiveInfo_t *pInfo ); void RefreshFrontBufferNonInteractive(); void HandleThreadEvent( uint32 threadEvent ); void DoStartupShaderPreloading(); const char *GetDeviceName(); private: CEmptyMesh m_Mesh; CEmptyMesh m_DynamicMesh; }; //----------------------------------------------------------------------------- // Empty shader shadow //----------------------------------------------------------------------------- class CShaderShadowEmpty : public IShaderShadow { public: CShaderShadowEmpty(); virtual ~CShaderShadowEmpty(); void SetDefaultState(); void DepthFunc( ShaderDepthFunc_t depthFunc ); void EnableDepthWrites( bool bEnable ); void EnableDepthTest( bool bEnable ); void EnablePolyOffset( PolygonOffsetMode_t nOffsetMode ); void EnableColorWrites( bool bEnable ); void EnableAlphaWrites( bool bEnable ); void EnableBlending( bool bEnable ); void EnableBlendingForceOpaque( bool bEnable ); void BlendFunc( ShaderBlendFactor_t srcFactor, ShaderBlendFactor_t dstFactor ); void EnableAlphaTest( bool bEnable ); void AlphaFunc( ShaderAlphaFunc_t alphaFunc, float alphaRef ); void PolyMode( ShaderPolyModeFace_t face, ShaderPolyMode_t polyMode ); void EnableCulling( bool bEnable ); void VertexShaderVertexFormat( unsigned int nFlags, int nTexCoordCount, int *pTexCoordDimensions, int nUserDataSize ); void EnableTexture( Sampler_t sampler, bool bEnable ); void EnableVertexTexture( VertexTextureSampler_t sampler, bool bEnable ); void EnableBlendingSeparateAlpha( bool bEnable ); void BlendFuncSeparateAlpha( ShaderBlendFactor_t srcFactor, ShaderBlendFactor_t dstFactor ); void SetVertexShader( const char *pFileName, int nStaticVshIndex ); void SetPixelShader( const char *pFileName, int nStaticPshIndex ); void EnableSRGBWrite( bool bEnable ); void EnableSRGBRead( Sampler_t sampler, bool bEnable ); void FogMode( ShaderFogMode_t fogMode, bool bEnable ); void DisableFogGammaCorrection( bool bDisable ); virtual void ExecuteCommandBuffer( uint8 *pBuf ); void EnableAlphaToCoverage( bool bEnable ); virtual void SetShadowDepthFiltering( Sampler_t stage ); void BlendOp( ShaderBlendOp_t blendOp ); void BlendOpSeparateAlpha( ShaderBlendOp_t blendOp ); float GetLightMapScaleFactor() const; public: bool m_IsTranslucent; bool m_ForceOpaque; bool m_IsAlphaTested; bool m_bIsDepthWriteEnabled; bool m_bUsesVertexAndPixelShaders; }; //----------------------------------------------------------------------------- // Empty implementation of shader API //----------------------------------------------------------------------------- class CShaderAPIEmpty : public IShaderAPI, public IHardwareConfigInternal, public IDebugTextureInfo { public: CShaderAPIEmpty(); virtual ~CShaderAPIEmpty(); virtual bool IsDebugTextureListFresh( int numFramesAllowed ); virtual bool SetDebugTextureRendering( bool bEnable ); virtual void EnableDebugTextureList( bool bEnable ); virtual void EnableGetAllTextures( bool bEnable ); virtual KeyValues *LockDebugTextureList(); virtual void UnlockDebugTextureList(); virtual KeyValues *GetDebugTextureList(); virtual int GetTextureMemoryUsed( TextureMemoryType eTextureMemory ); virtual void GetBackBufferDimensions( int &width, int &height ) const; virtual const AspectRatioInfo_t &GetAspectRatioInfo() const; virtual void GetCurrentRenderTargetDimensions( int &nWidth, int &nHeight ) const; virtual void GetCurrentViewport( int &nX, int &nY, int &nWidth, int &nHeight ) const; virtual void GetCurrentColorCorrection( ShaderColorCorrectionInfo_t *pInfo ); virtual void SetViewports( int nCount, const ShaderViewport_t *pViewports, bool setImmediately ); virtual int GetViewports( ShaderViewport_t *pViewports, int nMax ) const; virtual void ClearBuffers( bool bClearColor, bool bClearDepth, bool bClearStencil, int renderTargetWidth, int renderTargetHeight ); virtual void ClearBuffersEx( bool bClearRed, bool bClearGreen, bool bClearBlue, bool bClearAlpha, unsigned char r, unsigned char b, unsigned char g, unsigned char a ); virtual void ClearColor3ub( unsigned char r, unsigned char g, unsigned char b ); virtual void ClearColor4ub( unsigned char r, unsigned char g, unsigned char b, unsigned char a ); virtual void BindVertexShader( VertexShaderHandle_t hVertexShader ); virtual void BindGeometryShader( GeometryShaderHandle_t hGeometryShader ); virtual void BindPixelShader( PixelShaderHandle_t hPixelShader ); virtual void SetRasterState( const ShaderRasterState_t &state ); virtual void MarkUnusedVertexFields( unsigned int nFlags, int nTexCoordCount, bool *pUnusedTexCoords ); virtual bool OwnGPUResources( bool bEnable ); virtual void OnPresent(); virtual bool DoRenderTargetsNeedSeparateDepthBuffer() const; virtual void ClearSnapshots(); virtual bool SetMode( void *hwnd, int nAdapter, const ShaderDeviceInfo_t &info ); virtual void ChangeVideoMode( const ShaderDeviceInfo_t &info ); virtual void DXSupportLevelChanged( int nDXLevel ); virtual void EnableUserClipTransformOverride( bool bEnable ); virtual void UserClipTransform( const VMatrix &worldToView ); virtual void SetDefaultState(); virtual StateSnapshot_t TakeSnapshot(); virtual bool IsTranslucent( StateSnapshot_t id ) const; virtual bool IsAlphaTested( StateSnapshot_t id ) const; virtual bool UsesVertexAndPixelShaders( StateSnapshot_t id ) const; virtual bool IsDepthWriteEnabled( StateSnapshot_t id ) const; virtual VertexFormat_t ComputeVertexFormat( int numSnapshots, StateSnapshot_t *pIds ) const; virtual VertexFormat_t ComputeVertexUsage( int numSnapshots, StateSnapshot_t *pIds ) const; virtual void BeginPass( StateSnapshot_t snapshot ); void UseSnapshot( StateSnapshot_t snapshot ); CMeshBuilder *GetVertexModifyBuilder(); virtual void SetLightingState( const MaterialLightingState_t &state ); virtual void SetLights( int nCount, const LightDesc_t *pDesc ); virtual void SetLightingOrigin( Vector vLightingOrigin ); virtual void SetAmbientLightCube( Vector4D cube[6] ); virtual void CopyRenderTargetToTexture( ShaderAPITextureHandle_t textureHandle ); virtual void CopyRenderTargetToTextureEx( ShaderAPITextureHandle_t textureHandle, int nRenderTargetID, Rect_t *pSrcRect, Rect_t *pDstRect ); virtual void CopyTextureToRenderTargetEx( int nRenderTargetID, ShaderAPITextureHandle_t textureHandle, Rect_t *pSrcRect, Rect_t *pDstRect ); virtual void SetNumBoneWeights( int numBones ); virtual void EnableHWMorphing( bool bEnable ); virtual IMesh *GetDynamicMesh( IMaterial *pMaterial, int nHWSkinBoneCount, bool bBuffered, IMesh *pVertexOverride, IMesh *pIndexOverride); virtual IMesh *GetDynamicMeshEx( IMaterial *pMaterial, VertexFormat_t vertexFormat, int nHWSkinBoneCount, bool bBuffered, IMesh *pVertexOverride, IMesh *pIndexOverride ); virtual IMesh *GetFlexMesh(); virtual void RenderPass( const unsigned char *pInstanceCommandBuffer, int nPass, int nPassCount ); virtual void MatrixMode( MaterialMatrixMode_t matrixMode ); virtual void PushMatrix(); virtual void PopMatrix(); virtual void LoadMatrix( float *m ); virtual void LoadBoneMatrix( int boneIndex, const float *m ); virtual void MultMatrix( float *m ); virtual void MultMatrixLocal( float *m ); virtual void GetActualProjectionMatrix( float *m ); virtual void GetMatrix( MaterialMatrixMode_t matrixMode, float *dst ); virtual void LoadIdentity(); virtual void LoadCameraToWorld(); virtual void Ortho( double left, double right, double bottom, double top, double zNear, double zFar ); virtual void PerspectiveX( double fovx, double aspect, double zNear, double zFar ); virtual void PerspectiveOffCenterX( double fovx, double aspect, double zNear, double zFar, double bottom, double top, double left, double right ); virtual void PickMatrix( int x, int y, int width, int height ); virtual void Rotate( float angle, float x, float y, float z ); virtual void Translate( float x, float y, float z ); virtual void Scale( float x, float y, float z ); virtual void ScaleXY( float x, float y ); void FogMode( MaterialFogMode_t fogMode ); virtual void FogStart( float fStart ); virtual void FogEnd( float fEnd ); virtual void SetFogZ( float fogZ ); virtual void FogMaxDensity( float flMaxDensity ); virtual void GetFogDistances( float *fStart, float *fEnd, float *fFogZ ); void FogColor3f( float r, float g, float b ); void FogColor3fv( float const *rgb ); void FogColor3ub( unsigned char r, unsigned char g, unsigned char b ); void FogColor3ubv( unsigned char const *rgb ); virtual void SceneFogColor3ub( unsigned char r, unsigned char g, unsigned char b ); virtual void SceneFogMode( MaterialFogMode_t fogMode ); virtual void GetSceneFogColor( unsigned char *rgb ); virtual MaterialFogMode_t GetSceneFogMode(); virtual int GetPixelFogCombo(); virtual void SetHeightClipZ( float z ); virtual void SetHeightClipMode( enum MaterialHeightClipMode_t heightClipMode ); virtual void SetClipPlane( int index, const float *pPlane ); virtual void EnableClipPlane( int index, bool bEnable ); virtual void SetFastClipPlane( const float *pPlane ); virtual void EnableFastClip( bool bEnable ); virtual int GetCurrentDynamicVBSize(); virtual int GetCurrentDynamicVBSize( int nIndex ); virtual void DestroyVertexBuffers( bool bExitingLevel ); virtual void GetGPUMemoryStats( GPUMemoryStats &stats ); virtual void SetVertexShaderIndex( int vshIndex ); virtual void SetPixelShaderIndex( int pshIndex ); virtual void SetVertexShaderConstant( int var, float const *pVec, int numConst, bool bForce ); virtual void SetBooleanVertexShaderConstant( int var, BOOL const *pVec, int numBools, bool bForce ); virtual void SetIntegerVertexShaderConstant( int var, int const *pVec, int numIntVecs, bool bForce ); virtual void SetPixelShaderConstant( int var, float const *pVec, int numConst, bool bForce ); virtual void SetBooleanPixelShaderConstant( int var, BOOL const *pVec, int numBools, bool bForce); virtual void SetIntegerPixelShaderConstant( int var, int const *pVec, int numIntVecs, bool bForce); virtual void InvalidateDelayedShaderConstants(); virtual float GammaToLinear_HardwareSpecific( float fGamma ) const; virtual float LinearToGamma_HardwareSpecific( float fLinear ) const; virtual void SetLinearToGammaConversionTextures( ShaderAPITextureHandle_t hSRGBWriteEnabledTexture, ShaderAPITextureHandle_t hIdentityTexture ); virtual void CullMode( MaterialCullMode_t cullMode ); virtual void FlipCullMode(); virtual void ForceDepthFuncEquals( bool bEnable ); virtual void OverrideDepthEnable( bool bEnable, bool bDepthEnable, bool bDepthTestEnable ); virtual void OverrideAlphaWriteEnable( bool bOverrideEnable, bool bAlphaWriteEnable ); virtual void OverrideColorWriteEnable( bool bOverrideEnable, bool bColorWriteEnable ); virtual void ShadeMode( ShaderShadeMode_t mode ); virtual void Bind( IMaterial *pMaterial ); virtual ImageFormat GetNearestSupportedFormat( ImageFormat fmt, bool bFilteringRequired ) const; virtual ImageFormat GetNearestRenderTargetFormat( ImageFormat fmt ) const; virtual void BindTexture( Sampler_t stage, TextureBindFlags_t nBindFlags, ShaderAPITextureHandle_t textureHandle ); virtual void BindVertexTexture( VertexTextureSampler_t nSampler, ShaderAPITextureHandle_t textureHandle ); virtual void SetRenderTarget( ShaderAPITextureHandle_t colorTextureHandle, ShaderAPITextureHandle_t depthTextureHandle ); virtual void SetRenderTargetEx( int nRenderTargetID, ShaderAPITextureHandle_t colorTextureHandle, ShaderAPITextureHandle_t depthTextureHandle ); virtual void ModifyTexture( ShaderAPITextureHandle_t textureHandle ); virtual void TexImage2D( int level, int cubeFaceID, ImageFormat dstFormat, int zOffset, int width, int height, ImageFormat srcFormat, bool bSrcIsTiled, void *imageData ); virtual void TexSubImage2D( int level, int cubeFaceID, int xOffset, int yOffset, int zOffset, int width, int height, ImageFormat srcFormat, int srcStride, bool bSrcIsTiled, void *imageData ); virtual bool TexLock( int level, int cubeFaceID, int xOffset, int yOffset, int width, int height, CPixelWriter &writer ); virtual void TexUnlock(); virtual void UpdateTexture( int xOffset, int yOffset, int w, int h, ShaderAPITextureHandle_t hDstTexture, ShaderAPITextureHandle_t hSrcTexture ); virtual void *LockTex( ShaderAPITextureHandle_t hTexture ); virtual void UnlockTex( ShaderAPITextureHandle_t hTexture ); virtual void *GetD3DTexturePtr( ShaderAPITextureHandle_t hTexture ); virtual void TexMinFilter( ShaderTexFilterMode_t texFilterMode ); virtual void TexMagFilter( ShaderTexFilterMode_t texFilterMode ); virtual void TexWrap( ShaderTexCoordComponent_t coord, ShaderTexWrapMode_t wrapMode ); virtual void TexSetPriority( int priority ); virtual ShaderAPITextureHandle_t CreateTexture( int width, int height, int depth, ImageFormat dstImageFormat, int numMipLevels, int numCopies, int flags, const char *pDebugName, const char *pTextureGroupName ); virtual void CreateTextures( ShaderAPITextureHandle_t *pHandles, int count, int width, int height, int depth, ImageFormat dstImageFormat, int numMipLevels, int numCopies, int flags, const char *pDebugName, const char *pTextureGroupName ); virtual ShaderAPITextureHandle_t CreateDepthTexture( ImageFormat renderTargetFormat, int width, int height, const char *pDebugName, bool bTexture, bool bAliasDepthTextureOverSceneDepthX360 ); virtual void DeleteTexture( ShaderAPITextureHandle_t textureHandle ); virtual bool IsTexture( ShaderAPITextureHandle_t textureHandle ); virtual bool IsTextureResident( ShaderAPITextureHandle_t textureHandle ); virtual void ClearBuffersObeyStencil( bool bClearColor, bool bClearDepth ); virtual void ClearBuffersObeyStencilEx( bool bClearColor, bool bClearAlpha, bool bClearDepth ); virtual void PerformFullScreenStencilOperation(); virtual void ReadPixels( int x, int y, int width, int height, unsigned char *data, ImageFormat dstFormat, ITexture *pTexture ); virtual void ReadPixelsAsync( int x, int y, int width, int height, unsigned char *data, ImageFormat dstFormat, ITexture *pTexture, CThreadEvent *pEvent ); virtual void ReadPixelsAsyncGetResult( int x, int y, int width, int height, unsigned char *data, ImageFormat dstFormat, CThreadEvent *pEvent ); virtual void ReadPixels( Rect_t *pSrcRect, Rect_t *pDstRect, unsigned char *data, ImageFormat dstFormat, int nDstStride ); virtual int SelectionMode( bool selectionMode ); virtual void SelectionBuffer( unsigned int *pBuffer, int size ); virtual void ClearSelectionNames(); virtual void LoadSelectionName( int name ); virtual void PushSelectionName( int name ); virtual void PopSelectionName(); virtual void FlushHardware(); virtual void ResetRenderState( bool bFullReset ); virtual void SetScissorRect( int nLeft, int nTop, int nRight, int nBottom, bool bEnableScissor ); virtual bool CanDownloadTextures() const; virtual void BeginFrame(); virtual void EndFrame(); virtual double CurrentTime() const; virtual void GetWorldSpaceCameraPosition( float *pPos ) const; virtual void GetWorldSpaceCameraDirection( float *pDir ) const; bool HasDestAlphaBuffer() const; bool HasStencilBuffer() const; virtual int MaxViewports() const; virtual void OverrideStreamOffsetSupport( bool bOverrideEnabled, bool bEnableSupport ); virtual ShadowFilterMode_t GetShadowFilterMode( bool bForceLowQualityShadows, bool bPS30 ) const; virtual int StencilBufferBits() const; virtual int GetFrameBufferColorDepth() const; virtual int GetSamplerCount() const; virtual int GetVertexSamplerCount() const; virtual bool HasSetDeviceGammaRamp() const; bool SupportsCompressedTextures() const; virtual VertexCompressionType_t SupportsCompressedVertices() const; virtual bool SupportsStaticControlFlow() const; virtual int MaximumAnisotropicLevel() const; virtual int MaxTextureWidth() const; virtual int MaxTextureHeight() const; virtual int MaxTextureAspectRatio() const; virtual int GetDXSupportLevel() const; virtual int GetMinDXSupportLevel() const; virtual bool SupportsShadowDepthTextures() const; virtual ImageFormat GetShadowDepthTextureFormat() const; virtual ImageFormat GetHighPrecisionShadowDepthTextureFormat() const; virtual ImageFormat GetNullTextureFormat() const; virtual const char *GetShaderDLLName() const; virtual int TextureMemorySize() const; virtual bool SupportsMipmappedCubemaps() const; virtual int NumVertexShaderConstants() const; int NumBooleanVertexShaderConstants() const; int NumIntegerVertexShaderConstants() const; virtual int NumPixelShaderConstants() const; virtual int MaxNumLights() const; virtual int MaxVertexShaderBlendMatrices() const; virtual int MaxUserClipPlanes() const; virtual bool UseFastClipping() const; virtual bool SpecifiesFogColorInLinearSpace() const; virtual bool SupportsSRGB() const; virtual bool FakeSRGBWrite() const; virtual bool CanDoSRGBReadFromRTs() const; virtual bool SupportsGLMixedSizeTargets() const; virtual const char *GetHWSpecificShaderDLLName() const; virtual bool NeedsAAClamp() const; virtual int MaxHWMorphBatchCount() const; virtual int GetMaxDXSupportLevel() const; virtual bool ReadPixelsFromFrontBuffer() const; virtual bool PreferDynamicTextures() const; virtual void ForceHardwareSync(); virtual int GetCurrentNumBones() const; virtual bool IsHWMorphingEnabled() const; virtual void GetDX9LightState( LightState_t *state ) const; virtual MaterialFogMode_t GetCurrentFogType() const; void RecordString( const char *pStr ); virtual void EvictManagedResources(); virtual void GetLightmapDimensions( int *w, int *h ); virtual void SyncToken( const char *pToken ); virtual void SetStandardVertexShaderConstants( float fOverbright ); virtual void SetAnisotropicLevel( int nAnisotropyLevel ); virtual bool SupportsHDR() const; virtual HDRType_t GetHDRType() const; virtual HDRType_t GetHardwareHDRType() const; virtual bool NeedsATICentroidHack() const; virtual bool SupportsColorOnSecondStream() const; virtual bool SupportsStaticPlusDynamicLighting() const; virtual bool SupportsStreamOffset() const; virtual void CommitPixelShaderLighting( int pshReg ); virtual ShaderAPIOcclusionQuery_t CreateOcclusionQueryObject(); virtual void DestroyOcclusionQueryObject( ShaderAPIOcclusionQuery_t ); virtual void BeginOcclusionQueryDrawing( ShaderAPIOcclusionQuery_t ); virtual void EndOcclusionQueryDrawing( ShaderAPIOcclusionQuery_t ); virtual int OcclusionQuery_GetNumPixelsRendered( ShaderAPIOcclusionQuery_t hQuery, bool bFlush ); virtual void AcquireThreadOwnership(); virtual void ReleaseThreadOwnership(); virtual bool SupportsBorderColor() const; virtual bool SupportsFetch4() const; virtual void EnableBuffer2FramesAhead( bool bEnable ); virtual float GetShadowDepthBias() const; virtual float GetShadowSlopeScaleDepthBias() const; virtual bool PreferZPrepass() const; virtual bool SuppressPixelShaderCentroidHackFixup() const; virtual bool PreferTexturesInHWMemory() const; virtual bool PreferHardwareSync() const; virtual bool IsUnsupported() const; virtual void SetDepthFeatheringPixelShaderConstant( int iConstant, float fDepthBlendScale ); virtual TessellationMode_t GetTessellationMode() const; virtual void SetPixelShaderFogParams( int reg ); virtual bool InFlashlightMode() const; virtual bool IsRenderingPaint() const; virtual bool InEditorMode() const; virtual void BindStandardTexture( Sampler_t stage, TextureBindFlags_t nBindFlags, StandardTextureId_t id ); virtual void BindStandardVertexTexture( VertexTextureSampler_t sampler, StandardTextureId_t id ); virtual void GetStandardTextureDimensions( int *pWidth, int *pHeight, StandardTextureId_t id ); virtual float GetSubDHeight(); virtual bool IsStereoActiveThisFrame() const; virtual void SetFlashlightState( const FlashlightState_t &state, const VMatrix &worldToTexture ); virtual void SetFlashlightStateEx( const FlashlightState_t &state, const VMatrix &worldToTexture, ITexture *pFlashlightDepthTexture ); virtual bool IsCascadedShadowMapping() const; virtual void SetCascadedShadowMapping( bool bEnable ); virtual void SetCascadedShadowMappingState( const CascadedShadowMappingState_t &state, ITexture *pDepthTextureAtlas ); virtual const CascadedShadowMappingState_t &GetCascadedShadowMappingState( ITexture **pDepthTextureAtlas ) const; virtual const FlashlightState_t &GetFlashlightState( VMatrix &worldToTexture ) const; virtual const FlashlightState_t &GetFlashlightStateEx( VMatrix &worldToTexture, ITexture **pFlashlightDepthTexture ) const; virtual void GetFlashlightShaderInfo( bool *pShadowsEnabled, bool *pUberLight ) const; virtual float GetFlashlightAmbientOcclusion() const; virtual void ClearVertexAndPixelShaderRefCounts(); virtual void PurgeUnusedVertexAndPixelShaders(); virtual void DrawInstances( int nInstanceCount, const MeshInstanceData_t *pInstance ); virtual bool IsAAEnabled() const; virtual int GetVertexTextureCount() const; virtual int GetMaxVertexTextureDimension() const; virtual int MaxTextureDepth() const; virtual void SetFlexWeights( int nFirstWeight, int nCount, const MorphWeight_t *pWeights ); virtual ITexture *GetRenderTargetEx( int nRenderTargetID ) const; virtual void SetToneMappingScaleLinear( const Vector &scale ); virtual const Vector &GetToneMappingScaleLinear( void ) const; virtual void HandleDeviceLost(); virtual void EnableLinearColorSpaceFrameBuffer( bool bEnable ); virtual void SetFullScreenTextureHandle( ShaderAPITextureHandle_t h ); virtual void SetFloatRenderingParameter(int parm_number, float value); virtual void SetIntRenderingParameter(int parm_number, int value); virtual void SetTextureRenderingParameter(int parm_number, ITexture *pTexture); virtual void SetVectorRenderingParameter(int parm_number, Vector const &value); virtual float GetFloatRenderingParameter(int parm_number) const; virtual int GetIntRenderingParameter(int parm_number) const; virtual ITexture *GetTextureRenderingParameter(int parm_number) const; virtual Vector GetVectorRenderingParameter(int parm_number) const; virtual void SetStencilState( const ShaderStencilState_t &state ); virtual void ClearStencilBufferRectangle( int xmin, int ymin, int xmax, int ymax, int value ); virtual void GetMaxToRender( IMesh *pMesh, bool bMaxUntilFlush, int *pMaxVerts, int *pMaxIndices ); virtual int GetMaxVerticesToRender( IMaterial *pMaterial ); virtual int GetMaxIndicesToRender(); virtual int CompareSnapshots( StateSnapshot_t snapshot0, StateSnapshot_t snapshot1 ); virtual void DisableAllLocalLights(); virtual bool SupportsMSAAMode( int nMSAAMode ); virtual bool SupportsCSAAMode( int nNumSamples, int nQualityLevel ); virtual void BeginPIXEvent( unsigned long color, const char *szName ); virtual void EndPIXEvent(); virtual void SetPIXMarker( unsigned long color, const char *szName ); virtual void ComputeVertexDescription( unsigned char *pBuffer, VertexFormat_t vertexFormat, MeshDesc_t &desc ) const; virtual int VertexFormatSize( VertexFormat_t vertexFormat ) const; virtual bool SupportsShadowDepthTextures(); virtual bool SupportsFetch4(); virtual int NeedsShaderSRGBConversion() const; virtual bool UsesSRGBCorrectBlending() const; virtual bool HasFastVertexTextures() const; virtual bool ActualHasFastVertexTextures() const; virtual void SetShadowDepthBiasFactors( float fShadowSlopeScaleDepthBias, float fShadowDepthBias ); virtual void SetDisallowAccess( bool ); virtual void EnableShaderShaderMutex( bool ); virtual void ShaderLock(); virtual void ShaderUnlock(); virtual void BindVertexBuffer( int nStreamID, IVertexBuffer *pVertexBuffer, int nOffsetInBytes, int nFirstVertex, int nVertexCount, VertexFormat_t fmt, int nRepetitions ) ; virtual void BindIndexBuffer( IIndexBuffer *pIndexBuffer, int nOffsetInBytes ) ; virtual void Draw( MaterialPrimitiveType_t primitiveType, int nFirstIndex, int nIndexCount ); virtual int GetVertexBufferCompression() const; virtual bool ShouldWriteDepthToDestAlpha() const; virtual bool SupportsHDRMode( HDRType_t nHDRMode ) const; virtual bool IsDX10Card() const; virtual void PushDeformation( const DeformationBase_t *Deformation ); virtual void PopDeformation(); virtual int GetNumActiveDeformations() const; virtual int GetPackedDeformationInformation( int nMaskOfUnderstoodDeformations, float *pConstantValuesOut, int nBufferSize, int nMaximumDeformations, int *pNumDefsOut ) const; virtual void SetStandardTextureHandle( StandardTextureId_t nId, ShaderAPITextureHandle_t nHandle ); virtual void ExecuteCommandBuffer( uint8 *pCmdBuffer ); virtual bool GetHDREnabled() const; virtual void SetHDREnabled( bool bEnable ); virtual void SetTextureFilterMode( Sampler_t sampler, TextureFilterMode_t nMode ); virtual void SetScreenSizeForVPOS( int pshReg ); virtual void SetVSNearAndFarZ( int vshReg ); virtual float GetFarZ(); virtual void EnableSinglePassFlashlightMode( bool bEnable ); virtual bool SinglePassFlashlightModeEnabled(); virtual void FlipCulling( bool bFlipCulling ); virtual void UpdateGameTime( float flTime ); virtual bool IsStereoSupported( void ) const; virtual void UpdateStereoTexture( ShaderAPITextureHandle_t texHandle, bool *pStereoActiveThisFrame ); virtual void SetSRGBWrite( bool bState ); virtual void PrintfVA( char *fmt, va_list vargs ); virtual void Printf( char *fmt, ... ); virtual float Knob( char *knobname, float *setvalue ); virtual void AddShaderComboInformation( const ShaderComboSemantics_t *pSemantics ); virtual void SpinPresent( unsigned int nFrames ); virtual void AntiAliasingHint( int a1 ); virtual bool SupportsCascadedShadowMapping() const; virtual CSMQualityMode_t GetCSMQuality() const; virtual bool SupportsBilinearPCFSampling() const; virtual CSMShaderMode_t GetCSMShaderMode( CSMQualityMode_t nQualityLevel ) const; virtual void EnableAlphaToCoverage(); virtual void DisableAlphaToCoverage(); virtual float GetLightMapScaleFactor( void ) const; virtual ShaderAPITextureHandle_t FindTexture( const char *pDebugName ); virtual void GetTextureDimensions( ShaderAPITextureHandle_t hTexture, int &nWidth, int &nHeight, int &nDepth ); virtual void SetVertexShaderViewProj(); virtual void UpdateVertexShaderMatrix( int ); virtual void SetVertexShaderModelViewProjAndModelView(); virtual void SetVertexShaderCameraPos(); virtual int SetSkinningMatrices( const MeshInstanceData_t & ); virtual void BeginGeneratingCSMs(); virtual void EndGeneratingCSMs(); virtual void PerpareForCascadeDraw( int, float, float ); virtual bool GetCSMAccurateBlending() const; virtual void SetCSMAccurateBlending( bool bEnable ); virtual bool SupportsResolveDepth() const; virtual bool HasFullResolutionDepthTexture() const; virtual int NumBooleanPixelShaderConstants() const; virtual int NumIntegerPixelShaderConstants() const; virtual ShaderAPITextureHandle_t GetStandardTextureHandle( StandardTextureId_t nID ); virtual bool IsStandardTextureHandleValid( StandardTextureId_t nId ); virtual int Unknown0( int a1, void **a2, int *a3 ); virtual void Unknown1(); virtual void Unknown2( int a1, void *a2, int a3 ); virtual void *Unknown3( void *a1, int a2 ); virtual void *Unknown4( void *a1, int a2 ); virtual void Unknown5( void **a1, void **a2, char *a3 ); virtual void Unknown6( void *a1, int a2 ); private: enum { TRANSLUCENT = 0x01, ALPHATESTED = 0x02, VERTEX_AND_PIXEL_SHADERS = 0x04, DEPTH_WRITE_ENABLED = 0x08 }; CEmptyMesh m_Mesh; }; //----------------------------------------------------------------------------- // Globals //----------------------------------------------------------------------------- IShaderUtil *g_pShaderUtil; static CShaderDeviceMgrEmpty s_ShaderDeviceMgrEmpty; static CShaderDeviceEmpty s_ShaderDeviceEmpty; static CShaderAPIEmpty g_ShaderAPIEmpty; static CShaderShadowEmpty g_ShaderShadow; EXPOSE_SINGLE_INTERFACE_GLOBALVAR( CShaderDeviceMgrEmpty, IShaderDeviceMgr, SHADER_DEVICE_MGR_INTERFACE_VERSION, s_ShaderDeviceMgrEmpty ); EXPOSE_SINGLE_INTERFACE_GLOBALVAR( CShaderDeviceEmpty, IShaderDevice, SHADER_DEVICE_INTERFACE_VERSION, s_ShaderDeviceEmpty ); EXPOSE_SINGLE_INTERFACE_GLOBALVAR( CShaderShadowEmpty, IShaderShadow, SHADERSHADOW_INTERFACE_VERSION, g_ShaderShadow ); EXPOSE_SINGLE_INTERFACE_GLOBALVAR( CShaderAPIEmpty, IShaderAPI, SHADERAPI_INTERFACE_VERSION, g_ShaderAPIEmpty ); EXPOSE_SINGLE_INTERFACE_GLOBALVAR( CShaderAPIEmpty, IMaterialSystemHardwareConfig, MATERIALSYSTEM_HARDWARECONFIG_INTERFACE_VERSION, g_ShaderAPIEmpty ); EXPOSE_SINGLE_INTERFACE_GLOBALVAR( CShaderAPIEmpty, IDebugTextureInfo, DEBUG_TEXTURE_INFO_VERSION, g_ShaderAPIEmpty ); //----------------------------------------------------------------------------- // Shader interface factory //----------------------------------------------------------------------------- void *ShaderInterfaceFactory(const char *pName, int *pReturnCode) { void *pInterface = NULL; if (V_strcmp(pName, SHADER_DEVICE_INTERFACE_VERSION) == 0) pInterface = &s_ShaderDeviceEmpty; else if (V_strcmp(pName, SHADERAPI_INTERFACE_VERSION) == 0) pInterface = &g_ShaderAPIEmpty; else if (V_strcmp(pName, SHADERSHADOW_INTERFACE_VERSION) == 0) pInterface = &g_ShaderShadow; if (pReturnCode) *pReturnCode = pInterface ? IFACE_OK : IFACE_FAILED; return pInterface; } //----------------------------------------------------------------------------- // Empty mesh //----------------------------------------------------------------------------- CEmptyMesh::CEmptyMesh( bool bIsDynamic ) { m_bIsDynamic = bIsDynamic; m_pVertexMemory = new unsigned char[1024]; } CEmptyMesh::~CEmptyMesh() { delete[] m_pVertexMemory; } bool CEmptyMesh::Lock( int nMaxIndexCount, bool bAppend, IndexDesc_t &desc ) { static unsigned short s_BogusIndex; desc.m_pIndices = &s_BogusIndex; desc.m_nIndexSize = 0; desc.m_nFirstIndex = 0; desc.m_nOffset = 0; return true; } bool CEmptyMesh::Lock( int nVertexCount, bool bAppend, VertexDesc_t &desc ) { desc.m_pPosition = (float *)m_pVertexMemory; desc.m_pNormal = (float *)m_pVertexMemory; desc.m_pColor = m_pVertexMemory; for (int i = 0; i < VERTEX_MAX_TEXTURE_COORDINATES; i++) desc.m_pTexCoord[i] = (float *)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 (int 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; desc.m_nFirstVertex = 0; desc.m_nOffset = 0; return true; } void CEmptyMesh::Unlock( int nWrittenIndexCount, IndexDesc_t &desc ) { } void CEmptyMesh::Unlock( int nVertexCount, VertexDesc_t &desc ) { } void CEmptyMesh::ModifyBegin( bool bReadOnly, int nFirstIndex, int nIndexCount, IndexDesc_t &desc ) { Lock(nIndexCount, false, desc); } void CEmptyMesh::ModifyBegin( int firstVertex, int numVerts, int firstIndex, int numIndices, MeshDesc_t &desc ) { ModifyBeginEx(false, firstVertex, numVerts, firstIndex, numIndices, desc); } void CEmptyMesh::ModifyEnd( IndexDesc_t &desc ) { } void CEmptyMesh::ModifyEnd( MeshDesc_t &desc ) { } void CEmptyMesh::Spew( int nIndexCount, const IndexDesc_t &desc ) { } void CEmptyMesh::Spew( int nVertexCount, const VertexDesc_t &desc ) { } void CEmptyMesh::Spew( int numVerts, int numIndices, const MeshDesc_t &desc ) { } void CEmptyMesh::ValidateData( int nIndexCount, const IndexDesc_t &desc ) { } void CEmptyMesh::ValidateData( int nVertexCount, const VertexDesc_t &desc ) { } void CEmptyMesh::ValidateData( int numVerts, int numIndices, const MeshDesc_t &desc ) { } bool CEmptyMesh::IsDynamic() const { return m_bIsDynamic; } void CEmptyMesh::BeginCastBuffer( VertexFormat_t format ) { } void CEmptyMesh::BeginCastBuffer( MaterialIndexFormat_t format ) { } void CEmptyMesh::EndCastBuffer() { } int CEmptyMesh::GetRoomRemaining() const { return 0; } MaterialIndexFormat_t CEmptyMesh::IndexFormat() const { return MATERIAL_INDEX_FORMAT_UNKNOWN; } void CEmptyMesh::LockMesh( int numVerts, int numIndices, MeshDesc_t &desc, MeshBuffersAllocationSettings_t *pSettings ) { Lock(numVerts, false, (VertexDesc_t &)desc); Lock(numIndices, false, (IndexDesc_t &)desc); } void CEmptyMesh::UnlockMesh( int numVerts, int numIndices, MeshDesc_t &desc ) { } void CEmptyMesh::ModifyBeginEx( bool bReadOnly, int firstVertex, int numVerts, int firstIndex, int numIndices, MeshDesc_t &desc ) { Lock(numVerts, false, (VertexDesc_t &)desc); Lock(numIndices, false, (IndexDesc_t &)desc); } int CEmptyMesh::VertexCount() const { return 0; } void CEmptyMesh::SetPrimitiveType( MaterialPrimitiveType_t type ) { } void CEmptyMesh::Draw( int firstIndex, int numIndices ) { } void CEmptyMesh::Draw( CPrimList *pLists, int nLists ) { } void CEmptyMesh::DrawModulated( const Vector4D &vecDiffuseModulation, int firstIndex, int numIndices ) { } void CEmptyMesh::CopyToMeshBuilder( int iStartVert, int nVerts, int iStartIndex, int nIndices, int indexOffset, CMeshBuilder &builder ) { } IMaterial *CEmptyMesh::GetMaterial() { return NULL; } void CEmptyMesh::SetColorMesh( IMesh *pColorMesh, int nVertexOffset ) { } int CEmptyMesh::IndexCount() const { return 0; } void CEmptyMesh::SetFlexMesh( IMesh *pMesh, int nVertexOffset ) { } void CEmptyMesh::DisableFlexMesh() { } void CEmptyMesh::MarkAsDrawn() { } VertexFormat_t CEmptyMesh::GetVertexFormat() const { return 1; } IMesh *CEmptyMesh::GetMesh() { return this; } unsigned int CEmptyMesh::ComputeMemoryUsed() { return 0; } void *CEmptyMesh::AccessRawHardwareDataStream( uint8 nRawStreamIndex, uint32 numBytes, uint32 uiFlags, void *pvContext ) { return NULL; } ICachedPerFrameMeshData *CEmptyMesh::GetCachedPerFrameMeshData() { return NULL; } void CEmptyMesh::ReconstructFromCachedPerFrameMeshData( ICachedPerFrameMeshData *pData ) { } //----------------------------------------------------------------------------- // Empty shader device manager //----------------------------------------------------------------------------- bool CShaderDeviceMgrEmpty::Connect( CreateInterfaceFn factory ) { g_pShaderUtil = (IShaderUtil *)factory(SHADER_UTIL_INTERFACE_VERSION, NULL); return true; } void CShaderDeviceMgrEmpty::Disconnect() { g_pShaderUtil = NULL; } void *CShaderDeviceMgrEmpty::QueryInterface( const char *pInterfaceName ) { if (V_strcmp(pInterfaceName, SHADER_DEVICE_MGR_INTERFACE_VERSION) == 0) return this; else if (V_strcmp(pInterfaceName, MATERIALSYSTEM_HARDWARECONFIG_INTERFACE_VERSION) == 0) return (IHardwareConfigInternal *)&g_ShaderAPIEmpty; return NULL; } InitReturnVal_t CShaderDeviceMgrEmpty::Init() { return INIT_OK; } void CShaderDeviceMgrEmpty::Shutdown() { } int CShaderDeviceMgrEmpty::GetAdapterCount() const { return 0; } void CShaderDeviceMgrEmpty::GetAdapterInfo( int nAdapter, MaterialAdapterInfo_t &info ) const { memset(&info, 0, sizeof(MaterialAdapterInfo_t)); info.m_nDXSupportLevel = 90; } bool CShaderDeviceMgrEmpty::GetRecommendedConfigurationInfo( int nAdapter, int nDXLevel, KeyValues *pConfiguration ) { return true; } int CShaderDeviceMgrEmpty::GetModeCount( int nAdapter ) const { return 0; } void CShaderDeviceMgrEmpty::GetModeInfo( ShaderDisplayMode_t *pInfo, int nAdapter, int nMode ) const { } void CShaderDeviceMgrEmpty::GetCurrentModeInfo( ShaderDisplayMode_t *pInfo, int nAdapter ) const { } bool CShaderDeviceMgrEmpty::SetAdapter( int nAdapter, int nFlags ) { return true; } CreateInterfaceFn CShaderDeviceMgrEmpty::SetMode( void *hWnd, int nAdapter, const ShaderDeviceInfo_t &mode ) { return ShaderInterfaceFactory; } void CShaderDeviceMgrEmpty::AddModeChangeCallback( ShaderModeChangeCallbackFunc_t func ) { } void CShaderDeviceMgrEmpty::RemoveModeChangeCallback( ShaderModeChangeCallbackFunc_t func ) { } bool CShaderDeviceMgrEmpty::GetRecommendedVideoConfig( int nAdapter, KeyValues *pConfiguration ) { return true; } void CShaderDeviceMgrEmpty::AddDeviceDependentObject( IShaderDeviceDependentObject *pObject ) { } void CShaderDeviceMgrEmpty::RemoveDeviceDependentObject( IShaderDeviceDependentObject *pObject ) { } //----------------------------------------------------------------------------- // Empty shader device //----------------------------------------------------------------------------- CShaderDeviceEmpty::CShaderDeviceEmpty() : m_Mesh(false), m_DynamicMesh(true) { } int CShaderDeviceEmpty::GetCurrentAdapter() const { return 0; } bool CShaderDeviceEmpty::IsUsingGraphics() const { return false; } void CShaderDeviceEmpty::SpewDriverInfo() const { Warning("Empty shader\n"); } ImageFormat CShaderDeviceEmpty::GetBackBufferFormat() const { return IMAGE_FORMAT_RGB888; } void CShaderDeviceEmpty::GetBackBufferDimensions( int &width, int &height ) const { width = 1024; height = 768; } const AspectRatioInfo_t &CShaderDeviceEmpty::GetAspectRatioInfo() const { static const AspectRatioInfo_t dummy = { false, false, (4.0f / 3.0f), (4.0f / 3.0f), 1.0f, 1.0f, false }; return dummy; } int CShaderDeviceEmpty::StencilBufferBits() const { return 0; } bool CShaderDeviceEmpty::IsAAEnabled() const { return false; } void CShaderDeviceEmpty::Present() { } void CShaderDeviceEmpty::GetWindowSize( int &nWidth, int &nHeight ) const { nWidth = 0; nHeight = 0; } bool CShaderDeviceEmpty::AddView( void *hWnd ) { return true; } void CShaderDeviceEmpty::RemoveView( void *hWnd ) { } void CShaderDeviceEmpty::SetView( void *hWnd ) { } void CShaderDeviceEmpty::ReleaseResources( bool bReleaseManagedResources ) { } void CShaderDeviceEmpty::ReacquireResources() { } IMesh *CShaderDeviceEmpty::CreateStaticMesh( VertexFormat_t vertexFormat, const char *pTextureBudgetGroup, IMaterial *pMaterial, VertexStreamSpec_t *pStreamSpec ) { return &m_Mesh; } void CShaderDeviceEmpty::DestroyStaticMesh( IMesh *mesh ) { } IShaderBuffer *CShaderDeviceEmpty::CompileShader( const char *pProgram, size_t nBufLen, const char *pShaderVersion ) { return NULL; } VertexShaderHandle_t CShaderDeviceEmpty::CreateVertexShader( IShaderBuffer *pShaderBuffer ) { return VERTEX_SHADER_HANDLE_INVALID; } void CShaderDeviceEmpty::DestroyVertexShader( VertexShaderHandle_t hShader ) { } GeometryShaderHandle_t CShaderDeviceEmpty::CreateGeometryShader( IShaderBuffer *pShaderBuffer ) { return GEOMETRY_SHADER_HANDLE_INVALID; } void CShaderDeviceEmpty::DestroyGeometryShader( GeometryShaderHandle_t hShader ) { } PixelShaderHandle_t CShaderDeviceEmpty::CreatePixelShader( IShaderBuffer *pShaderBuffer ) { return PIXEL_SHADER_HANDLE_INVALID; } void CShaderDeviceEmpty::DestroyPixelShader( PixelShaderHandle_t hShader ) { } IVertexBuffer *CShaderDeviceEmpty::CreateVertexBuffer( ShaderBufferType_t type, VertexFormat_t fmt, int nVertexCount, const char *pBudgetGroup ) { if (IsDynamicBufferType(type)) return &m_DynamicMesh; else return &m_Mesh; } void CShaderDeviceEmpty::DestroyVertexBuffer( IVertexBuffer *pVertexBuffer ) { } IIndexBuffer *CShaderDeviceEmpty::CreateIndexBuffer( ShaderBufferType_t bufferType, MaterialIndexFormat_t fmt, int nIndexCount, const char *pBudgetGroup ) { if (IsDynamicBufferType(bufferType)) return &m_DynamicMesh; else return &m_Mesh; } void CShaderDeviceEmpty::DestroyIndexBuffer( IIndexBuffer *pIndexBuffer ) { } IVertexBuffer *CShaderDeviceEmpty::GetDynamicVertexBuffer( int nStreamID, VertexFormat_t vertexFormat, bool bBuffered ) { return &m_DynamicMesh; } IIndexBuffer *CShaderDeviceEmpty::GetDynamicIndexBuffer() { return &m_Mesh; } void CShaderDeviceEmpty::SetHardwareGammaRamp( float fGamma, float fGammaTVRangeMin, float fGammaTVRangeMax, float fGammaTVExponent, bool bTVEnabled ) { } void CShaderDeviceEmpty::EnableNonInteractiveMode( MaterialNonInteractiveMode_t mode, ShaderNonInteractiveInfo_t *pInfo ) { } void CShaderDeviceEmpty::RefreshFrontBufferNonInteractive() { } void CShaderDeviceEmpty::HandleThreadEvent( uint32 threadEvent ) { } void CShaderDeviceEmpty::DoStartupShaderPreloading() { } const char *CShaderDeviceEmpty::GetDeviceName() { return ""; } //----------------------------------------------------------------------------- // Empty shader shadow //----------------------------------------------------------------------------- CShaderShadowEmpty::CShaderShadowEmpty() { m_IsTranslucent = false; m_ForceOpaque = false; m_IsAlphaTested = false; m_bIsDepthWriteEnabled = true; m_bUsesVertexAndPixelShaders = false; } CShaderShadowEmpty::~CShaderShadowEmpty() { } void CShaderShadowEmpty::SetDefaultState() { m_IsTranslucent = false; m_ForceOpaque = false; m_IsAlphaTested = false; m_bIsDepthWriteEnabled = true; m_bUsesVertexAndPixelShaders = false; } void CShaderShadowEmpty::DepthFunc( ShaderDepthFunc_t depthFunc ) { } void CShaderShadowEmpty::EnableDepthWrites( bool bEnable ) { m_bIsDepthWriteEnabled = bEnable; } void CShaderShadowEmpty::EnableDepthTest( bool bEnable ) { } void CShaderShadowEmpty::EnablePolyOffset( PolygonOffsetMode_t nOffsetMode ) { } void CShaderShadowEmpty::EnableColorWrites( bool bEnable ) { } void CShaderShadowEmpty::EnableAlphaWrites( bool bEnable ) { } void CShaderShadowEmpty::EnableBlending( bool bEnable ) { m_IsTranslucent = bEnable; m_ForceOpaque = false; } void CShaderShadowEmpty::EnableBlendingForceOpaque( bool bEnable ) { m_IsTranslucent = bEnable; m_ForceOpaque = true; } void CShaderShadowEmpty::BlendFunc( ShaderBlendFactor_t srcFactor, ShaderBlendFactor_t dstFactor ) { } void CShaderShadowEmpty::EnableAlphaTest( bool bEnable ) { m_IsAlphaTested = bEnable; } void CShaderShadowEmpty::AlphaFunc( ShaderAlphaFunc_t alphaFunc, float alphaRef ) { } void CShaderShadowEmpty::PolyMode( ShaderPolyModeFace_t face, ShaderPolyMode_t polyMode ) { } void CShaderShadowEmpty::EnableCulling( bool bEnable ) { } void CShaderShadowEmpty::VertexShaderVertexFormat( unsigned int nFlags, int nTexCoordCount, int *pTexCoordDimensions, int nUserDataSize ) { } void CShaderShadowEmpty::EnableTexture( Sampler_t sampler, bool bEnable ) { } void CShaderShadowEmpty::EnableVertexTexture( VertexTextureSampler_t sampler, bool bEnable ) { } void CShaderShadowEmpty::EnableBlendingSeparateAlpha( bool bEnable ) { } void CShaderShadowEmpty::BlendFuncSeparateAlpha( ShaderBlendFactor_t srcFactor, ShaderBlendFactor_t dstFactor ) { } void CShaderShadowEmpty::SetVertexShader( const char *pFileName, int nStaticVshIndex ) { m_bUsesVertexAndPixelShaders = (pFileName != NULL); } void CShaderShadowEmpty::SetPixelShader( const char *pFileName, int nStaticPshIndex ) { m_bUsesVertexAndPixelShaders = (pFileName != NULL); } void CShaderShadowEmpty::EnableSRGBWrite( bool bEnable ) { } void CShaderShadowEmpty::EnableSRGBRead( Sampler_t sampler, bool bEnable ) { } void CShaderShadowEmpty::FogMode( ShaderFogMode_t fogMode, bool bEnable ) { } void CShaderShadowEmpty::DisableFogGammaCorrection( bool bDisable ) { } void CShaderShadowEmpty::ExecuteCommandBuffer( uint8 *pBuf ) { } void CShaderShadowEmpty::EnableAlphaToCoverage( bool bEnable ) { } void CShaderShadowEmpty::SetShadowDepthFiltering( Sampler_t stage ) { } void CShaderShadowEmpty::BlendOp( ShaderBlendOp_t blendOp ) { } void CShaderShadowEmpty::BlendOpSeparateAlpha( ShaderBlendOp_t blendOp ) { } float CShaderShadowEmpty::GetLightMapScaleFactor() const { return 1.0f; } //----------------------------------------------------------------------------- // Empty implementation of shader API //----------------------------------------------------------------------------- CShaderAPIEmpty::CShaderAPIEmpty() : m_Mesh(false) { } CShaderAPIEmpty::~CShaderAPIEmpty() { } bool CShaderAPIEmpty::IsDebugTextureListFresh( int numFramesAllowed ) { return false; } bool CShaderAPIEmpty::SetDebugTextureRendering( bool bEnable ) { return false; } void CShaderAPIEmpty::EnableDebugTextureList( bool bEnable ) { } void CShaderAPIEmpty::EnableGetAllTextures( bool bEnable ) { } KeyValues *CShaderAPIEmpty::LockDebugTextureList() { return NULL; } void CShaderAPIEmpty::UnlockDebugTextureList() { } KeyValues *CShaderAPIEmpty::GetDebugTextureList() { return NULL; } int CShaderAPIEmpty::GetTextureMemoryUsed( TextureMemoryType eTextureMemory ) { return 0; } void CShaderAPIEmpty::GetBackBufferDimensions( int &width, int &height ) const { width = 1024; height = 768; } const AspectRatioInfo_t &CShaderAPIEmpty::GetAspectRatioInfo() const { static const AspectRatioInfo_t dummy = { false, false, (4.0f / 3.0f), (4.0f / 3.0f), 1.0f, 1.0f, false }; return dummy; } void CShaderAPIEmpty::GetCurrentRenderTargetDimensions( int &nWidth, int &nHeight ) const { nWidth = 1024; nHeight = 768; } void CShaderAPIEmpty::GetCurrentViewport( int &nX, int &nY, int &nWidth, int &nHeight ) const { nX = 0; nY = 0; nWidth = 1024; nHeight = 768; } void CShaderAPIEmpty::GetCurrentColorCorrection( ShaderColorCorrectionInfo_t *pInfo ) { pInfo->m_bIsEnabled = false; pInfo->m_nLookupCount = 0; pInfo->m_flDefaultWeight = 0.0f; } void CShaderAPIEmpty::SetViewports( int nCount, const ShaderViewport_t *pViewports, bool setImmediately ) { } int CShaderAPIEmpty::GetViewports( ShaderViewport_t *pViewports, int nMax ) const { return 1; } void CShaderAPIEmpty::ClearBuffers( bool bClearColor, bool bClearDepth, bool bClearStencil, int renderTargetWidth, int renderTargetHeight ) { } void CShaderAPIEmpty::ClearBuffersEx( bool bClearRed, bool bClearGreen, bool bClearBlue, bool bClearAlpha, unsigned char r, unsigned char b, unsigned char g, unsigned char a ) { } void CShaderAPIEmpty::ClearColor3ub( unsigned char r, unsigned char g, unsigned char b ) { } void CShaderAPIEmpty::ClearColor4ub( unsigned char r, unsigned char g, unsigned char b, unsigned char a ) { } void CShaderAPIEmpty::BindVertexShader( VertexShaderHandle_t hVertexShader ) { } void CShaderAPIEmpty::BindGeometryShader( GeometryShaderHandle_t hGeometryShader ) { } void CShaderAPIEmpty::BindPixelShader( PixelShaderHandle_t hPixelShader ) { } void CShaderAPIEmpty::SetRasterState( const ShaderRasterState_t &state ) { } void CShaderAPIEmpty::MarkUnusedVertexFields( unsigned int nFlags, int nTexCoordCount, bool *pUnusedTexCoords ) { } bool CShaderAPIEmpty::OwnGPUResources( bool bEnable ) { return false; } void CShaderAPIEmpty::OnPresent() { } bool CShaderAPIEmpty::DoRenderTargetsNeedSeparateDepthBuffer() const { return false; } void CShaderAPIEmpty::ClearSnapshots() { } bool CShaderAPIEmpty::SetMode( void *hwnd, int nAdapter, const ShaderDeviceInfo_t &info ) { return true; } void CShaderAPIEmpty::ChangeVideoMode( const ShaderDeviceInfo_t &info ) { } void CShaderAPIEmpty::DXSupportLevelChanged( int nDXLevel ) { } void CShaderAPIEmpty::EnableUserClipTransformOverride( bool bEnable ) { } void CShaderAPIEmpty::UserClipTransform( const VMatrix &worldToView ) { } void CShaderAPIEmpty::SetDefaultState() { } StateSnapshot_t CShaderAPIEmpty::TakeSnapshot() { StateSnapshot_t id = 0; if (g_ShaderShadow.m_IsTranslucent) id |= TRANSLUCENT; if (g_ShaderShadow.m_IsAlphaTested) id |= ALPHATESTED; if (g_ShaderShadow.m_bUsesVertexAndPixelShaders) id |= VERTEX_AND_PIXEL_SHADERS; if (g_ShaderShadow.m_bIsDepthWriteEnabled) id |= DEPTH_WRITE_ENABLED; return id; } bool CShaderAPIEmpty::IsTranslucent( StateSnapshot_t id ) const { return (id & TRANSLUCENT) != 0; } bool CShaderAPIEmpty::IsAlphaTested( StateSnapshot_t id ) const { return (id & ALPHATESTED) != 0; } bool CShaderAPIEmpty::UsesVertexAndPixelShaders( StateSnapshot_t id ) const { return (id & VERTEX_AND_PIXEL_SHADERS) != 0; } bool CShaderAPIEmpty::IsDepthWriteEnabled( StateSnapshot_t id ) const { return (id & DEPTH_WRITE_ENABLED) != 0; } VertexFormat_t CShaderAPIEmpty::ComputeVertexFormat( int numSnapshots, StateSnapshot_t *pIds ) const { return 0; } VertexFormat_t CShaderAPIEmpty::ComputeVertexUsage( int numSnapshots, StateSnapshot_t *pIds ) const { return 0; } void CShaderAPIEmpty::BeginPass( StateSnapshot_t snapshot ) { } void CShaderAPIEmpty::UseSnapshot( StateSnapshot_t snapshot ) { } CMeshBuilder *CShaderAPIEmpty::GetVertexModifyBuilder() { return NULL; } void CShaderAPIEmpty::SetLightingState( const MaterialLightingState_t &state ) { } void CShaderAPIEmpty::SetLights( int nCount, const LightDesc_t *pDesc ) { } void CShaderAPIEmpty::SetLightingOrigin( Vector vLightingOrigin ) { } void CShaderAPIEmpty::SetAmbientLightCube( Vector4D cube[6] ) { } void CShaderAPIEmpty::CopyRenderTargetToTexture( ShaderAPITextureHandle_t textureHandle ) { } void CShaderAPIEmpty::CopyRenderTargetToTextureEx( ShaderAPITextureHandle_t textureHandle, int nRenderTargetID, Rect_t *pSrcRect, Rect_t *pDstRect ) { } void CShaderAPIEmpty::CopyTextureToRenderTargetEx( int nRenderTargetID, ShaderAPITextureHandle_t textureHandle, Rect_t *pSrcRect, Rect_t *pDstRect ) { } void CShaderAPIEmpty::SetNumBoneWeights( int numBones ) { } void CShaderAPIEmpty::EnableHWMorphing( bool bEnable ) { } IMesh *CShaderAPIEmpty::GetDynamicMesh( IMaterial *pMaterial, int nHWSkinBoneCount, bool bBuffered, IMesh *pVertexOverride, IMesh *pIndexOverride ) { return &m_Mesh; } IMesh *CShaderAPIEmpty::GetDynamicMeshEx( IMaterial *pMaterial, VertexFormat_t vertexFormat, int nHWSkinBoneCount, bool bBuffered, IMesh *pVertexOverride, IMesh *pIndexOverride ) { return &m_Mesh; } IMesh *CShaderAPIEmpty::GetFlexMesh() { return &m_Mesh; } void CShaderAPIEmpty::RenderPass( const unsigned char *pInstanceCommandBuffer, int nPass, int nPassCount ) { } void CShaderAPIEmpty::MatrixMode( MaterialMatrixMode_t matrixMode ) { } void CShaderAPIEmpty::PushMatrix() { } void CShaderAPIEmpty::PopMatrix() { } void CShaderAPIEmpty::LoadMatrix( float *m ) { } void CShaderAPIEmpty::LoadBoneMatrix( int boneIndex, const float *m ) { } void CShaderAPIEmpty::MultMatrix( float *m ) { } void CShaderAPIEmpty::MultMatrixLocal( float *m ) { } void CShaderAPIEmpty::GetActualProjectionMatrix( float *m ) { } void CShaderAPIEmpty::GetMatrix( MaterialMatrixMode_t matrixMode, float *dst ) { } void CShaderAPIEmpty::LoadIdentity() { } void CShaderAPIEmpty::LoadCameraToWorld() { } void CShaderAPIEmpty::Ortho( double left, double right, double bottom, double top, double zNear, double zFar ) { } void CShaderAPIEmpty::PerspectiveX( double fovx, double aspect, double zNear, double zFar ) { } void CShaderAPIEmpty::PerspectiveOffCenterX( double fovx, double aspect, double zNear, double zFar, double bottom, double top, double left, double right ) { } void CShaderAPIEmpty::PickMatrix( int x, int y, int width, int height ) { } void CShaderAPIEmpty::Rotate( float angle, float x, float y, float z ) { } void CShaderAPIEmpty::Translate( float x, float y, float z ) { } void CShaderAPIEmpty::Scale( float x, float y, float z ) { } void CShaderAPIEmpty::ScaleXY( float x, float y ) { } void CShaderAPIEmpty::FogMode( MaterialFogMode_t fogMode ) { } void CShaderAPIEmpty::FogStart( float fStart ) { } void CShaderAPIEmpty::FogEnd( float fEnd ) { } void CShaderAPIEmpty::SetFogZ( float fogZ ) { } void CShaderAPIEmpty::FogMaxDensity( float flMaxDensity ) { } void CShaderAPIEmpty::GetFogDistances( float *fStart, float *fEnd, float *fFogZ ) { } void CShaderAPIEmpty::FogColor3f( float r, float g, float b ) { } void CShaderAPIEmpty::FogColor3fv( float const *rgb ) { } void CShaderAPIEmpty::FogColor3ub( unsigned char r, unsigned char g, unsigned char b ) { } void CShaderAPIEmpty::FogColor3ubv( unsigned char const *rgb ) { } void CShaderAPIEmpty::SceneFogColor3ub( unsigned char r, unsigned char g, unsigned char b ) { } void CShaderAPIEmpty::SceneFogMode( MaterialFogMode_t fogMode ) { } void CShaderAPIEmpty::GetSceneFogColor( unsigned char *rgb ) { } MaterialFogMode_t CShaderAPIEmpty::GetSceneFogMode() { return MATERIAL_FOG_NONE; } int CShaderAPIEmpty::GetPixelFogCombo() { return 0; } void CShaderAPIEmpty::SetHeightClipZ( float z ) { } void CShaderAPIEmpty::SetHeightClipMode( enum MaterialHeightClipMode_t heightClipMode ) { } void CShaderAPIEmpty::SetClipPlane( int index, const float *pPlane ) { } void CShaderAPIEmpty::EnableClipPlane( int index, bool bEnable ) { } void CShaderAPIEmpty::SetFastClipPlane( const float *pPlane ) { } void CShaderAPIEmpty::EnableFastClip( bool bEnable ) { } int CShaderAPIEmpty::GetCurrentDynamicVBSize() { return 0; } int CShaderAPIEmpty::GetCurrentDynamicVBSize( int nIndex ) { return 0; } void CShaderAPIEmpty::DestroyVertexBuffers( bool bExitingLevel ) { } void CShaderAPIEmpty::GetGPUMemoryStats( GPUMemoryStats &stats ) { } void CShaderAPIEmpty::SetVertexShaderIndex( int vshIndex ) { } void CShaderAPIEmpty::SetPixelShaderIndex( int pshIndex ) { } void CShaderAPIEmpty::SetVertexShaderConstant( int var, float const *pVec, int numConst, bool bForce ) { } void CShaderAPIEmpty::SetBooleanVertexShaderConstant( int var, BOOL const *pVec, int numBools, bool bForce ) { } void CShaderAPIEmpty::SetIntegerVertexShaderConstant( int var, int const *pVec, int numIntVecs, bool bForce ) { } void CShaderAPIEmpty::SetPixelShaderConstant( int var, float const *pVec, int numConst, bool bForce ) { } void CShaderAPIEmpty::SetBooleanPixelShaderConstant( int var, BOOL const *pVec, int numBools, bool bForce ) { } void CShaderAPIEmpty::SetIntegerPixelShaderConstant( int var, int const *pVec, int numIntVecs, bool bForce ) { } void CShaderAPIEmpty::InvalidateDelayedShaderConstants() { } float CShaderAPIEmpty::GammaToLinear_HardwareSpecific( float fGamma ) const { return 0.0f; } float CShaderAPIEmpty::LinearToGamma_HardwareSpecific( float fLinear ) const { return 0.0f; } void CShaderAPIEmpty::SetLinearToGammaConversionTextures( ShaderAPITextureHandle_t hSRGBWriteEnabledTexture, ShaderAPITextureHandle_t hIdentityTexture ) { } void CShaderAPIEmpty::CullMode( MaterialCullMode_t cullMode ) { } void CShaderAPIEmpty::FlipCullMode() { } void CShaderAPIEmpty::ForceDepthFuncEquals( bool bEnable ) { } void CShaderAPIEmpty::OverrideDepthEnable( bool bEnable, bool bDepthEnable, bool bDepthTestEnable ) { } void CShaderAPIEmpty::OverrideAlphaWriteEnable( bool bOverrideEnable, bool bAlphaWriteEnable ) { } void CShaderAPIEmpty::OverrideColorWriteEnable( bool bOverrideEnable, bool bColorWriteEnable ) { } void CShaderAPIEmpty::ShadeMode( ShaderShadeMode_t mode ) { } void CShaderAPIEmpty::Bind( IMaterial *pMaterial ) { } ImageFormat CShaderAPIEmpty::GetNearestSupportedFormat( ImageFormat fmt, bool bFilteringRequired ) const { return fmt; } ImageFormat CShaderAPIEmpty::GetNearestRenderTargetFormat( ImageFormat fmt ) const { return fmt; } void CShaderAPIEmpty::BindTexture( Sampler_t stage, TextureBindFlags_t nBindFlags, ShaderAPITextureHandle_t textureHandle ) { } void CShaderAPIEmpty::BindVertexTexture( VertexTextureSampler_t nSampler, ShaderAPITextureHandle_t textureHandle ) { } void CShaderAPIEmpty::SetRenderTarget( ShaderAPITextureHandle_t colorTextureHandle, ShaderAPITextureHandle_t depthTextureHandle ) { } void CShaderAPIEmpty::SetRenderTargetEx( int nRenderTargetID, ShaderAPITextureHandle_t colorTextureHandle, ShaderAPITextureHandle_t depthTextureHandle ) { } void CShaderAPIEmpty::ModifyTexture( ShaderAPITextureHandle_t textureHandle ) { } void CShaderAPIEmpty::TexImage2D( int level, int cubeFaceID, ImageFormat dstFormat, int zOffset, int width, int height, ImageFormat srcFormat, bool bSrcIsTiled, void *imageData ) { } void CShaderAPIEmpty::TexSubImage2D( int level, int cubeFaceID, int xOffset, int yOffset, int zOffset, int width, int height, ImageFormat srcFormat, int srcStride, bool bSrcIsTiled, void *imageData ) { } bool CShaderAPIEmpty::TexLock( int level, int cubeFaceID, int xOffset, int yOffset, int width, int height, CPixelWriter &writer ) { return false; } void CShaderAPIEmpty::TexUnlock() { } void CShaderAPIEmpty::UpdateTexture( int xOffset, int yOffset, int w, int h, ShaderAPITextureHandle_t hDstTexture, ShaderAPITextureHandle_t hSrcTexture ) { } void *CShaderAPIEmpty::LockTex( ShaderAPITextureHandle_t hTexture ) { return NULL; } void CShaderAPIEmpty::UnlockTex( ShaderAPITextureHandle_t hTexture ) { } void *CShaderAPIEmpty::GetD3DTexturePtr( ShaderAPITextureHandle_t hTexture ) { return NULL; } void CShaderAPIEmpty::TexMinFilter( ShaderTexFilterMode_t texFilterMode ) { } void CShaderAPIEmpty::TexMagFilter( ShaderTexFilterMode_t texFilterMode ) { } void CShaderAPIEmpty::TexWrap( ShaderTexCoordComponent_t coord, ShaderTexWrapMode_t wrapMode ) { } void CShaderAPIEmpty::TexSetPriority( int priority ) { } ShaderAPITextureHandle_t CShaderAPIEmpty::CreateTexture( int width, int height, int depth, ImageFormat dstImageFormat, int numMipLevels, int numCopies, int flags, const char *pDebugName, const char *pTextureGroupName ) { return INVALID_SHADERAPI_TEXTURE_HANDLE; } void CShaderAPIEmpty::CreateTextures( ShaderAPITextureHandle_t *pHandles, int count, int width, int height, int depth, ImageFormat dstImageFormat, int numMipLevels, int numCopies, int flags, const char *pDebugName, const char *pTextureGroupName ) { if (count > 0) { memset(pHandles, 0, sizeof(ShaderAPITextureHandle_t) * count); } } ShaderAPITextureHandle_t CShaderAPIEmpty::CreateDepthTexture( ImageFormat renderTargetFormat, int width, int height, const char *pDebugName, bool bTexture, bool bAliasDepthTextureOverSceneDepthX360 ) { return INVALID_SHADERAPI_TEXTURE_HANDLE; } void CShaderAPIEmpty::DeleteTexture( ShaderAPITextureHandle_t textureHandle ) { } bool CShaderAPIEmpty::IsTexture( ShaderAPITextureHandle_t textureHandle ) { return true; } bool CShaderAPIEmpty::IsTextureResident( ShaderAPITextureHandle_t textureHandle ) { return false; } void CShaderAPIEmpty::ClearBuffersObeyStencil( bool bClearColor, bool bClearDepth ) { } void CShaderAPIEmpty::ClearBuffersObeyStencilEx( bool bClearColor, bool bClearAlpha, bool bClearDepth ) { } void CShaderAPIEmpty::PerformFullScreenStencilOperation() { } void CShaderAPIEmpty::ReadPixels( int x, int y, int width, int height, unsigned char *data, ImageFormat dstFormat, ITexture *pTexture ) { } void CShaderAPIEmpty::ReadPixelsAsync( int x, int y, int width, int height, unsigned char *data, ImageFormat dstFormat, ITexture *pTexture, CThreadEvent *pEvent ) { } void CShaderAPIEmpty::ReadPixelsAsyncGetResult( int x, int y, int width, int height, unsigned char *data, ImageFormat dstFormat, CThreadEvent *pEvent ) { } void CShaderAPIEmpty::ReadPixels( Rect_t *pSrcRect, Rect_t *pDstRect, unsigned char *data, ImageFormat dstFormat, int nDstStride ) { } int CShaderAPIEmpty::SelectionMode( bool selectionMode ) { return 0; } void CShaderAPIEmpty::SelectionBuffer( unsigned int *pBuffer, int size ) { } void CShaderAPIEmpty::ClearSelectionNames() { } void CShaderAPIEmpty::LoadSelectionName( int name ) { } void CShaderAPIEmpty::PushSelectionName( int name ) { } void CShaderAPIEmpty::PopSelectionName() { } void CShaderAPIEmpty::FlushHardware() { } void CShaderAPIEmpty::ResetRenderState( bool bFullReset ) { } void CShaderAPIEmpty::SetScissorRect( int nLeft, int nTop, int nRight, int nBottom, bool bEnableScissor ) { } bool CShaderAPIEmpty::CanDownloadTextures() const { return false; } void CShaderAPIEmpty::BeginFrame() { } void CShaderAPIEmpty::EndFrame() { } double CShaderAPIEmpty::CurrentTime() const { return Plat_FloatTime(); } void CShaderAPIEmpty::GetWorldSpaceCameraPosition( float *pPos ) const { } void CShaderAPIEmpty::GetWorldSpaceCameraDirection( float *pDir ) const { } bool CShaderAPIEmpty::HasDestAlphaBuffer() const { return false; } bool CShaderAPIEmpty::HasStencilBuffer() const { return false; } int CShaderAPIEmpty::MaxViewports() const { return 1; } void CShaderAPIEmpty::OverrideStreamOffsetSupport( bool bOverrideEnabled, bool bEnableSupport ) { } ShadowFilterMode_t CShaderAPIEmpty::GetShadowFilterMode( bool bForceLowQualityShadows, bool bPS30 ) const { return SHADOWFILTERMODE_DEFAULT; } int CShaderAPIEmpty::StencilBufferBits() const { return 0; } int CShaderAPIEmpty::GetFrameBufferColorDepth() const { return 0; } int CShaderAPIEmpty::GetSamplerCount() const { return 4; } int CShaderAPIEmpty::GetVertexSamplerCount() const { return 0; } bool CShaderAPIEmpty::HasSetDeviceGammaRamp() const { return false; } bool CShaderAPIEmpty::SupportsCompressedTextures() const { return false; } VertexCompressionType_t CShaderAPIEmpty::SupportsCompressedVertices() const { return VERTEX_COMPRESSION_NONE; } bool CShaderAPIEmpty::SupportsStaticControlFlow() const { return false; } int CShaderAPIEmpty::MaximumAnisotropicLevel() const { return 0; } int CShaderAPIEmpty::MaxTextureWidth() const { return 16384; } int CShaderAPIEmpty::MaxTextureHeight() const { return 16384; } int CShaderAPIEmpty::MaxTextureAspectRatio() const { return 16384; } int CShaderAPIEmpty::GetDXSupportLevel() const { return 90; } int CShaderAPIEmpty::GetMinDXSupportLevel() const { return 90; } bool CShaderAPIEmpty::SupportsShadowDepthTextures() const { return false; } bool CShaderAPIEmpty::SupportsShadowDepthTextures() { return false; } ImageFormat CShaderAPIEmpty::GetShadowDepthTextureFormat() const { return IMAGE_FORMAT_RGBA8888; } ImageFormat CShaderAPIEmpty::GetHighPrecisionShadowDepthTextureFormat() const { return IMAGE_FORMAT_RGBA8888; } ImageFormat CShaderAPIEmpty::GetNullTextureFormat() const { return IMAGE_FORMAT_RGBA8888; } const char *CShaderAPIEmpty::GetShaderDLLName() const { return "UNKNOWN"; } int CShaderAPIEmpty::TextureMemorySize() const { return 0x4000000; } bool CShaderAPIEmpty::SupportsMipmappedCubemaps() const { return true; } int CShaderAPIEmpty::NumVertexShaderConstants() const { return 128; } int CShaderAPIEmpty::NumBooleanVertexShaderConstants() const { return 0; } int CShaderAPIEmpty::NumIntegerVertexShaderConstants() const { return 0; } int CShaderAPIEmpty::NumPixelShaderConstants() const { return 8; } int CShaderAPIEmpty::MaxNumLights() const { return 4; } int CShaderAPIEmpty::MaxVertexShaderBlendMatrices() const { return 0; } int CShaderAPIEmpty::MaxUserClipPlanes() const { return 0; } bool CShaderAPIEmpty::UseFastClipping() const { return false; } bool CShaderAPIEmpty::SpecifiesFogColorInLinearSpace() const { return false; } bool CShaderAPIEmpty::SupportsSRGB() const { return false; } bool CShaderAPIEmpty::FakeSRGBWrite() const { return false; } bool CShaderAPIEmpty::CanDoSRGBReadFromRTs() const { return true; } bool CShaderAPIEmpty::SupportsGLMixedSizeTargets() const { return false; } const char *CShaderAPIEmpty::GetHWSpecificShaderDLLName() const { return NULL; } bool CShaderAPIEmpty::NeedsAAClamp() const { return false; } int CShaderAPIEmpty::MaxHWMorphBatchCount() const { return 0; } int CShaderAPIEmpty::GetMaxDXSupportLevel() const { return 90; } bool CShaderAPIEmpty::ReadPixelsFromFrontBuffer() const { return true; } bool CShaderAPIEmpty::PreferDynamicTextures() const { return false; } void CShaderAPIEmpty::ForceHardwareSync() { } int CShaderAPIEmpty::GetCurrentNumBones() const { return 0; } bool CShaderAPIEmpty::IsHWMorphingEnabled() const { return false; } void CShaderAPIEmpty::GetDX9LightState( LightState_t *state ) const { state->m_nNumLights = 0; state->m_bAmbientLight = false; state->m_bStaticLight = false; } MaterialFogMode_t CShaderAPIEmpty::GetCurrentFogType() const { return MATERIAL_FOG_NONE; } void CShaderAPIEmpty::RecordString( const char *pStr ) { } void CShaderAPIEmpty::EvictManagedResources() { } void CShaderAPIEmpty::GetLightmapDimensions( int *w, int *h ) { g_pShaderUtil->GetLightmapDimensions(w, h); } void CShaderAPIEmpty::SyncToken( const char *pToken ) { } void CShaderAPIEmpty::SetStandardVertexShaderConstants( float fOverbright ) { } void CShaderAPIEmpty::SetAnisotropicLevel( int nAnisotropyLevel ) { } bool CShaderAPIEmpty::SupportsHDR() const { return false; } HDRType_t CShaderAPIEmpty::GetHDRType() const { return HDR_TYPE_NONE; } HDRType_t CShaderAPIEmpty::GetHardwareHDRType() const { return HDR_TYPE_NONE; } bool CShaderAPIEmpty::NeedsATICentroidHack() const { return false; } bool CShaderAPIEmpty::SupportsColorOnSecondStream() const { return false; } bool CShaderAPIEmpty::SupportsStaticPlusDynamicLighting() const { return false; } bool CShaderAPIEmpty::SupportsStreamOffset() const { return false; } void CShaderAPIEmpty::CommitPixelShaderLighting( int pshReg ) { } ShaderAPIOcclusionQuery_t CShaderAPIEmpty::CreateOcclusionQueryObject() { return INVALID_SHADERAPI_OCCLUSION_QUERY_HANDLE; } void CShaderAPIEmpty::DestroyOcclusionQueryObject( ShaderAPIOcclusionQuery_t ) { } void CShaderAPIEmpty::BeginOcclusionQueryDrawing( ShaderAPIOcclusionQuery_t ) { } void CShaderAPIEmpty::EndOcclusionQueryDrawing( ShaderAPIOcclusionQuery_t ) { } int CShaderAPIEmpty::OcclusionQuery_GetNumPixelsRendered( ShaderAPIOcclusionQuery_t hQuery, bool bFlush ) { return 0; } void CShaderAPIEmpty::AcquireThreadOwnership() { } void CShaderAPIEmpty::ReleaseThreadOwnership() { } bool CShaderAPIEmpty::SupportsBorderColor() const { return false; } bool CShaderAPIEmpty::SupportsFetch4() const { return false; } bool CShaderAPIEmpty::SupportsFetch4() { return false; } void CShaderAPIEmpty::EnableBuffer2FramesAhead( bool bEnable ) { } float CShaderAPIEmpty::GetShadowDepthBias() const { return 0.0f; } float CShaderAPIEmpty::GetShadowSlopeScaleDepthBias() const { return 0.0f; } bool CShaderAPIEmpty::PreferZPrepass() const { return false; } bool CShaderAPIEmpty::SuppressPixelShaderCentroidHackFixup() const { return true; } bool CShaderAPIEmpty::PreferTexturesInHWMemory() const { return false; } bool CShaderAPIEmpty::PreferHardwareSync() const { return false; } bool CShaderAPIEmpty::IsUnsupported() const { return false; } void CShaderAPIEmpty::SetDepthFeatheringPixelShaderConstant( int iConstant, float fDepthBlendScale ) { } TessellationMode_t CShaderAPIEmpty::GetTessellationMode() const { return TESSELLATION_MODE_DISABLED; } void CShaderAPIEmpty::SetPixelShaderFogParams( int reg ) { } bool CShaderAPIEmpty::InFlashlightMode() const { return false; } bool CShaderAPIEmpty::IsRenderingPaint() const { return false; } bool CShaderAPIEmpty::InEditorMode() const { return false; } void CShaderAPIEmpty::BindStandardTexture( Sampler_t stage, TextureBindFlags_t nBindFlags, StandardTextureId_t id ) { } void CShaderAPIEmpty::BindStandardVertexTexture( VertexTextureSampler_t sampler, StandardTextureId_t id ) { } void CShaderAPIEmpty::GetStandardTextureDimensions( int *pWidth, int *pHeight, StandardTextureId_t id ) { *pWidth = 0; *pHeight = 0; } float CShaderAPIEmpty::GetSubDHeight() { return 0.0f; } bool CShaderAPIEmpty::IsStereoActiveThisFrame() const { return false; } void CShaderAPIEmpty::SetFlashlightState( const FlashlightState_t &state, const VMatrix &worldToTexture ) { } void CShaderAPIEmpty::SetFlashlightStateEx( const FlashlightState_t &state, const VMatrix &worldToTexture, ITexture *pFlashlightDepthTexture ) { } bool CShaderAPIEmpty::IsCascadedShadowMapping() const { return false; } void CShaderAPIEmpty::SetCascadedShadowMapping( bool bEnable ) { } void CShaderAPIEmpty::SetCascadedShadowMappingState( const CascadedShadowMappingState_t &state, ITexture *pDepthTextureAtlas ) { } const CascadedShadowMappingState_t &CShaderAPIEmpty::GetCascadedShadowMappingState( ITexture **pDepthTextureAtlas ) const { static CascadedShadowMappingState_t dummy; return dummy; } const FlashlightState_t &CShaderAPIEmpty::GetFlashlightState( VMatrix &worldToTexture ) const { static const FlashlightState_t blah; return blah; } const FlashlightState_t &CShaderAPIEmpty::GetFlashlightStateEx( VMatrix &worldToTexture, ITexture **pFlashlightDepthTexture ) const { static const FlashlightState_t blah; return blah; } void CShaderAPIEmpty::GetFlashlightShaderInfo( bool *pShadowsEnabled, bool *pUberLight ) const { *pShadowsEnabled = false; *pUberLight = false; } float CShaderAPIEmpty::GetFlashlightAmbientOcclusion() const { return 1.0f; } void CShaderAPIEmpty::ClearVertexAndPixelShaderRefCounts() { } void CShaderAPIEmpty::PurgeUnusedVertexAndPixelShaders() { } void CShaderAPIEmpty::DrawInstances( int nInstanceCount, const MeshInstanceData_t *pInstance ) { } bool CShaderAPIEmpty::IsAAEnabled() const { return false; } int CShaderAPIEmpty::GetVertexTextureCount() const { return 0; } int CShaderAPIEmpty::GetMaxVertexTextureDimension() const { return 0; } int CShaderAPIEmpty::MaxTextureDepth() const { return 0; } void CShaderAPIEmpty::SetFlexWeights( int nFirstWeight, int nCount, const MorphWeight_t *pWeights ) { } ITexture *CShaderAPIEmpty::GetRenderTargetEx( int nRenderTargetID ) const { return NULL; } void CShaderAPIEmpty::SetToneMappingScaleLinear( const Vector &scale ) { } const Vector &CShaderAPIEmpty::GetToneMappingScaleLinear( void ) const { static const Vector dummy; return dummy; } void CShaderAPIEmpty::HandleDeviceLost() { } void CShaderAPIEmpty::EnableLinearColorSpaceFrameBuffer( bool bEnable ) { } void CShaderAPIEmpty::SetFullScreenTextureHandle( ShaderAPITextureHandle_t h ) { } void CShaderAPIEmpty::SetFloatRenderingParameter( int parm_number, float value ) { } void CShaderAPIEmpty::SetIntRenderingParameter( int parm_number, int value ) { } void CShaderAPIEmpty::SetTextureRenderingParameter( int parm_number, ITexture *pTexture ) { } void CShaderAPIEmpty::SetVectorRenderingParameter( int parm_number, Vector const &value ) { } float CShaderAPIEmpty::GetFloatRenderingParameter( int parm_number ) const { return 0.0f; } int CShaderAPIEmpty::GetIntRenderingParameter( int parm_number ) const { return 0; } ITexture *CShaderAPIEmpty::GetTextureRenderingParameter( int parm_number ) const { return NULL; } Vector CShaderAPIEmpty::GetVectorRenderingParameter( int parm_number ) const { return Vector(0.0f, 0.0f, 0.0f); } void CShaderAPIEmpty::SetStencilState( const ShaderStencilState_t &state ) { } void CShaderAPIEmpty::ClearStencilBufferRectangle( int xmin, int ymin, int xmax, int ymax, int value ) { } void CShaderAPIEmpty::GetMaxToRender( IMesh *pMesh, bool bMaxUntilFlush, int *pMaxVerts, int *pMaxIndices ) { *pMaxVerts = 32768; *pMaxIndices = 32768; } int CShaderAPIEmpty::GetMaxVerticesToRender( IMaterial *pMaterial ) { return 32768; } int CShaderAPIEmpty::GetMaxIndicesToRender() { return 32768; } int CShaderAPIEmpty::CompareSnapshots( StateSnapshot_t snapshot0, StateSnapshot_t snapshot1 ) { return 0; } void CShaderAPIEmpty::DisableAllLocalLights() { } bool CShaderAPIEmpty::SupportsMSAAMode( int nMSAAMode ) { return false; } bool CShaderAPIEmpty::SupportsCSAAMode( int nNumSamples, int nQualityLevel ) { return false; } void CShaderAPIEmpty::BeginPIXEvent( unsigned long color, const char *szName ) { } void CShaderAPIEmpty::EndPIXEvent() { } void CShaderAPIEmpty::SetPIXMarker( unsigned long color, const char *szName ) { } void CShaderAPIEmpty::ComputeVertexDescription( unsigned char *pBuffer, VertexFormat_t vertexFormat, MeshDesc_t &desc ) const { } int CShaderAPIEmpty::VertexFormatSize( VertexFormat_t vertexFormat ) const { return 0; } int CShaderAPIEmpty::NeedsShaderSRGBConversion() const { return 0; } bool CShaderAPIEmpty::UsesSRGBCorrectBlending() const { return false; } bool CShaderAPIEmpty::HasFastVertexTextures() const { return false; } bool CShaderAPIEmpty::ActualHasFastVertexTextures() const { return false; } void CShaderAPIEmpty::SetShadowDepthBiasFactors( float fShadowSlopeScaleDepthBias, float fShadowDepthBias ) { } void CShaderAPIEmpty::SetDisallowAccess( bool ) { } void CShaderAPIEmpty::EnableShaderShaderMutex( bool ) { } void CShaderAPIEmpty::ShaderLock() { } void CShaderAPIEmpty::ShaderUnlock() { } void CShaderAPIEmpty::BindVertexBuffer( int nStreamID, IVertexBuffer *pVertexBuffer, int nOffsetInBytes, int nFirstVertex, int nVertexCount, VertexFormat_t fmt, int nRepetitions ) { } void CShaderAPIEmpty::BindIndexBuffer( IIndexBuffer *pIndexBuffer, int nOffsetInBytes ) { } void CShaderAPIEmpty::Draw( MaterialPrimitiveType_t primitiveType, int nFirstIndex, int nIndexCount ) { } int CShaderAPIEmpty::GetVertexBufferCompression() const { return 0; } bool CShaderAPIEmpty::ShouldWriteDepthToDestAlpha() const { return false; } bool CShaderAPIEmpty::SupportsHDRMode( HDRType_t nHDRMode ) const { return false; } bool CShaderAPIEmpty::IsDX10Card() const { return false; } void CShaderAPIEmpty::PushDeformation( const DeformationBase_t *Deformation ) { } void CShaderAPIEmpty::PopDeformation() { } int CShaderAPIEmpty::GetNumActiveDeformations() const { return 0; } int CShaderAPIEmpty::GetPackedDeformationInformation( int nMaskOfUnderstoodDeformations, float *pConstantValuesOut, int nBufferSize, int nMaximumDeformations, int *pNumDefsOut ) const { *pNumDefsOut = 0; return 0; } void CShaderAPIEmpty::SetStandardTextureHandle( StandardTextureId_t nId, ShaderAPITextureHandle_t nHandle ) { } void CShaderAPIEmpty::ExecuteCommandBuffer( uint8 *pCmdBuffer ) { } bool CShaderAPIEmpty::GetHDREnabled() const { return true; } void CShaderAPIEmpty::SetHDREnabled( bool bEnable ) { } void CShaderAPIEmpty::SetTextureFilterMode( Sampler_t sampler, TextureFilterMode_t nMode ) { } void CShaderAPIEmpty::SetScreenSizeForVPOS( int pshReg ) { } void CShaderAPIEmpty::SetVSNearAndFarZ( int vshReg ) { } float CShaderAPIEmpty::GetFarZ() { return 1000.0f; } void CShaderAPIEmpty::EnableSinglePassFlashlightMode( bool bEnable ) { } bool CShaderAPIEmpty::SinglePassFlashlightModeEnabled() { return false; } void CShaderAPIEmpty::FlipCulling( bool bFlipCulling ) { } void CShaderAPIEmpty::UpdateGameTime( float flTime ) { } bool CShaderAPIEmpty::IsStereoSupported( void ) const { return false; } void CShaderAPIEmpty::UpdateStereoTexture( ShaderAPITextureHandle_t texHandle, bool *pStereoActiveThisFrame ) { } void CShaderAPIEmpty::SetSRGBWrite( bool bState ) { } void CShaderAPIEmpty::PrintfVA( char *fmt, va_list vargs ) { } void CShaderAPIEmpty::Printf( char *fmt, ... ) { } float CShaderAPIEmpty::Knob( char *knobname, float *setvalue ) { return 0.0f; } void CShaderAPIEmpty::AddShaderComboInformation( const ShaderComboSemantics_t *pSemantics ) { } void CShaderAPIEmpty::SpinPresent( unsigned int nFrames ) { } void CShaderAPIEmpty::AntiAliasingHint( int a1 ) { } bool CShaderAPIEmpty::SupportsCascadedShadowMapping() const { return false; } CSMQualityMode_t CShaderAPIEmpty::GetCSMQuality() const { return CSMQUALITY_VERY_LOW; } bool CShaderAPIEmpty::SupportsBilinearPCFSampling() const { return true; } CSMShaderMode_t CShaderAPIEmpty::GetCSMShaderMode( CSMQualityMode_t nQualityLevel ) const { return CSMSHADERMODE_LOW_OR_VERY_LOW; } void CShaderAPIEmpty::EnableAlphaToCoverage() { } void CShaderAPIEmpty::DisableAlphaToCoverage() { } float CShaderAPIEmpty::GetLightMapScaleFactor( void ) const { return 1.0f; } ShaderAPITextureHandle_t CShaderAPIEmpty::FindTexture( const char *pDebugName ) { return INVALID_SHADERAPI_TEXTURE_HANDLE; } void CShaderAPIEmpty::GetTextureDimensions( ShaderAPITextureHandle_t hTexture, int &nWidth, int &nHeight, int &nDepth ) { } void CShaderAPIEmpty::SetVertexShaderViewProj() { } void CShaderAPIEmpty::UpdateVertexShaderMatrix( int ) { } void CShaderAPIEmpty::SetVertexShaderModelViewProjAndModelView() { } void CShaderAPIEmpty::SetVertexShaderCameraPos() { } int CShaderAPIEmpty::SetSkinningMatrices( const MeshInstanceData_t & ) { return 0; } void CShaderAPIEmpty::BeginGeneratingCSMs() { } void CShaderAPIEmpty::EndGeneratingCSMs() { } void CShaderAPIEmpty::PerpareForCascadeDraw( int, float, float ) { } bool CShaderAPIEmpty::GetCSMAccurateBlending() const { return false; } void CShaderAPIEmpty::SetCSMAccurateBlending( bool bEnable ) { } bool CShaderAPIEmpty::SupportsResolveDepth() const { return false; } bool CShaderAPIEmpty::HasFullResolutionDepthTexture() const { return false; } int CShaderAPIEmpty::NumBooleanPixelShaderConstants() const { return 0; } int CShaderAPIEmpty::NumIntegerPixelShaderConstants() const { return 0; } ShaderAPITextureHandle_t CShaderAPIEmpty::GetStandardTextureHandle(StandardTextureId_t nID) { return 0; } bool CShaderAPIEmpty::IsStandardTextureHandleValid( StandardTextureId_t nId ) { return false; } int CShaderAPIEmpty::Unknown0( int a1, void **a2, int *a3 ) { *a2 = nullptr; *a3 = 0; return 0; } void CShaderAPIEmpty::Unknown1() { } void CShaderAPIEmpty::Unknown2( int a1, void *a2, int a3 ) { } void *CShaderAPIEmpty::Unknown3( void *a1, int a2 ) { return nullptr; } void *CShaderAPIEmpty::Unknown4( void *a1, int a2 ) { return nullptr; } void CShaderAPIEmpty::Unknown5( void **a1, void **a2, char *a3 ) { } void CShaderAPIEmpty::Unknown6( void *a1, int a2 ) { }