122 lines
2.7 KiB
C++
122 lines
2.7 KiB
C++
#ifndef MATERIAL_SYSTEM_H
|
|
#define MATERIAL_SYSTEM_H
|
|
|
|
#include "tier2/iappsystem.h"
|
|
#include "tier0/platform.h"
|
|
|
|
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,
|
|
|
|
IMAGE_FORMAT_WINDOW,
|
|
};
|
|
|
|
enum EImageType
|
|
{
|
|
IMAGE_TYPE_1D,
|
|
IMAGE_TYPE_2D,
|
|
IMAGE_TYPE_3D,
|
|
IMAGE_TYPE_CUBE,
|
|
IMAGE_TYPE_1D_ARRAY,
|
|
IMAGE_TYPE_2D_ARRAY,
|
|
IMAGE_TYPE_CUBE_ARRAY,
|
|
};
|
|
|
|
enum EMultisampleType
|
|
{
|
|
MULTISAMPLE_TYPE_NONE,
|
|
MULTISAMPLE_TYPE_2_SAMPLES,
|
|
MULTISAMPLE_TYPE_4_SAMPLES,
|
|
MULTISAMPLE_TYPE_8_SAMPLES,
|
|
};
|
|
|
|
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;
|
|
|
|
virtual uint32_t GetSize() = 0;
|
|
};
|
|
|
|
typedef IBuffer IVertexBuffer;
|
|
typedef IBuffer IIndexBuffer;
|
|
|
|
abstract_class IImage : public IRenderingObject
|
|
{
|
|
public:
|
|
virtual uint32_t GetImageWidth() = 0;
|
|
virtual uint32_t GetImageHeight() = 0;
|
|
virtual EImageFormat GetImageFormat() = 0;
|
|
virtual EMultisampleType GetMultisampleType() = 0;
|
|
};
|
|
|
|
abstract_class IShader
|
|
{
|
|
public:
|
|
};
|
|
|
|
abstract_class IMaterial
|
|
{
|
|
public:
|
|
virtual void SetConstants( void *pData ) = 0;
|
|
|
|
virtual void SetTexture( const char *szName, IImage *pImage ) = 0;
|
|
virtual void SetBuffer( const char *szName, IImage *pImage ) = 0;
|
|
};
|
|
|
|
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;
|
|
|
|
virtual IShader *CreateShader( const char *szName );
|
|
virtual void DestroyShader( IShader *pMaterial ) = 0;
|
|
|
|
virtual IMaterial *CreateMaterial( IShader *pShader ) = 0;
|
|
virtual void DestroyMaterial( IMaterial *pMaterial ) = 0;
|
|
|
|
virtual void SetMaterial( IMaterial *pMaterial ) = 0;
|
|
virtual void SetVertexBuffer( IVertexBuffer *pBuffer ) = 0;
|
|
virtual void SetIndexBuffer( IVertexBuffer *pBuffer ) = 0;
|
|
virtual void DrawPrimitives( ) = 0;
|
|
virtual void DrawPrimitivesIndexed( ) = 0;
|
|
};
|
|
|
|
|
|
abstract_class IMaterialSystem: public IAppSystem
|
|
{
|
|
public:
|
|
virtual void Frame( float fTime ) = 0;
|
|
|
|
virtual IRenderContext *GetRenderContext( void ) = 0;
|
|
};
|
|
|
|
IMaterialSystem *Materials( void );
|
|
|
|
#endif
|