X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fmesh%2Fmesh-visual.cpp;h=761f1e0c8c9cf511a47a485e92c5b55cf5211b77;hb=a6e53c231632bf7da20cbd2633a4cf40f648045c;hp=638e1ffc429b5b5489e7a9e098805c7a22b290c3;hpb=257a9991486e4e05335212b21ecc1f5a0aacbc63;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/visuals/mesh/mesh-visual.cpp b/dali-toolkit/internal/visuals/mesh/mesh-visual.cpp index 638e1ff..761f1e0 100644 --- a/dali-toolkit/internal/visuals/mesh/mesh-visual.cpp +++ b/dali-toolkit/internal/visuals/mesh/mesh-visual.cpp @@ -23,11 +23,13 @@ #include #include #include +#include +#include #include //INTERNAL INCLUDES -#include -#include +#include +#include namespace Dali { @@ -80,14 +82,26 @@ enum TextureIndex GLOSS_INDEX = 2u }; +//Property names +const char * const OBJECT_URL_NAME( "objectUrl" ); +const char * const MATERIAL_URL_NAME( "materialUrl" ); +const char * const TEXTURES_PATH_NAME( "texturesPath" ); +const char * const SHADING_MODE_NAME( "shadingMode" ); +const char * const USE_MIPMAPPING_NAME( "useMipmapping" ); +const char * const USE_SOFT_NORMALS_NAME( "useSoftNormals" ); +const char * const LIGHT_POSITION_NAME( "lightPosition" ); + +//Shading mode +DALI_ENUM_TO_STRING_TABLE_BEGIN( SHADING_MODE ) +DALI_ENUM_TO_STRING_WITH_SCOPE( Toolkit::MeshVisual::ShadingMode, TEXTURELESS_WITH_DIFFUSE_LIGHTING ) +DALI_ENUM_TO_STRING_WITH_SCOPE( Toolkit::MeshVisual::ShadingMode, TEXTURED_WITH_SPECULAR_LIGHTING ) +DALI_ENUM_TO_STRING_WITH_SCOPE( Toolkit::MeshVisual::ShadingMode, TEXTURED_WITH_DETAILED_SPECULAR_LIGHTING ) +DALI_ENUM_TO_STRING_TABLE_END( SHADING_MODE ) + //Shader properties const char * const OBJECT_MATRIX_UNIFORM_NAME( "uObjectMatrix" ); const char * const STAGE_OFFSET_UNIFORM_NAME( "uStageOffset" ); -const char * const SHADER_TYPE_TEXTURELESS( "TEXTURELESS" ); -const char * const SHADER_TYPE_DIFFUSE_TEXTURE( "DIFFUSE_TEXTURE" ); -const char * const SHADER_TYPE_ALL_TEXTURES( "ALL_TEXTURES" ); - //Shaders //If a shader requires certain textures, they must be listed in order, //as detailed in the TextureIndex enum documentation. @@ -275,11 +289,16 @@ const char* NORMAL_MAP_FRAGMENT_SHADER = DALI_COMPOSE_SHADER( }\n ); -} // namespace +} // unnamed namespace + +MeshVisualPtr MeshVisual::New( VisualFactoryCache& factoryCache ) +{ + return new MeshVisual( factoryCache ); +} MeshVisual::MeshVisual( VisualFactoryCache& factoryCache ) -: Visual( factoryCache ), - mShaderType( ALL_TEXTURES ), +: Visual::Base( factoryCache ), + mShadingMode( Toolkit::MeshVisual::ShadingMode::TEXTURED_WITH_DETAILED_SPECULAR_LIGHTING ), mUseTexture( true ), mUseMipmapping( true ), mUseSoftNormals( true ) @@ -290,21 +309,21 @@ MeshVisual::~MeshVisual() { } -void MeshVisual::DoInitialize( Actor& actor, const Property::Map& propertyMap ) +void MeshVisual::DoSetProperties( const Property::Map& propertyMap ) { - Property::Value* objectUrl = propertyMap.Find( OBJECT_URL ); + Property::Value* objectUrl = propertyMap.Find( Toolkit::MeshVisual::Property::OBJECT_URL, OBJECT_URL_NAME ); if( !objectUrl || !objectUrl->Get( mObjectUrl ) ) { DALI_LOG_ERROR( "Fail to provide object URL to the MeshVisual object.\n" ); } - Property::Value* materialUrl = propertyMap.Find( MATERIAL_URL ); + Property::Value* materialUrl = propertyMap.Find( Toolkit::MeshVisual::Property::MATERIAL_URL, MATERIAL_URL_NAME ); if( !materialUrl || !materialUrl->Get( mMaterialUrl ) || mMaterialUrl.empty() ) { mUseTexture = false; } - Property::Value* imagesUrl = propertyMap.Find( TEXTURES_PATH ); + Property::Value* imagesUrl = propertyMap.Find( Toolkit::MeshVisual::Property::TEXTURES_PATH, TEXTURES_PATH_NAME ); if( !imagesUrl || !imagesUrl->Get( mTexturesPath ) ) { //Default behaviour is to assume files are in the same directory, @@ -312,44 +331,25 @@ void MeshVisual::DoInitialize( Actor& actor, const Property::Map& propertyMap ) mTexturesPath.clear(); } - Property::Value* shaderType = propertyMap.Find( SHADER_TYPE ); - if( shaderType ) + Property::Value* shadingMode = propertyMap.Find( Toolkit::MeshVisual::Property::SHADING_MODE, SHADING_MODE_NAME ); + if( shadingMode ) { - std::string shaderTypeString; - if( shaderType->Get( shaderTypeString ) ) - { - if( shaderTypeString == SHADER_TYPE_TEXTURELESS ) - { - mShaderType = TEXTURELESS; - } - else if( shaderTypeString == SHADER_TYPE_DIFFUSE_TEXTURE ) - { - mShaderType = DIFFUSE_TEXTURE; - } - else if( shaderTypeString == SHADER_TYPE_ALL_TEXTURES ) - { - mShaderType = ALL_TEXTURES; - } - else - { - DALI_LOG_ERROR( "Unknown shader type provided to the MeshVisual object.\n"); - } - } + Scripting::GetEnumerationProperty( *shadingMode, SHADING_MODE_TABLE, SHADING_MODE_TABLE_COUNT, mShadingMode ); } - Property::Value* useMipmapping = propertyMap.Find( USE_MIPMAPPING ); + Property::Value* useMipmapping = propertyMap.Find( Toolkit::MeshVisual::Property::USE_MIPMAPPING, USE_MIPMAPPING_NAME ); if( useMipmapping ) { useMipmapping->Get( mUseMipmapping ); } - Property::Value* useSoftNormals = propertyMap.Find( USE_SOFT_NORMALS ); + Property::Value* useSoftNormals = propertyMap.Find( Toolkit::MeshVisual::Property::USE_SOFT_NORMALS, USE_SOFT_NORMALS_NAME ); if( useSoftNormals ) { useSoftNormals->Get( mUseSoftNormals ); } - Property::Value* lightPosition = propertyMap.Find( LIGHT_POSITION_UNIFORM_NAME ); + Property::Value* lightPosition = propertyMap.Find( Toolkit::MeshVisual::Property::LIGHT_POSITION, LIGHT_POSITION_NAME ); if( lightPosition ) { if( !lightPosition->Get( mLightPosition ) ) @@ -370,62 +370,40 @@ void MeshVisual::DoInitialize( Actor& actor, const Property::Map& propertyMap ) void MeshVisual::SetSize( const Vector2& size ) { - Visual::SetSize( size ); + Visual::Base::SetSize( size ); // ToDo: renderer responds to the size change } -void MeshVisual::SetClipRect( const Rect& clipRect ) +void MeshVisual::DoSetOnStage( Actor& actor ) { - Visual::SetClipRect( clipRect ); + InitializeRenderer(); - //ToDo: renderer responds to the clipRect change + actor.AddRenderer( mImpl->mRenderer ); } -void MeshVisual::SetOffset( const Vector2& offset ) +void MeshVisual::DoCreatePropertyMap( Property::Map& map ) const { - //ToDo: renderer applies the offset + map.Clear(); + map.Insert( Toolkit::VisualProperty::TYPE, Toolkit::Visual::MESH ); + map.Insert( Toolkit::MeshVisual::Property::OBJECT_URL, mObjectUrl ); + map.Insert( Toolkit::MeshVisual::Property::MATERIAL_URL, mMaterialUrl ); + map.Insert( Toolkit::MeshVisual::Property::TEXTURES_PATH, mTexturesPath ); + map.Insert( Toolkit::MeshVisual::Property::SHADING_MODE, mShadingMode ); + map.Insert( Toolkit::MeshVisual::Property::USE_MIPMAPPING, mUseMipmapping ); + map.Insert( Toolkit::MeshVisual::Property::USE_SOFT_NORMALS, mUseSoftNormals ); + map.Insert( Toolkit::MeshVisual::Property::LIGHT_POSITION, mLightPosition ); } -void MeshVisual::DoSetOnStage( Actor& actor ) +void MeshVisual::DoSetProperty( Dali::Property::Index index, const Dali::Property::Value& propertyValue ) { - InitializeRenderer(); + // TODO } -void MeshVisual::DoCreatePropertyMap( Property::Map& map ) const +Dali::Property::Value MeshVisual::DoGetProperty( Dali::Property::Index index ) { - map.Clear(); - map.Insert( RENDERER_TYPE, MESH_RENDERER ); - map.Insert( OBJECT_URL, mObjectUrl ); - map.Insert( MATERIAL_URL, mMaterialUrl ); - map.Insert( TEXTURES_PATH, mTexturesPath ); - - std::string shaderTypeString; - switch( mShaderType ) - { - case ALL_TEXTURES: - { - shaderTypeString = SHADER_TYPE_ALL_TEXTURES; - break; - } - - case DIFFUSE_TEXTURE: - { - shaderTypeString = SHADER_TYPE_DIFFUSE_TEXTURE; - break; - } - - case TEXTURELESS: - { - shaderTypeString = SHADER_TYPE_TEXTURELESS; - break; - } - } - map.Insert( SHADER_TYPE, shaderTypeString ); - - map.Insert( USE_MIPMAPPING, mUseMipmapping ); - map.Insert( USE_SOFT_NORMALS, mUseSoftNormals ); - map.Insert( LIGHT_POSITION_UNIFORM_NAME, mLightPosition ); + // TODO + return Dali::Property::Value(); } void MeshVisual::InitializeRenderer() @@ -466,6 +444,7 @@ void MeshVisual::InitializeRenderer() mImpl->mRenderer = Renderer::New( mGeometry, mShader ); mImpl->mRenderer.SetTextures( mTextureSet ); mImpl->mRenderer.SetProperty( Renderer::Property::DEPTH_WRITE_MODE, DepthWriteMode::ON ); + mImpl->mRenderer.SetProperty( Renderer::Property::DEPTH_TEST_MODE, DepthTestMode::ON ); } void MeshVisual::SupplyEmptyGeometry() @@ -474,7 +453,7 @@ void MeshVisual::SupplyEmptyGeometry() mShader = Shader::New( SIMPLE_VERTEX_SHADER, SIMPLE_FRAGMENT_SHADER ); mImpl->mRenderer = Renderer::New( mGeometry, mShader ); - DALI_LOG_ERROR( "Initialisation error in mesh renderer.\n" ); + DALI_LOG_ERROR( "Initialisation error in mesh visual.\n" ); } void MeshVisual::UpdateShaderUniforms() @@ -487,17 +466,17 @@ void MeshVisual::UpdateShaderUniforms() scaleMatrix.SetIdentityAndScale( Vector3( 1.0, -1.0, 1.0 ) ); mShader.RegisterProperty( STAGE_OFFSET_UNIFORM_NAME, Vector2( width, height ) / 2.0f ); - mShader.RegisterProperty( LIGHT_POSITION_UNIFORM_NAME, mLightPosition ); + mShader.RegisterProperty( LIGHT_POSITION_NAME, mLightPosition ); mShader.RegisterProperty( OBJECT_MATRIX_UNIFORM_NAME, scaleMatrix ); } void MeshVisual::CreateShader() { - if( mShaderType == ALL_TEXTURES ) + if( mShadingMode == Toolkit::MeshVisual::ShadingMode::TEXTURED_WITH_DETAILED_SPECULAR_LIGHTING ) { mShader = Shader::New( NORMAL_MAP_VERTEX_SHADER, NORMAL_MAP_FRAGMENT_SHADER ); } - else if( mShaderType == DIFFUSE_TEXTURE ) + else if( mShadingMode == Toolkit::MeshVisual::ShadingMode::TEXTURED_WITH_SPECULAR_LIGHTING ) { mShader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER ); } @@ -514,22 +493,22 @@ bool MeshVisual::CreateGeometry() //Determine if we need to use a simpler shader to handle the provided data if( !mUseTexture || !mObjLoader.IsDiffuseMapPresent() ) { - mShaderType = TEXTURELESS; + mShadingMode = Toolkit::MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING; } - else if( mShaderType == ALL_TEXTURES && (!mObjLoader.IsNormalMapPresent() || !mObjLoader.IsSpecularMapPresent()) ) + else if( mShadingMode == Toolkit::MeshVisual::ShadingMode::TEXTURED_WITH_DETAILED_SPECULAR_LIGHTING && (!mObjLoader.IsNormalMapPresent() || !mObjLoader.IsSpecularMapPresent()) ) { - mShaderType = DIFFUSE_TEXTURE; + mShadingMode = Toolkit::MeshVisual::ShadingMode::TEXTURED_WITH_SPECULAR_LIGHTING; } int objectProperties = 0; - if( mShaderType == DIFFUSE_TEXTURE || - mShaderType == ALL_TEXTURES ) + if( mShadingMode == Toolkit::MeshVisual::ShadingMode::TEXTURED_WITH_SPECULAR_LIGHTING || + mShadingMode == Toolkit::MeshVisual::ShadingMode::TEXTURED_WITH_DETAILED_SPECULAR_LIGHTING ) { objectProperties |= ObjLoader::TEXTURE_COORDINATES; } - if( mShaderType == ALL_TEXTURES ) + if( mShadingMode == Toolkit::MeshVisual::ShadingMode::TEXTURED_WITH_DETAILED_SPECULAR_LIGHTING ) { objectProperties |= ObjLoader::TANGENTS | ObjLoader::BINORMALS; } @@ -542,7 +521,7 @@ bool MeshVisual::CreateGeometry() return true; } - DALI_LOG_ERROR( "Failed to load geometry in mesh renderer.\n" ); + DALI_LOG_ERROR( "Failed to load geometry in mesh visual.\n" ); return false; } @@ -563,7 +542,7 @@ bool MeshVisual::LoadGeometry() return true; } - DALI_LOG_ERROR( "Failed to find object to load in mesh renderer.\n" ); + DALI_LOG_ERROR( "Failed to find object to load in mesh visual.\n" ); return false; } @@ -579,7 +558,7 @@ bool MeshVisual::LoadMaterial() return true; } - DALI_LOG_ERROR( "Failed to find texture set to load in mesh renderer.\n" ); + DALI_LOG_ERROR( "Failed to find texture set to load in mesh visual.\n" ); mUseTexture = false; return false; } @@ -588,7 +567,7 @@ bool MeshVisual::LoadTextures() { mTextureSet = TextureSet::New(); - if( mShaderType != TEXTURELESS ) + if( mShadingMode != Toolkit::MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING ) { Sampler sampler = Sampler::New(); if( mUseMipmapping ) @@ -609,12 +588,12 @@ bool MeshVisual::LoadTextures() } else { - DALI_LOG_ERROR( "Failed to load diffuse map texture in mesh renderer.\n"); + DALI_LOG_ERROR( "Failed to load diffuse map texture in mesh visual.\n"); return false; } } - if( !mNormalTextureUrl.empty() && ( mShaderType == ALL_TEXTURES ) ) + if( !mNormalTextureUrl.empty() && ( mShadingMode == Toolkit::MeshVisual::ShadingMode::TEXTURED_WITH_DETAILED_SPECULAR_LIGHTING ) ) { std::string imageUrl = mTexturesPath + mNormalTextureUrl; @@ -627,12 +606,12 @@ bool MeshVisual::LoadTextures() } else { - DALI_LOG_ERROR( "Failed to load normal map texture in mesh renderer.\n"); + DALI_LOG_ERROR( "Failed to load normal map texture in mesh visual.\n"); return false; } } - if( !mGlossTextureUrl.empty() && ( mShaderType == ALL_TEXTURES ) ) + if( !mGlossTextureUrl.empty() && ( mShadingMode == Toolkit::MeshVisual::ShadingMode::TEXTURED_WITH_DETAILED_SPECULAR_LIGHTING ) ) { std::string imageUrl = mTexturesPath + mGlossTextureUrl; @@ -645,7 +624,7 @@ bool MeshVisual::LoadTextures() } else { - DALI_LOG_ERROR( "Failed to load gloss map texture in mesh renderer.\n"); + DALI_LOG_ERROR( "Failed to load gloss map texture in mesh visual.\n"); return false; } }