|
|
|
@@ -78,18 +78,25 @@ enum ETopologyMode
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Basic rendering object
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
abstract_class IRenderingObject
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
virtual ~IRenderingObject() = 0;
|
|
|
|
|
virtual void SetDebugName( const char *szName ) = 0;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Buffer object
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
abstract_class IBuffer : public IRenderingObject
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
virtual void Lock() = 0;
|
|
|
|
|
virtual void Unlock() = 0;
|
|
|
|
|
virtual void *Map() = 0;
|
|
|
|
|
virtual void *Map() = 0;
|
|
|
|
|
virtual void Unmap() = 0;
|
|
|
|
|
|
|
|
|
|
virtual uint32_t GetSize() = 0;
|
|
|
|
@@ -98,6 +105,9 @@ virtual void *Map() = 0;
|
|
|
|
|
typedef IBuffer IVertexBuffer;
|
|
|
|
|
typedef IBuffer IIndexBuffer;
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Image object
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
abstract_class IImage : public IRenderingObject
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
@@ -107,35 +117,83 @@ public:
|
|
|
|
|
virtual EMultisampleType GetMultisampleType() = 0;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Shader object
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
abstract_class IShader
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
virtual ~IShader() = 0;
|
|
|
|
|
virtual uint32_t PSGetResourceByName( const char *szName ) = 0;
|
|
|
|
|
virtual uint32_t VSGetResourceByName( const char *szName ) = 0;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define BEGIN_SHADER(name) \
|
|
|
|
|
class CShader_##name \
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
#define END_SHADER() \
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Material handle
|
|
|
|
|
// It allows to specify resources in shaders such as textures, buffers etc.
|
|
|
|
|
//
|
|
|
|
|
// Resources must be updated prior to the frame, which can be done
|
|
|
|
|
// prior to the frame.
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
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, IBuffer *pImage ) = 0;
|
|
|
|
|
virtual ~IMaterial() = 0;
|
|
|
|
|
virtual void VSSetShaderResource( uint32_t uRegister, IRenderingObject *pResource ) = 0;
|
|
|
|
|
virtual void PSSetShaderResource( uint32_t uRegister, IRenderingObject *pResource ) = 0;
|
|
|
|
|
virtual void VSSetConstantsBuffer( uint32_t uRegister, IBuffer *pImage ) = 0;
|
|
|
|
|
virtual void PSSetConstantsBuffer( uint32_t uRegister, IBuffer *pImage ) = 0;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
abstract_class IRenderCommandList
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
virtual void ResetRendering() = 0;
|
|
|
|
|
|
|
|
|
|
virtual void SetRenderTarget( uint32_t uIndex, IImage *pImage ) = 0;
|
|
|
|
|
virtual void SetClearColor( uint32_t uIndex, float r, float g, float b, float a ) = 0;
|
|
|
|
|
|
|
|
|
|
virtual void SetDepthTarget( IImage *pDepth ) = 0;
|
|
|
|
|
virtual void SetClearDepth( float fVal ) = 0;
|
|
|
|
|
|
|
|
|
|
virtual void SetRenderResolution( uint32_t iWidth, uint32_t iHeight ) = 0;
|
|
|
|
|
|
|
|
|
|
virtual void SetScissors( uint32_t uX, uint32_t uY, uint32_t uWidth, uint32_t uHeight ) = 0;
|
|
|
|
|
virtual void SetViewport( uint32_t uX, uint32_t uY, uint32_t uWidth, uint32_t uHeight, float fMinDepth, float fMaxDepth ) = 0;
|
|
|
|
|
|
|
|
|
|
virtual void SetMaterial( IMaterial *pMaterial ) = 0;
|
|
|
|
|
virtual void SetVertexBuffer( uint32_t uBinding, IVertexBuffer *pBuffer ) = 0;
|
|
|
|
|
virtual void SetIndexBuffer( IVertexBuffer *pBuffer ) = 0;
|
|
|
|
|
virtual void DrawPrimitives( uint32_t nVertexCount, uint32_t nFirstVertex, uint32_t nInstanceCount, uint32_t nFirstInstance ) = 0;
|
|
|
|
|
virtual void DrawPrimitivesIndexed( uint32_t nIndexCount, uint32_t nFirstIndex, uint32_t nVertexOffset, uint32_t nInstanceCount, uint32_t nFirstInstance ) = 0;
|
|
|
|
|
|
|
|
|
|
virtual void ResolveImage( IImage *pOriginal, IImage *pResolved ) = 0;
|
|
|
|
|
|
|
|
|
|
virtual void StartRecording() = 0;
|
|
|
|
|
virtual void EndRecording() = 0;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Rendering context
|
|
|
|
|
//
|
|
|
|
|
// Responsible for the object handling
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
abstract_class IRenderContext: public IAppSystem
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
virtual void Frame( float fTime ) = 0;
|
|
|
|
|
|
|
|
|
|
virtual void SetOutputImage( IImage *pImage ) = 0;
|
|
|
|
|
|
|
|
|
|
virtual bool BIsOutputImageOutdated() = 0;
|
|
|
|
|
virtual uint32_t GetNewOutputImageWidth() = 0;
|
|
|
|
|
virtual uint32_t GetNewOutputImageHeight() = 0;
|
|
|
|
|
virtual EImageFormat GetNewOutputImageFormat() = 0;
|
|
|
|
|
|
|
|
|
|
virtual IVertexBuffer *CreateVertexBuffer( uint32_t nSize ) = 0;
|
|
|
|
|
virtual IIndexBuffer *CreateIndexBuffer( uint32_t nSize ) = 0;
|
|
|
|
|
virtual IBuffer *CreateConstantBuffer( uint32_t nSize ) = 0;
|
|
|
|
|
virtual IBuffer *CreateStorageBuffer( 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;
|
|
|
|
|
|
|
|
|
@@ -148,22 +206,22 @@ public:
|
|
|
|
|
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( uint32_t nVertexCount, uint32_t nFirstVertex, uint32_t nInstanceCount, uint32_t nFirstInstance ) = 0;
|
|
|
|
|
virtual void DrawPrimitivesIndexed( uint32_t nIndexCount, uint32_t nFirstIndex, uint32_t nVertexOffset, uint32_t nInstanceCount, uint32_t nFirstInstance ) = 0;
|
|
|
|
|
virtual IRenderCommandList *CreateCommandList() = 0;
|
|
|
|
|
virtual void DestroyCommandList( IRenderCommandList *pCommandList ) = 0;
|
|
|
|
|
virtual void SubmitCommandList(IRenderCommandList *pList) = 0;
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#define RENDER_CONTEXT_INTERFACE_NAME "RenderContext001"
|
|
|
|
|
#define RENDER_CONTEXT_VULKAN_INTERFACE_NAME RENDER_CONTEXT_INTERFACE_NAME
|
|
|
|
|
|
|
|
|
|
abstract_class IMaterialSystem: public IAppSystem
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
virtual void Frame( float fTime ) = 0;
|
|
|
|
|
|
|
|
|
|
virtual IRenderContext *GetRenderContext( void ) = 0;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
extern IRenderContext *g_pRenderContext;
|
|
|
|
|
IMaterialSystem *Materials( void );
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|