X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Frenderers%2Fmesh%2Fmesh-renderer.cpp;h=acc248c34d909411afbd34e84577048b8601a41f;hb=d00a250741411c386d988e7ac34525cf94a1918e;hp=2ac1dd667d5765810b45fce90f6945b5b20121df;hpb=8ddb15f9e047abe0f51f803f5418bcb9d22a821d;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/controls/renderers/mesh/mesh-renderer.cpp b/dali-toolkit/internal/controls/renderers/mesh/mesh-renderer.cpp index 2ac1dd6..acc248c 100644 --- a/dali-toolkit/internal/controls/renderers/mesh/mesh-renderer.cpp +++ b/dali-toolkit/internal/controls/renderers/mesh/mesh-renderer.cpp @@ -28,8 +28,6 @@ //INTERNAL INCLUDES #include -#include -#include #include namespace Dali @@ -83,10 +81,13 @@ enum TextureIndex GLOSS_INDEX = 2u }; -const char * const RENDERER_TYPE_VALUE( "mesh" ); //String label for which type of control renderer this is. const char * const LIGHT_POSITION( "uLightPosition" ); //Shader property const char * const OBJECT_MATRIX( "uObjectMatrix" ); //Shader property +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. @@ -112,8 +113,8 @@ const char* SIMPLE_VERTEX_SHADER = DALI_COMPOSE_SHADER( //Illumination in Model-View space - Transform attributes and uniforms\n vec4 vertPos = uModelView * vec4( aPosition.xyz, 1.0 );\n vec3 normal = uNormalMatrix * mat3( uObjectMatrix ) * aNormal;\n - vec4 centre = uModelView * vec4( 0.0, 0.0, 0.0, 1.0 );\n - vec4 lightPos = vec4( centre.x, centre.y, uLightPosition.z, 1.0 );\n + vec4 center = uModelView * vec4( 0.0, 0.0, 0.0, 1.0 );\n + vec4 lightPos = vec4( center.x, center.y, uLightPosition.z, 1.0 );\n vec3 vecToLight = normalize( lightPos.xyz - vertPos.xyz );\n float lightDiffuse = max( dot( vecToLight, normal ), 0.0 );\n @@ -158,8 +159,8 @@ const char* VERTEX_SHADER = DALI_COMPOSE_SHADER( //Illumination in Model-View space - Transform attributes and uniforms\n vec4 vertPos = uModelView * vec4( aPosition.xyz, 1.0 );\n - vec4 centre = uModelView * vec4( 0.0, 0.0, 0.0, 1.0 );\n - vec4 lightPos = vec4( centre.x, centre.y, uLightPosition.z, 1.0 );\n + vec4 center = uModelView * vec4( 0.0, 0.0, 0.0, 1.0 );\n + vec4 lightPos = vec4( center.x, center.y, uLightPosition.z, 1.0 );\n vec3 normal = normalize( uNormalMatrix * mat3( uObjectMatrix ) * aNormal );\n vec3 vecToLight = normalize( lightPos.xyz - vertPos.xyz );\n @@ -220,8 +221,8 @@ const char* NORMAL_MAP_VERTEX_SHADER = DALI_COMPOSE_SHADER( vertexPosition = uMvpMatrix * vertexPosition;\n vec4 vertPos = uModelView * vec4( aPosition.xyz, 1.0 );\n - vec4 centre = uModelView * vec4( 0.0, 0.0, 0.0, 1.0 );\n - vec4 lightPos = vec4( centre.x, centre.y, uLightPosition.z, 1.0 );\n + vec4 center = uModelView * vec4( 0.0, 0.0, 0.0, 1.0 );\n + vec4 lightPos = vec4( center.x, center.y, uLightPosition.z, 1.0 );\n vec3 tangent = normalize( uNormalMatrix * aTangent ); vec3 binormal = normalize( uNormalMatrix * aBiNormal ); @@ -313,23 +314,27 @@ void MeshRenderer::DoInitialize( Actor& actor, const Property::Map& propertyMap } Property::Value* shaderType = propertyMap.Find( SHADER_TYPE ); - if( shaderType && shaderType->Get( mShaderTypeString ) ) + if( shaderType ) { - if( mShaderTypeString == "textureless" ) - { - mShaderType = TEXTURELESS; - } - else if( mShaderTypeString == "diffuseTexture" ) - { - mShaderType = DIFFUSE_TEXTURE; - } - else if( mShaderTypeString == "allTextures" ) - { - mShaderType = ALL_TEXTURES; - } - else + std::string shaderTypeString; + if( shaderType->Get( shaderTypeString ) ) { - DALI_LOG_ERROR( "Unknown shader type provided to the MeshRenderer object.\n"); + 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 MeshRenderer object.\n"); + } } } } @@ -361,11 +366,33 @@ void MeshRenderer::DoSetOnStage( Actor& actor ) void MeshRenderer::DoCreatePropertyMap( Property::Map& map ) const { map.Clear(); - map.Insert( RENDERER_TYPE, RENDERER_TYPE_VALUE ); + map.Insert( RENDERER_TYPE, MESH_RENDERER ); map.Insert( OBJECT_URL, mObjectUrl ); map.Insert( MATERIAL_URL, mMaterialUrl ); map.Insert( TEXTURES_PATH, mTexturesPath ); - map.Insert( SHADER_TYPE, mShaderTypeString ); + + 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 ); } void MeshRenderer::InitializeRenderer() @@ -452,7 +479,6 @@ bool MeshRenderer::CreateGeometry() //Determine if we need to use a simpler shader to handle the provided data if( !mUseTexture || !mObjLoader.IsDiffuseMapPresent() ) { - mUseTexture = false; mShaderType = TEXTURELESS; } else if( mShaderType == ALL_TEXTURES && (!mObjLoader.IsNormalMapPresent() || !mObjLoader.IsSpecularMapPresent()) ) @@ -527,7 +553,7 @@ bool MeshRenderer::LoadTextures() { mTextureSet = TextureSet::New(); - if( mUseTexture ) + if( mShaderType != TEXTURELESS ) { Sampler sampler = Sampler::New(); if( mUseMipmapping )