void CCRefreshRenderAttributes() { GLColor4f( currentColour.red, currentColour.green, currentColour.blue, currentColour.alpha ); GLTexCoordPointer( 2, GL_FLOAT, 0, currentUVs ); CCSetUniformVector3( UNIFORM_LIGHTPOSITION, 0.0f, 0.0f, 1.0f ); CCSetUniformVector4( UNIFORM_LIGHTDIFFUSE, 1.0f, 1.0f, 1.0f, 1.0f ); }
const bool CCRenderer::setShader(const char *name) { #if defined PROFILEON CCProfiler profile( "CCRenderer::setShader()" ); #endif if( currentShader->name[0] != name[0] ) { for( int i=0; i<shaders.length; ++i ) { CCShader *shader = shaders.list[i]; if( shader->name[0] == name[0] ) { currentShader = shader; currentShader->use(); if( currentShader->uniforms[UNIFORM_CAMERAPOSITION] != -1 ) { const CCVector3 &position = gEngine->currentCamera->getRotatedPosition(); CCSetUniformVector3( UNIFORM_CAMERAPOSITION, position.x, position.y, position.z ); } // if( currentShader->uniforms[TEXTURE_DIFFUSE] != -1 ) // { // glUniform1i( currentShader->uniforms[TEXTURE_DIFFUSE], 0 ); // } #ifndef QT if( currentShader->uniforms[TEXTURE_ENV] != -1 ) { glUniform1i( currentShader->uniforms[TEXTURE_ENV], 1 ); } #endif return true; } } ASSERT( false ); return false; } return false; }
bool CCRenderer::setShader(const char *name, const bool useVertexColours, const bool useVertexNormals) { #if defined PROFILEON CCProfiler profile( "CCRenderer::setShader()" ); #endif #ifndef DXRENDERER if( usingOpenGL2 == false ) { return false; } // Hash map optimzation? if( CCText::Equals( currentShader->name, name ) == false ) { for( int i=0; i<shaders.length; ++i ) { CCShader *shader = shaders.list[i]; if( CCText::Equals( shader->name, name ) ) { currentShader = shader; currentShader->use(); static bool usingVertexColours = false, usingVertexNormals = false; if( useVertexColours ) { if( usingVertexColours == false ) { currentShader->enableAttributeArray( ATTRIB_COLOUR ); usingVertexColours = true; } } else if( usingVertexColours ) { currentShader->disableAttributeArray( ATTRIB_COLOUR ); usingVertexColours = false; } if( useVertexNormals ) { if( usingVertexNormals == false ) { currentShader->enableAttributeArray( ATTRIB_NORMAL ); usingVertexNormals = true; } } else if( usingVertexNormals ) { currentShader->disableAttributeArray( ATTRIB_NORMAL ); usingVertexNormals = false; } if( currentShader->uniforms[UNIFORM_CAMERAPOSITION] != -1 ) { const CCVector3 &position = CCCameraBase::CurrentCamera->getRotatedPosition(); CCSetUniformVector3( UNIFORM_CAMERAPOSITION, position.x, position.y, position.z ); } // if( currentShader->uniforms[TEXTURE_DIFFUSE] != -1 ) // { // glUniform1i( currentShader->uniforms[TEXTURE_DIFFUSE], 0 ); // } #ifndef QT if( currentShader->uniforms[TEXTURE_ENV] != -1 ) { glUniform1i( currentShader->uniforms[TEXTURE_ENV], 1 ); } #endif return true; } } CCASSERT( false ); return false; } #endif return false; }