+class Node;
+class Renderer;
+class TextureSet;
+
+/**
+ * Structure to store partial rendering cache data
+ */
+struct PartialRenderingCacheInfo
+{
+ Node* node{nullptr}; /// Node associated with the entry
+ const Renderer* renderer{nullptr}; /// Renderer object
+ const TextureSet* textureSet{nullptr}; /// TextureSet object
+ Matrix matrix{}; /// Model-view matrix
+ Vector4 color{}; /// Color
+ Vector3 size{}; /// Size
+ Vector3 updatedSize{}; /// Updated size
+ bool isOpaque{}; /// Opacity state
+ uint32_t depthIndex{0u}; /// Depth index
+};
+
+/**
+ * Structure contains partial rendering data used in order to determine
+ * whether anything has changed and node has to be updated
+ */
+struct PartialRenderingNodeData
+{
+ /**
+ * @brief Retrieves current PartialDataCacheInfo structure
+ * @return Current PartialDataCacheInfo structure
+ */
+ PartialRenderingCacheInfo& GetCurrentCacheInfo()
+ {
+ return mData[mCurrentIndex];
+ }
+
+ /**
+ * @brief Tests whether cache changed since last frame
+ * @return True if changed
+ */
+ bool IsUpdated()
+ {
+ return 0 != memcmp( &mData[0], &mData[1], sizeof(PartialRenderingCacheInfo) );
+ }
+
+ /**
+ * @brief Swaps cache buffers
+ */
+ void SwapBuffers()
+ {
+ mCurrentIndex = static_cast<uint8_t>((~mCurrentIndex) & 1);
+ }
+
+ PartialRenderingCacheInfo mData[2u]; /// Double-buffered data
+ uint8_t mCurrentIndex {0u}; /// Current buffer index
+};
+
+/**
+ * An interface to provide partial rendering data
+ */
+class PartialRenderingDataProvider
+{
+public:
+
+ /**
+ * Constructor
+ */
+ PartialRenderingDataProvider() = default;
+
+ /**
+ * Destructor
+ */
+ virtual ~PartialRenderingDataProvider() = default;
+
+ /**
+ * @brief Returns partial rendering data associated with the node.
+ * @return A valid pointer to the partial rendering data or nullptr
+ */
+ PartialRenderingNodeData& GetPartialRenderingData()
+ {
+ return mPartialRenderingData;
+ }
+
+protected:
+
+ PartialRenderingNodeData mPartialRenderingData;
+};
+