Пример #1
0
bool CCEngine::setupRenderer()
{
    if( renderer->setup() )
    {
    	DEBUG_OPENGL();

    	if( textureManager == NULL )
    	{
    		textureManager = new CCTextureManager();

            // Load in a 1x1 white texture to use for untextured draws
            textureManager->assignTextureIndex( "transparent.png", Resource_Packaged, false, true, true );
            textureManager->assignTextureIndex( "white.png", Resource_Packaged, false, true, true );

            DEBUGLOG( "CCEngine::setupRenderer\n" );
            textureManager->setTextureIndex( 1 );
    	}
    	else
    	{
    		textureManager->invalidateAllTextureHandles();
    	}
    	DEBUG_OPENGL();

        renderer->setupOpenGL();
        DEBUG_OPENGL();

        return true;
    }

    return false;
}
Пример #2
0
void CCEngine::setupEngineThread()
{
    engineThreadRunning = true;

    renderer = new CCDeviceRenderer();
    renderer->setup( true );
    DEBUG_OPENGL();
    
    textureManager = new CCTextureManager();
    textureManager->load();
    DEBUG_OPENGL();
    textureManager->loadFont( "HelveticaNeueLight" );
    textureManager->loadFont( "HelveticaNeueBold" );
    DEBUG_OPENGL();
    
    controls = new CCDeviceControls();
    
	CCOctreeSetRenderSortCallback( &zCompare );
    
    renderer->setupOpenGL();
    DEBUG_OPENGL();
    
    // Start Game
    start();
}
Пример #3
0
static bool compileShader(GLuint *shader, GLenum type, const char *path)
{
	GLint status;
	
	char *data;
	const int fileSize = CCFileManager::GetPackagedFile( path, &data );

	const int offset = 41;
	char code[fileSize + offset];
	
	if( type == GL_VERTEX_SHADER )
	{
		sprintf( code, "%s%s", "#define VERTEX_SHADER\r\n", data );
	}
	else if( type == GL_FRAGMENT_SHADER )
	{
		sprintf( code, "%s%s", "#define PIXEL_SHADER\r\n", data );
	}
	
	// For safety
	code[fileSize + offset - 1] = '0';
	const char* appendedCode = (const char*)&code[0];
	
	*shader = glCreateShader( type );
    DEBUG_OPENGL();
    
	glShaderSource( *shader, 1, &appendedCode, NULL );
	DEBUG_OPENGL();
    
	glCompileShader( *shader );
	DEBUG_OPENGL();

#ifdef DEBUGON
	GLint logLength = 0;
	glGetShaderiv( *shader, GL_INFO_LOG_LENGTH, &logLength );
	if( logLength > 0 )
	{
		char *log = (char*)malloc( logLength );
		glGetShaderInfoLog( *shader, logLength, &logLength, log );
		DEBUGLOG( "Shader compile log:\n%s", log );
		free( log );
	}
#endif
	
	glGetShaderiv( *shader, GL_COMPILE_STATUS, &status );
	if( status == 0 )
	{
		glDeleteShader( *shader );
		return false;
	}
	
	return true;
}
Пример #4
0
static bool compileShader(GLuint *shader, GLenum type, const char *path)
{
	GLint status;

	CCText fileData;
	const int fileSize = CCFileManager::GetFile( path, fileData, Resource_Packaged );

	CCText shaderCode;
	if( type == GL_VERTEX_SHADER )
	{
		shaderCode = "#define VERTEX_SHADER\r\n";
	}
	else if( type == GL_FRAGMENT_SHADER )
	{
		shaderCode = "#define PIXEL_SHADER\r\n";
	}
	shaderCode += fileData.buffer;

	*shader = glCreateShader( type );
    DEBUG_OPENGL();

	const char* constSourceCode = shaderCode.buffer;

	glShaderSource( *shader, 1, &constSourceCode, NULL );
	DEBUG_OPENGL();

	glCompileShader( *shader );
	DEBUG_OPENGL();

#ifdef DEBUGON
	GLint logLength = 0;
	glGetShaderiv( *shader, GL_INFO_LOG_LENGTH, &logLength );
	if( logLength > 0 )
	{
		char *log = (char*)malloc( logLength );
		glGetShaderInfoLog( *shader, logLength, &logLength, log );
		DEBUGLOG( "Shader compile log:\n%s", log );
		free( log );
	}
#endif

	glGetShaderiv( *shader, GL_COMPILE_STATUS, &status );
	if( status == 0 )
	{
		glDeleteShader( *shader );
		return false;
	}

	return true;
}
Пример #5
0
void CCRenderer::setupOpenGL()
{
    if( usingOpenGL2 )
    {
        // Use shader program
        currentShader = shaders.list[0];
        currentShader->use();

        currentShader->enableAttributeArray( ATTRIB_VERTEX );
        currentShader->enableAttributeArray( ATTRIB_TEXCOORD );
        DEBUG_OPENGL();
    }
    else
    {
#ifdef IOS
        // GL_TEXTURE_2D is not a valid argument to glEnable in OpenGL ES 2.0
        glEnable( GL_TEXTURE_2D );
        glEnableClientState( GL_VERTEX_ARRAY );
        glEnableClientState( GL_TEXTURE_COORD_ARRAY );
        glDisableClientState( GL_COLOR_ARRAY );
        DEBUG_OPENGL();

        CCSetColour( CCColour() );
#endif
    }

#ifndef DXRENDERER
    glClearColor( 0.0f, 0.0f, 0.0f, 1.0f );
    DEBUG_OPENGL();
#endif

    CCSetDepthRead( true );
    CCSetDepthWrite( true );
#ifndef DXRENDERER
    glDepthFunc( GL_LEQUAL );
    DEBUG_OPENGL();

    glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );

    glEnable( GL_SCISSOR_TEST );
    DEBUG_OPENGL();
#endif
    GLEnable( GL_BLEND );
    DEBUG_OPENGL();

#ifndef DXRENDERER
#ifndef Q_OS_SYMBIAN
    glClearDepthf( 1.0f );
    DEBUG_OPENGL();
#endif

    glLineWidth( LINE_WIDTH );
    DEBUG_OPENGL();
#endif

    // Enable back face culling
    CCSetCulling( true );
    CCSetBackCulling();
}
Пример #6
0
bool CCEngine::setupRenderer()
{
    if( renderer->setup() )
    {
    	DEBUG_OPENGL();

    	if( textureManager == NULL )
    	{
    		textureManager = new CCTextureManager();
    	}
        textureManager->invalidateAllTextureHandles();
    	DEBUG_OPENGL();

        renderer->setupOpenGL();
        DEBUG_OPENGL();

        return true;
    }

    return false;
}
Пример #7
0
bool CCRenderer::setup()
{
    viewportX = viewportY = viewportWidth = viewportHeight = 0.0f;
    scissorX = scissorY = scissorWidth = scissorHeight = 0.0f;

    usingOpenGL2 = true;
	renderFlags = render_all;
    if( !createContext() || !loadShaders() )
    {
        return false;
    }
    DEBUG_OPENGL();

    // All current iPhoneOS devices support BGRA via an extension.
    BGRASupport = CCTextureBase::ExtensionSupported( "GL_IMG_texture_format_BGRA8888" );

    frameBufferManager.setup();
    DEBUG_OPENGL();

    // Screen dimensions
    setupScreenSizeParams();

    return true;
}
void CCShader::use()
{
#if defined PROFILEON
    CCProfiler profile( "CCShader::use()" );
#endif

#ifdef QT
    program->bind();
#else
	glUseProgram( program );
#endif
    
    DEBUG_OPENGL();
    
    CCRefreshRenderAttributes();
}
void CCRenderer::setupOpenGL()
{
    // Use shader program
    currentShader = shaders.list[0];
    currentShader->use();
    
#ifdef QT
    currentShader->program->enableAttributeArray( ATTRIB_VERTEX );
    //currentShader->program->enableAttributeArray( ATTRIB_COLOR );
    currentShader->program->enableAttributeArray( ATTRIB_TEXCOORD );

    //currentShader->program->enableAttributeArray( ATTRIB_NORMAL );
#else
	glEnableVertexAttribArray( ATTRIB_VERTEX );
	//glEnableVertexAttribArray( ATTRIB_COLOR );
	glEnableVertexAttribArray( ATTRIB_TEXCOORD );

	//glEnableVertexAttribArray( ATTRIB_NORMAL );
#endif
	DEBUG_OPENGL();

    //glClearColor( 0.85f, 0.85f, 0.875f, 1.0f );
    glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
    DEBUG_OPENGL();

    glEnable( GL_DEPTH_TEST );
    glDepthMask( GL_TRUE );
    glDepthFunc( GL_LEQUAL );
    DEBUG_OPENGL();
	
    // GL_TEXTURE_2D is not a valid argument to glEnable in OpenGL ES 2.0
    //glEnable( GL_TEXTURE_2D );

    glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
    glEnable( GL_BLEND );
    DEBUG_OPENGL();

#ifndef Q_OS_SYMBIAN
    glClearDepthf( 1.0f );
    DEBUG_OPENGL();
#endif

    glLineWidth( LINE_WIDTH );
    DEBUG_OPENGL();

    // Enable back face culling
    glEnable( GL_CULL_FACE );
    glCullFace( GL_BACK );
}
Пример #10
0
bool CCDeviceRenderer::loadShader(CCShader *shader)
{
	GLuint vertShader, fragShader;
	
	CCText shaderPath = shader->name;
	shaderPath += ".fx";
	
    // Create shader program
	shader->program = glCreateProgram();
	
	if( !compileShader( &vertShader, GL_VERTEX_SHADER, shaderPath.buffer ) )
	{
		DEBUGLOG( "Failed to compile vertex shader." );
		glDeleteProgram( shader->program );
		shader->program = 0;
		return false;
	}
	
	if( !compileShader( &fragShader, GL_FRAGMENT_SHADER, shaderPath.buffer ) )
	{
		DEBUGLOG( "Failed to compile fragment shader." );
		glDeleteProgram( shader->program );
		shader->program = 0;
		return false;
	}
	
	DEBUG_OPENGL();
	
	// Attach shaders to program
	glAttachShader( shader->program, vertShader );
    DEBUG_OPENGL();
    
	glAttachShader( shader->program, fragShader );
    DEBUG_OPENGL();
	
    // Bind attribute locations - this needs to be done prior to linking
	glBindAttribLocation( shader->program, ATTRIB_VERTEX, "vs_position" );
	glBindAttribLocation( shader->program, ATTRIB_TEXCOORD, "vs_texCoord" );
	glBindAttribLocation( shader->program, ATTRIB_COLOUR, "vs_colour" );
	glBindAttribLocation( shader->program, ATTRIB_NORMAL, "vs_normal" );
    DEBUG_OPENGL();
	
	if( !linkProgram( shader->program ) )
	{
		DEBUGLOG( "Failed to link program." );
		if( vertShader )
		{
			glDeleteShader( vertShader );
			vertShader = 0;
		}
		
		if( fragShader )
		{
			glDeleteShader( fragShader );
			fragShader = 0;
		}
		
		if( shader->program )
		{
			glDeleteProgram( shader->program );
			shader->program = 0;
		}
		
		return false;
	}
    
    // Release vertex and fragment shaders
    if( vertShader )
	{
		glDeleteShader( vertShader );
	}
	
	if( fragShader )
	{
		glDeleteShader( fragShader );
	}
	
    return true;
}