Пример #1
0
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;
}
Пример #3
0
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;
}