Merge "Support multiple window rendering" into devel/master
[platform/core/uifw/dali-core.git] / dali / internal / render / renderers / render-property-buffer.cpp
index df617d5..5976020 100644 (file)
@@ -1,3 +1,19 @@
+/*
+ * Copyright (c) 2018 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
 
 #include <dali/internal/render/renderers/render-property-buffer.h>
 #include <dali/internal/event/common/property-buffer-impl.h>  // Dali::Internal::PropertyBuffer
 namespace
 {
 
-using namespace Dali;
 using Dali::Property;
 using Dali::Internal::PropertyImplementationType;
 
-Dali::GLenum GetPropertyImplementationGlType( Property::Type& propertyType )
+Dali::GLenum GetPropertyImplementationGlType( Property::Type propertyType )
 {
   Dali::GLenum type = GL_BYTE;
 
@@ -19,6 +34,7 @@ Dali::GLenum GetPropertyImplementationGlType( Property::Type& propertyType )
     case Property::STRING:
     case Property::ARRAY:
     case Property::MAP:
+    case Property::EXTENTS:
     case Property::RECTANGLE:
     case Property::ROTATION:
     {
@@ -50,9 +66,9 @@ Dali::GLenum GetPropertyImplementationGlType( Property::Type& propertyType )
   return type;
 }
 
-size_t GetPropertyImplementationGlSize( Property::Type& propertyType )
+Dali::GLint GetPropertyImplementationGlSize( Property::Type propertyType )
 {
-  size_t size = 1u;
+  Dali::GLint size = 1u;
 
   switch( propertyType )
   {
@@ -60,6 +76,7 @@ size_t GetPropertyImplementationGlSize( Property::Type& propertyType )
     case Property::STRING:
     case Property::ARRAY:
     case Property::MAP:
+    case Property::EXTENTS:
     case Property::RECTANGLE:
     case Property::ROTATION:
     {
@@ -118,20 +135,14 @@ void PropertyBuffer::SetFormat( PropertyBuffer::Format* format )
   mDataChanged = true;
 }
 
-void PropertyBuffer::SetData( Dali::Vector<char>* data )
+void PropertyBuffer::SetData( Dali::Vector<uint8_t>* data, uint32_t size )
 {
   mData = data;
-  mDataChanged = true;
-}
-
-void PropertyBuffer::SetSize( unsigned int size )
-{
   mSize = size;
   mDataChanged = true;
 }
 
-
-bool PropertyBuffer::Update( Context& context, bool isIndexBuffer )
+bool PropertyBuffer::Update( Context& context )
 {
   if( !mData || !mFormat || !mSize )
   {
@@ -149,30 +160,7 @@ bool PropertyBuffer::Update( Context& context, bool isIndexBuffer )
     if ( mGpuBuffer )
     {
       DALI_ASSERT_DEBUG( mSize && "No data in the property buffer!" );
-
-      const void *data = &((*mData)[0]);
-
-      // Index buffer needs to be unsigned short which is not supported by the property system
-      Vector<unsigned short> ushortData;
-      if( isIndexBuffer )
-      {
-        ushortData.Resize(mSize);
-        const unsigned int* unsignedData = static_cast<const unsigned int*>(data);
-        for( unsigned int i = 0; i < mSize; ++i )
-        {
-          ushortData[i] = unsignedData[i];
-        }
-        data = &(ushortData[0]);
-      }
-
-      GpuBuffer::Target target = GpuBuffer::ARRAY_BUFFER;
-      if(isIndexBuffer)
-      {
-        target = GpuBuffer::ELEMENT_ARRAY_BUFFER;
-      }
-
-      mGpuBuffer->UpdateDataBuffer( GetDataSize(), data, GpuBuffer::STATIC_DRAW, target );
-
+      mGpuBuffer->UpdateDataBuffer( context, GetDataSize(), &((*mData)[0]), GpuBuffer::STATIC_DRAW, GpuBuffer::ARRAY_BUFFER );
     }
 
     mDataChanged = false;
@@ -181,43 +169,41 @@ bool PropertyBuffer::Update( Context& context, bool isIndexBuffer )
   return true;
 }
 
-void PropertyBuffer::BindBuffer(GpuBuffer::Target target)
+void PropertyBuffer::BindBuffer( Context& context, GpuBuffer::Target target )
 {
   if(mGpuBuffer)
   {
-    mGpuBuffer->Bind(target);
+    mGpuBuffer->Bind(context, target);
   }
 }
 
-unsigned int PropertyBuffer::EnableVertexAttributes( Context& context, Vector<GLint>& vAttributeLocation, unsigned int locationBase )
+uint32_t PropertyBuffer::EnableVertexAttributes( Context& context, Vector<GLint>& vAttributeLocation, uint32_t locationBase )
 {
-
-  unsigned int attributeCount = mFormat->components.size();
+  const uint32_t attributeCount = static_cast<uint32_t>( mFormat->components.size() );
 
   GLsizei elementSize = mFormat->size;
 
-  for( unsigned int i = 0; i < attributeCount; ++i )
+  for( uint32_t i = 0; i < attributeCount; ++i )
   {
     GLint attributeLocation = vAttributeLocation[i+locationBase];
     if( attributeLocation != -1 )
     {
       context.EnableVertexAttributeArray( attributeLocation );
 
-      GLint attributeSize = mFormat->components[i].size;
-      size_t attributeOffset = mFormat->components[i].offset;
-      Property::Type attributeType = mFormat->components[i].type;
+      const GLint attributeSize = mFormat->components[i].size;
+      uint32_t attributeOffset = mFormat->components[i].offset;
+      const Property::Type attributeType = mFormat->components[i].type;
 
       context.VertexAttribPointer( attributeLocation,
                                    attributeSize  / GetPropertyImplementationGlSize(attributeType),
                                    GetPropertyImplementationGlType(attributeType),
                                    GL_FALSE,  // Not normalized
                                    elementSize,
-                                   (void*)attributeOffset );
+                                   reinterpret_cast< void* >( attributeOffset ) );
     }
   }
 
   return attributeCount;
-
 }
 
 } //Render