Remove Geometry scene object 44/66744/14
authorFerran Sole <ferran.sole@samsung.com>
Wed, 20 Apr 2016 15:06:34 +0000 (16:06 +0100)
committerFerran Sole <ferran.sole@samsung.com>
Mon, 25 Apr 2016 16:16:35 +0000 (17:16 +0100)
* Removed geometry scene object
* Stop using PropertyBuffers for index data
* Moved RenderGeometry to the Render namespace

Change-Id: I9833a4cbe242a452b832ccecce60d21610a9a5b2

35 files changed:
automated-tests/src/dali-devel/utc-Dali-Geometry.cpp
automated-tests/src/dali-devel/utc-Dali-Renderer.cpp
automated-tests/src/dali-internal/utc-Dali-Internal-FrustumCulling.cpp
automated-tests/src/dali/dali-test-suite-utils/mesh-builder.cpp
dali/devel-api/object/property-buffer.h
dali/devel-api/rendering/geometry.cpp
dali/devel-api/rendering/geometry.h
dali/integration-api/profiling.cpp
dali/internal/event/actors/image-actor-impl.cpp
dali/internal/event/rendering/geometry-impl.cpp
dali/internal/event/rendering/geometry-impl.h
dali/internal/event/rendering/renderer-impl.cpp
dali/internal/event/rendering/renderer-impl.h
dali/internal/file.list
dali/internal/render/common/render-manager.cpp
dali/internal/render/common/render-manager.h
dali/internal/render/gl-resources/gpu-buffer.cpp
dali/internal/render/renderers/render-geometry.cpp
dali/internal/render/renderers/render-geometry.h
dali/internal/render/renderers/render-property-buffer.cpp
dali/internal/render/renderers/render-property-buffer.h
dali/internal/render/renderers/render-renderer.cpp
dali/internal/render/renderers/render-renderer.h
dali/internal/update/common/discard-queue.cpp
dali/internal/update/common/discard-queue.h
dali/internal/update/controllers/render-message-dispatcher.cpp
dali/internal/update/controllers/render-message-dispatcher.h
dali/internal/update/manager/prepare-render-instructions.cpp
dali/internal/update/manager/prepare-render-instructions.h
dali/internal/update/manager/update-manager.cpp
dali/internal/update/manager/update-manager.h
dali/internal/update/rendering/scene-graph-geometry.cpp [deleted file]
dali/internal/update/rendering/scene-graph-geometry.h [deleted file]
dali/internal/update/rendering/scene-graph-renderer.cpp
dali/internal/update/rendering/scene-graph-renderer.h

index ed32b48..96ad6a6 100644 (file)
@@ -63,18 +63,6 @@ PropertyBuffer CreateVertexBuffer( const std::string& aPosition, const std::stri
   return vertexData;
 }
 
-PropertyBuffer CreateIndexBuffer()
-{
-  const unsigned short indexData[6] = { 0, 3, 1, 0, 2, 3 };
-  const unsigned int numberElements = sizeof(indexData)/sizeof(indexData[0]) ;
-
-  Property::Map indexFormat;
-  indexFormat["indices"] = Property::INTEGER;
-  PropertyBuffer indices = PropertyBuffer::New( indexFormat );
-  indices.SetData( indexData, numberElements );
-
-  return indices;
-}
 
 }
 
@@ -263,7 +251,6 @@ int UtcDaliGeometrySetIndexBuffer(void)
   tet_infoline("Test SetIndexBuffer");
 
   PropertyBuffer vertexBuffer = CreateVertexBuffer("aPosition", "aTexCoord" );
-  PropertyBuffer indexBuffer = CreateIndexBuffer( );
 
   Geometry geometry = Geometry::New();
   geometry.AddVertexBuffer( vertexBuffer );
@@ -292,7 +279,8 @@ int UtcDaliGeometrySetIndexBuffer(void)
   // Set index buffer
   application.GetGlAbstraction().ResetBufferDataCalls();
 
-  geometry.SetIndexBuffer( indexBuffer );
+  const unsigned short indexData[6] = { 0, 3, 1, 0, 2, 3 };
+  geometry.SetIndexBuffer( indexData, sizeof(indexData)/sizeof(indexData[0]) );
   application.SendNotification();
   application.Render(0);
   application.Render();
@@ -450,11 +438,12 @@ int UtcDaliGeometrySetGetGeometryType02(void)
   unsigned int numVertex = 4u;
   unsigned int numIndex = 6u; // 6 unsigned short
   PropertyBuffer vertexBuffer = CreateVertexBuffer("aPosition", "aTexCoord" );
-  PropertyBuffer indexBuffer = CreateIndexBuffer( );
+
 
   Geometry geometry = Geometry::New();
   geometry.AddVertexBuffer( vertexBuffer );
-  geometry.SetIndexBuffer( indexBuffer );
+  const unsigned short indexData[6] = { 0, 3, 1, 0, 2, 3 };
+  geometry.SetIndexBuffer( indexData, sizeof(indexData)/sizeof(indexData[0]) );
 
   Shader shader = CreateShader();
   Renderer renderer = Renderer::New(geometry, shader);
@@ -602,224 +591,3 @@ int UtcDaliGeometrySetGetRequireDepthTesting(void)
   END_TEST;
 }
 
-int UtcDaliGeometryPropertyRequiresDepthTest(void)
-{
-  TestApplication application;
-
-  tet_infoline("Test SetRequiresDepthTesting, GetRequiresDepthTesting");
-
-  Shader shader = Shader::New("VertexSource", "FragmentSource");
-  Geometry geometry = CreateQuadGeometry();
-  Renderer renderer = Renderer::New( geometry, shader );
-
-  Actor actor = Actor::New();
-  actor.AddRenderer(renderer);
-  actor.SetSize(400, 400);
-  Stage::GetCurrent().Add(actor);
-
-  DALI_TEST_EQUALS( geometry.GetProperty<bool>(Geometry::Property::REQUIRES_DEPTH_TEST), false, TEST_LOCATION );
-
-  geometry.SetProperty(Geometry::Property::REQUIRES_DEPTH_TEST, true );
-
-  TestGlAbstraction& glAbstraction = application.GetGlAbstraction();
-  glAbstraction.EnableEnableDisableCallTrace(true);
-  application.SendNotification();
-  application.Render();
-//  TODO: Not supported yet
-//  TraceCallStack& glEnableStack = glAbstraction.GetEnableDisableTrace();
-//  std::ostringstream out;
-//  out << GL_DEPTH_TEST;
-//  DALI_TEST_CHECK( glEnableStack.FindMethodAndParams( "Enable", out.str().c_str() ) );
-
-  DALI_TEST_EQUALS( geometry.GetProperty<bool>(Geometry::Property::REQUIRES_DEPTH_TEST), true, TEST_LOCATION );
-
-  END_TEST;
-}
-
-int UtcDaliGeometryConstraint(void)
-{
-  TestApplication application;
-
-  tet_infoline("Test that a custom geometry property can be constrained");
-
-  Shader shader = Shader::New("VertexSource", "FragmentSource");
-  Geometry geometry = CreateQuadGeometry();
-  Renderer renderer = Renderer::New( geometry, shader );
-
-  Actor actor = Actor::New();
-  actor.AddRenderer(renderer);
-  actor.SetSize(400, 400);
-  Stage::GetCurrent().Add(actor);
-
-  Vector4 initialColor = Color::WHITE;
-  Property::Index colorIndex = geometry.RegisterProperty( "uFadeColor", initialColor );
-
-  application.SendNotification();
-  application.Render(0);
-  DALI_TEST_EQUALS( geometry.GetProperty<Vector4>(colorIndex), initialColor, TEST_LOCATION );
-
-  // Apply constraint
-  Constraint constraint = Constraint::New<Vector4>( geometry, colorIndex, TestConstraintNoBlue );
-  constraint.Apply();
-  application.SendNotification();
-  application.Render(0);
-
-  // Expect no blue component in either buffer - yellow
-  DALI_TEST_EQUALS( geometry.GetProperty<Vector4>(colorIndex), Color::YELLOW, TEST_LOCATION );
-  application.Render(0);
-  DALI_TEST_EQUALS( geometry.GetProperty<Vector4>(colorIndex), Color::YELLOW, TEST_LOCATION );
-
-  geometry.RemoveConstraints();
-  geometry.SetProperty(colorIndex, Color::WHITE );
-  application.SendNotification();
-  application.Render(0);
-  DALI_TEST_EQUALS( geometry.GetProperty<Vector4>(colorIndex), Color::WHITE, TEST_LOCATION );
-
-  END_TEST;
-}
-
-int UtcDaliGeometryConstraint02(void)
-{
-  TestApplication application;
-
-  tet_infoline("Test that a uniform map geometry property can be constrained");
-
-  Shader shader = Shader::New("VertexSource", "FragmentSource");
-  Geometry geometry = CreateQuadGeometry();
-  Renderer renderer = Renderer::New( geometry, shader );
-
-  Actor actor = Actor::New();
-  actor.AddRenderer(renderer);
-  actor.SetSize(400, 400);
-  Stage::GetCurrent().Add(actor);
-  application.SendNotification();
-  application.Render(0);
-
-  Vector4 initialColor = Color::WHITE;
-  Property::Index colorIndex = geometry.RegisterProperty( "uFadeColor", initialColor );
-
-  TestGlAbstraction& gl = application.GetGlAbstraction();
-
-  application.SendNotification();
-  application.Render(0);
-
-  Vector4 actualValue(Vector4::ZERO);
-  DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
-  DALI_TEST_EQUALS( actualValue, initialColor, TEST_LOCATION );
-
-  // Apply constraint
-  Constraint constraint = Constraint::New<Vector4>( geometry, colorIndex, TestConstraintNoBlue );
-  constraint.Apply();
-  application.SendNotification();
-  application.Render(0);
-
-   // Expect no blue component in either buffer - yellow
-  DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
-  DALI_TEST_EQUALS( actualValue, Color::YELLOW, TEST_LOCATION );
-
-  application.Render(0);
-  DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
-  DALI_TEST_EQUALS( actualValue, Color::YELLOW, TEST_LOCATION );
-
-  geometry.RemoveConstraints();
-  geometry.SetProperty(colorIndex, Color::WHITE );
-  application.SendNotification();
-  application.Render(0);
-
-  DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
-  DALI_TEST_EQUALS( actualValue, Color::WHITE, TEST_LOCATION );
-
-  END_TEST;
-}
-
-
-
-int UtcDaliGeometryAnimatedProperty01(void)
-{
-  TestApplication application;
-
-  tet_infoline("Test that a custom geometry property can be animated");
-
-  Shader shader = Shader::New("VertexSource", "FragmentSource");
-  Geometry geometry = CreateQuadGeometry();
-  Renderer renderer = Renderer::New( geometry, shader );
-
-  Actor actor = Actor::New();
-  actor.AddRenderer(renderer);
-  actor.SetSize(400, 400);
-  Stage::GetCurrent().Add(actor);
-
-  Vector4 initialColor = Color::WHITE;
-  Property::Index colorIndex = geometry.RegisterProperty( "uFadeColor", initialColor );
-
-  application.SendNotification();
-  application.Render(0);
-  DALI_TEST_EQUALS( geometry.GetProperty<Vector4>(colorIndex), initialColor, TEST_LOCATION );
-
-  Animation  animation = Animation::New(1.0f);
-  KeyFrames keyFrames = KeyFrames::New();
-  keyFrames.Add(0.0f, initialColor);
-  keyFrames.Add(1.0f, Color::TRANSPARENT);
-  animation.AnimateBetween( Property( geometry, colorIndex ), keyFrames );
-  animation.Play();
-
-  application.SendNotification();
-  application.Render(500);
-
-  DALI_TEST_EQUALS( geometry.GetProperty<Vector4>(colorIndex), Color::WHITE * 0.5f, TEST_LOCATION );
-
-  application.Render(500);
-
-  DALI_TEST_EQUALS( geometry.GetProperty<Vector4>(colorIndex), Color::TRANSPARENT, TEST_LOCATION );
-
-  END_TEST;
-}
-
-int UtcDaliGeometryAnimatedProperty02(void)
-{
-  TestApplication application;
-
-  tet_infoline("Test that a uniform map geometry property can be animated");
-
-  Shader shader = Shader::New("VertexSource", "FragmentSource");
-  Geometry geometry = CreateQuadGeometry();
-  Renderer renderer = Renderer::New( geometry, shader );
-
-  Actor actor = Actor::New();
-  actor.AddRenderer(renderer);
-  actor.SetSize(400, 400);
-  Stage::GetCurrent().Add(actor);
-  application.SendNotification();
-  application.Render(0);
-
-  Vector4 initialColor = Color::WHITE;
-  Property::Index colorIndex = geometry.RegisterProperty( "uFadeColor", initialColor );
-
-  TestGlAbstraction& gl = application.GetGlAbstraction();
-
-  application.SendNotification();
-  application.Render(0);
-
-  Vector4 actualValue(Vector4::ZERO);
-  DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
-  DALI_TEST_EQUALS( actualValue, initialColor, TEST_LOCATION );
-
-  Animation  animation = Animation::New(1.0f);
-  KeyFrames keyFrames = KeyFrames::New();
-  keyFrames.Add(0.0f, initialColor);
-  keyFrames.Add(1.0f, Color::TRANSPARENT);
-  animation.AnimateBetween( Property( geometry, colorIndex ), keyFrames );
-  animation.Play();
-
-  application.SendNotification();
-  application.Render(500);
-
-  DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
-  DALI_TEST_EQUALS( actualValue, Color::WHITE * 0.5f, TEST_LOCATION );
-
-  application.Render(500);
-  DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
-  DALI_TEST_EQUALS( actualValue, Color::TRANSPARENT, TEST_LOCATION );
-
-  END_TEST;
-}
index b350bc8..a9724f1 100644 (file)
@@ -123,10 +123,7 @@ int UtcDaliRendererSetGetGeometry(void)
   tet_infoline( "Test SetGeometry, GetGeometry" );
 
   Geometry geometry1 = CreateQuadGeometry();
-  geometry1.RegisterProperty( "uFadeColor", Color::RED );
-
   Geometry geometry2 = CreateQuadGeometry();
-  geometry2.RegisterProperty( "uFadeColor", Color::GREEN );
 
   Shader shader = CreateShader();
   Renderer renderer = Renderer::New(geometry1, shader);
@@ -135,15 +132,8 @@ int UtcDaliRendererSetGetGeometry(void)
   actor.SetSize(400, 400);
   Stage::GetCurrent().Add(actor);
 
-  TestGlAbstraction& gl = application.GetGlAbstraction();
   application.SendNotification();
   application.Render(0);
-
-  // Expect that the first geometry's fade color property is accessed
-  Vector4 actualValue(Vector4::ZERO);
-  DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
-  DALI_TEST_EQUALS( actualValue, Color::RED, TEST_LOCATION );
-
   DALI_TEST_EQUALS( renderer.GetGeometry(), geometry1, TEST_LOCATION );
 
   // Set geometry2 to the renderer
@@ -151,11 +141,6 @@ int UtcDaliRendererSetGetGeometry(void)
 
   application.SendNotification();
   application.Render(0);
-
-  // Expect that the second geometry's fade color property is accessed
-  DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
-  DALI_TEST_EQUALS( actualValue, Color::GREEN, TEST_LOCATION );
-
   DALI_TEST_EQUALS( renderer.GetGeometry(), geometry2, TEST_LOCATION );
 
   END_TEST;
@@ -1149,8 +1134,6 @@ int UtcDaliRendererUniformMapPrecendence01(void)
 
   shader.RegisterProperty( "uFadeColor", Color::MAGENTA );
 
-  geometry.RegisterProperty( "uFadeColor", Color::YELLOW );
-
   TestGlAbstraction& gl = application.GetGlAbstraction();
 
   application.SendNotification();
@@ -1213,8 +1196,6 @@ int UtcDaliRendererUniformMapPrecendence02(void)
 
   shader.RegisterProperty( "uFadeColor", Color::MAGENTA );
 
-  geometry.RegisterProperty( "uFadeColor", Color::YELLOW );
-
 
   TestGlAbstraction& gl = application.GetGlAbstraction();
 
@@ -1275,12 +1256,7 @@ int UtcDaliRendererUniformMapPrecendence03(void)
 
   textureSet.RegisterProperty( "uFadeColor", Color::BLUE );
 
-  shader.RegisterProperty( "uFadeColor", Color::MAGENTA );
-
-  Property::Index geometryFadeColorIndex = geometry.RegisterProperty( "uFadeColor", Color::YELLOW );
-
-  geometry.RegisterProperty( "uFadeColor", Color::BLACK );
-
+  Property::Index shaderFadeColorIndex = shader.RegisterProperty( "uFadeColor", Color::BLACK );
 
   TestGlAbstraction& gl = application.GetGlAbstraction();
 
@@ -1297,7 +1273,7 @@ int UtcDaliRendererUniformMapPrecendence03(void)
   KeyFrames keyFrames = KeyFrames::New();
   keyFrames.Add(0.0f, Color::WHITE);
   keyFrames.Add(1.0f, Color::TRANSPARENT);
-  animation.AnimateBetween( Property( geometry, geometryFadeColorIndex ), keyFrames );
+  animation.AnimateBetween( Property( shader, shaderFadeColorIndex ), keyFrames );
   animation.Play();
 
   application.SendNotification();
@@ -1313,132 +1289,6 @@ int UtcDaliRendererUniformMapPrecendence03(void)
   END_TEST;
 }
 
-
-int UtcDaliRendererUniformMapPrecendence04(void)
-{
-  TestApplication application;
-
-  tet_infoline("Test the uniform map precedence is applied properly");
-
-  Image image = BufferImage::New( 64, 64, Pixel::RGBA8888 );
-
-  Shader shader = Shader::New("VertexSource", "FragmentSource");
-  TextureSet textureSet = CreateTextureSet( image );
-
-  PropertyBuffer vertexBuffer = CreatePropertyBuffer();
-  Geometry geometry = CreateQuadGeometryFromBuffer(vertexBuffer);
-  Renderer renderer = Renderer::New( geometry, shader );
-  renderer.SetTextures( textureSet );
-
-  Actor actor = Actor::New();
-  actor.AddRenderer(renderer);
-  actor.SetSize(400, 400);
-  Stage::GetCurrent().Add(actor);
-  application.SendNotification();
-  application.Render(0);
-
-  // Don't add property / uniform map to renderer/actor/texture set
-  shader.RegisterProperty( "uFadeColor", Color::MAGENTA );
-
-  Property::Index geometryFadeColorIndex = geometry.RegisterProperty( "uFadeColor", Color::YELLOW );
-
-  geometry.RegisterProperty( "uFadeColor", Color::BLACK );
-
-
-  TestGlAbstraction& gl = application.GetGlAbstraction();
-
-  application.SendNotification();
-  application.Render(0);
-
-  // Expect that the sampler's fade color property is accessed
-  Vector4 actualValue(Vector4::ZERO);
-  DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
-  DALI_TEST_EQUALS( actualValue, Color::MAGENTA, TEST_LOCATION );
-
-  // Animate geometry's fade color property. Should be no change to uniform
-  Animation  animation = Animation::New(1.0f);
-  KeyFrames keyFrames = KeyFrames::New();
-  keyFrames.Add(0.0f, Color::WHITE);
-  keyFrames.Add(1.0f, Color::TRANSPARENT);
-  animation.AnimateBetween( Property( geometry, geometryFadeColorIndex ), keyFrames );
-  animation.Play();
-
-  application.SendNotification();
-  application.Render(500);
-
-  DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
-  DALI_TEST_EQUALS( actualValue, Color::MAGENTA, TEST_LOCATION );
-
-  application.Render(500);
-  DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
-  DALI_TEST_EQUALS( actualValue, Color::MAGENTA, TEST_LOCATION );
-
-  END_TEST;
-}
-
-int UtcDaliRendererUniformMapPrecendence05(void)
-{
-  TestApplication application;
-
-  tet_infoline("Test the uniform map precedence is applied properly");
-
-  Image image = BufferImage::New( 64, 64, Pixel::RGBA8888 );
-
-  Shader shader = Shader::New("VertexSource", "FragmentSource");
-  TextureSet textureSet = CreateTextureSet( image );
-
-  PropertyBuffer vertexBuffer = CreatePropertyBuffer();
-  Geometry geometry = CreateQuadGeometryFromBuffer(vertexBuffer);
-  Renderer renderer = Renderer::New( geometry, shader );
-  renderer.SetTextures( textureSet );
-
-  Actor actor = Actor::New();
-  actor.AddRenderer(renderer);
-  actor.SetSize(400, 400);
-  Stage::GetCurrent().Add(actor);
-  application.SendNotification();
-  application.Render(0);
-
-  // Don't add property / uniform map to renderer/actor/texture set/sampler
-
-  shader.RegisterProperty( "uFadeColor", Color::MAGENTA );
-
-  Property::Index geometryFadeColorIndex = geometry.RegisterProperty( "uFadeColor", Color::YELLOW );
-
-  geometry.RegisterProperty( "uFadeColor", Color::BLACK );
-
-
-  TestGlAbstraction& gl = application.GetGlAbstraction();
-
-  application.SendNotification();
-  application.Render(0);
-
-  // Expect that the shader's fade color property is accessed
-  Vector4 actualValue(Vector4::ZERO);
-  DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
-  DALI_TEST_EQUALS( actualValue, Color::MAGENTA, TEST_LOCATION );
-
-  // Animate geometry's fade color property. Should be no change to uniform
-  Animation  animation = Animation::New(1.0f);
-  KeyFrames keyFrames = KeyFrames::New();
-  keyFrames.Add(0.0f, Color::WHITE);
-  keyFrames.Add(1.0f, Color::TRANSPARENT);
-  animation.AnimateBetween( Property( geometry, geometryFadeColorIndex ), keyFrames );
-  animation.Play();
-
-  application.SendNotification();
-  application.Render(500);
-
-  DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
-  DALI_TEST_EQUALS( actualValue, Color::MAGENTA, TEST_LOCATION );
-
-  application.Render(500);
-  DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
-  DALI_TEST_EQUALS( actualValue, Color::MAGENTA, TEST_LOCATION );
-
-  END_TEST;
-}
-
 int UtcDaliRendererUniformMapMultipleUniforms01(void)
 {
   TestApplication application;
@@ -1466,7 +1316,6 @@ int UtcDaliRendererUniformMapMultipleUniforms01(void)
   actor.RegisterProperty( "uUniform2", Color::GREEN );
   textureSet.RegisterProperty( "uUniform3", Color::BLUE );
   shader.RegisterProperty( "uUniform4", Color::MAGENTA );
-  geometry.RegisterProperty( "uUniform5", Color::YELLOW );
 
   TestGlAbstraction& gl = application.GetGlAbstraction();
 
@@ -1486,18 +1335,13 @@ int UtcDaliRendererUniformMapMultipleUniforms01(void)
   DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uUniform3", uniform3Value ) );
   DALI_TEST_EQUALS( uniform3Value, Color::BLUE, TEST_LOCATION );
 
-  Vector4 uniform5Value(Vector4::ZERO);
-  DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uUniform4", uniform5Value ) );
-  DALI_TEST_EQUALS( uniform5Value, Color::MAGENTA, TEST_LOCATION );
-
-  Vector4 uniform6Value(Vector4::ZERO);
-  DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uUniform5", uniform6Value ) );
-  DALI_TEST_EQUALS( uniform6Value, Color::YELLOW, TEST_LOCATION );
+  Vector4 uniform4Value(Vector4::ZERO);
+  DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uUniform4", uniform4Value ) );
+  DALI_TEST_EQUALS( uniform4Value, Color::MAGENTA, TEST_LOCATION );
 
   END_TEST;
 }
 
-
 int UtcDaliRendererUniformMapMultipleUniforms02(void)
 {
   TestApplication application;
@@ -1533,9 +1377,6 @@ int UtcDaliRendererUniformMapMultipleUniforms02(void)
   Property::Value value5(Matrix3::IDENTITY);
   shader.RegisterProperty( "uANormalMatrix", value5 );
 
-  Property::Value value6(Matrix::IDENTITY);
-  geometry.RegisterProperty( "uAWorldMatrix", value6 );
-
   TestGlAbstraction& gl = application.GetGlAbstraction();
 
   application.SendNotification();
@@ -1558,10 +1399,6 @@ int UtcDaliRendererUniformMapMultipleUniforms02(void)
   DALI_TEST_CHECK( gl.GetUniformValue<Matrix3>( "uANormalMatrix", uniform5Value ) );
   DALI_TEST_EQUALS( uniform5Value, value5.Get<Matrix3>(), TEST_LOCATION );
 
-  Matrix uniform6Value;
-  DALI_TEST_CHECK( gl.GetUniformValue<Matrix>( "uAWorldMatrix", uniform6Value ) );
-  DALI_TEST_EQUALS( uniform6Value, value6.Get<Matrix>(), TEST_LOCATION );
-
   END_TEST;
 }
 
@@ -1983,13 +1820,9 @@ int UtcDaliRendererSetIndexRange(void)
 
   // --------------------------------------------------------------------------
   // index buffer
-  unsigned indices[] = { 0, 2, 4, 6, 8, // offset = 0, count = 5
+  unsigned short indices[] = { 0, 2, 4, 6, 8, // offset = 0, count = 5
                          0, 1, 2, 3, 4, 5, 6, 7, 8, 9, // offset = 5, count = 10
                          1, 3, 5, 7, 9, 1 }; // offset = 15,  count = 6 // line strip
-  Property::Map format;
-  format["indices"] = Property::INTEGER;
-  PropertyBuffer indexBuffer = PropertyBuffer::New( format );
-  indexBuffer.SetData( indices, sizeof(indices)/sizeof(indices[0]));
 
   // --------------------------------------------------------------------------
   // vertex buffer
@@ -2012,7 +1845,7 @@ int UtcDaliRendererSetIndexRange(void)
   vertexBuffer.SetData( shapes, sizeof(shapes)/sizeof(shapes[0]));
 
   // --------------------------------------------------------------------------
-  geometry.SetIndexBuffer( indexBuffer );
+  geometry.SetIndexBuffer( indices, sizeof(indices)/sizeof(indices[0]) );
   geometry.AddVertexBuffer( vertexBuffer );
 
   // create shader
index 4f8d579..7dfd62e 100644 (file)
@@ -74,16 +74,12 @@ Geometry CreateGeometry()
   texturedQuadVertices.SetData( texturedQuadVertexData, 4 );
 
   // Create indices
-  unsigned int indexData[6] = { 0, 3, 1, 0, 2, 3 };
-  Property::Map indexFormat;
-  indexFormat["indices"] = Property::INTEGER;
-  PropertyBuffer indices = PropertyBuffer::New( indexFormat );
-  indices.SetData( indexData, sizeof(indexData)/sizeof(indexData[0]) );
+  unsigned short indexData[6] = { 0, 3, 1, 0, 2, 3 };
 
   // Create the geometry object
   Geometry texturedQuadGeometry = Geometry::New();
   texturedQuadGeometry.AddVertexBuffer( texturedQuadVertices );
-  texturedQuadGeometry.SetIndexBuffer( indices );
+  texturedQuadGeometry.SetIndexBuffer( indexData, sizeof(indexData)/sizeof(indexData[0]) );
 
   return texturedQuadGeometry;
 }
index 304e567..5b127c7 100644 (file)
@@ -62,15 +62,11 @@ Geometry CreateQuadGeometryFromBuffer( PropertyBuffer vertexData )
     { Vector2( halfQuadSize,  halfQuadSize), Vector2(1.f, 1.f) } };
   vertexData.SetData(texturedQuadVertexData, 4);
 
-  unsigned int indexData[6] = { 0, 3, 1, 0, 2, 3 };
-  Property::Map indexFormat;
-  indexFormat["indices"] = Property::INTEGER;
-  PropertyBuffer indices = PropertyBuffer::New( indexFormat );
-  indices.SetData( indexData, sizeof(indexData)/sizeof(indexData[0]) );
+  unsigned short indexData[6] = { 0, 3, 1, 0, 2, 3 };
 
   Geometry geometry = Geometry::New();
   geometry.AddVertexBuffer( vertexData );
-  geometry.SetIndexBuffer( indices );
+  geometry.SetIndexBuffer( indexData, sizeof(indexData)/sizeof(indexData[0]) );
 
   return geometry;
 }
index f9bcccc..f498d20 100644 (file)
@@ -57,15 +57,11 @@ class PropertyBuffer;
  *
  *  // Create indices
  *  unsigned int indexData[6] = { 0, 3, 1, 0, 2, 3 };
- *  Property::Map indexFormat;
- *  indexFormat["indices"] = Property::INTEGER;
- *  PropertyBuffer indices = PropertyBuffer::New( indexFormat );
- *  indices.SetData( indexData, 6 );
  *
  *  // Create the geometry object
  *  Geometry texturedQuadGeometry = Geometry::New();
  *  texturedQuadGeometry.AddVertexBuffer( texturedQuadVertices );
- *  texturedQuadGeometry.SetIndexBuffer( indices );
+ *  texturedQuadGeometry.SetIndexBuffer( indexData, sizeof(indexData)/sizeof(indexData[0] );
  *
  */
 class DALI_IMPORT_API PropertyBuffer : public BaseHandle
index 4b12f05..14b6476 100644 (file)
@@ -39,7 +39,7 @@ Geometry::~Geometry()
 }
 
 Geometry::Geometry( const Geometry& handle )
-: Handle( handle )
+: BaseHandle( handle )
 {
 }
 
@@ -70,10 +70,9 @@ void Geometry::RemoveVertexBuffer( std::size_t index )
   GetImplementation(*this).RemoveVertexBuffer( index );
 }
 
-void Geometry::SetIndexBuffer( PropertyBuffer& indexBuffer )
+void Geometry::SetIndexBuffer( const unsigned short* indices, size_t count )
 {
-  DALI_ASSERT_ALWAYS( indexBuffer && "indexBuffer is not initialized ");
-  GetImplementation(*this).SetIndexBuffer( GetImplementation( indexBuffer ) );
+  GetImplementation(*this).SetIndexBuffer( indices, count );
 }
 
 void Geometry::SetGeometryType( GeometryType geometryType )
@@ -97,7 +96,7 @@ bool Geometry::GetRequiresDepthTesting() const
 }
 
 Geometry::Geometry( Internal::Geometry* pointer )
-: Handle( pointer )
+: BaseHandle( pointer )
 {
 }
 
index 272769e..c57595b 100644 (file)
@@ -37,7 +37,7 @@ class Geometry;
 /**
  * @brief Geometry is handle to an object that can be used to define a geometric elements.
  */
-class DALI_IMPORT_API Geometry : public Handle
+class DALI_IMPORT_API Geometry : public BaseHandle
 {
 public:
 
@@ -52,17 +52,6 @@ public:
     TRIANGLE_STRIP
   };
 
-  /**
-   * @brief An enumeration of properties belonging to the Geometry class.
-   */
-  struct Property
-  {
-    enum
-    {
-      GEOMETRY_TYPE = DEFAULT_OBJECT_PROPERTY_START_INDEX,  ///< name "geometryType",             type STRING
-      REQUIRES_DEPTH_TEST,                                  ///< name "requiresDepthTesting",   type BOOLEAN
-    };
-  };
 
   /**
    * @brief Creates a new Geometry object
@@ -131,16 +120,15 @@ public:
   void RemoveVertexBuffer( std::size_t index );
 
   /**
-   * @brief Set a PropertyBuffer to be used as a source of indices for the geometry
-   *
-   * This buffer is required to have exactly one component and it must be of the type Property::INTEGER
+   * @brief Set a the index data to be used as a source of indices for the geometry
    *
-   * By setting this buffer the will case the geometry to be rendered using indices.
-   * To unset call SetIndexBuffer with an empty handle.
+   * Setting this buffer will cause the geometry to be rendered using indices.
+   * To unset call SetIndexBuffer with a null pointer or count 0
    *
-   * @param[in] indexBuffer PropertyBuffer to be used as a source of indices for the geometry
+   * @param[in] indices Array of indices
+   * @param[in] count Number of indices in the array
    */
-  void SetIndexBuffer( PropertyBuffer& indexBuffer );
+  void SetIndexBuffer( const unsigned short* indices, size_t count );
 
   /**
    * @brief Set the type of primitives this geometry contains
index 28a04bc..9a27aa7 100644 (file)
@@ -125,8 +125,7 @@ const int RENDERER_MEMORY_SIZE(
   sizeof( Internal::Render::Renderer ) );
 const int GEOMETRY_MEMORY_SIZE(
   sizeof( Internal::Geometry ) +
-  sizeof( Internal::SceneGraph::Geometry ) +
-  sizeof( Internal::SceneGraph::RenderGeometry) );
+  sizeof( Internal::Render::Geometry) );
 const int PROPERTY_BUFFER_MEMORY_SIZE(
   sizeof( Internal::PropertyBuffer ) +
   sizeof( Internal::Render::PropertyBuffer ) );
index 5275eb0..73d7be4 100644 (file)
@@ -86,7 +86,7 @@ GeometryPtr CreateGeometry( unsigned int gridWidth, unsigned int gridHeight, con
   }
 
   // Create indices
-  Vector< unsigned int > indices;
+  Vector< unsigned short > indices;
   indices.Reserve( ( gridWidth + 2 ) * gridHeight * 2 - 2);
 
   for( unsigned int row = 0u; row < gridHeight; ++row )
@@ -120,18 +120,13 @@ GeometryPtr CreateGeometry( unsigned int gridWidth, unsigned int gridHeight, con
     vertexPropertyBuffer->SetData( &vertices[ 0 ], vertices.size() );
   }
 
-  Property::Map indexFormat;
-  indexFormat[ "indices" ] = Property::INTEGER;
-  PropertyBufferPtr indexPropertyBuffer = PropertyBuffer::New( indexFormat );
-  if( indices.Size() > 0 )
-  {
-    indexPropertyBuffer->SetData( &indices[ 0 ], indices.Size() );
-  }
-
   // Create the geometry object
   GeometryPtr geometry = Geometry::New();
   geometry->AddVertexBuffer( *vertexPropertyBuffer );
-  geometry->SetIndexBuffer( *indexPropertyBuffer );
+  if( indices.Size() > 0 )
+  {
+    geometry->SetIndexBuffer( &indices[0], indices.Size() );
+  }
   geometry->SetGeometryType( Dali::Geometry::TRIANGLE_STRIP );
 
   return geometry;
index 4ee6fde..0f5af2e 100644 (file)
@@ -33,16 +33,6 @@ namespace Internal
 namespace
 {
 
-/**
- *            |name                    |type     |writable|animatable|constraint-input|enum for index-checking|
- */
-DALI_PROPERTY_TABLE_BEGIN
-DALI_PROPERTY( "geometryType",          STRING,   true, false, true, Dali::Geometry::Property::GEOMETRY_TYPE )
-DALI_PROPERTY( "requiresDepthTest",     BOOLEAN,  true, false, true, Dali::Geometry::Property::REQUIRES_DEPTH_TEST )
-DALI_PROPERTY_TABLE_END( DEFAULT_ACTOR_PROPERTY_START_INDEX )
-
-const ObjectImplHelper<DEFAULT_PROPERTY_COUNT> GEOMETRY_IMPL = { DEFAULT_PROPERTY_DETAILS };
-
 BaseHandle Create()
 {
   return Dali::Geometry::New();
@@ -62,7 +52,7 @@ GeometryPtr Geometry::New()
 std::size_t Geometry::AddVertexBuffer( PropertyBuffer& vertexBuffer )
 {
   mVertexBuffers.push_back( &vertexBuffer );
-  SceneGraph::AddVertexBufferMessage( GetEventThreadServices(), *mSceneObject, *vertexBuffer.GetRenderObject() );
+  SceneGraph::AddVertexBufferMessage( mEventThreadServices.GetUpdateManager(), *mRenderObject, *vertexBuffer.GetRenderObject() );
   return mVertexBuffers.size() - 1u;
 }
 
@@ -74,24 +64,28 @@ std::size_t Geometry::GetNumberOfVertexBuffers() const
 void Geometry::RemoveVertexBuffer( std::size_t index )
 {
   const Render::PropertyBuffer& renderPropertyBuffer = static_cast<const Render::PropertyBuffer&>( *(mVertexBuffers[index]->GetRenderObject()) );
-  SceneGraph::RemoveVertexBufferMessage( GetEventThreadServices(), *mSceneObject, renderPropertyBuffer );
+  SceneGraph::RemoveVertexBufferMessage( mEventThreadServices.GetUpdateManager(), *mRenderObject, renderPropertyBuffer );
 
   mVertexBuffers.erase( mVertexBuffers.begin() + index );
 }
 
-void Geometry::SetIndexBuffer( PropertyBuffer& indexBuffer )
+void Geometry::SetIndexBuffer( const unsigned short* indices, size_t count )
 {
-  mIndexBuffer = &indexBuffer;
-  SceneGraph::SetIndexBufferMessage( GetEventThreadServices(), *mSceneObject, *indexBuffer.GetRenderObject() );
+  Dali::Vector<unsigned short> indexData;
+  if( indices && count )
+  {
+    indexData.Resize( count );
+    std::copy( indices, indices + count, indexData.Begin() );
+  }
+
+  SceneGraph::SetIndexBufferMessage( mEventThreadServices.GetUpdateManager(), *mRenderObject, indexData );
 }
 
 void Geometry::SetGeometryType( Dali::Geometry::GeometryType geometryType )
 {
   if( geometryType != mGeometryType )
   {
-    SceneGraph::SetGeometryTypeMessage(GetEventThreadServices(),
-                                       *mSceneObject,
-                                       geometryType );
+    SceneGraph::SetGeometryTypeMessage(mEventThreadServices.GetUpdateManager(), *mRenderObject, geometryType );
 
     mGeometryType = geometryType;
   }
@@ -106,9 +100,7 @@ void Geometry::SetRequiresDepthTesting( bool requiresDepthTest )
 {
   if( requiresDepthTest != mRequiresDepthTest )
   {
-    SceneGraph::SetGeometryRequiresDepthTestMessage(GetEventThreadServices(),
-                                                    *mSceneObject,
-                                                    requiresDepthTest );
+    SceneGraph::SetGeometryRequiresDepthTestMessage(mEventThreadServices.GetUpdateManager(), *mRenderObject, requiresDepthTest );
 
     mRequiresDepthTest = requiresDepthTest;
   }
@@ -119,199 +111,30 @@ bool Geometry::GetRequiresDepthTesting() const
   return mRequiresDepthTest;
 }
 
-const SceneGraph::Geometry* Geometry::GetGeometrySceneObject() const
-{
-  return mSceneObject;
-}
-
-unsigned int Geometry::GetDefaultPropertyCount() const
-{
-  return GEOMETRY_IMPL.GetDefaultPropertyCount();
-}
-
-void Geometry::GetDefaultPropertyIndices( Property::IndexContainer& indices ) const
-{
-  GEOMETRY_IMPL.GetDefaultPropertyIndices( indices );
-}
-
-const char* Geometry::GetDefaultPropertyName(Property::Index index) const
+const Render::Geometry* Geometry::GetRenderObject() const
 {
-  return GEOMETRY_IMPL.GetDefaultPropertyName( index );
-}
-
-Property::Index Geometry::GetDefaultPropertyIndex( const std::string& name ) const
-{
-  return GEOMETRY_IMPL.GetDefaultPropertyIndex( name );
-}
-
-bool Geometry::IsDefaultPropertyWritable( Property::Index index ) const
-{
-  return GEOMETRY_IMPL.IsDefaultPropertyWritable( index );
-}
-
-bool Geometry::IsDefaultPropertyAnimatable( Property::Index index ) const
-{
-  return GEOMETRY_IMPL.IsDefaultPropertyAnimatable( index );
-}
-
-bool Geometry::IsDefaultPropertyAConstraintInput( Property::Index index ) const
-{
-  return GEOMETRY_IMPL.IsDefaultPropertyAConstraintInput( index );
-}
-
-Property::Type Geometry::GetDefaultPropertyType( Property::Index index ) const
-{
-  return GEOMETRY_IMPL.GetDefaultPropertyType( index );
-}
-
-void Geometry::SetDefaultProperty( Property::Index index,
-                                   const Property::Value& propertyValue )
-{
-  switch( index )
-  {
-    case Dali::Geometry::Property::GEOMETRY_TYPE :
-    {
-      Dali::Geometry::GeometryType geometryType = static_cast<Dali::Geometry::GeometryType>(propertyValue.Get<int>());
-      if( geometryType != mGeometryType )
-      {
-        SceneGraph::SetGeometryTypeMessage(GetEventThreadServices(), *mSceneObject, geometryType );
-        mGeometryType = geometryType;
-      }
-      break;
-    }
-    case Dali::Geometry::Property::REQUIRES_DEPTH_TEST :
-    {
-      bool requiresDepthTest = propertyValue.Get<bool>();
-      if( requiresDepthTest != mRequiresDepthTest )
-      {
-        SceneGraph::SetGeometryRequiresDepthTestMessage(GetEventThreadServices(), *mSceneObject, requiresDepthTest);
-        mRequiresDepthTest = requiresDepthTest;
-      }
-      break;
-    }
-  }
-}
-
-void Geometry::SetSceneGraphProperty( Property::Index index,
-                                      const PropertyMetadata& entry,
-                                      const Property::Value& value )
-{
-  GEOMETRY_IMPL.SetSceneGraphProperty( GetEventThreadServices(), this, index, entry, value );
-}
-
-Property::Value Geometry::GetDefaultProperty( Property::Index index ) const
-{
-  Property::Value value;
-
-  switch( index )
-  {
-    case Dali::Geometry::Property::GEOMETRY_TYPE :
-    {
-      if( mSceneObject )
-      {
-        value = mGeometryType;
-      }
-      break;
-    }
-    case Dali::Geometry::Property::REQUIRES_DEPTH_TEST :
-    {
-      if( mSceneObject )
-      {
-        value = mRequiresDepthTest;
-      }
-      break;
-    }
-  }
-
-  return value;
-}
-
-const SceneGraph::PropertyOwner* Geometry::GetPropertyOwner() const
-{
-  return mSceneObject;
-}
-
-const SceneGraph::PropertyOwner* Geometry::GetSceneObject() const
-{
-  return mSceneObject;
-}
-
-const SceneGraph::PropertyBase* Geometry::GetSceneObjectAnimatableProperty( Property::Index index ) const
-{
-  const SceneGraph::PropertyBase* property = NULL;
-  if( OnStage() )
-  {
-    property = GEOMETRY_IMPL.GetRegisteredSceneGraphProperty ( this,
-                                                               &Geometry::FindAnimatableProperty,
-                                                               &Geometry::FindCustomProperty,
-                                                               index );
-  }
-
-  return property;
-}
-
-const PropertyInputImpl* Geometry::GetSceneObjectInputProperty( Property::Index index ) const
-{
-  const PropertyInputImpl* property = NULL;
-
-  if( OnStage() )
-  {
-    const SceneGraph::PropertyBase* baseProperty =
-        GEOMETRY_IMPL.GetRegisteredSceneGraphProperty ( this,
-                                                        &Geometry::FindAnimatableProperty,
-                                                        &Geometry::FindCustomProperty,
-                                                        index );
-
-    property = static_cast<const PropertyInputImpl*>( baseProperty );
-  }
-
-  return property;
-}
-
-bool Geometry::OnStage() const
-{
-  return mOnStage;
-}
-
-void Geometry::Connect()
-{
-  mOnStage = true;
-}
-
-void Geometry::Disconnect()
-{
-  mOnStage = false;
+  return mRenderObject;
 }
 
 Geometry::Geometry()
-: mSceneObject( NULL ),
-  mIndexBuffer( NULL ),
+: mEventThreadServices( *Stage::GetCurrent() ),
+  mRenderObject( NULL ),
   mGeometryType(Dali::Geometry::TRIANGLES),
-  mRequiresDepthTest(false),
-  mOnStage( false )
+  mRequiresDepthTest(false)
 {
 }
 
 void Geometry::Initialize()
 {
-  EventThreadServices& eventThreadServices = GetEventThreadServices();
-  SceneGraph::UpdateManager& updateManager = eventThreadServices.GetUpdateManager();
-
-  mSceneObject = new SceneGraph::Geometry();
-  AddMessage( updateManager, updateManager.GetGeometryOwner(), *mSceneObject );
-
-  eventThreadServices.RegisterObject( this );
+  mRenderObject = new Render::Geometry();
+  AddGeometry( mEventThreadServices.GetUpdateManager(), *mRenderObject );
 }
 
 Geometry::~Geometry()
 {
-  if( EventThreadServices::IsCoreRunning() )
+  if( EventThreadServices::IsCoreRunning() && mRenderObject )
   {
-    EventThreadServices& eventThreadServices = GetEventThreadServices();
-    SceneGraph::UpdateManager& updateManager = eventThreadServices.GetUpdateManager();
-    RemoveMessage( updateManager, updateManager.GetGeometryOwner(), *mSceneObject );
-
-    eventThreadServices.UnregisterObject( this );
+    RemoveGeometry( mEventThreadServices.GetUpdateManager(), *mRenderObject );
   }
 }
 
index ae3acf1..1d7ba29 100644 (file)
@@ -29,6 +29,7 @@
 #include <dali/internal/event/common/object-connector.h> // Dali::Internal::ObjectConnector
 #include <dali/internal/event/common/object-impl.h> // Dali::Internal::Object
 #include <dali/internal/event/common/property-buffer-impl.h> // Dali::Internal::PropertyBuffer
+#include <dali/internal/render/renderers/render-geometry.h>
 
 namespace Dali
 {
@@ -46,7 +47,7 @@ typedef IntrusivePtr<Geometry> GeometryPtr;
  * Geometry is an object that contains an array of structures of values that
  * can be accessed as properties.
  */
-class Geometry : public Object, public Connectable
+class Geometry : public BaseObject
 {
 public:
 
@@ -74,7 +75,7 @@ public:
   /**
    * @copydoc Dali::Geometry::SetIndexBuffer()
    */
-  void SetIndexBuffer( PropertyBuffer& indexBuffer );
+  void SetIndexBuffer( const unsigned short* indices, size_t count );
 
   /**
    * @copydoc Dali::Geometry::SetGeometryType()
@@ -101,102 +102,13 @@ public:
    *
    * @return the geometry scene object
    */
-  const SceneGraph::Geometry* GetGeometrySceneObject() const;
+  const Render::Geometry* GetRenderObject() const;
 
-public: // Default property extensions from Object
-
-  /**
-   * @copydoc Dali::Internal::Object::GetDefaultPropertyCount()
-   */
-  virtual unsigned int GetDefaultPropertyCount() const;
-
-  /**
-   * @copydoc Dali::Internal::Object::GetDefaultPropertyIndices()
-   */
-  virtual void GetDefaultPropertyIndices( Property::IndexContainer& indices ) const;
-
-  /**
-   * @copydoc Dali::Internal::Object::GetDefaultPropertyName()
-   */
-  virtual const char* GetDefaultPropertyName(Property::Index index) const;
-
-  /**
-   * @copydoc Dali::Internal::Object::GetDefaultPropertyIndex()
-   */
-  virtual Property::Index GetDefaultPropertyIndex(const std::string& name) const;
-
-  /**
-   * @copydoc Dali::Internal::Object::IsDefaultPropertyWritable()
-   */
-  virtual bool IsDefaultPropertyWritable(Property::Index index) const;
-
-  /**
-   * @copydoc Dali::Internal::Object::IsDefaultPropertyAnimatable()
-   */
-  virtual bool IsDefaultPropertyAnimatable(Property::Index index) const;
-
-  /**
-   * @copydoc Dali::Internal::Object::IsDefaultPropertyAConstraintInput()
-   */
-  virtual bool IsDefaultPropertyAConstraintInput( Property::Index index ) const;
-
-  /**
-   * @copydoc Dali::Internal::Object::GetDefaultPropertyType()
-   */
-  virtual Property::Type GetDefaultPropertyType(Property::Index index) const;
-
-  /**
-   * @copydoc Dali::Internal::Object::SetDefaultProperty()
-   */
-  virtual void SetDefaultProperty(Property::Index index, const Property::Value& propertyValue);
-
-  /**
-   * @copydoc Dali::Internal::Object::SetSceneGraphProperty()
-   */
-  virtual void SetSceneGraphProperty( Property::Index index, const PropertyMetadata& entry, const Property::Value& value );
-
-  /**
-   * @copydoc Dali::Internal::Object::GetDefaultProperty()
-   */
-  virtual Property::Value GetDefaultProperty( Property::Index index ) const;
-
-  /**
-   * @copydoc Dali::Internal::Object::GetPropertyOwner()
-   */
-  virtual const SceneGraph::PropertyOwner* GetPropertyOwner() const;
-
-  /**
-   * @copydoc Dali::Internal::Object::GetSceneObject()
-   */
-  virtual const SceneGraph::PropertyOwner* GetSceneObject() const;
-
-  /**
-   * @copydoc Dali::Internal::Object::GetSceneObjectAnimatableProperty()
-   */
-  virtual const SceneGraph::PropertyBase* GetSceneObjectAnimatableProperty( Property::Index index ) const;
-
-  /**
-   * @copydoc Dali::Internal::Object::GetSceneObjectInputProperty()
-   */
-  virtual const PropertyInputImpl* GetSceneObjectInputProperty( Property::Index index ) const;
-
-public: // Functions from Connectable
-  /**
-   * @copydoc Dali::Internal::Connectable::OnStage()
-   */
-  virtual bool OnStage() const;
-
-  /**
-   * @copydoc Dali::Internal::Connectable::Connect()
-   */
-  virtual void Connect();
+private: // implementation
 
   /**
-   * @copydoc Dali::Internal::Connectable::Disconnect()
+   * Constructor
    */
-  virtual void Disconnect();
-
-private: // implementation
   Geometry();
 
   /**
@@ -205,6 +117,7 @@ private: // implementation
   void Initialize();
 
 protected:
+
   /**
    * A reference counted object may only be deleted by calling Unreference()
    */
@@ -216,15 +129,13 @@ private: // unimplemented methods
 
 private: // data
 
-  SceneGraph::Geometry* mSceneObject;
+  EventThreadServices& mEventThreadServices;    ///<Used to send messages to the render thread via update thread
+  Render::Geometry* mRenderObject;
 
   std::vector<PropertyBufferPtr> mVertexBuffers; ///< Vector of intrusive pointers to vertex buffers
-  PropertyBufferPtr              mIndexBuffer;   ///< Intrusive pointer to index buffer
-
   Dali::Geometry::GeometryType mGeometryType;      ///< Geometry type (cached)
   bool                         mRequiresDepthTest; ///< Establish if geometry requires depth testing (cached)
 
-  bool mOnStage;
 };
 
 } // namespace Internal
index e109bf6..aa93136 100644 (file)
@@ -26,6 +26,7 @@
 #include <dali/internal/event/common/property-input-impl.h>
 #include <dali/internal/update/rendering/scene-graph-renderer.h>
 #include <dali/internal/update/manager/update-manager.h>
+#include <dali/internal/render/renderers/render-geometry.h>
 
 namespace Dali
 {
@@ -74,15 +75,15 @@ RendererPtr Renderer::New()
 
 void Renderer::SetGeometry( Geometry& geometry )
 {
-  mGeometryConnector.Set( geometry, OnStage() );
-  const SceneGraph::Geometry* geometrySceneObject = geometry.GetGeometrySceneObject();
+  mGeometry = &geometry;
 
+  const Render::Geometry* geometrySceneObject = geometry.GetRenderObject();
   SetGeometryMessage( GetEventThreadServices(), *mSceneObject, *geometrySceneObject );
 }
 
 Geometry* Renderer::GetGeometry() const
 {
-  return mGeometryConnector.Get().Get();
+  return mGeometry.Get();
 }
 
 void Renderer::SetTextures( TextureSet& textureSet )
@@ -629,7 +630,6 @@ void Renderer::Connect()
   if( mOnStageCount == 0 )
   {
     OnStageConnectMessage( GetEventThreadServices(), *mSceneObject );
-    mGeometryConnector.OnStageConnect();
     mTextureSetConnector.OnStageConnect();
   }
   ++mOnStageCount;
@@ -641,7 +641,6 @@ void Renderer::Disconnect()
   if( mOnStageCount == 0 )
   {
     OnStageDisconnectMessage( GetEventThreadServices(), *mSceneObject);
-    mGeometryConnector.OnStageDisconnect();
     mTextureSetConnector.OnStageDisconnect();
   }
 }
index e66383e..aec6305 100644 (file)
@@ -304,7 +304,7 @@ private: // unimplemented methods
 private: // data
   SceneGraph::Renderer* mSceneObject;
   Vector4* mBlendColor;                         ///< Local copy of blend color, pointer only as its rarely used
-  ObjectConnector<Geometry> mGeometryConnector; ///< Connector that holds the geometry used by this renderer
+  GeometryPtr mGeometry; ///< Connector that holds the geometry used by this renderer
   ObjectConnector<TextureSet> mTextureSetConnector; ///< Connector that holds the texture set used by this renderer
   IntrusivePtr<Shader> mShader;                 ///< Connector that holds the shader used by this renderer
 
index 90de749..b60aeff 100644 (file)
@@ -152,7 +152,6 @@ internal_src_files = \
   $(internal_src_dir)/update/nodes/scene-graph-layer.cpp \
   $(internal_src_dir)/update/render-tasks/scene-graph-render-task.cpp \
   $(internal_src_dir)/update/render-tasks/scene-graph-render-task-list.cpp \
-  $(internal_src_dir)/update/rendering/scene-graph-geometry.cpp \
   $(internal_src_dir)/update/rendering/scene-graph-texture-set.cpp \
   $(internal_src_dir)/update/rendering/scene-graph-renderer.cpp \
   $(internal_src_dir)/update/resources/resource-manager.cpp
index 23868a2..04b90a3 100644 (file)
@@ -53,8 +53,8 @@ namespace SceneGraph
 typedef OwnerContainer< Render::Renderer* >    RendererOwnerContainer;
 typedef RendererOwnerContainer::Iterator       RendererOwnerIter;
 
-typedef OwnerContainer< RenderGeometry* >      RenderGeometryOwnerContainer;
-typedef RenderGeometryOwnerContainer::Iterator RenderGeometryOwnerIter;
+typedef OwnerContainer< Render::Geometry* >    GeometryOwnerContainer;
+typedef GeometryOwnerContainer::Iterator       GeometryOwnerIter;
 
 typedef OwnerContainer< Render::Sampler* >    SamplerOwnerContainer;
 typedef SamplerOwnerContainer::Iterator       SamplerOwnerIter;
@@ -148,7 +148,7 @@ struct RenderManager::Impl
   RendererOwnerContainer        rendererContainer;        ///< List of owned renderers
   SamplerOwnerContainer         samplerContainer;         ///< List of owned samplers
   PropertyBufferOwnerContainer  propertyBufferContainer;  ///< List of owned property buffers
-  RenderGeometryOwnerContainer  renderGeometryContainer;  ///< List of owned RenderGeometries
+  GeometryOwnerContainer        geometryContainer;        ///< List of owned Geometries
 
   bool                          renderersAdded;
 
@@ -334,21 +334,26 @@ void RenderManager::SetPropertyBufferData( Render::PropertyBuffer* propertyBuffe
   propertyBuffer->SetData( data, size );
 }
 
-void RenderManager::AddGeometry( RenderGeometry* renderGeometry )
+void RenderManager::SetIndexBuffer( Render::Geometry* geometry, Dali::Vector<unsigned short>& indices )
 {
-  mImpl->renderGeometryContainer.PushBack( renderGeometry );
+  geometry->SetIndexBuffer( indices );
 }
 
-void RenderManager::RemoveGeometry( RenderGeometry* renderGeometry )
+void RenderManager::AddGeometry( Render::Geometry* geometry )
 {
-  DALI_ASSERT_DEBUG( NULL != renderGeometry );
+  mImpl->geometryContainer.PushBack( geometry );
+}
+
+void RenderManager::RemoveGeometry( Render::Geometry* geometry )
+{
+  DALI_ASSERT_DEBUG( NULL != geometry );
 
-  RenderGeometryOwnerContainer& geometries = mImpl->renderGeometryContainer;
+  GeometryOwnerContainer& geometries = mImpl->geometryContainer;
 
   // Find the geometry
-  for ( RenderGeometryOwnerIter iter = geometries.Begin(); iter != geometries.End(); ++iter )
+  for ( GeometryOwnerIter iter = geometries.Begin(); iter != geometries.End(); ++iter )
   {
-    if ( *iter == renderGeometry )
+    if ( *iter == geometry )
     {
       geometries.Erase( iter ); // Geometry found; now destroy it
       break;
@@ -356,33 +361,33 @@ void RenderManager::RemoveGeometry( RenderGeometry* renderGeometry )
   }
 }
 
-void RenderManager::AddPropertyBuffer( RenderGeometry* renderGeometry, Render::PropertyBuffer* propertyBuffer, bool isIndexBuffer )
+void RenderManager::AddVertexBuffer( Render::Geometry* geometry, Render::PropertyBuffer* propertyBuffer )
 {
-  DALI_ASSERT_DEBUG( NULL != renderGeometry );
+  DALI_ASSERT_DEBUG( NULL != geometry );
 
-  RenderGeometryOwnerContainer& geometries = mImpl->renderGeometryContainer;
+  GeometryOwnerContainer& geometries = mImpl->geometryContainer;
 
   // Find the renderer
-  for ( RenderGeometryOwnerIter iter = geometries.Begin(); iter != geometries.End(); ++iter )
+  for ( GeometryOwnerIter iter = geometries.Begin(); iter != geometries.End(); ++iter )
   {
-    if ( *iter == renderGeometry )
+    if ( *iter == geometry )
     {
-      (*iter)->AddPropertyBuffer( propertyBuffer, isIndexBuffer );
+      (*iter)->AddPropertyBuffer( propertyBuffer );
       break;
     }
   }
 }
 
-void RenderManager::RemovePropertyBuffer( RenderGeometry* renderGeometry, Render::PropertyBuffer* propertyBuffer )
+void RenderManager::RemoveVertexBuffer( Render::Geometry* geometry, Render::PropertyBuffer* propertyBuffer )
 {
-  DALI_ASSERT_DEBUG( NULL != renderGeometry );
+  DALI_ASSERT_DEBUG( NULL != geometry );
 
-  RenderGeometryOwnerContainer& geometries = mImpl->renderGeometryContainer;
+  GeometryOwnerContainer& geometries = mImpl->geometryContainer;
 
   // Find the renderer
-  for ( RenderGeometryOwnerIter iter = geometries.Begin(); iter != geometries.End(); ++iter )
+  for ( GeometryOwnerIter iter = geometries.Begin(); iter != geometries.End(); ++iter )
   {
-    if ( *iter == renderGeometry )
+    if ( *iter == geometry )
     {
       (*iter)->RemovePropertyBuffer( propertyBuffer );
       break;
@@ -390,12 +395,12 @@ void RenderManager::RemovePropertyBuffer( RenderGeometry* renderGeometry, Render
   }
 }
 
-void RenderManager::SetGeometryType( RenderGeometry* geometry, int type )
+void RenderManager::SetGeometryType( Render::Geometry* geometry, unsigned int geometryType )
 {
-  geometry->SetGeometryType( static_cast<Geometry::GeometryType>(type) );
+  geometry->SetGeometryType( Render::Geometry::GeometryType(geometryType) );
 }
 
-void RenderManager::SetGeometryRequiresDepthTest( RenderGeometry* geometry, bool requiresDepthTest )
+void RenderManager::SetGeometryRequiresDepthTest( Render::Geometry* geometry, bool requiresDepthTest )
 {
   geometry->SetRequiresDepthTest( requiresDepthTest );
 }
@@ -493,7 +498,7 @@ bool RenderManager::Render( Integration::RenderStatus& status )
   }
 
   //Notify RenderGeometries that rendering has finished
-  for ( RenderGeometryOwnerIter iter = mImpl->renderGeometryContainer.Begin(); iter != mImpl->renderGeometryContainer.End(); ++iter )
+  for ( GeometryOwnerIter iter = mImpl->geometryContainer.Begin(); iter != mImpl->geometryContainer.End(); ++iter )
   {
     (*iter)->OnRenderFinished();
   }
index a3bb7f5..ad4c059 100644 (file)
@@ -49,6 +49,7 @@ namespace Render
 class Renderer;
 class Sampler;
 class RenderTracker;
+class Geometry;
 }
 
 namespace SceneGraph
@@ -58,7 +59,6 @@ class TextureCache;
 class RenderInstruction;
 class RenderInstructionContainer;
 class Shader;
-class RenderGeometry;
 class PropertyBufferDataProvider;
 
 /**
@@ -208,30 +208,29 @@ public:
    * @param[in] geometry The geometry to add.
    * @post geometry is owned by RenderManager
    */
-  void AddGeometry( RenderGeometry* geometry );
+  void AddGeometry( Render::Geometry* geometry );
 
   /**
    * Remove a geometry from the render manager.
    * @param[in] geometry The geometry to remove.
    * @post geometry is destroyed.
    */
-  void RemoveGeometry( RenderGeometry* geometry );
+  void RemoveGeometry( Render::Geometry* geometry );
 
   /**
-   * Adds a property buffer to a RenderGeometry from the render manager.
+   * Adds a property buffer to a geometry from the render manager.
    * @param[in] geometry The geometry
    * @param[in] propertyBuffer The property buffer to remove.
-   * @param[in] isIndexBuffer True if the property buffer is intended to be used as an index buffer
    */
-  void AddPropertyBuffer( RenderGeometry* renderGeometry, Render::PropertyBuffer* propertyBuffer, bool isIndexBuffer );
+  void AddVertexBuffer( Render::Geometry* geometry, Render::PropertyBuffer* propertyBuffer );
 
   /**
-   * Remove a property buffer from a RenderGeometry from the render manager.
+   * Remove a property buffer from a Render::Geometry from the render manager.
    * @param[in] geometry The geometry
    * @param[in] propertyBuffer The property buffer to remove.
    * @post property buffer is destroyed.
    */
-  void RemovePropertyBuffer( RenderGeometry* renderGeometry, Render::PropertyBuffer* propertyBuffer );
+  void RemoveVertexBuffer( Render::Geometry* geometry, Render::PropertyBuffer* propertyBuffer );
 
   /**
    * Sets the format of an existing property buffer
@@ -249,18 +248,25 @@ public:
   void SetPropertyBufferData( Render::PropertyBuffer* propertyBuffer, Dali::Vector<char>* data, size_t size );
 
   /**
+   * Sets the data for the index buffer of an existing geometry
+   * @param[in] geometry The geometry
+   * @param[in] data A vector containing the indices
+   */
+  void SetIndexBuffer( Render::Geometry* geometry, Dali::Vector<unsigned short>& data );
+
+  /**
    * Set the geometry type of an existing render geometry
    * @param[in] geometry The render geometry
    * @param[in] geometryType The new geometry type
    */
-  void SetGeometryType( RenderGeometry* geometry, int geometryType );
+  void SetGeometryType( Render::Geometry* geometry, unsigned int geometryType );
 
   /**
    * Set if an existing geometry requires depth testing
    * @param[in] geometry The render geometry
    * @param[in] requiresDepthTest True if depth testing is required, false otherwise
    */
-  void SetGeometryRequiresDepthTest( RenderGeometry* geometry, bool requiresDepthTest );
+  void SetGeometryRequiresDepthTest( Render::Geometry* geometry, bool requiresDepthTest );
 
   /**
    * Adds a render tracker to the RenderManager. RenderManager takes ownership of the
index eb2f3d0..257b12a 100644 (file)
@@ -98,15 +98,6 @@ void GpuBuffer::UpdateDataBuffer(GLsizeiptr size, const GLvoid *data, Usage usag
 
   GLenum glTargetEnum = GL_ARRAY_BUFFER;
 
-  if(ELEMENT_ARRAY_BUFFER == target)
-  {
-    glTargetEnum = GL_ELEMENT_ARRAY_BUFFER;
-  }
-  else if(TRANSFORM_FEEDBACK_BUFFER == target)
-  {
-    glTargetEnum = GL_TRANSFORM_FEEDBACK_BUFFER;
-  }
-
   // make sure the buffer is bound, don't perform any checks because size may be zero
   if(ARRAY_BUFFER == target)
   {
@@ -114,10 +105,12 @@ void GpuBuffer::UpdateDataBuffer(GLsizeiptr size, const GLvoid *data, Usage usag
   }
   else if(ELEMENT_ARRAY_BUFFER == target)
   {
+    glTargetEnum = GL_ELEMENT_ARRAY_BUFFER;
     mContext.BindElementArrayBuffer( mBufferId );
   }
   else if(TRANSFORM_FEEDBACK_BUFFER == target)
   {
+    glTargetEnum = GL_TRANSFORM_FEEDBACK_BUFFER;
     mContext.BindTransformFeedbackBuffer( mBufferId );
   }
 
index 24a9522..0fc5c78 100644 (file)
@@ -25,66 +25,60 @@ namespace Dali
 {
 namespace Internal
 {
-namespace SceneGraph
+namespace Render
 {
 
-RenderGeometry::RenderGeometry( GeometryType type, bool requiresDepthTest )
-: mIndexBuffer(0),
-  mGeometryType( type ),
-  mRequiresDepthTest(requiresDepthTest ),
+Geometry::Geometry()
+: mIndices(),
+  mIndexBuffer(NULL),
+  mGeometryType( Dali::Geometry::TRIANGLES ),
+  mIndicesChanged(false),
+  mRequiresDepthTest(false ),
   mHasBeenUpdated(false),
   mAttributesChanged(true)
 {
 }
 
-RenderGeometry::~RenderGeometry()
+Geometry::~Geometry()
 {
 }
 
-void RenderGeometry::GlContextCreated( Context& context )
+void Geometry::GlContextCreated( Context& context )
 {
 }
 
-void RenderGeometry::GlContextDestroyed()
+void Geometry::GlContextDestroyed()
 {
 }
 
-void RenderGeometry::AddPropertyBuffer( Render::PropertyBuffer* propertyBuffer, bool isIndexBuffer )
+void Geometry::AddPropertyBuffer( Render::PropertyBuffer* propertyBuffer )
 {
-  if( isIndexBuffer )
-  {
-    mIndexBuffer = propertyBuffer;
-  }
-  else
-  {
-    mVertexBuffers.PushBack( propertyBuffer );
-    mAttributesChanged = true;
-  }
+  mVertexBuffers.PushBack( propertyBuffer );
+  mAttributesChanged = true;
 }
 
-void RenderGeometry::RemovePropertyBuffer( const Render::PropertyBuffer* propertyBuffer )
+void Geometry::SetIndexBuffer( Dali::Vector<unsigned short>& indices )
 {
-  if( propertyBuffer == mIndexBuffer )
-  {
-    mIndexBuffer = 0;
-  }
-  else
+  mIndices.Swap( indices );
+  mIndicesChanged = true;
+}
+
+void Geometry::RemovePropertyBuffer( const Render::PropertyBuffer* propertyBuffer )
+{
+  size_t bufferCount = mVertexBuffers.Size();
+  for( size_t i(0); i<bufferCount; ++i )
   {
-    size_t bufferCount = mVertexBuffers.Size();
-    for( size_t i(0); i<bufferCount; ++i )
+    if( propertyBuffer == mVertexBuffers[i] )
     {
-      if( propertyBuffer == mVertexBuffers[i] )
-      {
-        //This will delete the gpu buffer associated to the RenderPropertyBuffer if there is one
-        mVertexBuffers.Remove( mVertexBuffers.Begin()+i);
-        mAttributesChanged = true;
-        break;
-      }
+      //This will delete the gpu buffer associated to the RenderPropertyBuffer if there is one
+      mVertexBuffers.Remove( mVertexBuffers.Begin()+i);
+      mAttributesChanged = true;
+      break;
     }
   }
 }
 
-void RenderGeometry::GetAttributeLocationFromProgram( Vector<GLint>& attributeLocation, Program& program, BufferIndex bufferIndex ) const
+void Geometry::GetAttributeLocationFromProgram( Vector<GLint>& attributeLocation, Program& program, BufferIndex bufferIndex ) const
 {
   attributeLocation.Clear();
 
@@ -107,13 +101,13 @@ void RenderGeometry::GetAttributeLocationFromProgram( Vector<GLint>& attributeLo
   }
 }
 
-void RenderGeometry::OnRenderFinished()
+void Geometry::OnRenderFinished()
 {
   mHasBeenUpdated = false;
   mAttributesChanged = false;
 }
 
-void RenderGeometry::UploadAndDraw(
+void Geometry::UploadAndDraw(
     Context& context,
     BufferIndex bufferIndex,
     Vector<GLint>& attributeLocation,
@@ -123,18 +117,29 @@ void RenderGeometry::UploadAndDraw(
   if( !mHasBeenUpdated )
   {
     // Update buffers
-    if( mIndexBuffer )
+    if( mIndicesChanged )
     {
-      if(!mIndexBuffer->Update( context, true ) )
+      if( mIndices.Empty() )
       {
-        //Index buffer is not ready ( Size, data or format has not been specified yet )
-        return;
+        mIndexBuffer = NULL;
+      }
+      else
+      {
+        if ( mIndexBuffer == NULL )
+        {
+          mIndexBuffer = new GpuBuffer( context );
+        }
+
+        std::size_t bufferSize =  sizeof( unsigned short ) * mIndices.Size();
+        mIndexBuffer->UpdateDataBuffer( bufferSize, &mIndices[0], GpuBuffer::STATIC_DRAW, GpuBuffer::ELEMENT_ARRAY_BUFFER );
       }
+
+      mIndicesChanged = false;
     }
 
     for( unsigned int i = 0; i < mVertexBuffers.Count(); ++i )
     {
-      if( !mVertexBuffers[i]->Update( context, false ) )
+      if( !mVertexBuffers[i]->Update( context ) )
       {
         //Vertex buffer is not ready ( Size, data or format has not been specified yet )
         return;
@@ -145,116 +150,67 @@ void RenderGeometry::UploadAndDraw(
   }
 
   //Bind buffers to attribute locations
-  unsigned int base = 0;
-  for( unsigned int i = 0; i < mVertexBuffers.Count(); ++i )
+  unsigned int base = 0u;
+  size_t vertexBufferCount(mVertexBuffers.Count());
+  for( unsigned int i = 0; i < vertexBufferCount; ++i )
   {
     mVertexBuffers[i]->BindBuffer( GpuBuffer::ARRAY_BUFFER );
     base += mVertexBuffers[i]->EnableVertexAttributes( context, attributeLocation, base );
   }
 
-  if( mIndexBuffer )
-  {
-    mIndexBuffer->BindBuffer( GpuBuffer::ELEMENT_ARRAY_BUFFER );
-  }
-
-  //Bind index buffer
+  GLenum geometryGLType(0);
   unsigned int numIndices(0u);
   intptr_t firstIndexOffset(0u);
   if( mIndexBuffer )
   {
-    numIndices = mIndexBuffer->GetDataSize() / mIndexBuffer->GetElementSize();
+    numIndices = mIndices.Size();
+
+    if( elementBufferOffset )
+    {
+      elementBufferOffset = elementBufferOffset >= numIndices ? numIndices- 1 : elementBufferOffset;
+      firstIndexOffset = elementBufferOffset * sizeof(GLushort);
+    }
     if ( elementBufferCount )
     {
-      numIndices = elementBufferCount > numIndices ? numIndices : elementBufferCount;
+      numIndices = std::min( elementBufferCount, numIndices - elementBufferOffset );
     }
-    firstIndexOffset = elementBufferOffset * sizeof(GLushort);
   }
 
-  //Draw call
   switch(mGeometryType)
   {
     case Dali::Geometry::TRIANGLES:
     {
-      if( numIndices )
-      {
-        context.DrawElements(GL_TRIANGLES, numIndices, GL_UNSIGNED_SHORT, reinterpret_cast<void*>(firstIndexOffset) );
-      }
-      else
-      {
-        unsigned int numVertices = mVertexBuffers[0]->GetElementCount();
-        context.DrawArrays( GL_TRIANGLES, 0, numVertices );
-      }
+      geometryGLType = GL_TRIANGLES;
       break;
     }
     case Dali::Geometry::LINES:
     {
-      if( numIndices )
-      {
-        context.DrawElements(GL_LINES, numIndices, GL_UNSIGNED_SHORT, reinterpret_cast<void*>(firstIndexOffset) );
-      }
-      else
-      {
-        unsigned int numVertices = mVertexBuffers[0]->GetElementCount();
-        context.DrawArrays( GL_LINES, 0, numVertices );
-      }
+      geometryGLType = GL_LINES;
       break;
     }
     case Dali::Geometry::POINTS:
     {
-      unsigned int numVertices = mVertexBuffers[0]->GetElementCount();
-      context.DrawArrays(GL_POINTS, 0, numVertices );
+      geometryGLType = GL_POINTS;
       break;
     }
     case Dali::Geometry::TRIANGLE_STRIP:
     {
-      if( numIndices )
-      {
-        context.DrawElements(GL_TRIANGLE_STRIP, numIndices, GL_UNSIGNED_SHORT, reinterpret_cast<void*>(firstIndexOffset) );
-      }
-      else
-      {
-        unsigned int numVertices = mVertexBuffers[0]->GetElementCount();
-        context.DrawArrays(GL_TRIANGLE_STRIP, 0, numVertices );
-      }
+      geometryGLType = GL_TRIANGLE_STRIP;
       break;
     }
     case Dali::Geometry::TRIANGLE_FAN:
     {
-      if( numIndices )
-      {
-        context.DrawElements(GL_TRIANGLE_FAN, numIndices, GL_UNSIGNED_SHORT, reinterpret_cast<void*>(firstIndexOffset) );
-      }
-      else
-      {
-        unsigned int numVertices = mVertexBuffers[0]->GetElementCount();
-        context.DrawArrays(GL_TRIANGLE_FAN, 0, numVertices );
-      }
+      geometryGLType = GL_TRIANGLE_FAN;
       break;
     }
     case Dali::Geometry::LINE_LOOP:
     {
-      if( numIndices )
-      {
-        context.DrawElements(GL_LINE_LOOP, numIndices, GL_UNSIGNED_SHORT, reinterpret_cast<void*>(firstIndexOffset) );
-      }
-      else
-      {
-        unsigned int numVertices = mVertexBuffers[0]->GetElementCount();
-        context.DrawArrays(GL_LINE_LOOP, 0, numVertices );
-      }
+      geometryGLType = GL_LINE_LOOP;
       break;
     }
     case Dali::Geometry::LINE_STRIP:
     {
-      if( numIndices )
-      {
-        context.DrawElements(GL_LINE_STRIP, numIndices, GL_UNSIGNED_SHORT, reinterpret_cast<void*>(firstIndexOffset) );
-      }
-      else
-      {
-        unsigned int numVertices = mVertexBuffers[0]->GetElementCount();
-        context.DrawArrays(GL_LINE_STRIP, 0, numVertices );
-      }
+      geometryGLType = GL_LINE_STRIP;
       break;
     }
     default:
@@ -264,7 +220,26 @@ void RenderGeometry::UploadAndDraw(
     }
   }
 
-  //Disable atrributes
+  //Draw call
+  if( mIndexBuffer && geometryGLType != GL_POINTS )
+  {
+    //Indexed draw call
+    mIndexBuffer->Bind( GpuBuffer::ELEMENT_ARRAY_BUFFER );
+    context.DrawElements(geometryGLType, numIndices, GL_UNSIGNED_SHORT, reinterpret_cast<void*>(firstIndexOffset));
+  }
+  else
+  {
+    //Unindex draw call
+    unsigned int numVertices(0u);
+    if( vertexBufferCount > 0 )
+    {
+      numVertices = mVertexBuffers[0]->GetElementCount();
+    }
+
+    context.DrawArrays( geometryGLType, 0, numVertices );
+  }
+
+  //Disable attributes
   for( unsigned int i = 0; i < attributeLocation.Count(); ++i )
   {
     if( attributeLocation[i] != -1 )
index 549c827..f9777f4 100644 (file)
@@ -1,5 +1,5 @@
-#ifndef DALI_INTERNAL_SCENE_GRAPH_RENDER_GEOMETRY_H
-#define DALI_INTERNAL_SCENE_GRAPH_RENDER_GEOMETRY_H
+#ifndef DALI_INTERNAL_RENDER_GEOMETRY_H
+#define DALI_INTERNAL_RENDER_GEOMETRY_H
 
 /*
  * Copyright (c) 2015 Samsung Electronics Co., Ltd.
 
 #include <dali/public-api/common/dali-vector.h>
 #include <dali/devel-api/common/owner-container.h>
+#include <dali/devel-api/rendering/geometry.h>
+#include <dali/internal/common/owner-pointer.h>
 #include <dali/integration-api/gl-defines.h>
 #include <dali/internal/common/buffer-index.h>
 #include <dali/internal/common/owner-pointer.h>
 #include <dali/integration-api/gl-abstraction.h>
-#include <dali/internal/update/rendering/scene-graph-geometry.h>
+#include <dali/devel-api/rendering/geometry.h>
+
 
 namespace Dali
 {
@@ -36,32 +39,23 @@ class GpuBuffer;
 namespace Render
 {
 class PropertyBuffer;
-}
-
-namespace SceneGraph
-{
 
 /**
  * This class encapsulates the GPU buffers. It is used to upload vertex data
  * to it's GPU buffers, to bind all the buffers and to setup/teardown vertex attribute
  * bindings
  */
-class RenderGeometry
+class Geometry
 {
 public:
+  typedef Dali::Geometry::GeometryType GeometryType;
+
+  Geometry();
 
-  typedef SceneGraph::Geometry::GeometryType GeometryType;
-  /**
-   * Constructor. Creates a render geometry object with no GPU buffers.
-   * @param[in] center The center of the geometry
-   * @param[in] geometryType The geometry type
-   * @param[in] requiresDepthTest True if geometry requires depth testing, false otherwise
-   */
-  RenderGeometry( GeometryType geometryType, bool requiresDepthTest );
   /**
    * Destructor
    */
-  ~RenderGeometry();
+  ~Geometry();
 
   /**
    * Called on Gl Context created
@@ -76,9 +70,14 @@ public:
   /**
    * Adds a property buffer to the geometry
    * @param[in] dataProvider The PropertyBuffer data provider
-   * @param[in] isIndexBuffer True if the property buffer is intended to be used as an index buffer
    */
-  void AddPropertyBuffer( Render::PropertyBuffer* propertyBuffer, bool isIndexBuffer );
+  void AddPropertyBuffer( Render::PropertyBuffer* propertyBuffer );
+
+  /**
+   * Set the data for the index buffer to be used by the geometry
+   * @param[in] indices A vector containing the indices
+   */
+  void SetIndexBuffer( Dali::Vector<unsigned short>& indices );
 
   /**
    * Removes a PropertyBuffer from the geometry
@@ -153,20 +152,22 @@ public:
 private:
 
   // PropertyBuffers
-  Render::PropertyBuffer* mIndexBuffer;
-  Vector<Render::PropertyBuffer*> mVertexBuffers;
+  Vector< Render::PropertyBuffer* > mVertexBuffers;
 
-  GeometryType  mGeometryType;
+  Dali::Vector< unsigned short> mIndices;
+  OwnerPointer< GpuBuffer > mIndexBuffer;
+  GeometryType mGeometryType;
 
   // Booleans
+  bool mIndicesChanged : 1;
   bool mRequiresDepthTest : 1;
   bool mHasBeenUpdated : 1;
   bool mAttributesChanged : 1;
 
 };
 
-} // namespace SceneGraph
+} // namespace Render
 } // namespace Internal
 } // namespace Dali
 
-#endif // DALI_INTERNAL_SCENE_GRAPH_SAMPLER_DATA_PROVIDER_H
+#endif // DALI_INTERNAL_RENDER_GEOMETRY_H
index eb17d9e..6be4623 100644 (file)
@@ -125,7 +125,7 @@ void PropertyBuffer::SetData( Dali::Vector<char>* data, size_t size )
   mDataChanged = true;
 }
 
-bool PropertyBuffer::Update( Context& context, bool isIndexBuffer )
+bool PropertyBuffer::Update( Context& context )
 {
   if( !mData || !mFormat || !mSize )
   {
@@ -143,31 +143,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]);
-      std::size_t dataSize =  GetDataSize();
-
-      // 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]);
-        dataSize = ushortData.Size() * sizeof( unsigned short );
-      }
-
-      GpuBuffer::Target target = GpuBuffer::ARRAY_BUFFER;
-      if(isIndexBuffer)
-      {
-        target = GpuBuffer::ELEMENT_ARRAY_BUFFER;
-      }
-      mGpuBuffer->UpdateDataBuffer( dataSize, data, GpuBuffer::STATIC_DRAW, target );
-
+      mGpuBuffer->UpdateDataBuffer( GetDataSize(), &((*mData)[0]), GpuBuffer::STATIC_DRAW, GpuBuffer::ARRAY_BUFFER );
     }
 
     mDataChanged = false;
index 5cc92f4..86c74ff 100644 (file)
@@ -93,9 +93,8 @@ public:
   /**
    * Perform the upload of the buffer only when requiered
    * @param[in] context The GL context
-   * @param[in] isIndexBuffer True if the buffer is used as an index buffer
    */
-  bool Update( Context& context, bool isIndexBuffer );
+  bool Update( Context& context );
 
   /**
    * Enable the vertex attributes for each vertex buffer from the corresponding
index ab85957..1edc017 100644 (file)
@@ -111,17 +111,17 @@ namespace Render
 {
 
 Renderer* Renderer::New( SceneGraph::RenderDataProvider* dataProvider,
-                         SceneGraph::RenderGeometry* renderGeometry,
+                         Render::Geometry* geometry,
                          unsigned int blendingBitmask,
                          const Vector4* blendColor,
                          Dali::Renderer::FaceCullingMode faceCullingMode,
                          bool preMultipliedAlphaEnabled )
 {
-  return new Renderer( dataProvider, renderGeometry, blendingBitmask, blendColor, faceCullingMode, preMultipliedAlphaEnabled );
+  return new Renderer( dataProvider, geometry, blendingBitmask, blendColor, faceCullingMode, preMultipliedAlphaEnabled );
 }
 
 Renderer::Renderer( SceneGraph::RenderDataProvider* dataProvider,
-                    SceneGraph::RenderGeometry* renderGeometry,
+                    Render::Geometry* geometry,
                     unsigned int blendingBitmask,
                     const Vector4* blendColor,
                     Dali::Renderer::FaceCullingMode faceCullingMode,
@@ -130,7 +130,7 @@ Renderer::Renderer( SceneGraph::RenderDataProvider* dataProvider,
   mContext(NULL),
   mTextureCache( NULL ),
   mUniformNameCache( NULL ),
-  mRenderGeometry( renderGeometry ),
+  mGeometry( geometry ),
   mUniformIndexMap(),
   mAttributesLocation(),
   mBlendingOptions(),
@@ -169,9 +169,9 @@ void Renderer::SetRenderDataProvider( SceneGraph::RenderDataProvider* dataProvid
   mUpdateAttributesLocation = true;
 }
 
-void Renderer::SetGeometry( SceneGraph::RenderGeometry* renderGeometry )
+void Renderer::SetGeometry( Render::Geometry* geometry )
 {
-  mRenderGeometry = renderGeometry;
+  mGeometry = geometry;
   mUpdateAttributesLocation = true;
 }
 
@@ -180,7 +180,7 @@ void Renderer::SetGeometry( SceneGraph::RenderGeometry* renderGeometry )
 // @todo MESH_REWORK Should use Update thread objects only in PrepareRenderInstructions.
 bool Renderer::RequiresDepthTest() const
 {
-  return mRenderGeometry->RequiresDepthTest();
+  return mGeometry->RequiresDepthTest();
 }
 
 void Renderer::SetBlending( Context& context, bool blend )
@@ -213,7 +213,7 @@ void Renderer::SetBlending( Context& context, bool blend )
 
 void Renderer::GlContextDestroyed()
 {
-  mRenderGeometry->GlContextDestroyed();
+  mGeometry->GlContextDestroyed();
 }
 
 void Renderer::GlCleanup()
@@ -495,15 +495,15 @@ void Renderer::Render( Context& context,
       }
     }
 
-  SetUniforms( bufferIndex, node, size, *program );
+    SetUniforms( bufferIndex, node, size, *program );
 
-    if( mUpdateAttributesLocation || mRenderGeometry->AttributesChanged() )
+    if( mUpdateAttributesLocation || mGeometry->AttributesChanged() )
     {
-      mRenderGeometry->GetAttributeLocationFromProgram( mAttributesLocation, *program, bufferIndex );
+      mGeometry->GetAttributeLocationFromProgram( mAttributesLocation, *program, bufferIndex );
       mUpdateAttributesLocation = false;
     }
 
-    mRenderGeometry->UploadAndDraw( context, bufferIndex, mAttributesLocation, mIndexedDrawFirstElement, mIndexedDrawElementsCount );
+    mGeometry->UploadAndDraw( context, bufferIndex, mAttributesLocation, mIndexedDrawFirstElement, mIndexedDrawElementsCount );
   }
 }
 
@@ -520,7 +520,7 @@ void Renderer::SetSortAttributes( BufferIndex bufferIndex, SceneGraph::RendererW
     sortAttributes.textureResourceId = Integration::InvalidResourceId;
   }
 
-  sortAttributes.geometry = mRenderGeometry;
+  sortAttributes.geometry = mGeometry;
 }
 
 } // namespace SceneGraph
index d1cd70b..9c6b5b4 100644 (file)
 #include <dali/devel-api/rendering/texture-set.h>
 #include <dali/internal/common/blending-options.h>
 #include <dali/internal/common/message.h>
+#include <dali/internal/event/common/property-input-impl.h>
 #include <dali/internal/event/effects/shader-declarations.h>
 #include <dali/internal/render/gl-resources/gl-resource-owner.h>
 #include <dali/integration-api/debug.h>
 #include <dali/internal/common/type-abstraction-enums.h>
 #include <dali/internal/update/manager/prepare-render-instructions.h>
+#include <dali/internal/render/data-providers/render-data-provider.h>
 #include <dali/internal/render/renderers/render-geometry.h>
 
 namespace Dali
@@ -75,14 +77,14 @@ public:
   /**
    * Create a new renderer instance
    * @param[in] dataProviders The data providers for the renderer
-   * @param[in] renderGeometry The geometry for the renderer
+   * @param[in] geometry The geometry for the renderer
    * @param[in] blendingBitmask A bitmask of blending options.
    * @param[in] blendColor The blend color to pass to GL
    * @param[in] faceCullingMode The face-culling mode.
    * @param[in] preMultipliedAlphaEnabled whether alpha is pre-multiplied.
    */
   static Renderer* New( SceneGraph::RenderDataProvider* dataProviders,
-                        SceneGraph::RenderGeometry* renderGeometry,
+                        Render::Geometry* geometry,
                         unsigned int blendingBitmask,
                         const Vector4* blendColor,
                         Dali::Renderer::FaceCullingMode faceCullingMode,
@@ -91,14 +93,14 @@ public:
   /**
    * Constructor.
    * @param[in] dataProviders The data providers for the renderer
-   * @param[in] renderGeometry The geometry for the renderer
+   * @param[in] geometry The geometry for the renderer
    * @param[in] blendingBitmask A bitmask of blending options.
    * @param[in] blendColor The blend color to pass to GL
    * @param[in] faceCullingMode The face-culling mode.
    * @param[in] preMultipliedAlphaEnabled whether alpha is pre-multiplied.
    */
   Renderer( SceneGraph::RenderDataProvider* dataProviders,
-            SceneGraph::RenderGeometry* renderGeometry,
+            Render::Geometry* geometry,
             unsigned int blendingBitmask,
             const Vector4* blendColor,
             Dali::Renderer::FaceCullingMode faceCullingMode,
@@ -112,9 +114,9 @@ public:
 
   /**
    * Change the geometry used by the renderer
-   * @param[in] renderGeometry The new geometry
+   * @param[in] geometry The new geometry
    */
-  void SetGeometry( SceneGraph::RenderGeometry* renderGeometry );
+  void SetGeometry( Render::Geometry* geometry );
   /**
    * Second-phase construction.
    * This is called when the renderer is inside render thread
@@ -256,7 +258,7 @@ private:
   Context* mContext;
   SceneGraph::TextureCache* mTextureCache;
   Render::UniformNameCache* mUniformNameCache;
-  SceneGraph::RenderGeometry* mRenderGeometry;
+  Render::Geometry* mGeometry;
 
   struct UniformIndexMap
   {
index 8cdf262..5fd4954 100644 (file)
@@ -78,23 +78,6 @@ void DiscardQueue::Add( BufferIndex updateBufferIndex, Renderer* renderer )
   }
 }
 
-void DiscardQueue::Add( BufferIndex updateBufferIndex, Geometry* geometry )
-{
-  DALI_ASSERT_DEBUG( NULL != geometry );
-
-  // The GL resources will now be freed in frame N
-  // The Update for frame N+1 may occur in parallel with the rendering of frame N
-  // Queue the node for destruction in frame N+2
-  if ( 0u == updateBufferIndex )
-  {
-    mGeometryQueue0.PushBack( geometry );
-  }
-  else
-  {
-    mGeometryQueue1.PushBack( geometry );
-  }
-}
-
 void DiscardQueue::Add( BufferIndex updateBufferIndex, TextureSet* textureSet )
 {
   DALI_ASSERT_DEBUG( NULL != textureSet );
@@ -140,7 +123,6 @@ void DiscardQueue::Clear( BufferIndex updateBufferIndex )
   {
     mNodeQueue0.Clear();
     mShaderQueue0.Clear();
-    mGeometryQueue0.Clear();
     mTextureSetQueue0.Clear();
     mRendererQueue0.Clear();
   }
@@ -148,7 +130,6 @@ void DiscardQueue::Clear( BufferIndex updateBufferIndex )
   {
     mNodeQueue1.Clear();
     mShaderQueue1.Clear();
-    mGeometryQueue1.Clear();
     mTextureSetQueue1.Clear();
     mRendererQueue1.Clear();
   }
index 268ae57..c9cb7d0 100644 (file)
@@ -23,7 +23,6 @@
 #include <dali/devel-api/common/owner-container.h>
 #include <dali/internal/common/buffer-index.h>
 #include <dali/internal/update/nodes/node-declarations.h>
-#include <dali/internal/update/rendering/scene-graph-geometry.h>
 #include <dali/internal/update/rendering/scene-graph-texture-set.h>
 #include <dali/internal/update/rendering/scene-graph-renderer.h>
 
@@ -55,7 +54,6 @@ class DiscardQueue
 public:
 
   typedef OwnerContainer< Shader* > ShaderQueue;
-  typedef OwnerContainer< Geometry* > GeometryQueue;
   typedef OwnerContainer< TextureSet* > TextureSetQueue;
   typedef OwnerContainer< Renderer* > RendererQueue;
 
@@ -80,12 +78,6 @@ public:
   void Add( BufferIndex updateBufferIndex, Node* node );
 
   /**
-   * Adds an unwanted geometry to the discard queue.
-   * A message will be sent to clean up GL resources in the next Render
-   */
-  void Add( BufferIndex updateBufferIndex, Geometry* geometry );
-
-  /**
    * Adds an unwanted texture set to the discard queue.
    * A message will be sent to clean up GL resources in the next Render.
    */
@@ -130,14 +122,12 @@ private:
   // Messages are queued here when the update buffer index == 0
   NodeOwnerContainer           mNodeQueue0;
   ShaderQueue                  mShaderQueue0;
-  GeometryQueue                mGeometryQueue0;
   TextureSetQueue              mTextureSetQueue0;
   RendererQueue                mRendererQueue0;
 
   // Messages are queued here when the update buffer index == 1
   NodeOwnerContainer           mNodeQueue1;
   ShaderQueue                  mShaderQueue1;
-  GeometryQueue                mGeometryQueue1;
   TextureSetQueue              mTextureSetQueue1;
   RendererQueue                mRendererQueue1;
 };
index 39798c5..1e146d0 100644 (file)
@@ -65,72 +65,6 @@ void RenderMessageDispatcher::RemoveRenderer( Render::Renderer& renderer )
   new (slot) DerivedType( &mRenderManager, &RenderManager::RemoveRenderer, &renderer );
 }
 
-void RenderMessageDispatcher::AddGeometry( RenderGeometry& renderGeometry )
-{
-  typedef MessageValue1< RenderManager, RenderGeometry* > DerivedType;
-
-  // Reserve some memory inside the render queue
-  unsigned int* slot = mRenderQueue.ReserveMessageSlot( mBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
-
-  // Construct message in the render queue memory; note that delete should not be called on the return value
-  new (slot) DerivedType( &mRenderManager, &RenderManager::AddGeometry, &renderGeometry );
-}
-
-void RenderMessageDispatcher::RemoveGeometry( RenderGeometry& renderGeometry )
-{
-  typedef MessageValue1< RenderManager, RenderGeometry* > DerivedType;
-
-  // Reserve some memory inside the render queue
-  unsigned int* slot = mRenderQueue.ReserveMessageSlot( mBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
-
-  // Construct message in the render queue memory; note that delete should not be called on the return value
-  new (slot) DerivedType( &mRenderManager, &RenderManager::RemoveGeometry, &renderGeometry );
-}
-
-void RenderMessageDispatcher::AddPropertyBuffer( RenderGeometry& renderGeometry, Render::PropertyBuffer* propertyBuffer, bool isIndexBuffer )
-{
-  typedef MessageValue3< RenderManager, RenderGeometry*, Render::PropertyBuffer*, bool > DerivedType;
-
-  // Reserve some memory inside the render queue
-  unsigned int* slot = mRenderQueue.ReserveMessageSlot( mBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
-
-  // Construct message in the render queue memory; note that delete should not be called on the return value
-  new (slot) DerivedType( &mRenderManager, &RenderManager::AddPropertyBuffer, &renderGeometry, propertyBuffer, isIndexBuffer);
-}
-
-void RenderMessageDispatcher::RemovePropertyBuffer( RenderGeometry& renderGeometry, Render::PropertyBuffer* propertyBuffer )
-{
-  typedef MessageValue2< RenderManager, RenderGeometry*, Render::PropertyBuffer* > DerivedType;
-
-  // Reserve some memory inside the render queue
-  unsigned int* slot = mRenderQueue.ReserveMessageSlot( mBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
-
-  // Construct message in the render queue memory; note that delete should not be called on the return value
-  new (slot) DerivedType( &mRenderManager, &RenderManager::RemovePropertyBuffer, &renderGeometry, propertyBuffer );
-}
-
-void RenderMessageDispatcher::SetGeometryType( RenderGeometry& geometry, int geometryType )
-{
-  typedef MessageValue2< RenderManager, RenderGeometry*, int > DerivedType;
-
-  // Reserve some memory inside the render queue
-  unsigned int* slot = mRenderQueue.ReserveMessageSlot( mBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
-
-  // Construct message in the render queue memory; note that delete should not be called on the return value
-  new (slot) DerivedType( &mRenderManager, &RenderManager::SetGeometryType, &geometry, geometryType );
-}
-
-void RenderMessageDispatcher::SetGeometryRequiresDepthTest( RenderGeometry& geometry, bool requiresDepthTest )
-{
-  typedef MessageValue2< RenderManager, RenderGeometry*, bool > DerivedType;
-
-  // Reserve some memory inside the render queue
-  unsigned int* slot = mRenderQueue.ReserveMessageSlot( mBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
-
-  // Construct message in the render queue memory; note that delete should not be called on the return value
-  new (slot) DerivedType( &mRenderManager, &RenderManager::SetGeometryRequiresDepthTest, &geometry, requiresDepthTest );
-}
-
 void RenderMessageDispatcher::AddRenderTracker( Render::RenderTracker& renderTracker )
 {
   typedef MessageValue1< RenderManager, Render::RenderTracker* > DerivedType;
index 70be8cf..3554754 100644 (file)
@@ -40,7 +40,6 @@ namespace SceneGraph
 
 class RenderManager;
 class RenderQueue;
-class RenderGeometry;
 class PropertyBufferDataProvider;
 /**
  * A utility class for sending messages to the render-thread.
@@ -74,50 +73,6 @@ public:
   void RemoveRenderer( Render::Renderer& renderer );
 
   /**
-   * Add a Geometry
-   * @param[in] renderGeometry The geometry to add.
-   * @post RenderGeometry ownership is transferred.
-   */
-  void AddGeometry( RenderGeometry& renderGeometry );
-
-  /**
-   * Remove a Geometry.
-   * @param[in] renderGeometry The geometry to remove.
-   * @post RenderGeometry will be destroyed in the next Render.
-   */
-  void RemoveGeometry( RenderGeometry& renderGeometry );
-
-  /**
-   * Add a PropertyBuffer.
-   * @param[in] renderGeometry The geometry
-   * @param[in] propertyBuffer The PropertyBuffer
-   * @param[in] isIndexBuffer True if the buffer is intended to be used as an index buffer
-   */
-  void AddPropertyBuffer( RenderGeometry& renderGeometry, Render::PropertyBuffer* propertyBuffer, bool isIndexBuffer );
-
-  /**
-   * Remove a PropertyBuffer.
-   * @param[in] renderGeometry The geometry
-   * @param[in] propertyBuffer The PropertyBuffer
-   * @post PropertyBuffer will be destroyed in the next Render.
-   */
-  void RemovePropertyBuffer( RenderGeometry& renderGeometry, Render::PropertyBuffer* propertyBuffer );
-
-  /**
-   * Set the geometry type of an existing render geometry
-   * @param[in] geometry The render geometry
-   * @param[in] geometryType The new geometry type
-   */
-  void SetGeometryType( RenderGeometry& geometry, int geometryType );
-
-  /**
-   * Set if an existing geometry requires depth testing
-   * @param[in] geometry The render geometry
-   * @param[in] requiresDepthTest True if depth testing is required, false otherwise
-   */
-  void SetGeometryRequiresDepthTest( RenderGeometry& geometry, bool requiresDepthTest );
-
-  /**
    * Add a Render tracker.
    * @param[in] renderTracker The render tracker to add.
    * @post ownership is transferred
index 1745827..4f3e2e9 100644 (file)
@@ -27,7 +27,6 @@
 #include <dali/internal/update/manager/sorted-layers.h>
 #include <dali/internal/update/render-tasks/scene-graph-render-task.h>
 #include <dali/internal/update/rendering/scene-graph-texture-set.h>
-#include <dali/internal/update/rendering/scene-graph-geometry.h>
 #include <dali/internal/update/resources/resource-manager-declarations.h>
 #include <dali/internal/render/common/render-item.h>
 #include <dali/internal/render/common/render-tracker.h>
index c61f04c..860d2a0 100644 (file)
@@ -29,12 +29,16 @@ namespace Dali
 namespace Internal
 {
 
+namespace Render
+{
+class Geometry;
+}
+
 namespace SceneGraph
 {
 class RenderTracker;
 class RenderItem;
 class Shader;
-class RenderGeometry;
 
 /**
  * Structure to store information for sorting the renderers.
@@ -54,7 +58,7 @@ struct RendererWithSortAttributes
   RenderItem*                   renderItem;       ///< The render item that is being sorted (includes depth index)
   const Shader*                 shader;           ///< The shader instance
   Integration::ResourceId       textureResourceId;///< The first texture resource ID of the texture set instance, is InvalidResourceId if the texture set doesn't have any textures
-  const RenderGeometry*         geometry;         ///< The geometry instance
+  const Render::Geometry*       geometry;         ///< The geometry instance
   float                         zValue;           ///< The zValue of the given renderer (either distance from camera, or a custom calculated value)
 };
 
index 0fbd58c..c414c4e 100644 (file)
@@ -57,7 +57,6 @@
 #include <dali/internal/update/render-tasks/scene-graph-render-task.h>
 #include <dali/internal/update/render-tasks/scene-graph-render-task-list.h>
 #include <dali/internal/update/rendering/scene-graph-texture-set.h>
-#include <dali/internal/update/rendering/scene-graph-geometry.h>
 #include <dali/internal/update/resources/resource-manager.h>
 #include <dali/internal/update/touch/touch-resampler.h>
 
@@ -151,7 +150,6 @@ struct UpdateManager::Impl
     root( NULL ),
     systemLevelRoot( NULL ),
     renderers( sceneGraphBuffers, discardQueue ),
-    geometries( sceneGraphBuffers, discardQueue ),
     textureSets( sceneGraphBuffers, discardQueue ),
     messageQueue( renderController, sceneGraphBuffers ),
     keepRenderingSeconds( 0.0f ),
@@ -165,7 +163,6 @@ struct UpdateManager::Impl
     sceneController = new SceneControllerImpl( renderMessageDispatcher, renderQueue, discardQueue, textureCache );
 
     renderers.SetSceneController( *sceneController );
-    geometries.SetSceneController( *sceneController );
     textureSets.SetSceneController( *sceneController );
 
     // create first 'dummy' node
@@ -252,7 +249,6 @@ struct UpdateManager::Impl
   PropertyNotificationContainer       propertyNotifications;         ///< A container of owner property notifications.
 
   ObjectOwnerContainer<Renderer>      renderers;
-  ObjectOwnerContainer<Geometry>      geometries;                    ///< A container of geometries
   ObjectOwnerContainer<TextureSet>    textureSets;                     ///< A container of texture sets
 
   ShaderContainer                     shaders;                       ///< A container of owned shaders
@@ -496,11 +492,6 @@ void UpdateManager::PropertyNotificationSetNotify( PropertyNotification* propert
   propertyNotification->SetNotifyMode( notifyMode );
 }
 
-ObjectOwnerContainer<Geometry>& UpdateManager::GetGeometryOwner()
-{
-  return mImpl->geometries;
-}
-
 ObjectOwnerContainer<Renderer>& UpdateManager::GetRendererOwner()
 {
   return mImpl->renderers;
@@ -686,7 +677,6 @@ void UpdateManager::ResetProperties( BufferIndex bufferIndex )
   }
 
   mImpl->textureSets.ResetToBaseValues( bufferIndex );
-  mImpl->geometries.ResetToBaseValues( bufferIndex );
   mImpl->renderers.ResetToBaseValues( bufferIndex );
 
   // Reset animatable shader properties to base values
@@ -959,10 +949,9 @@ unsigned int UpdateManager::Update( float elapsedSeconds,
     //This will populate each Layer with a list of renderers which are ready.
     UpdateNodes( bufferIndex );
 
-    //Apply constraints to RenderTasks, shaders and geometries
+    //Apply constraints to RenderTasks, shaders
     ConstrainRenderTasks( bufferIndex );
     ConstrainShaders( bufferIndex );
-    mImpl->geometries.ConstrainObjects( bufferIndex );
 
     //Update renderers and apply constraints
     UpdateRenderers( bufferIndex );
@@ -1215,6 +1204,84 @@ void UpdateManager::SetPropertyBufferData( Render::PropertyBuffer* propertyBuffe
   new (slot) DerivedType( &mImpl->renderManager, &RenderManager::SetPropertyBufferData, propertyBuffer, data, size );
 }
 
+void UpdateManager::AddGeometry( Render::Geometry* geometry )
+{
+  typedef MessageValue1< RenderManager, Render::Geometry* > DerivedType;
+
+  // Reserve some memory inside the render queue
+  unsigned int* slot = mImpl->renderQueue.ReserveMessageSlot( mSceneGraphBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
+
+  // Construct message in the render queue memory; note that delete should not be called on the return value
+  new (slot) DerivedType( &mImpl->renderManager,  &RenderManager::AddGeometry, geometry );
+}
+
+void UpdateManager::RemoveGeometry( Render::Geometry* geometry )
+{
+  typedef MessageValue1< RenderManager, Render::Geometry* > DerivedType;
+
+  // Reserve some memory inside the render queue
+  unsigned int* slot = mImpl->renderQueue.ReserveMessageSlot( mSceneGraphBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
+
+  // Construct message in the render queue memory; note that delete should not be called on the return value
+  new (slot) DerivedType( &mImpl->renderManager,  &RenderManager::RemoveGeometry, geometry );
+}
+
+void UpdateManager::SetGeometryRequiresDepthTest( Render::Geometry* geometry, bool requiresDepthTest )
+{
+  typedef MessageValue2< RenderManager, Render::Geometry*, bool > DerivedType;
+
+  // Reserve some memory inside the render queue
+  unsigned int* slot = mImpl->renderQueue.ReserveMessageSlot( mSceneGraphBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
+
+  // Construct message in the render queue memory; note that delete should not be called on the return value
+  new (slot) DerivedType( &mImpl->renderManager,  &RenderManager::SetGeometryRequiresDepthTest, geometry, requiresDepthTest );
+}
+
+void UpdateManager::SetGeometryType( Render::Geometry* geometry, unsigned int geometryType )
+{
+  typedef MessageValue2< RenderManager, Render::Geometry*, unsigned int > DerivedType;
+
+  // Reserve some memory inside the render queue
+  unsigned int* slot = mImpl->renderQueue.ReserveMessageSlot( mSceneGraphBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
+
+  // Construct message in the render queue memory; note that delete should not be called on the return value
+  new (slot) DerivedType( &mImpl->renderManager,  &RenderManager::SetGeometryType, geometry, geometryType );
+}
+
+void UpdateManager::SetIndexBuffer( Render::Geometry* geometry, Dali::Vector<unsigned short>& indices )
+{
+  typedef IndexBufferMessage< RenderManager > DerivedType;
+
+  // Reserve some memory inside the render queue
+  unsigned int* slot = mImpl->renderQueue.ReserveMessageSlot( mSceneGraphBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
+
+  // Construct message in the render queue memory; note that delete should not be called on the return value
+  new (slot) DerivedType( &mImpl->renderManager, geometry, indices );
+}
+
+void UpdateManager::RemoveVertexBuffer( Render::Geometry* geometry, Render::PropertyBuffer* propertyBuffer )
+{
+  typedef MessageValue2< RenderManager, Render::Geometry*, Render::PropertyBuffer* > DerivedType;
+
+  // Reserve some memory inside the render queue
+  unsigned int* slot = mImpl->renderQueue.ReserveMessageSlot( mSceneGraphBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
+
+  // Construct message in the render queue memory; note that delete should not be called on the return value
+  new (slot) DerivedType( &mImpl->renderManager,  &RenderManager::RemoveVertexBuffer, geometry, propertyBuffer );
+}
+
+void UpdateManager::AddVertexBuffer( Render::Geometry* geometry, Render::PropertyBuffer* propertyBuffer )
+{
+  typedef MessageValue2< RenderManager, Render::Geometry*, Render::PropertyBuffer* > DerivedType;
+
+  // Reserve some memory inside the render queue
+  unsigned int* slot = mImpl->renderQueue.ReserveMessageSlot( mSceneGraphBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
+
+  // Construct message in the render queue memory; note that delete should not be called on the return value
+  new (slot) DerivedType( &mImpl->renderManager,  &RenderManager::AddVertexBuffer, geometry, propertyBuffer );
+}
+
+
 } // namespace SceneGraph
 
 } // namespace Internal
index 54d8d96..745e042 100644 (file)
@@ -76,7 +76,6 @@ class RenderManager;
 class RenderTaskList;
 class RenderQueue;
 class TextureCache;
-class Geometry;
 class PropertyBuffer;
 class TextureSet;
 
@@ -244,13 +243,6 @@ public:
   void PropertyNotificationSetNotify( PropertyNotification* propertyNotification, PropertyNotification::NotifyMode notifyMode );
 
   /**
-   * @brief Get the geometry owner
-   *
-   * @return The geometry owner
-   */
-  ObjectOwnerContainer< Geometry >& GetGeometryOwner();
-
-  /**
    * @brief Get the renderer owner
    *
    * @return The renderer owner
@@ -395,7 +387,7 @@ public:
   void SetWrapMode( Render::Sampler* sampler, unsigned int uWrapMode, unsigned int vWrapMode );
 
   /**
-   * Add a new sampler to RenderManager
+   * Add a new property buffer to RenderManager
    * @param[in] propertryBuffer The property buffer to add
    * @post Sends a message to RenderManager to add the property buffer.
    * The property buffer will be owned by RenderManager
@@ -426,6 +418,57 @@ public:
    */
   void SetPropertyBufferData(Render::PropertyBuffer* propertyBuffer, Dali::Vector<char>* data, size_t size);
 
+  /**
+   * Adds a geometry to the RenderManager
+   * @param[in] geometry The geometry to add
+   * @post Sends a message to RenderManager to add the Geometry
+   * The geometry will be owned by RenderManager
+   */
+  void AddGeometry( Render::Geometry* geometry );
+
+  /**
+   * Removes an existing Geometry from RenderManager
+   * @param[in] geometry The geometry to remove
+   * @post The geometry will be destroyed in the render thread
+   */
+  void RemoveGeometry( Render::Geometry* geometry );
+
+  /**
+   * Sets if a Geometry requieres depth testing
+   * @param[in] geometry The geometry
+   * @param[in] requiresDepthTest True if the geometry requires depth testing, false otherwise
+   */
+  void SetGeometryRequiresDepthTest( Render::Geometry* geometry, bool requiresDepthTest );
+
+  /**
+   * Sets the geometry type of an existing Geometry
+   * @param[in] geometry The geometry
+   * @param[in] geometryType The type of the geometry
+   */
+  void SetGeometryType( Render::Geometry* geometry, unsigned int geometryType );
+
+  /**
+   * Sets the index buffer to be used by a geometry
+   * @param[in] geometry The geometry
+   * @param[in] indices A vector containing the indices for the geometry
+   */
+  void SetIndexBuffer( Render::Geometry* geometry, Dali::Vector<unsigned short>& indices );
+
+  /**
+   * Adds a vertex buffer to a geomtry
+   * @param[in] geometry The geometry
+   * @param[in] propertyBuffer The property buffer
+   */
+  void AddVertexBuffer( Render::Geometry* geometry, Render::PropertyBuffer* propertyBuffer );
+
+  /**
+   * Removes a vertex buffer from a geometry
+   * @param[in] geometry The geometry
+   * @param[in] propertyBuffer The property buffer
+   */
+  void RemoveVertexBuffer( Render::Geometry* geometry, Render::PropertyBuffer* propertyBuffer );
+
+
 public:
 
   /**
@@ -975,6 +1018,123 @@ inline void SetPropertyBufferData( UpdateManager& manager, Render::PropertyBuffe
   new (slot) LocalType( &manager, &UpdateManager::SetPropertyBufferData, &propertyBuffer, data, size );
 }
 
+inline void AddGeometry( UpdateManager& manager, Render::Geometry& geometry )
+{
+  typedef MessageValue1< UpdateManager, Render::Geometry*  > LocalType;
+
+  // Reserve some memory inside the message queue
+  unsigned int* slot = manager.ReserveMessageSlot( sizeof( LocalType ) );
+
+  // Construct message in the message queue memory; note that delete should not be called on the return value
+  new (slot) LocalType( &manager, &UpdateManager::AddGeometry, &geometry );
+}
+
+inline void RemoveGeometry( UpdateManager& manager, Render::Geometry& geometry )
+{
+  typedef MessageValue1< UpdateManager, Render::Geometry*  > LocalType;
+
+  // Reserve some memory inside the message queue
+  unsigned int* slot = manager.ReserveMessageSlot( sizeof( LocalType ) );
+
+  // Construct message in the message queue memory; note that delete should not be called on the return value
+  new (slot) LocalType( &manager, &UpdateManager::RemoveGeometry, &geometry );
+}
+
+inline void AddVertexBufferMessage( UpdateManager& manager, Render::Geometry& geometry, const Render::PropertyBuffer& vertexBuffer )
+{
+  typedef MessageValue2< UpdateManager, Render::Geometry*, Render::PropertyBuffer* > LocalType;
+
+  // Reserve some memory inside the message queue
+  unsigned int* slot = manager.ReserveMessageSlot( sizeof( LocalType ) );
+
+  // Construct message in the message queue memory; note that delete should not be called on the return value
+  new (slot) LocalType( &manager, &UpdateManager::AddVertexBuffer, &geometry, const_cast<Render::PropertyBuffer*>(&vertexBuffer) );
+}
+
+inline void RemoveVertexBufferMessage( UpdateManager& manager, Render::Geometry& geometry, const Render::PropertyBuffer& vertexBuffer )
+{
+  typedef MessageValue2< UpdateManager, Render::Geometry*, Render::PropertyBuffer* > LocalType;
+
+  // Reserve some memory inside the message queue
+  unsigned int* slot = manager.ReserveMessageSlot( sizeof( LocalType ) );
+
+  // Construct message in the message queue memory; note that delete should not be called on the return value
+  new (slot) LocalType( &manager, &UpdateManager::RemoveVertexBuffer, &geometry, const_cast<Render::PropertyBuffer*>(&vertexBuffer) );
+}
+
+// Custom message type for SetIndexBuffer() used to move data with Vector::Swap()
+template< typename T >
+class IndexBufferMessage : public MessageBase
+{
+public:
+
+  /**
+   * Constructor which does a Vector::Swap()
+   */
+  IndexBufferMessage( T* manager, Render::Geometry* geometry, Dali::Vector<unsigned short>& indices )
+  : MessageBase(),
+    mManager( manager ),
+    mRenderGeometry( geometry )
+  {
+    mIndices.Swap( indices );
+  }
+
+  /**
+   * Virtual destructor
+   */
+  virtual ~IndexBufferMessage()
+  {
+  }
+
+  /**
+   * @copydoc MessageBase::Process
+   */
+  virtual void Process( BufferIndex /*bufferIndex*/ )
+  {
+    DALI_ASSERT_DEBUG( mManager && "Message does not have an object" );
+    mManager->SetIndexBuffer( mRenderGeometry, mIndices );
+  }
+
+private:
+
+  T* mManager;
+  Render::Geometry* mRenderGeometry;
+  Dali::Vector<unsigned short> mIndices;
+};
+
+inline void SetIndexBufferMessage( UpdateManager& manager, Render::Geometry& geometry, Dali::Vector<unsigned short>& indices )
+{
+  typedef IndexBufferMessage< UpdateManager > LocalType;
+
+  // Reserve some memory inside the message queue
+  unsigned int* slot = manager.ReserveMessageSlot( sizeof( LocalType ) );
+
+  // Construct message in the message queue memory; note that delete should not be called on the return value
+  new (slot) LocalType( &manager, &geometry, indices );
+}
+
+inline void SetGeometryTypeMessage( UpdateManager& manager, Render::Geometry& geometry, unsigned int geometryType )
+{
+  typedef MessageValue2< UpdateManager, Render::Geometry*, unsigned int > LocalType;
+
+  // Reserve some memory inside the message queue
+  unsigned int* slot = manager.ReserveMessageSlot( sizeof( LocalType ) );
+
+  // Construct message in the message queue memory; note that delete should not be called on the return value
+  new (slot) LocalType( &manager, &UpdateManager::SetGeometryType, &geometry, geometryType );
+}
+
+inline void SetGeometryRequiresDepthTestMessage( UpdateManager& manager, Render::Geometry& geometry, bool requiresDepthTest )
+{
+  typedef MessageValue2< UpdateManager, Render::Geometry*, bool > LocalType;
+
+  // Reserve some memory inside the message queue
+  unsigned int* slot = manager.ReserveMessageSlot( sizeof( LocalType ) );
+
+  // Construct message in the message queue memory; note that delete should not be called on the return value
+  new (slot) LocalType( &manager, &UpdateManager::SetGeometryRequiresDepthTest, &geometry, requiresDepthTest );
+}
+
 } // namespace SceneGraph
 
 } // namespace Internal
diff --git a/dali/internal/update/rendering/scene-graph-geometry.cpp b/dali/internal/update/rendering/scene-graph-geometry.cpp
deleted file mode 100644 (file)
index 8b712d1..0000000
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * Copyright (c) 2015 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.
- */
-
-// CLASS HEADER
-#include "scene-graph-geometry.h"
-
-// INTERNAL HEADERS
-#include <dali/internal/update/controllers/scene-controller.h>
-#include <dali/internal/render/renderers/render-geometry.h>
-#include <dali/internal/render/renderers/render-property-buffer.h>
-#include <dali/internal/update/controllers/render-message-dispatcher.h>
-
-namespace Dali
-{
-namespace Internal
-{
-namespace SceneGraph
-{
-
-Geometry::Geometry()
-: mRenderGeometry(NULL),
-  mSceneController(NULL),
-  mIndexBuffer( NULL ),
-  mGeometryType(Dali::Geometry::TRIANGLES),
-  mRendererRefCount(0u),
-  mRequiresDepthTest(false)
-{
-
-  // Observe our own PropertyOwner's uniform map
-  AddUniformMapObserver( *this );
-}
-
-Geometry::~Geometry()
-{
-  mConnectionObservers.Destroy( *this );
-}
-
-void Geometry::AddVertexBuffer( Render::PropertyBuffer* vertexBuffer )
-{
-  mVertexBuffers.PushBack( vertexBuffer );
-  mConnectionObservers.ConnectionsChanged(*this);
-
-  if( mRenderGeometry )
-  {
-    mSceneController->GetRenderMessageDispatcher().AddPropertyBuffer( *mRenderGeometry, vertexBuffer, false);
-  }
-}
-
-void Geometry::RemoveVertexBuffer( Render::PropertyBuffer* vertexBuffer )
-{
-  DALI_ASSERT_DEBUG( NULL != vertexBuffer );
-
-  // Find the object and destroy it
-  size_t bufferCount(mVertexBuffers.Size());
-  for( size_t i(0); i<bufferCount; ++i )
-  {
-    if( vertexBuffer == mVertexBuffers[i] )
-    {
-      mVertexBuffers.Erase( mVertexBuffers.Begin()+i );
-      mConnectionObservers.ConnectionsChanged(*this);
-
-      if( mRenderGeometry )
-      {
-        mSceneController->GetRenderMessageDispatcher().RemovePropertyBuffer( *mRenderGeometry, vertexBuffer );
-      }
-    }
-  }
-}
-
-void Geometry::SetIndexBuffer( Render::PropertyBuffer* indexBuffer )
-{
-  if( mIndexBuffer != indexBuffer )
-  {
-    mIndexBuffer = indexBuffer;
-    mConnectionObservers.ConnectionsChanged(*this);
-
-    if( mRenderGeometry )
-    {
-      mSceneController->GetRenderMessageDispatcher().AddPropertyBuffer( *mRenderGeometry, indexBuffer, true );
-    }
-  }
-}
-
-void Geometry::ClearIndexBuffer()
-{
-  if( mIndexBuffer )
-  {
-    if( mRenderGeometry )
-    {
-      mSceneController->GetRenderMessageDispatcher().RemovePropertyBuffer( *mRenderGeometry, mIndexBuffer );
-    }
-  }
-  mIndexBuffer = 0;
-  mConnectionObservers.ConnectionsChanged(*this);
-}
-
-void Geometry::SetGeometryType(Geometry::GeometryType geometryType )
-{
-  mGeometryType = geometryType;
-  if( mRenderGeometry )
-  {
-    mSceneController->GetRenderMessageDispatcher().SetGeometryType( *mRenderGeometry, static_cast<int>(geometryType) );
-  }
-}
-
-void Geometry::SetRequiresDepthTest( bool requiresDepthTest )
-{
-  mRequiresDepthTest = requiresDepthTest;
-  if( mRenderGeometry )
-  {
-    mSceneController->GetRenderMessageDispatcher().SetGeometryRequiresDepthTest( *mRenderGeometry, requiresDepthTest );
-  }
-}
-
-Vector<Render::PropertyBuffer*>& Geometry::GetVertexBuffers()
-{
-  return mVertexBuffers;
-}
-
-Render::PropertyBuffer* Geometry::GetIndexBuffer()
-{
-  return mIndexBuffer;
-}
-
-Geometry::GeometryType Geometry::GetGeometryType( BufferIndex bufferIndex) const
-{
-  return mGeometryType;
-}
-
-bool Geometry::GetRequiresDepthTesting( BufferIndex bufferIndex ) const
-{
-  return mRequiresDepthTest;
-}
-
-void Geometry::ConnectToSceneGraph( SceneController& sceneController, BufferIndex bufferIndex )
-{
-}
-
-void Geometry::DisconnectFromSceneGraph( SceneController& sceneController, BufferIndex bufferIndex )
-{
-}
-
-void Geometry::AddConnectionObserver( ConnectionChangePropagator::Observer& observer )
-{
-  mConnectionObservers.Add(observer);
-}
-
-void Geometry::RemoveConnectionObserver( ConnectionChangePropagator::Observer& observer )
-{
-  mConnectionObservers.Remove(observer);
-}
-
-void Geometry::UniformMappingsChanged( const UniformMap& mappings )
-{
-  // Our uniform map, or that of one of the watched children has changed.
-  // Inform connected observers.
-  mConnectionObservers.ConnectedUniformMapChanged();
-}
-
-RenderGeometry* Geometry::GetRenderGeometry(SceneController* sceneController)
-{
-  if(!mRenderGeometry )
-  {
-    //Create RenderGeometry
-    mSceneController = sceneController;
-    mRenderGeometry = new RenderGeometry( mGeometryType, mRequiresDepthTest );
-
-    size_t vertexBufferCount( mVertexBuffers.Size() );
-    for( size_t i(0); i<vertexBufferCount; ++i )
-    {
-      mRenderGeometry->AddPropertyBuffer( mVertexBuffers[i], false );
-    }
-
-    if( mIndexBuffer )
-    {
-      mRenderGeometry->AddPropertyBuffer( mIndexBuffer, true );
-    }
-
-    //Transfer ownership to RenderManager
-    sceneController->GetRenderMessageDispatcher().AddGeometry( *mRenderGeometry );
-  }
-
-  ++mRendererRefCount;
-  return mRenderGeometry;
-}
-
-void Geometry::OnRendererDisconnect()
-{
-  --mRendererRefCount;
-  if( mRendererRefCount == 0 )
-  {
-    //Delete the corresponding RenderGeometry via message to RenderManager
-    mSceneController->GetRenderMessageDispatcher().RemoveGeometry( *mRenderGeometry );
-
-    mRenderGeometry = 0;
-    mSceneController = 0;
-  }
-}
-
-
-} // namespace SceneGraph
-} // namespace Internal
-} // namespace Dali
diff --git a/dali/internal/update/rendering/scene-graph-geometry.h b/dali/internal/update/rendering/scene-graph-geometry.h
deleted file mode 100644 (file)
index b4eddac..0000000
+++ /dev/null
@@ -1,260 +0,0 @@
-#ifndef DALI_INTERNAL_SCENE_GRAPH_GEOMETRY_H
-#define DALI_INTERNAL_SCENE_GRAPH_GEOMETRY_H
-
-/*
- * Copyright (c) 2015 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/devel-api/rendering/geometry.h>
-#include <dali/internal/event/common/event-thread-services.h>
-#include <dali/internal/update/common/animatable-property.h>
-#include <dali/internal/update/common/double-buffered.h>
-#include <dali/internal/update/common/property-owner.h>
-#include <dali/internal/update/common/uniform-map.h>
-#include <dali/internal/update/common/scene-graph-connection-change-propagator.h>
-#include <dali/internal/render/data-providers/render-data-provider.h>
-
-namespace Dali
-{
-namespace Internal
-{
-namespace Render
-{
-class PropertyBuffer;
-}
-namespace SceneGraph
-{
-class SceneController;
-class RenderGeometry;
-
-/**
- * This scene graph object is a property owner. It describes a geometry using a
- * number of PropertyBuffers acting as Vertex buffers.
- */
-class Geometry : public PropertyOwner, public UniformMap::Observer
-{
-public:
-
-  typedef Dali::Geometry::GeometryType GeometryType;
-  /**
-   * Constructor
-   */
-  Geometry();
-
-  /**
-   * Destructor
-   */
-  virtual ~Geometry();
-
-  /**
-   * Add a property buffer to be used as a vertex buffer
-   */
-  void AddVertexBuffer( Render::PropertyBuffer* vertexBuffer );
-
-  /**
-   * Remove a property buffer to be used as a vertex buffer
-   * @param[in] vertexBuffer the associated vertex buffer to remove
-   */
-  void RemoveVertexBuffer( Render::PropertyBuffer* vertexBuffer );
-
-  /**
-   * Set the buffer to be used as a source of indices for the geometry
-   * @param[in] indexBuffer the Property buffer describing the indexes for Line, Triangle tyes.
-   */
-  void SetIndexBuffer( Render::PropertyBuffer* indexBuffer );
-
-  /**
-   * Clear the index buffer if it is no longer required, e.g. if changing geometry type
-   * to POINTS.
-   */
-  void ClearIndexBuffer();
-
-  /**
-   * Set the type of geometry to draw (Points, Lines, Triangles, etc)
-   * @param[in] bufferIndex Index for double buffered values
-   * @param[in] geometryType The geometry type
-   */
-  void SetGeometryType( GeometryType geometryType );
-
-  /**
-   * Set if the geometry requires depth testing
-   * @param[in] requiresDepthTest True if depth testing is required, false otherwise
-   */
-  void SetRequiresDepthTest( bool requiresDepthTest );
-
-  /**
-   * Connect the object to the scene graph
-   *
-   * @param[in] sceneController The scene controller - used for sending messages to render thread
-   * @param[in] bufferIndex The current buffer index - used for sending messages to render thread
-   */
-  void ConnectToSceneGraph( SceneController& sceneController, BufferIndex bufferIndex );
-
-  /**
-   * Disconnect the object from the scene graph
-   * @param[in] sceneController The scene controller - used for sending messages to render thread
-   * @param[in] bufferIndex The current buffer index - used for sending messages to render thread
-   */
-  void DisconnectFromSceneGraph( SceneController& sceneController, BufferIndex bufferIndex );
-
-  /**
-   * @copydoc ConnectionObservers::AddObserver
-   */
-  void AddConnectionObserver(ConnectionChangePropagator::Observer& observer);
-
-  /**
-   * @copydoc ConnectionObservers::RemoveObserver
-   */
-  void RemoveConnectionObserver(ConnectionChangePropagator::Observer& observer);
-
-public: // UniformMap::Observer
-  /**
-   * @copydoc UniformMap::Observer::UniformMappingsChanged
-   */
-  virtual void UniformMappingsChanged( const UniformMap& mappings );
-
-  /**
-   * Get the vertex buffers of the geometry
-   * @return A const reference to the vertex buffers
-   */
-  Vector<Render::PropertyBuffer*>& GetVertexBuffers();
-
-  /**
-   * Get the index buffer of the geometry
-   * @return A pointer to the index buffer if it exists, or NULL if it doesn't.
-   */
-   Render::PropertyBuffer* GetIndexBuffer();
-
-   /**
-    * Gets the associated RenderGeometry
-    * @param[in] sceneController The scene controller
-    * @return The RenderGeometry associated to this Geometry
-    */
-   RenderGeometry* GetRenderGeometry(SceneController* sceneController);
-
-   /**
-    * Called from renderers using this geometry when they get disconnected from the scenegraph
-    */
-   void OnRendererDisconnect();
-
-
-public: // GeometryDataProvider
-  /**
-   * Get the type of geometry to draw
-   * @param[in] bufferIndex Index for double buffered values
-   */
-  virtual GeometryType GetGeometryType( BufferIndex bufferIndex ) const;
-
-  /**
-   * Returns true if this geometry requires depth testing, e.g. if it is
-   * a set of vertices with z != 0
-   * @param[in] bufferIndex Index for double buffered values
-   */
-  virtual bool GetRequiresDepthTesting( BufferIndex bufferIndex ) const;
-
-private:
-
-  RenderGeometry*  mRenderGeometry;
-  SceneController* mSceneController;
-
-  Render::PropertyBuffer*         mIndexBuffer;   ///< The index buffer if required
-  Vector<Render::PropertyBuffer*> mVertexBuffers; ///< The vertex buffers
-
-  ConnectionChangePropagator mConnectionObservers;
-
-  Geometry::GeometryType  mGeometryType;
-  unsigned int            mRendererRefCount;
-  bool                    mRequiresDepthTest;
-};
-
-inline void AddVertexBufferMessage( EventThreadServices& eventThreadServices , const Geometry& geometry, const Render::PropertyBuffer& vertexBuffer )
-{
-  typedef MessageValue1< Geometry, Render::PropertyBuffer* > LocalType;
-
-  // Reserve some memory inside the message queue
-  unsigned int* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) );
-
-  // Construct message in the message queue memory; note that delete should not be called on the return value
-  new (slot) LocalType( &geometry, &Geometry::AddVertexBuffer, const_cast<Render::PropertyBuffer*>(&vertexBuffer) );
-}
-
-inline void RemoveVertexBufferMessage( EventThreadServices& eventThreadServices, const Geometry& geometry, const Render::PropertyBuffer& vertexBuffer )
-{
-  typedef MessageValue1< Geometry, Render::PropertyBuffer* > LocalType;
-
-  // Reserve some memory inside the message queue
-  unsigned int* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) );
-
-  // Construct message in the message queue memory; note that delete should not be called on the return value
-  new (slot) LocalType( &geometry, &Geometry::RemoveVertexBuffer, const_cast<Render::PropertyBuffer*>(&vertexBuffer) );
-}
-
-inline void SetIndexBufferMessage( EventThreadServices& eventThreadServices, const Geometry& geometry, const Render::PropertyBuffer& indexBuffer )
-{
-  typedef MessageValue1< Geometry, Render::PropertyBuffer* > LocalType;
-
-  // Reserve some memory inside the message queue
-  unsigned int* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) );
-
-  // Construct message in the message queue memory; note that delete should not be called on the return value
-  new (slot) LocalType( &geometry, &Geometry::SetIndexBuffer, const_cast<Render::PropertyBuffer*>(&indexBuffer) );
-}
-
-inline void ClearIndexBufferMessage( EventThreadServices& eventThreadServices, const Geometry& geometry )
-{
-  typedef Message< Geometry > LocalType;
-
-  // Reserve some memory inside the message queue
-  unsigned int* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) );
-
-  // Construct message in the message queue memory; note that delete should not be called on the return value
-  new (slot) LocalType( &geometry, &Geometry::ClearIndexBuffer );
-}
-
-} // namespace SceneGraph
-
-// Declare enum as a message parameter type
-template <> struct ParameterType< SceneGraph::Geometry::GeometryType > : public BasicType< SceneGraph::Geometry::GeometryType > {};
-
-namespace SceneGraph
-{
-
-inline void SetGeometryTypeMessage( EventThreadServices& eventThreadServices, const Geometry& geometry, SceneGraph::Geometry::GeometryType geometryType )
-{
-  typedef MessageValue1< Geometry, SceneGraph::Geometry::GeometryType > LocalType;
-
-  // Reserve some memory inside the message queue
-  unsigned int* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) );
-
-  // Construct message in the message queue memory; note that delete should not be called on the return value
-  new (slot) LocalType( &geometry, &Geometry::SetGeometryType, geometryType );
-}
-
-inline void SetGeometryRequiresDepthTestMessage( EventThreadServices& eventThreadServices, const Geometry& geometry, bool requiresDepthTest )
-{
-  typedef MessageValue1< Geometry, bool > LocalType;
-
-  // Reserve some memory inside the message queue
-  unsigned int* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) );
-
-  // Construct message in the message queue memory; note that delete should not be called on the return value
-  new (slot) LocalType( &geometry, &Geometry::SetRequiresDepthTest, requiresDepthTest );
-}
-
-} // namespace SceneGraph
-} // namespace Internal
-} // namespace Dali
-
-#endif // DALI_INTERNAL_SCENE_GRAPH_GEOMETRY_H
index a464224..4876a34 100644 (file)
@@ -21,7 +21,6 @@
 #include <dali/internal/update/controllers/scene-controller.h>
 #include <dali/internal/render/renderers/render-geometry.h>
 #include <dali/internal/update/controllers/render-message-dispatcher.h>
-#include <dali/internal/update/rendering/scene-graph-geometry.h>
 #include <dali/internal/update/rendering/scene-graph-texture-set.h>
 #include <dali/internal/render/shaders/scene-graph-shader.h>
 #include <dali/internal/render/renderers/render-renderer.h>
@@ -124,13 +123,13 @@ Renderer::Renderer()
  mBlendBitmask( 0u ),
  mFaceCullingMode( Dali::Renderer::NONE ),
  mBlendingMode( Dali::BlendingMode::AUTO ),
+ mIndexedDrawFirstElement( 0 ),
+ mIndexedDrawElementsCount( 0 ),
  mReferenceCount( 0 ),
  mRegenerateUniformMap( 0 ),
  mResendFlag( 0 ),
  mResourcesReady( false ),
  mFinishedResourceAcquisition( false ),
- mIndexedDrawFirstElement( 0 ),
- mIndexedDrawElementsCount( 0 ),
  mDepthIndex( 0 )
 {
   mUniformMapChanged[0] = false;
@@ -147,11 +146,6 @@ Renderer::~Renderer()
     mTextureSet->RemoveConnectionObserver(*this);
     mTextureSet=NULL;
   }
-  if (mGeometry)
-  {
-    mGeometry->RemoveConnectionObserver(*this);
-    mGeometry=NULL;
-  }
   if( mShader )
   {
     mShader->RemoveConnectionObserver(*this);
@@ -172,7 +166,7 @@ void Renderer::PrepareRender( BufferIndex updateBufferIndex )
   mFinishedResourceAcquisition = false;
 
   // Can only be considered ready when all the scene graph objects are connected to the renderer
-  if( ( mGeometry ) && ( mGeometry->GetVertexBuffers().Count() > 0 ) && ( mShader ) )
+  if( mGeometry && mShader )
   {
     if( mTextureSet )
     {
@@ -204,8 +198,6 @@ void Renderer::PrepareRender( BufferIndex updateBufferIndex )
       }
 
       AddMappings( localMap, mShader->GetUniformMap() );
-      AddMappings( localMap, mGeometry->GetUniformMap() );
-
     }
     else if( mRegenerateUniformMap == COPY_UNIFORM_MAP )
     {
@@ -243,13 +235,10 @@ void Renderer::PrepareRender( BufferIndex updateBufferIndex )
 
   if( mResendFlag & RESEND_GEOMETRY )
   {
-    // The first call to GetRenderGeometry() creates the geometry and sends it in a message
-    RenderGeometry* geometry = mGeometry->GetRenderGeometry( mSceneController );
-
-    typedef MessageValue1< Render::Renderer, RenderGeometry* > DerivedType;
+    typedef MessageValue1< Render::Renderer, Render::Geometry* > DerivedType;
     unsigned int* slot = mSceneController->GetRenderQueue().ReserveMessageSlot( updateBufferIndex, sizeof( DerivedType ) );
 
-    new (slot) DerivedType( mRenderer, &Render::Renderer::SetGeometry, geometry );
+    new (slot) DerivedType( mRenderer, &Render::Renderer::SetGeometry, mGeometry );
     mResendFlag &= ~RESEND_GEOMETRY;
   }
 
@@ -334,18 +323,10 @@ void Renderer::SetShader( Shader* shader )
   mResendFlag |= RESEND_DATA_PROVIDER;
 }
 
-void Renderer::SetGeometry( Geometry* geometry )
+void Renderer::SetGeometry( Render::Geometry* geometry )
 {
   DALI_ASSERT_DEBUG( geometry != NULL && "Geometry pointer is NULL");
-  if( mGeometry)
-  {
-    mGeometry->RemoveConnectionObserver(*this);
-    mGeometry->OnRendererDisconnect();
-  }
-
   mGeometry = geometry;
-  mGeometry->AddConnectionObserver( *this ); // Observe geometry connections / uniform mapping changes
-  mRegenerateUniformMap = REGENERATE_UNIFORM_MAP;
 
   if( mRenderer )
   {
@@ -418,8 +399,7 @@ void Renderer::OnStageConnect()
   {
     RenderDataProvider* dataProvider = NewRenderDataProvider();
 
-    RenderGeometry* renderGeometry = mGeometry->GetRenderGeometry(mSceneController);
-    mRenderer = Render::Renderer::New( dataProvider, renderGeometry,
+    mRenderer = Render::Renderer::New( dataProvider, mGeometry,
                                        mBlendBitmask, mBlendColor,
                                        static_cast< Dali::Renderer::FaceCullingMode >( mFaceCullingMode ),
                                        mPremultipledAlphaEnabled );
@@ -435,10 +415,6 @@ void Renderer::OnStageDisconnect()
   if( mReferenceCount == 0 )
   {
     mSceneController->GetRenderMessageDispatcher().RemoveRenderer( *mRenderer );
-    if( mGeometry )
-    {
-      mGeometry->OnRendererDisconnect();
-    }
     mRenderer = NULL;
   }
 }
@@ -567,11 +543,7 @@ void Renderer::UniformMappingsChanged( const UniformMap& mappings )
 
 void Renderer::ObservedObjectDestroyed(PropertyOwner& owner)
 {
-  if( reinterpret_cast<PropertyOwner*>(mGeometry) == &owner )
-  {
-    mGeometry = NULL;
-  }
-  else if( reinterpret_cast<PropertyOwner*>(mTextureSet) == &owner )
+  if( reinterpret_cast<PropertyOwner*>(mTextureSet) == &owner )
   {
     mTextureSet = NULL;
   }
index 890eb45..9311b3f 100644 (file)
@@ -35,6 +35,7 @@ namespace Internal
 namespace Render
 {
 class Renderer;
+class Geometry;
 }
 
 namespace SceneGraph
@@ -105,16 +106,7 @@ public:
    * Set the geometry for the renderer
    * @param[in] geometry The geometry this renderer will use
    */
-  void SetGeometry( Geometry* geometry );
-
-  /**
-   * Get the geometry of this renderer
-   * @return the geometry this renderer uses
-   */
-  Geometry& GetGeometry()
-  {
-    return *mGeometry;
-  }
+  void SetGeometry( Render::Geometry* geometry );
 
   /**
    * Set the depth index
@@ -310,10 +302,10 @@ private:
 
 private:
 
-  SceneController* mSceneController;  ///< Used for initializing renderers whilst attached
-  Render::Renderer*  mRenderer;    ///< Raw pointer to the new renderer (that's owned by RenderManager)
+  SceneController*   mSceneController;  ///< Used for initializing renderers whilst attached
+  Render::Renderer*  mRenderer;    ///< Raw pointer to the renderer (that's owned by RenderManager)
   TextureSet*        mTextureSet;    ///< The texture set this renderer uses. (Not owned)
-  Geometry*          mGeometry;    ///< The geometry this renderer uses. (Not owned)
+  Render::Geometry*  mGeometry;    ///< The geometry this renderer uses. (Not owned)
   Shader*            mShader;
 
   Vector4*                        mBlendColor;      ///< The blend color for blending operation
@@ -322,6 +314,9 @@ private:
   BlendingMode::Type              mBlendingMode;    ///< The mode of blending
 
   CollectedUniformMap mCollectedUniformMap[2]; ///< Uniform maps collected by the renderer
+
+  size_t mIndexedDrawFirstElement;             ///< first element index to be drawn using indexed draw
+  size_t mIndexedDrawElementsCount;            ///< number of elements to be drawn using indexed draw
   unsigned int mReferenceCount;                ///< Number of nodes currently using this renderer
   unsigned int mRegenerateUniformMap;          ///< 2 if the map should be regenerated, 1 if it should be copied.
   unsigned char mResendFlag;                    ///< Indicate whether data should be resent to the renderer
@@ -330,9 +325,6 @@ private:
   bool         mFinishedResourceAcquisition;   ///< Set during DoPrepareResources; true if ready & all resource acquisition has finished (successfully or otherwise)
   bool         mPremultipledAlphaEnabled;      ///< Flag indicating whether the Pre-multiplied Alpha Blending is required
 
-  size_t mIndexedDrawFirstElement;             ///< first element index to be drawn using indexed draw
-  size_t mIndexedDrawElementsCount;            ///< number of elements to be drawn using indexed draw
-
 public:
   int mDepthIndex; ///< Used only in PrepareRenderInstructions
 };
@@ -350,15 +342,15 @@ inline void SetTexturesMessage( EventThreadServices& eventThreadServices, const
   new (slot) LocalType( &renderer, &Renderer::SetTextures, const_cast<TextureSet*>(&textureSet) );
 }
 
-inline void SetGeometryMessage( EventThreadServices& eventThreadServices, const Renderer& renderer, const Geometry& geometry )
+inline void SetGeometryMessage( EventThreadServices& eventThreadServices, const Renderer& renderer, const Render::Geometry& geometry )
 {
-  typedef MessageValue1< Renderer, Geometry* > LocalType;
+  typedef MessageValue1< Renderer, Render::Geometry* > LocalType;
 
   // Reserve some memory inside the message queue
   unsigned int* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) );
 
   // Construct message in the message queue memory; note that delete should not be called on the return value
-  new (slot) LocalType( &renderer, &Renderer::SetGeometry, const_cast<Geometry*>(&geometry) );
+  new (slot) LocalType( &renderer, &Renderer::SetGeometry, const_cast<Render::Geometry*>(&geometry) );
 }
 
 inline void SetShaderMessage( EventThreadServices& eventThreadServices, const Renderer& renderer, Shader& shader )