- LOG_GL( "ShaderSource(%d)\n", shaderId );
- CHECK_GL( mGlAbstraction, mGlAbstraction.ShaderSource(shaderId, 1, &src, NULL ) );
-
- LOG_GL( "CompileShader(%d)\n", shaderId );
- CHECK_GL( mGlAbstraction, mGlAbstraction.CompileShader( shaderId ) );
-
- GLint compiled;
- LOG_GL( "GetShaderiv(%d)\n", shaderId );
- CHECK_GL( mGlAbstraction, mGlAbstraction.GetShaderiv( shaderId, GL_COMPILE_STATUS, &compiled ) );
-
- if (compiled == GL_FALSE)
- {
- DALI_LOG_ERROR("Failed to compile shader\n");
- LogWithLineNumbers(src);
-
- GLint nLength;
- mGlAbstraction.GetShaderiv( shaderId, GL_INFO_LOG_LENGTH, &nLength);
- if(nLength > 0)
- {
- Dali::Vector< char > szLog;
- szLog.Reserve( nLength ); // Don't call Resize as we don't want to initialise the data, just reserve a buffer
- mGlAbstraction.GetShaderInfoLog( shaderId, nLength, &nLength, szLog.Begin() );
- DALI_LOG_ERROR( "Shader Compiler Error: %s\n", szLog.Begin() );
- }
-
- DALI_ASSERT_ALWAYS( 0 && "Shader compilation failure" );
- }
-
- return compiled != 0;
-}
-
-void Program::Link()
-{
- LOG_GL( "LinkProgram(%d)\n", mProgramId );
- CHECK_GL( mGlAbstraction, mGlAbstraction.LinkProgram( mProgramId ) );
-
- GLint linked;
- LOG_GL( "GetProgramiv(%d)\n", mProgramId );
- CHECK_GL( mGlAbstraction, mGlAbstraction.GetProgramiv( mProgramId, GL_LINK_STATUS, &linked ) );
-
- if (linked == GL_FALSE)
- {
- DALI_LOG_ERROR("Shader failed to link \n");
-
- GLint nLength;
- mGlAbstraction.GetProgramiv( mProgramId, GL_INFO_LOG_LENGTH, &nLength);
- if(nLength > 0)
- {
- Dali::Vector< char > szLog;
- szLog.Reserve( nLength ); // Don't call Resize as we don't want to initialise the data, just reserve a buffer
- mGlAbstraction.GetProgramInfoLog( mProgramId, nLength, &nLength, szLog.Begin() );
- DALI_LOG_ERROR( "Shader Link Error: %s\n", szLog.Begin() );
- }
-
- DALI_ASSERT_ALWAYS( 0 && "Shader linking failure" );
- }
-
- mLinked = linked != GL_FALSE;
-}
-
-void Program::FreeShaders()
-{
- if (mVertexShaderId)
- {
- LOG_GL( "DeleteShader(%d)\n", mVertexShaderId );
- CHECK_GL( mGlAbstraction, mGlAbstraction.DetachShader( mProgramId, mVertexShaderId ) );
- CHECK_GL( mGlAbstraction, mGlAbstraction.DeleteShader( mVertexShaderId ) );
- mVertexShaderId = 0;
- }
-
- if (mFragmentShaderId)
- {
- LOG_GL( "DeleteShader(%d)\n", mFragmentShaderId );
- CHECK_GL( mGlAbstraction, mGlAbstraction.DetachShader( mProgramId, mFragmentShaderId ) );
- CHECK_GL( mGlAbstraction, mGlAbstraction.DeleteShader( mFragmentShaderId ) );
- mFragmentShaderId = 0;
- }
-}
-
-void Program::ResetAttribsUniformCache()
-{
- // reset attribute locations
- for( unsigned i = 0; i < mAttributeLocations.size() ; ++i )
- {
- mAttributeLocations[ i ].second = ATTRIB_UNKNOWN;
- }
-
- // reset all gl uniform locations
- for( unsigned int i = 0; i < mUniformLocations.size(); ++i )
- {
- // reset gl program locations and names
- mUniformLocations[ i ].second = UNIFORM_NOT_QUERIED;
- }
-
- // reset uniform caches
- mSizeUniformCache.x = mSizeUniformCache.y = mSizeUniformCache.z = 0.f;
-
- for( int i = 0; i < MAX_UNIFORM_CACHE_SIZE; ++i )
- {
- // GL initializes uniforms to 0
- mUniformCacheInt[ i ] = 0;
- mUniformCacheFloat[ i ] = 0.0f;
- mUniformCacheFloat2[ i ][ 0 ] = 0.0f;
- mUniformCacheFloat2[ i ][ 1 ] = 0.0f;
- mUniformCacheFloat4[ i ][ 0 ] = 0.0f;
- mUniformCacheFloat4[ i ][ 1 ] = 0.0f;
- mUniformCacheFloat4[ i ][ 2 ] = 0.0f;
- mUniformCacheFloat4[ i ][ 3 ] = 0.0f;
- }