(GLES) Match the binded target and matched target 98/322998/2
authorEunki, Hong <eunkiki.hong@samsung.com>
Mon, 21 Apr 2025 08:05:04 +0000 (17:05 +0900)
committerEunki, Hong <eunkiki.hong@samsung.com>
Wed, 23 Apr 2025 02:19:56 +0000 (11:19 +0900)
Until now, we use GL_COPY_WRITE_BUFFER for mapping the buffers.
This target usually be used for glCopyBufferSubData.

Since we have specific destination target per each GLES::Buffer, let we
ensure the matched buffer target and generate them.

Change-Id: I6cf2a9ff41b84dd82499bdba57792da2c9aa87d6
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
dali/internal/graphics/gles-impl/gles-graphics-buffer.cpp
dali/internal/graphics/gles-impl/gles-graphics-buffer.h

index fc4cdfab1196850353f50fad715f029e106c1d2e..5abfcdb86c69075e2e2316853c993de2a401d046 100644 (file)
@@ -28,7 +28,9 @@
 namespace Dali::Graphics::GLES
 {
 Buffer::Buffer(const Graphics::BufferCreateInfo& createInfo, Graphics::EglGraphicsController& controller)
-: BufferResource(createInfo, controller)
+: BufferResource(createInfo, controller),
+  mCpuAllocated(false),
+  mTransient(false)
 {
   // Check if buffer is CPU allocated
   if(((0 | BufferUsage::UNIFORM_BUFFER) & mCreateInfo.usage) &&
@@ -47,6 +49,17 @@ Buffer::Buffer(const Graphics::BufferCreateInfo& createInfo, Graphics::EglGraphi
     mTransient = true;
   }
 
+  // Check the target enum for this buffer
+  if((0 | BufferUsage::UNIFORM_BUFFER) & mCreateInfo.usage)
+  {
+    mBufferTarget = GL_UNIFORM_BUFFER;
+  }
+  else if((0 | BufferUsage::INDEX_BUFFER) & mCreateInfo.usage)
+  {
+    mBufferTarget = GL_ELEMENT_ARRAY_BUFFER;
+  }
+  // else if((0 | BufferUsage::VERTEX_BUFFER) & mCreateInfo.usage) default enum : GL_ARRAY_BUFFER
+
   controller.AddBuffer(*this);
 }
 
@@ -155,8 +168,8 @@ void Buffer::InitializeGPUBuffer()
   {
     gl->GenBuffers(1, &mBufferId);
   }
-  context->BindBuffer(GL_ARRAY_BUFFER, mBufferId);
-  gl->BufferData(GL_ARRAY_BUFFER, GLsizeiptr(mCreateInfo.size), nullptr, GL_STATIC_DRAW);
+  context->BindBuffer(mBufferTarget, mBufferId);
+  gl->BufferData(mBufferTarget, GLsizeiptr(mCreateInfo.size), nullptr, GL_STATIC_DRAW);
 }
 
 void Buffer::DestroyResource()
index 7e26d9991258009295763bfee7f19548beb83f8f..ae538d18cc15a85c513ca7f8a1d53b40a3683d36 100644 (file)
 // EXTERNAL INCLUDES
 #include <dali/graphics-api/graphics-buffer-create-info.h>
 #include <dali/graphics-api/graphics-buffer.h>
+#include <dali/graphics-api/graphics-command-buffer.h> ///< for Graphics::ClearValue
+#include <dali/graphics-api/graphics-types.h>
 
 // INTERNAL INCLUDES
 #include "gles-graphics-resource.h"
+#include "gles-graphics-types.h" ///< for GLenum
 
 namespace Dali::Graphics
 {
@@ -78,6 +81,11 @@ public:
     return mCpuAllocated;
   }
 
+  [[nodiscard]] GLenum GetBufferTarget() const
+  {
+    return mBufferTarget;
+  }
+
 private:
   void InitializeCPUBuffer();
 
@@ -85,8 +93,9 @@ private:
 
   uint32_t mBufferId{};
   void*    mBufferPtr{nullptr}; // CPU allocated memory
-  bool     mCpuAllocated{false};
-  bool     mTransient{false};
+  GLenum   mBufferTarget{GL_ARRAY_BUFFER};
+  bool     mCpuAllocated : 1;
+  bool     mTransient : 1;
 
   uint32_t mSetForGLRecyclingCount{0u}; ///< If value is not zero, the buffer will recycle
 };