bool COGLES2SLMaterialRenderer::initFromFiles( s32 &outMaterialTypeNr, const c8 *vertexShaderFile, const c8 *pixelShaderFile, bool registerMaterial ) { outMaterialTypeNr = -1; if ( !createProgram() ) { os::Printer::log( "Could not create shader program.", ELL_ERROR ); return false; } if ( !readVertexShader( vertexShaderFile ) ) { os::Printer::log( "Error reading fixed pipeline vertex shader.", ELL_ERROR ); } if ( !readFragmentShader( pixelShaderFile ) ) { os::Printer::log( "Error reading fixed pipeline fragment shader.", ELL_ERROR ); } for ( size_t i = 0; i < EVA_COUNT; ++i ) glBindAttribLocation( Program, i, sBuiltInVertexAttributeNames[i] ); if ( !linkProgram() ) { os::Printer::log( "Error linking fixed pipeline shader program.", ELL_ERROR ); return false; } if ( registerMaterial ) outMaterialTypeNr = Driver->addMaterialRenderer( this ); return true; }
bool COGLES2SLMaterialRenderer::reloadFromFiles( const c8 *vertexShaderFile, const c8 *pixelShaderFile ) { GLsizei shaderCount; GLuint shaderHandles[2]; glGetAttachedShaders( Program, 2, &shaderCount, shaderHandles ); glDetachShader( Program, shaderHandles[0] ); glDeleteShader( shaderHandles[0] ); glDetachShader( Program, shaderHandles[1] ); glDeleteShader( shaderHandles[1] ); if ( !readVertexShader( vertexShaderFile ) ) { os::Printer::log( "Error reading fixed pipeline vertex shader.", ELL_ERROR ); } if ( !readFragmentShader( pixelShaderFile ) ) { os::Printer::log( "Error reading fixed pipeline fragment shader.", ELL_ERROR ); } if ( !linkProgram() ) { os::Printer::log( "Error linking fixed pipeline shader program.", ELL_ERROR ); return false; } else return true; }
void COGLES2SLMaterialRenderer::initFromFiles( s32 &outMaterialTypeNr, const c8 *vertexShaderFile, const c8 *pixelShaderFile, bool registerMaterial ) { core::stringc msg = "load shader: "; msg += vertexShaderFile; os::Printer::log( msg.c_str(), ELL_ERROR ); if ( !createProgram() ) { os::Printer::log( "Could not create shader program.", ELL_ERROR ); } if ( !readVertexShader( vertexShaderFile ) ) { os::Printer::log( "Error reading fixed pipeline vertex shader.", ELL_ERROR ); } if ( !readFragmentShader( pixelShaderFile ) ) { os::Printer::log( "Error reading fixed pipeline fragment shader.", ELL_ERROR ); } for ( size_t i = 0; i < EVA_COUNT; ++i ) glBindAttribLocation( Program, i, sBuiltInVertexAttributeNames[i] ); if ( !linkProgram() ) { os::Printer::log( "Why??",ELL_INFORMATION ); os::Printer::log( "Error linking fixed pipeline shader program.", ELL_ERROR ); } else os::Printer::log( "I know!" ); if ( registerMaterial ) outMaterialTypeNr = Driver->addMaterialRenderer( this ); os::Printer::log("Shader loaded"); }