#define DALI_INTERNAL_SCENE_GRAPH_RENDERER_H
/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#include <dali/internal/common/blending-options.h>
#include <dali/internal/common/type-abstraction-enums.h>
#include <dali/internal/event/common/event-thread-services.h>
+#include <dali/internal/event/rendering/visual-renderer-impl.h>
#include <dali/internal/render/data-providers/render-data-provider.h>
#include <dali/internal/render/renderers/render-renderer.h>
#include <dali/internal/update/common/animatable-property.h>
class Renderer : public PropertyOwner,
public UniformMapDataProvider,
+ public RenderDataProvider,
public UniformMap::Observer,
public ConnectionChangePropagator::Observer
{
*/
void SetTextures(TextureSet* textureSet);
- /**
- * Returns current texture set object
- * @return Pointer to the texture set
- */
- const TextureSet* GetTextures() const
+ const SceneGraph::TextureSet* GetTextureSet() const
{
return mTextureSet;
}
/**
+ * @copydoc RenderDataProvider::GetTextures()
+ */
+ const Vector<Render::Texture*>* GetTextures() const override;
+
+ /**
+ * @copydoc RenderDataProvider::GetSamplers()
+ */
+ const Vector<Render::Sampler*>* GetSamplers() const override;
+
+ /**
* Set the shader for the renderer
* @param[in] shader The shader this renderer will use
*/
void SetShader(Shader* shader);
/**
- * Get the shader used by this renderer
- * @return the shader this renderer uses
+ * @copydoc RenderDataProvider::GetShader()
*/
- const Shader& GetShader() const
+ const Shader& GetShader() const override
{
return *mShader;
}
void BakeOpacity(BufferIndex updateBufferIndex, float opacity);
/**
- * Gets the opacity
- * @param[in] bufferIndex The buffer to read from.
- * @return The opacity
+ * @copydoc RenderDataProvider::GetOpacity()
*/
- float GetOpacity(BufferIndex updateBufferIndex) const;
+ float GetOpacity(BufferIndex updateBufferIndex) const override;
/**
* Sets the rendering behavior
OpacityType GetOpacityType(BufferIndex updateBufferIndex, const Node& node) const;
/**
- * Called by the TextureSet to notify to the renderer that it has changed
- */
- void TextureSetChanged();
-
- /**
- * Called by the TextureSet to notify to the renderer that it is about to be deleted
- */
- void TextureSetDeleted();
-
- /**
* Connect the object to the scene graph
*
* @param[in] sceneController The scene controller - used for sending messages to render thread
*/
void DisconnectFromSceneGraph(SceneController& sceneController, BufferIndex bufferIndex);
+ /**
+ * @copydoc RenderDataProvider::GetUniformMapDataProvider()
+ */
+ const UniformMapDataProvider& GetUniformMapDataProvider() const override
+ {
+ return *this;
+ };
+
+ /**
+ * Sets RenderCallback object
+ *
+ * @param[in] callback Valid pointer to RenderCallback object
+ */
+ void SetRenderCallback(RenderCallback* callback);
+
+ /**
+ * Returns currently set RenderCallback pointer
+ *
+ * @return RenderCallback pointer or nullptr
+ */
+ RenderCallback* GetRenderCallback()
+ {
+ return mRenderCallback;
+ }
+
public: // Implementation of ConnectionChangePropagator
/**
* @copydoc ConnectionChangePropagator::AddObserver
void SetDrawCommands(Dali::DevelRenderer::DrawCommand* pDrawCommands, uint32_t size);
-private:
+public: // For VisualProperties
/**
- * Protected constructor; See also Renderer::New()
+ * To be used only for 1st stage initialization in event thread.
*/
- Renderer();
+ void SetVisualProperties(Internal::VisualRenderer::AnimatableVisualProperties* visualProperties)
+ {
+ mVisualProperties = visualProperties;
+ }
+
+ /**
+ * May be accessed from event thread
+ */
+ const Internal::VisualRenderer::AnimatableVisualProperties* GetVisualProperties() const
+ {
+ return mVisualProperties;
+ }
+private:
/**
- * Update texture set to the render data provider
+ * Protected constructor; See also Renderer::New()
*/
- void UpdateTextureSet();
+ Renderer();
private:
CollectedUniformMap mCollectedUniformMap[2]; ///< Uniform maps collected by the renderer
- SceneController* mSceneController; ///< Used for initializing renderers
- Render::Renderer* mRenderer; ///< Raw pointer to the renderer (that's owned by RenderManager)
- TextureSet* mTextureSet; ///< The texture set this renderer uses. (Not owned)
- Render::Geometry* mGeometry; ///< The geometry this renderer uses. (Not owned)
- Shader* mShader; ///< The shader this renderer uses. (Not owned)
- RenderDataProvider* mRenderDataProvider; ///< The render data provider
- OwnerPointer<Vector4> mBlendColor; ///< The blend color for blending operation
+ SceneController* mSceneController; ///< Used for initializing renderers
+ Render::Renderer* mRenderer; ///< Raw pointer to the renderer (that's owned by RenderManager)
+ TextureSet* mTextureSet; ///< The texture set this renderer uses. (Not owned)
+ Render::Geometry* mGeometry; ///< The geometry this renderer uses. (Not owned)
+ Shader* mShader; ///< The shader this renderer uses. (Not owned)
+ VisualRenderer::AnimatableVisualProperties* mVisualProperties{nullptr}; ///< VisualProperties (optional/owned)
+ OwnerPointer<Vector4> mBlendColor; ///< The blend color for blending operation
Dali::Internal::Render::Renderer::StencilParameters mStencilParameters; ///< Struct containing all stencil related options
bool mPremultipledAlphaEnabled : 1; ///< Flag indicating whether the Pre-multiplied Alpha Blending is required
std::vector<Dali::DevelRenderer::DrawCommand> mDrawCommands;
+ Dali::RenderCallback* mRenderCallback{nullptr};
public:
AnimatableProperty<float> mOpacity; ///< The opacity value
new(slot) LocalType(&renderer, &Renderer::SetDrawCommands, pDrawCommands, size);
}
+inline void SetRenderCallbackMessage(EventThreadServices& eventThreadServices, const Renderer& renderer, Dali::RenderCallback* callback)
+{
+ using LocalType = MessageValue1<Renderer, Dali::RenderCallback*>;
+
+ // Reserve some memory inside the message queue
+ uint32_t* slot = eventThreadServices.ReserveMessageSlot(sizeof(LocalType));
+
+ new(slot) LocalType(&renderer, &Renderer::SetRenderCallback, callback);
+}
+
} // namespace SceneGraph
} // namespace Internal
} // namespace Dali