#ifndef MATERIAL_SYSTEM_H #define MATERIAL_SYSTEM_H #include "iappsystem.h" #include "tier0/platform.h" abstract_class IRenderingObject { public: virtual void SetDebugName( const char *szName ) = 0; }; abstract_class IBuffer : public IRenderingObject { public: virtual void Lock() = 0; virtual void Unlock() = 0; virtual void *Map() = 0; virtual void Unmap() = 0; }; abstract_class IVertexBuffer : public IBuffer { public: }; abstract_class IIndexBuffer : public IBuffer { public: }; abstract_class IMesh { public: }; enum EImageFormat { IMAGE_FORMAT_R8_UINT, IMAGE_FORMAT_RGBA8_UNORM, IMAGE_FORMAT_BGRA8_UNORM, IMAGE_FORMAT_RGBA8_UINT, IMAGE_FORMAT_RGBA8_SINT, IMAGE_FORMAT_RGBA16_SFLOAT, IMAGE_FORMAT_RGBA32_SFLOAT, IMAGE_FORMAT_D32_SFLOAT, }; enum EMultisampleType { MULTISAMPLE_TYPE_NONE, MULTISAMPLE_TYPE_2_SAMPLES, MULTISAMPLE_TYPE_4_SAMPLES, MULTISAMPLE_TYPE_8_SAMPLES, }; abstract_class IImage : public IRenderingObject { public: }; abstract_class IRenderContext: public IAppSystem { public: virtual void Frame( float fTime ) = 0; virtual IVertexBuffer *CreateVertexBuffer( uint32_t nSize ) = 0; virtual IIndexBuffer *CreateIndexBuffer( uint32_t nSize ) = 0; virtual IImage *CreateRenderTarget( uint32_t x, uint32_t y, EImageFormat eFormat, EMultisampleType eMultisampleType ) = 0; virtual IImage *CreateStorageImage( uint32_t x, uint32_t y, EImageFormat eFormat, EMultisampleType eMultisampleType ) = 0; virtual void DestroyBuffer( IBuffer *pBuffer ) = 0; virtual void DestroyImage( IImage *pImage ) = 0; }; abstract_class IMaterialSystem: public IAppSystem { public: virtual void Frame( float fTime ) = 0; virtual IRenderContext *GetRenderContext( void) = 0; }; IMaterialSystem *Materials( void ); #endif