void MaterialAsset::__loadShaderToGFXCard( void ) { if ( !__isShaderLoaded ) { GLuint VertexShaderID = glCreateShader( GL_VERTEX_SHADER ); GLuint FragmentShaderID = glCreateShader( GL_FRAGMENT_SHADER ); Resources* r = DWIngine::singleton()->resources(); string fragSource = r->getFragmentShader( __fragmentShaderUniqueName )->sourceCode( ); string vertexSource = r->getVertexShader( __vertexShaderUniqueName )->sourceCode(); int Result = GL_FALSE; int InfoLogLength; char const* VertexSourcePointer = vertexSource.c_str(); //Compile the Vertex Shader glShaderSource( VertexShaderID, 1, &VertexSourcePointer, NULL ); glCompileShader( VertexShaderID ); glGetShaderiv( VertexShaderID, GL_COMPILE_STATUS, &Result ); glGetShaderiv( VertexShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength ); if ( InfoLogLength > 0 ) { std::vector<char> VertexShaderErrorMessage( InfoLogLength + 1 ); glGetShaderInfoLog( VertexShaderID, InfoLogLength, NULL, &VertexShaderErrorMessage[ 0 ] ); DWIngine::singleton()->logError( &VertexShaderErrorMessage[0] ); } //Compile the Fragment Shader char const * FragmentSourcePointer = fragSource.c_str(); glShaderSource( FragmentShaderID, 1, &FragmentSourcePointer, NULL ); glCompileShader( FragmentShaderID ); glGetShaderiv( FragmentShaderID, GL_COMPILE_STATUS, &Result ); glGetShaderiv( FragmentShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength ); if ( InfoLogLength > 0 ) { std::vector<char> FragmentShaderErrorMessage( InfoLogLength + 1 ); glGetShaderInfoLog( FragmentShaderID, InfoLogLength, NULL, &FragmentShaderErrorMessage[ 0 ] ); DWIngine::singleton( )->logError( &FragmentShaderErrorMessage[ 0 ] ); } GLuint ProgramID = glCreateProgram(); glAttachShader( ProgramID, VertexShaderID ); glAttachShader( ProgramID, FragmentShaderID ); glLinkProgram( ProgramID ); glGetProgramiv( ProgramID, GL_LINK_STATUS, &Result ); glGetProgramiv( ProgramID, GL_INFO_LOG_LENGTH, &InfoLogLength ); if ( InfoLogLength > 0 ) { std::vector<char> ProgramErrorMessage( InfoLogLength + 1 ); glGetProgramInfoLog( ProgramID, InfoLogLength, NULL, &ProgramErrorMessage[ 0 ] ); DWIngine::singleton()->logError( &ProgramErrorMessage[ 0 ] ); } glDeleteShader( VertexShaderID ); glDeleteShader( FragmentShaderID ); __shaderProgramID = ProgramID; __shaderMatrixID = glGetUniformLocation( ProgramID, "MVP" ); __shaderViewID = glGetUniformLocation( ProgramID, "V" ); __shaderModelID = glGetUniformLocation( ProgramID, "M" ); __textureShaderID = glGetUniformLocation( ProgramID, "TextureSampler" ); __shaderLightPos = glGetUniformLocation( ProgramID, "LightPosition_worldspace" ); __isShaderLoaded = !__isShaderLoaded; } }