89 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
// NoesisGUI - http://www.noesisengine.com
 | 
						|
// Copyright (c) 2013 Noesis Technologies S.L. All Rights Reserved.
 | 
						|
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
 | 
						|
#ifndef __GUI_DYNAMICTEXTURESOURCE_H__
 | 
						|
#define __GUI_DYNAMICTEXTURESOURCE_H__
 | 
						|
 | 
						|
 | 
						|
#include <NsCore/Noesis.h>
 | 
						|
#include <NsGui/CoreApi.h>
 | 
						|
#include <NsGui/ImageSource.h>
 | 
						|
 | 
						|
 | 
						|
namespace Noesis
 | 
						|
{
 | 
						|
 | 
						|
class Texture;
 | 
						|
class RenderDevice;
 | 
						|
 | 
						|
NS_WARNING_PUSH
 | 
						|
NS_MSVC_WARNING_DISABLE(4251 4275)
 | 
						|
 | 
						|
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
/// Defines an ImageSource implementation based on a dynamic texture.
 | 
						|
///
 | 
						|
/// Dynamic textures are regenerated per frame. On each frame, this class will invoke the given
 | 
						|
/// callback to get a new texture. The callback is always invoked from the render thread.
 | 
						|
///
 | 
						|
/// This source is appropriate for dynamic content like Video.
 | 
						|
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
class NS_GUI_CORE_API DynamicTextureSource: public ImageSource
 | 
						|
{
 | 
						|
public:
 | 
						|
    typedef Texture* (*TextureRenderCallback)(RenderDevice* device, void* user);
 | 
						|
    DynamicTextureSource(uint32_t width, uint32_t height, TextureRenderCallback callback, void* user);
 | 
						|
 | 
						|
    ~DynamicTextureSource();
 | 
						|
 | 
						|
    /// Resizes the dynamic texture
 | 
						|
    void Resize(uint32_t width, uint32_t height);
 | 
						|
 | 
						|
    /// Gets the width of the texture in pixels
 | 
						|
    /// \prop
 | 
						|
    uint32_t GetPixelWidth() const;
 | 
						|
 | 
						|
    /// Gets the height of the texture in pixels
 | 
						|
    /// \prop
 | 
						|
    uint32_t GetPixelHeight() const;
 | 
						|
 | 
						|
private:
 | 
						|
    /// From IRenderProxyCreator
 | 
						|
    //@{
 | 
						|
    void CreateRenderProxy(RenderTreeUpdater& updater, uint32_t proxyIndex) override;
 | 
						|
    void UpdateRenderProxy(RenderTreeUpdater& updater, uint32_t proxyIndex) override;
 | 
						|
    void UnregisterRenderer(ViewId viewId) override;
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// From Freezable
 | 
						|
    //@{
 | 
						|
    Ptr<Freezable> CreateInstanceCore() const override;
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// From ImageSource
 | 
						|
    //@{
 | 
						|
    float GetWidthCore() const override;
 | 
						|
    float GetHeightCore() const override;
 | 
						|
    //@}
 | 
						|
 | 
						|
private:
 | 
						|
    ProxyFlags mUpdateFlags;
 | 
						|
 | 
						|
    TextureRenderCallback mCallback;
 | 
						|
    void* mUser;
 | 
						|
 | 
						|
    uint32_t mPixelWidth;
 | 
						|
    uint32_t mPixelHeight;
 | 
						|
 | 
						|
    NS_DECLARE_REFLECTION(DynamicTextureSource, ImageSource)
 | 
						|
};
 | 
						|
 | 
						|
NS_WARNING_POP
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
#endif
 |