namespace
{
-const char * const RENDERER_TYPE("renderer-type");
-const char * const RENDERER_TYPE_VALUE("border-renderer");
+const char * const RENDERER_TYPE("rendererType");
+const char * const RENDERER_TYPE_VALUE("borderRenderer");
-const char * const COLOR_NAME("border-color");
+const char * const COLOR_NAME("borderColor");
const char * const COLOR_UNIFORM_NAME("uBorderColor");
-const char * const SIZE_NAME("border-size");
+const char * const SIZE_NAME("borderSize");
const char * const SIZE_UNIFORM_NAME("uBorderSize");
const char * const POSITION_ATTRIBUTE_NAME("aPosition");
);
}
-BorderRenderer::BorderRenderer()
-: ControlRenderer(),
+BorderRenderer::BorderRenderer( RendererFactoryCache& factoryCache )
+: ControlRenderer( factoryCache ),
mBorderColor( Color::TRANSPARENT ),
mBorderSize( 0.f ),
mBorderColorIndex( Property::INVALID_INDEX ),
{
}
-void BorderRenderer::DoInitialize( RendererFactoryCache& factoryCache, const Property::Map& propertyMap )
+void BorderRenderer::DoInitialize( Actor& actor, const Property::Map& propertyMap )
{
- Initialize( factoryCache );
-
Property::Value* color = propertyMap.Find( COLOR_NAME );
if( !( color && color->Get(mBorderColor) ) )
{
void BorderRenderer::DoSetOnStage( Actor& actor )
{
+ InitializeRenderer();
+
mBorderColorIndex = (mImpl->mRenderer).RegisterProperty( COLOR_UNIFORM_NAME, mBorderColor );
if( mBorderColor.a < 1.f )
{
map.Insert( SIZE_NAME, mBorderSize );
}
-void BorderRenderer::Initialize( RendererFactoryCache& factoryCache)
+void BorderRenderer::InitializeRenderer()
{
- mImpl->mGeometry = factoryCache.GetGeometry( RendererFactoryCache::BORDER_GEOMETRY );
- if( !(mImpl->mGeometry) )
+ Geometry geometry = mFactoryCache.GetGeometry( RendererFactoryCache::BORDER_GEOMETRY );
+ if( !geometry )
{
- mImpl->mGeometry = CreateBorderGeometry();
- factoryCache.SaveGeometry( RendererFactoryCache::QUAD_GEOMETRY, mImpl->mGeometry );
+ geometry = CreateBorderGeometry();
+ mFactoryCache.SaveGeometry( RendererFactoryCache::BORDER_GEOMETRY, geometry );
}
- mImpl->mShader = factoryCache.GetShader( RendererFactoryCache::BORDER_SHADER );
- if( !(mImpl->mShader) )
+ Shader shader = mFactoryCache.GetShader( RendererFactoryCache::BORDER_SHADER );
+ if( !shader )
{
- mImpl->mShader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER );
- factoryCache.SaveShader( RendererFactoryCache::COLOR_SHADER, mImpl->mShader );
+ shader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER );
+ mFactoryCache.SaveShader( RendererFactoryCache::BORDER_SHADER, shader );
}
+
+ Material material = Material::New( shader );
+ mImpl->mRenderer = Renderer::New( geometry, material );
}
void BorderRenderer::SetBorderColor(const Vector4& color)
{
mBorderColor = color;
- if( mImpl->mIsOnStage )
+ if( mImpl->mRenderer )
{
(mImpl->mRenderer).SetProperty( mBorderColorIndex, color );
if( color.a < 1.f && (mImpl->mRenderer).GetMaterial().GetBlendMode() != BlendingMode::ON)
{
mBorderSize = size;
- if( mImpl->mIsOnStage )
+ if( mImpl->mRenderer )
{
(mImpl->mRenderer).SetProperty( mBorderSizeIndex, size );
}
* | /| /| /|
* |/ |/ |/ |
* 4--5--6--7
- * | /| | /|
- * |/ | |/ |
+ * |\ | |\ |
+ * | \| | \|
* 8--9--10-11
- * | /| /| /|
- * |/ |/ |/ |
+ * | /| /|\ |
+ * |/ |/ | \|
* 12-13-14-15
*/
Geometry BorderRenderer::CreateBorderGeometry()
borderVertices.SetData(borderVertexData);
// Create indices
- unsigned int indexData[48] = { 0, 4, 1, 1, 4, 5, 1, 5, 2, 2, 5, 6, 2, 6,3, 3, 6, 7,
- 4, 8, 5, 5, 8, 9, 6, 10, 7, 7, 10, 11,
- 8, 12, 9, 9, 12, 13, 9, 13, 10, 10, 13, 14, 10, 11, 14, 11, 14, 15};
-
+ unsigned int indexData[24] = { 0,4,1,5,2,6,3,7,7,6,11,10,15,14,14,10,13,9,12,8,8,9,4,5 };
Property::Map indexFormat;
indexFormat[INDEX_NAME] = Property::INTEGER;
- PropertyBuffer indices = PropertyBuffer::New( indexFormat, 48 );
+ PropertyBuffer indices = PropertyBuffer::New( indexFormat, 24 );
indices.SetData(indexData);
// Create the geometry object
Geometry geometry = Geometry::New();
geometry.AddVertexBuffer( borderVertices );
geometry.SetIndexBuffer( indices );
+ geometry.SetGeometryType( Geometry::TRIANGLE_STRIP );
return geometry;
}