X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fmesh%2Fmesh-visual.cpp;h=b995e91eafbe4ac4e07ca0ef1a381714b50411c2;hp=e815ae185b254da8f6bb2dd5d6285abd5576c122;hb=39e753ac012024e6523f2c0284718f5df57cc8d0;hpb=4cd15baa1eaa620c0ef5e94e56d82fad17b888d5 diff --git a/dali-toolkit/internal/visuals/mesh/mesh-visual.cpp b/dali-toolkit/internal/visuals/mesh/mesh-visual.cpp index e815ae1..b995e91 100644 --- a/dali-toolkit/internal/visuals/mesh/mesh-visual.cpp +++ b/dali-toolkit/internal/visuals/mesh/mesh-visual.cpp @@ -23,11 +23,12 @@ #include #include #include +#include +#include #include //INTERNAL INCLUDES -#include -#include +#include namespace Dali { @@ -80,14 +81,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. @@ -278,8 +291,8 @@ const char* NORMAL_MAP_FRAGMENT_SHADER = DALI_COMPOSE_SHADER( } // namespace 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 ) @@ -292,19 +305,19 @@ MeshVisual::~MeshVisual() void MeshVisual::DoInitialize( Actor& actor, 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 +325,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,23 +364,11 @@ 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 ) -{ - Visual::SetClipRect( clipRect ); - - //ToDo: renderer responds to the clipRect change -} - -void MeshVisual::SetOffset( const Vector2& offset ) -{ - //ToDo: renderer applies the offset -} - void MeshVisual::DoSetOnStage( Actor& actor ) { InitializeRenderer(); @@ -395,37 +377,14 @@ void MeshVisual::DoSetOnStage( Actor& actor ) void MeshVisual::DoCreatePropertyMap( Property::Map& map ) const { 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 ); + map.Insert( Toolkit::Visual::Property::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::InitializeRenderer() @@ -466,6 +425,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() @@ -487,17 +447,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 +474,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; } @@ -588,7 +548,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 ) @@ -614,7 +574,7 @@ bool MeshVisual::LoadTextures() } } - if( !mNormalTextureUrl.empty() && ( mShaderType == ALL_TEXTURES ) ) + if( !mNormalTextureUrl.empty() && ( mShadingMode == Toolkit::MeshVisual::ShadingMode::TEXTURED_WITH_DETAILED_SPECULAR_LIGHTING ) ) { std::string imageUrl = mTexturesPath + mNormalTextureUrl; @@ -632,7 +592,7 @@ bool MeshVisual::LoadTextures() } } - if( !mGlossTextureUrl.empty() && ( mShaderType == ALL_TEXTURES ) ) + if( !mGlossTextureUrl.empty() && ( mShadingMode == Toolkit::MeshVisual::ShadingMode::TEXTURED_WITH_DETAILED_SPECULAR_LIGHTING ) ) { std::string imageUrl = mTexturesPath + mGlossTextureUrl;