#define DALI_GRAPHICS_API_TYPES
/*
- * 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 <utility>
#include <vector>
+#include <dali/public-api/signals/callback.h>
+
namespace Dali
{
namespace Graphics
{
-class CommandBuffer;
-class Texture;
class Buffer;
-class Shader;
+class CommandBuffer;
class Framebuffer;
+class Program;
+class Shader;
+class Texture;
/**
* @brief Structure describes 2D offset
REVERSE_SUBTRACT = 2,
MIN = 3,
MAX = 4,
+ MULTIPLY = 5,
+ SCREEN = 6,
+ OVERLAY = 7,
+ DARKEN = 8,
+ LIGHTEN = 9,
+ COLOR_DODGE = 10,
+ COLOR_BURN = 11,
+ HARD_LIGHT = 12,
+ SOFT_LIGHT = 13,
+ DIFFERENCE = 14,
+ EXCLUSION = 15,
+ HUE = 16,
+ SATURATION = 17,
+ COLOR = 18,
+ LUMINOSITY = 19,
};
+const BlendOp ADVANCED_BLEND_OPTIONS_START(BlendOp::MULTIPLY);
+
/**
* @brief Compare operators
*/
};
/**
- * @brief Framebuffer state
+ * @brief Program State
+ */
+struct ProgramState
+{
+ const Program* program{nullptr};
+
+ auto& SetProgram(const Program& value)
+ {
+ program = &value;
+ return *this;
+ }
+};
+
+/**
+ * @brief Framebuffer state.
*/
struct FramebufferState
{
R64G64B64A64_UINT,
R64G64B64A64_SINT,
R64G64B64A64_SFLOAT,
+ R11G11B10_UFLOAT_PACK32,
B10G11R11_UFLOAT_PACK32,
E5B9G9R9_UFLOAT_PACK32,
D16_UNORM,
}
/**
+ * @brief Buffer property bits
+ *
+ * Use these bits to set BufferPropertiesFlags.
+ */
+enum class BufferPropertiesFlagBit : uint32_t
+{
+ CPU_ALLOCATED = 1 << 0, ///< Buffer is allocated on the CPU side
+ TRANSIENT_MEMORY = 1 << 1, ///< Buffer memory will be short-lived
+};
+
+/**
+ * @brief BufferPropetiesFlags alters behaviour of implementation
+ */
+using BufferPropertiesFlags = uint32_t;
+
+inline BufferPropertiesFlags operator|(BufferPropertiesFlags flags, BufferPropertiesFlagBit usage)
+{
+ flags |= static_cast<uint32_t>(usage);
+ return flags;
+}
+
+/**
* @brief The structure describes memory requirements of GPU resource (texture, buffer)
*/
struct MemoryRequirements
Extent2D srcExtent2D{};
uint32_t srcOffset{};
uint32_t srcSize{};
+ uint32_t srcStride{};
+ Format srcFormat{}; ///< Should match dstTexture's format, otherwise conversion may occur
};
/**
*/
struct DepthStencilAttachment
{
- // TODO:
+ enum class Usage
+ {
+ WRITE, // If no texture, will create a RenderBuffer instead
+ NONE // If no attachment/RenderBuffer required
+ };
+ Texture* depthTexture{nullptr};
+ Texture* stencilTexture{nullptr};
+ uint32_t depthLevel{0};
+ uint32_t stencilLevel{0};
+ Usage depthUsage{Usage::NONE};
+ Usage stencilUsage{Usage::NONE};
};
/**
BUFFER_CREATE_INFO_STRUCT,
COMMAND_BUFFER_CREATE_INFO_STRUCT,
FRAMEBUFFER_CREATE_INFO_STRUCT,
+ PROGRAM_CREATE_INFO_STRUCT,
PIPELINE_CREATE_INFO_STRUCT,
RENDERPASS_CREATE_INFO_STRUCT,
SAMPLER_CREATE_INFO_STRUCT,
SHADER_CREATE_INFO_STRUCT,
TEXTURE_CREATE_INFO_STRUCT,
- RENDER_TARGET_CREATE_INFO_STRUCT
+ RENDER_TARGET_CREATE_INFO_STRUCT,
+ SYNC_OBJECT_CREATE_INFO_STRUCT
+};
+
+/**
+ * @brief Enum describes load operation associated
+ * with particular framebuffer attachment
+ */
+enum class AttachmentLoadOp
+{
+ LOAD, ///< Load previous content
+ CLEAR, ///< Clear the attachment
+ DONT_CARE ///< Let driver decide
+};
+
+/**
+ * @brief Enum describes store operation associated
+ * with particular framebuffer attachment
+ */
+enum class AttachmentStoreOp
+{
+ STORE, ///< Store content (color attachemnts)
+ DONT_CARE ///< Let driver decide (depth/stencil attachemnt with no intention of reading)
+};
+
+/**
+ * @brief The structure describes the read/write
+ * modes of a single framebuffer attachment
+ *
+ * The attachment description specifies what is going to
+ * happen to the attachment at the beginning and end of the
+ * render pass.
+ *
+ * The stencil operation is separated as it may be set
+ * independent from the depth component (use loadOp, storeOp
+ * to set up the depth component and stencilLoadOp, stencilStoreOp
+ * for stencil component).
+ */
+struct AttachmentDescription
+{
+ /**
+ * @brief Sets load operation for the attachment
+ *
+ * @param value Load operation
+ * @return this structure
+ */
+ auto& SetLoadOp(AttachmentLoadOp value)
+ {
+ loadOp = value;
+ return *this;
+ }
+
+ /**
+ * @brief Sets store operation for the attachment
+ *
+ * @param value Store operation
+ * @return this structure
+ */
+ auto& SetStoreOp(AttachmentStoreOp value)
+ {
+ storeOp = value;
+ return *this;
+ }
+
+ /**
+ * @brief Sets load operation for the stencil part of attachment
+ *
+ * @param value load operation
+ * @return this structure
+ */
+ auto& SetStencilLoadOp(AttachmentLoadOp value)
+ {
+ stencilLoadOp = value;
+ return *this;
+ }
+
+ /**
+ * @brief Sets store operation for the stencil part of attachment
+ *
+ * @param value store operation
+ * @return this structure
+ */
+ auto& SetStencilStoreOp(AttachmentStoreOp value)
+ {
+ stencilStoreOp = value;
+ return *this;
+ }
+
+ AttachmentLoadOp loadOp{};
+ AttachmentStoreOp storeOp{};
+ AttachmentLoadOp stencilLoadOp{};
+ AttachmentStoreOp stencilStoreOp{};
};
/**
};
/**
+ * Surface type is just a void* to any native object.
+ */
+using Surface = void;
+
+/**
+ * @brief Enum describing preTransform of render target
+ */
+enum class RenderTargetTransformFlagBits
+{
+ TRANSFORM_IDENTITY_BIT = 0x00000001,
+ ROTATE_90_BIT = 0x00000002,
+ ROTATE_180_BIT = 0x00000004,
+ ROTATE_270_BIT = 0x00000008,
+ HORIZONTAL_MIRROR_BIT = 0x00000010,
+ HORIZONTAL_MIRROR_ROTATE_90_BIT = 0x00000020,
+ HORIZONTAL_MIRROR_ROTATE_180_BIT = 0x00000040,
+ HORIZONTAL_MIRROR_ROTATE_270_BIT = 0x00000080,
+};
+
+using RenderTargetTransformFlags = uint32_t;
+
+template<typename T>
+inline RenderTargetTransformFlags operator|(T flags, RenderTargetTransformFlagBits bit)
+{
+ return static_cast<RenderTargetTransformFlags>(flags) | static_cast<RenderTargetTransformFlags>(bit);
+}
+
+/**
* unique_ptr defined in the Graphics scope
*/
template<class T, class D = DefaultDeleter<T>>