//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // //============================================================================= #ifndef PROCEDURALTEXTUREPANEL_H #define PROCEDURALTEXTUREPANEL_H #ifdef _WIN32 #pragma once #endif #include "materialsystem/itexture.h" #include "materialsystem/MaterialSystemUtil.h" #include "vgui_controls/EditablePanel.h" //----------------------------------------------------------------------------- // Forward declarations //----------------------------------------------------------------------------- struct BGRA8888_t; //----------------------------------------------------------------------------- // // Procedural texture image panel // //----------------------------------------------------------------------------- class CProceduralTexturePanel : public vgui::EditablePanel, public ITextureRegenerator { DECLARE_CLASS_SIMPLE( CProceduralTexturePanel, vgui::EditablePanel ); public: // constructor CProceduralTexturePanel( vgui::Panel *pParent, const char *pName ); ~CProceduralTexturePanel(); // Methods of ITextureRegenerator virtual void Release() {} virtual void RegenerateTextureBits( ITexture *pTexture, IVTFTexture *pVTFTexture, Rect_t *pRect ); // initialization, shutdown virtual bool Init( int nWidth, int nHeight, bool bAllocateImageBuffer ); virtual void Shutdown(); // Returns the image buffer + dimensions BGRA8888_t *GetImageBuffer(); int GetImageWidth() const; int GetImageHeight() const; // Redownloads the procedural texture void DownloadTexture(); // Sets the rectangle to paint. Use null to fill the entire panel void SetPaintRect( const Rect_t *pPaintRect = NULL ); // Sets the texcoords to use with the procedural texture void SetTextureSubRect( const Rect_t &subRect ); // Maintain proportions when drawing void MaintainProportions( bool bEnable ); virtual void Paint( void ); virtual void PaintBackground( void ) {} private: void CleanUp(); protected: // Image buffer BGRA8888_t *m_pImageBuffer; int m_nWidth; int m_nHeight; // Paint rectangle Rect_t m_PaintRect; // Texture coordinate rectangle Rect_t m_TextureSubRect; CTextureReference m_ProceduralTexture; CMaterialReference m_ProceduralMaterial; int m_nTextureID; bool m_bMaintainProportions; bool m_bUsePaintRect; }; #endif // PROCEDURALTEXTUREPANEL_H