summaryrefslogtreecommitdiff
path: root/materialsystem/shaderapidx9/imeshdx8.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /materialsystem/shaderapidx9/imeshdx8.h
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'materialsystem/shaderapidx9/imeshdx8.h')
-rw-r--r--materialsystem/shaderapidx9/imeshdx8.h98
1 files changed, 98 insertions, 0 deletions
diff --git a/materialsystem/shaderapidx9/imeshdx8.h b/materialsystem/shaderapidx9/imeshdx8.h
new file mode 100644
index 0000000..96697a7
--- /dev/null
+++ b/materialsystem/shaderapidx9/imeshdx8.h
@@ -0,0 +1,98 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//
+//===========================================================================//
+
+#ifndef IMESHDX8_H
+#define IMESHDX8_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+#include "meshbase.h"
+#include "shaderapi/ishaderapi.h"
+
+
+abstract_class IMeshMgr
+{
+public:
+ // Initialize, shutdown
+ virtual void Init() = 0;
+ virtual void Shutdown() = 0;
+
+ // Task switch...
+ virtual void ReleaseBuffers() = 0;
+ virtual void RestoreBuffers() = 0;
+
+ // Releases all dynamic vertex buffers
+ virtual void DestroyVertexBuffers() = 0;
+
+ // Flushes the dynamic mesh. Should be called when state changes
+ virtual void Flush() = 0;
+
+ // Discards the dynamic vertex and index buffer
+ virtual void DiscardVertexBuffers() = 0;
+
+ // Creates, destroys static meshes
+ virtual IMesh* CreateStaticMesh( VertexFormat_t vertexFormat, const char *pTextureBudgetGroup, IMaterial *pMaterial = NULL ) = 0;
+ virtual void DestroyStaticMesh( IMesh* pMesh ) = 0;
+
+ // Gets at the dynamic mesh
+ virtual IMesh* GetDynamicMesh( IMaterial* pMaterial, VertexFormat_t vertexFormat, int nHWSkinBoneCount, bool buffered = true,
+ IMesh* pVertexOverride = 0, IMesh* pIndexOverride = 0) = 0;
+
+// ------------ New Vertex/Index Buffer interface ----------------------------
+ // Do we need support for bForceTempMesh and bSoftwareVertexShader?
+ // I don't think we use bSoftwareVertexShader anymore. .need to look into bForceTempMesh.
+ virtual IVertexBuffer *CreateVertexBuffer( ShaderBufferType_t type, VertexFormat_t fmt, int nVertexCount, const char *pBudgetGroup ) = 0;
+ virtual IIndexBuffer *CreateIndexBuffer( ShaderBufferType_t indexBufferType, MaterialIndexFormat_t fmt, int nIndexCount, const char *pBudgetGroup ) = 0;
+ virtual void DestroyVertexBuffer( IVertexBuffer * ) = 0;
+ virtual void DestroyIndexBuffer( IIndexBuffer * ) = 0;
+ // Do we need to specify the stream here in the case of locking multiple dynamic VBs on different streams?
+ virtual IVertexBuffer *GetDynamicVertexBuffer( int streamID, VertexFormat_t vertexFormat, bool bBuffered = true ) = 0;
+ virtual IIndexBuffer *GetDynamicIndexBuffer( MaterialIndexFormat_t fmt, bool bBuffered = true ) = 0;
+ virtual void BindVertexBuffer( int streamID, IVertexBuffer *pVertexBuffer, int nOffsetInBytes, int nFirstVertex, int nVertexCount, VertexFormat_t fmt, int nRepetitions = 1 ) = 0;
+ virtual void BindIndexBuffer( IIndexBuffer *pIndexBuffer, int nOffsetInBytes ) = 0;
+ virtual void Draw( MaterialPrimitiveType_t primitiveType, int nFirstIndex, int nIndexCount ) = 0;
+// ------------ End ----------------------------
+ virtual VertexFormat_t GetCurrentVertexFormat( void ) const = 0;
+ virtual void RenderPassWithVertexAndIndexBuffers( void ) = 0;
+
+ // Computes the vertex format
+ virtual VertexFormat_t ComputeVertexFormat( unsigned int flags,
+ int numTexCoords, int* pTexCoordDimensions, int numBoneWeights,
+ int userDataSize ) const = 0;
+
+ // Returns the number of buffers...
+ virtual int BufferCount() const = 0;
+
+ // Use fat vertices (for tools)
+ virtual void UseFatVertices( bool bUseFat ) = 0;
+
+ // Returns the number of vertices + indices we can render using the dynamic mesh
+ // Passing true in the second parameter will return the max # of vertices + indices
+ // we can use before a flush is provoked and may return different values
+ // if called multiple times in succession.
+ // Passing false into the second parameter will return
+ // the maximum possible vertices + indices that can be rendered in a single batch
+ virtual void GetMaxToRender( IMesh *pMesh, bool bMaxUntilFlush, int *pMaxVerts, int *pMaxIndices ) = 0;
+
+ // Returns the max number of vertices we can render for a given material
+ virtual int GetMaxVerticesToRender( IMaterial *pMaterial ) = 0;
+ virtual int GetMaxIndicesToRender( ) = 0;
+ virtual IMesh *GetFlexMesh() = 0;
+
+ virtual void ComputeVertexDescription( unsigned char* pBuffer, VertexFormat_t vertexFormat, MeshDesc_t& desc ) const = 0;
+
+ virtual IVertexBuffer *GetDynamicVertexBuffer( IMaterial *pMaterial, bool buffered = true ) = 0;
+ virtual IIndexBuffer *GetDynamicIndexBuffer( IMaterial *pMaterial, bool buffered = true ) = 0;
+
+ virtual void MarkUnusedVertexFields( unsigned int nFlags, int nTexCoordCount, bool *pUnusedTexCoords ) = 0;
+};
+
+#endif // IMESHDX8_H