#ifndef WORLD_RENDER_H #define WORLD_RENDER_H #include "tier0/platform.h" #include "gamesystem.h" #include "trig.h" #include "materialsystem/imaterialsystem.h" #include "materials.h" #include "cglm/mat4.h" abstract_class IViewport { public: virtual void UpdateResolution( uint32_t uX, uint32_t uY ) = 0; virtual IImage *GetRenderImage() = 0; virtual IImage *GetDepthImage() = 0; virtual IImage *GetNormalImage() = 0; virtual void SetFOV( float f ) = 0; virtual void SetPosition( Vector v ) = 0; virtual void SetRotation( Quat q ) = 0; virtual uint32_t GetWidth() = 0; virtual uint32_t GetHeight() = 0; }; abstract_class IMesh { public: virtual void SetVertices( IVertexBuffer *pBuffer ) = 0; virtual void SetIndicies( IIndexBuffer *pBuffer, EIndexFormat eIndexFormat ) = 0; virtual void SetMaterial( IMaterial *pMaterial ) = 0; }; abstract_class IPointLight { public: virtual void SetColor( Vector vColor ) = 0; virtual void SetRadius( Vector vColor ) = 0; virtual void SetPosition( Vector vPosition ) = 0; }; abstract_class IMeshInstance { public: virtual void SetPosition( Vector vPosition ) = 0; virtual void SetRotation( Quat vRotation ) = 0; virtual void SetScale( Vector vScale ) = 0; virtual void SetMaterial( CBaseMaterial *pMaterial ) = 0; }; abstract_class IWorldRenderer: public IGameSystem { public: virtual IMesh *CreateMesh( const char *szName ) = 0; virtual IMeshInstance *CreateInstance( IMesh *pMesh ) = 0; virtual void DestroyMeshInstance( IMesh *pMesh, IMeshInstance *pInstance ) = 0; virtual void DestroyMesh( IMesh *pMesh ) = 0; virtual IViewport *CreateViewport( uint32_t uX, uint32_t uY ) = 0; virtual void DestroyViewport( IViewport *pViewport ) = 0; virtual void ConfigureShader( IShader *pShader ) = 0; virtual ITextureArray *GetTextures() = 0; }; extern IWorldRenderer *g_pWorldRenderer; #endif