void PropertyBuffer::SetData( const void* data, std::size_t size )
{
- DALI_ASSERT_DEBUG( mFormat.Count() && "Format must be set before setting the data." );
+ mSize = size; // size is the number of elements
- mSize = size;
+ unsigned int bufferSize = mBufferFormatSize * mSize;
- // Check if format and size have been set yet
- if( mBufferFormat != NULL )
- {
- unsigned int bufferSize = mBufferFormat->size * mSize;
- mBuffer.Resize( bufferSize );
- }
+ // create a new DALi vector to store the buffer data
+ // the heap allocated vector will end up being owned by Render::PropertyBuffer
+ Dali::Vector<char>* bufferCopy = new Dali::Vector<char>();
+ bufferCopy->Resize( bufferSize );
+ // copy the data
const char* source = static_cast<const char*>( data );
- std::copy( source, source + mBuffer.Size(), &mBuffer[0] );
+ char *destination = &((*bufferCopy)[0]);
+ std::copy( source, source + bufferSize, destination );
- SceneGraph::SetPropertyBufferData( mEventThreadServices.GetUpdateManager(), *mRenderObject, new Dali::Vector<char>( mBuffer ), mSize );
+ // Ownership of the bufferCopy is passed to the message ( uses an owner pointer )
+ SceneGraph::SetPropertyBufferData( mEventThreadServices.GetUpdateManager(), *mRenderObject, bufferCopy, mSize );
}
std::size_t PropertyBuffer::GetSize() const
PropertyBuffer::PropertyBuffer()
: mEventThreadServices( *Stage::GetCurrent() ),
mRenderObject( NULL ),
- mBufferFormat( NULL ),
+ mBufferFormatSize( 0 ),
mSize( 0 )
{
}
mRenderObject = new Render::PropertyBuffer();
SceneGraph::AddPropertyBuffer(mEventThreadServices.GetUpdateManager(), *mRenderObject );
- mFormat = formatMap;
-
- size_t numComponents = mFormat.Count();
+ size_t numComponents = formatMap.Count();
// Create the format
- DALI_ASSERT_DEBUG( mBufferFormat == NULL && "PropertyFormat should not be set yet" );
Render::PropertyBuffer::Format* format = new Render::PropertyBuffer::Format();
format->components.resize( numComponents );
for( size_t i = 0u; i < numComponents; ++i )
{
- KeyValuePair component = mFormat.GetKeyValue( i );
+ KeyValuePair component = formatMap.GetKeyValue( i );
// Get the name
if(component.first.type == Property::Key::INDEX)
// Set the format size
format->size = currentAlignment;
- mBufferFormat = format;
+ mBufferFormatSize = format->size;
SceneGraph::SetPropertyBufferFormat(mEventThreadServices.GetUpdateManager(), *mRenderObject, format );
}
private: // data
EventThreadServices& mEventThreadServices; ///<Used to send messages to the render thread via update thread
- Render::PropertyBuffer* mRenderObject; ///<Render side object
-
- Property::Map mFormat; ///< Format of the property buffer
- const Render::PropertyBuffer::Format* mBufferFormat; ///< Metadata for the format of the property buffer
+ Render::PropertyBuffer* mRenderObject; ///<Render side object
+ unsigned int mBufferFormatSize;
unsigned int mSize; ///< Number of elements in the buffer
- Dali::Vector< char > mBuffer; // Data of the property-buffer
};
/**
// INTERNAL INCLUDES
#include <dali/internal/render/common/render-manager.h>
#include <dali/internal/render/queue/render-queue.h>
+#include <dali/internal/render/renderers/render-renderer.h>
#include <dali/internal/common/message.h>
namespace Dali
void RenderMessageDispatcher::AddRenderer( Render::Renderer& renderer )
{
- typedef MessageValue1< RenderManager, Render::Renderer* > DerivedType;
+ // Message has ownership of renderer while in transit from update -> render
+ typedef MessageValue1< RenderManager, OwnerPointer< Render::Renderer > > DerivedType;
// Reserve some memory inside the render queue
unsigned int* slot = mRenderQueue.ReserveMessageSlot( mBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
void UpdateManager::AddSampler( Render::Sampler* sampler )
{
- typedef MessageValue1< RenderManager, Render::Sampler* > DerivedType;
+ // Message has ownership of Sampler while in transit from update to render
+ typedef MessageValue1< RenderManager, OwnerPointer< Render::Sampler > > DerivedType;
// Reserve some memory inside the render queue
unsigned int* slot = mImpl->renderQueue.ReserveMessageSlot( mSceneGraphBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
void UpdateManager::AddPropertyBuffer( Render::PropertyBuffer* propertyBuffer )
{
- typedef MessageValue1< RenderManager, Render::PropertyBuffer* > DerivedType;
+ // Message has ownership of format while in transit from update -> render
+ typedef MessageValue1< RenderManager, OwnerPointer< Render::PropertyBuffer > > DerivedType;
// Reserve some memory inside the render queue
unsigned int* slot = mImpl->renderQueue.ReserveMessageSlot( mSceneGraphBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
void UpdateManager::SetPropertyBufferFormat(Render::PropertyBuffer* propertyBuffer, Render::PropertyBuffer::Format* format )
{
- typedef MessageValue2< RenderManager, Render::PropertyBuffer*, Render::PropertyBuffer::Format* > DerivedType;
+ // Message has ownership of format while in transit from update -> render
+ typedef MessageValue2< RenderManager, Render::PropertyBuffer*, OwnerPointer< Render::PropertyBuffer::Format > > DerivedType;
// Reserve some memory inside the render queue
unsigned int* slot = mImpl->renderQueue.ReserveMessageSlot( mSceneGraphBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
void UpdateManager::SetPropertyBufferData( Render::PropertyBuffer* propertyBuffer, Dali::Vector<char>* data, size_t size )
{
- typedef MessageValue3< RenderManager, Render::PropertyBuffer*, Dali::Vector<char>*, size_t > DerivedType;
+ // Message has ownership of format while in transit from update -> render
+ typedef MessageValue3< RenderManager, Render::PropertyBuffer*, OwnerPointer< Dali::Vector<char> >, size_t > DerivedType;
// Reserve some memory inside the render queue
unsigned int* slot = mImpl->renderQueue.ReserveMessageSlot( mSceneGraphBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
void UpdateManager::AddGeometry( Render::Geometry* geometry )
{
- typedef MessageValue1< RenderManager, Render::Geometry* > DerivedType;
+ // Message has ownership of format while in transit from update -> render
+ typedef MessageValue1< RenderManager, OwnerPointer< Render::Geometry > > DerivedType;
// Reserve some memory inside the render queue
unsigned int* slot = mImpl->renderQueue.ReserveMessageSlot( mSceneGraphBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
void UpdateManager::AddTexture( Render::Texture* texture )
{
- typedef MessageValue1< RenderManager, Render::Texture* > DerivedType;
+ // Message has ownership of Texture while in transit from update -> render
+ typedef MessageValue1< RenderManager, OwnerPointer< Render::Texture > > DerivedType;
// Reserve some memory inside the render queue
unsigned int* slot = mImpl->renderQueue.ReserveMessageSlot( mSceneGraphBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
#include <dali/internal/update/nodes/node.h>
#include <dali/internal/update/nodes/scene-graph-layer.h>
#include <dali/internal/update/rendering/scene-graph-renderer.h>
+#include <dali/internal/update/gestures/scene-graph-pan-gesture.h>
+#include <dali/internal/update/render-tasks/scene-graph-camera.h>
#include <dali/internal/render/shaders/scene-graph-shader.h>
#include <dali/internal/render/renderers/render-property-buffer.h>
#include <dali/internal/event/rendering/texture-impl.h>
class Animation;
class DiscardQueue;
-class PanGesture;
class RenderManager;
class RenderTaskList;
class RenderTaskProcessor;
class RenderQueue;
class PropertyBuffer;
class TextureSet;
-class Camera;
/**
* UpdateManager maintains a scene graph i.e. a tree of nodes as well as
inline void AddCameraMessage( UpdateManager& manager, const Camera* constCamera )
{
- typedef MessageValue1< UpdateManager, Camera* > LocalType;
+ // Message has ownership of Camera while in transit from event -> update
+ typedef MessageValue1< UpdateManager, OwnerPointer< Camera > > LocalType;
Camera* camera = const_cast<Camera*>( constCamera );
// Reserve some memory inside the message queue
inline void AddObjectMessage( UpdateManager& manager, PropertyOwner* object )
{
+ // Message has ownership of object while in transit from event -> update
typedef MessageValue1< UpdateManager, OwnerPointer<PropertyOwner> > LocalType;
// Reserve some memory inside the message queue
inline void AddPropertyNotificationMessage( UpdateManager& manager, PropertyNotification* propertyNotification )
{
- typedef MessageValue1< UpdateManager, PropertyNotification* > LocalType;
+ // Message has ownership of PropertyNotification while in transit from event -> update
+ typedef MessageValue1< UpdateManager, OwnerPointer< PropertyNotification > > LocalType;
// Reserve some memory inside the message queue
unsigned int* slot = manager.ReserveMessageSlot( sizeof( LocalType ) );
inline void AddGestureMessage( UpdateManager& manager, PanGesture* gesture )
{
- typedef MessageValue1< UpdateManager, PanGesture* > LocalType;
+ // Message has ownership of PanGesture while in transit from event -> update
+ typedef MessageValue1< UpdateManager, OwnerPointer< PanGesture > > LocalType;
// Reserve some memory inside the message queue
unsigned int* slot = manager.ReserveMessageSlot( sizeof( LocalType ) );
inline void AddSamplerMessage( UpdateManager& manager, Render::Sampler& sampler )
{
- typedef MessageValue1< UpdateManager, Render::Sampler* > LocalType;
+ // Message has ownership of Sampler while in transit from event -> update
+ typedef MessageValue1< UpdateManager, OwnerPointer< Render::Sampler > > LocalType;
// Reserve some memory inside the message queue
unsigned int* slot = manager.ReserveMessageSlot( sizeof( LocalType ) );
inline void AddPropertyBuffer( UpdateManager& manager, Render::PropertyBuffer& propertyBuffer )
{
- typedef MessageValue1< UpdateManager, Render::PropertyBuffer* > LocalType;
+ // Message has ownership of propertyBuffer while in transit from event -> update
+ typedef MessageValue1< UpdateManager, OwnerPointer< Render::PropertyBuffer > > LocalType;
// Reserve some memory inside the message queue
unsigned int* slot = manager.ReserveMessageSlot( sizeof( LocalType ) );
inline void SetPropertyBufferFormat( UpdateManager& manager, Render::PropertyBuffer& propertyBuffer, Render::PropertyBuffer::Format* format )
{
- typedef MessageValue2< UpdateManager, Render::PropertyBuffer*, Render::PropertyBuffer::Format* > LocalType;
+ // Message has ownership of PropertyBuffer::Format while in transit from event -> update
+ typedef MessageValue2< UpdateManager, Render::PropertyBuffer*, OwnerPointer< Render::PropertyBuffer::Format> > LocalType;
// Reserve some memory inside the message queue
unsigned int* slot = manager.ReserveMessageSlot( sizeof( LocalType ) );
inline void SetPropertyBufferData( UpdateManager& manager, Render::PropertyBuffer& propertyBuffer, Vector<char>* data, size_t size )
{
- typedef MessageValue3< UpdateManager, Render::PropertyBuffer*, Vector<char>*, size_t > LocalType;
+ // Message has ownership of PropertyBuffer data while in transit from event -> update
+ typedef MessageValue3< UpdateManager, Render::PropertyBuffer*, OwnerPointer< Vector<char> >, size_t > LocalType;
// Reserve some memory inside the message queue
unsigned int* slot = manager.ReserveMessageSlot( sizeof( LocalType ) );
inline void AddGeometry( UpdateManager& manager, Render::Geometry& geometry )
{
- typedef MessageValue1< UpdateManager, Render::Geometry* > LocalType;
+ // Message has ownership of Geometry while in transit from event -> update
+ typedef MessageValue1< UpdateManager, OwnerPointer< Render::Geometry > > LocalType;
// Reserve some memory inside the message queue
unsigned int* slot = manager.ReserveMessageSlot( sizeof( LocalType ) );
inline void AddTexture( UpdateManager& manager, Render::Texture& texture )
{
- typedef MessageValue1< UpdateManager, Render::Texture* > LocalType;
+ // Message has ownership of Texture while in transit from event -> update
+ typedef MessageValue1< UpdateManager, OwnerPointer< Render::Texture > > LocalType;
// Reserve some memory inside the message queue
unsigned int* slot = manager.ReserveMessageSlot( sizeof( LocalType ) );
inline void AddTaskMessage( EventThreadServices& eventThreadServices, RenderTaskList& list, RenderTask& task )
{
- typedef MessageValue1< RenderTaskList, RenderTask* > LocalType;
+ // Message has ownership of the RenderTask while in transit from event -> update
+ typedef MessageValue1< RenderTaskList, OwnerPointer< RenderTask > > LocalType;
// Reserve some memory inside the message queue
unsigned int* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) );