Esempio n. 1
0
bool RenderDetails_render(
    Context * context,
    RenderDetails * details,
    BitmapBgra * source,
    BitmapBgra * canvas)
{


    bool destroy_source = false;

    Renderer * r = Renderer_create(context, source, canvas, details);
    if (r == NULL) {
        CONTEXT_add_to_callstack (context);
        if (destroy_source) {
            BitmapBgra_destroy(context, source);
        }
        return false;
    }
    r->destroy_details = false;
    r->destroy_source = destroy_source;
    bool result = Renderer_perform_render(context, r);
    if (!result) {
        CONTEXT_add_to_callstack (context);
    }
    Renderer_destroy(context, r);
    return result;
}
Esempio n. 2
0
void Tetris_destroy(Tetris *tetris)
{
    Renderer_destroy(tetris->renderer);
    Block_destroy(tetris->current_block);
    Block_destroy(tetris->ghost_block);
    free(tetris);

    cleanup_screen();
}
Esempio n. 3
0
bool RenderDetails_render_in_place(
    Context * context,
    RenderDetails * details,
    BitmapBgra * edit_in_place)
{

    Renderer * r = Renderer_create_in_place(context, edit_in_place, details);
    if (r == NULL) {
        CONTEXT_add_to_callstack (context);
        return false;
    }
    r->destroy_details = false;
    r->destroy_source = false;
    bool result = Renderer_perform_render(context, r);
    if (!result) {
        CONTEXT_add_to_callstack (context);
    }
    Renderer_destroy(context, r);
    return result;
}
Esempio n. 4
0
bool Renderer_init() {
    check( !renderer, "Renderer already created!\n" );

    renderer = byte_alloc( sizeof( Renderer ) );
    check_mem( renderer );

    // initial number of 10 vaos and 100 meshes
    MeshArray_init( &renderer->mMeshes, 10 );
    ShaderArray_init( &renderer->mShaders, 10 );
    TextureArray_init( &renderer->mTextures, 10 );
    FontArray_init( &renderer->mFonts, 10 );
    SpritesArray_init( &renderer->sprites, 50 );
    StaticsArray_init( &renderer->statics, 50 );

    renderer->mCurrentMesh = -1;
    renderer->mCurrentShader = -1;
    renderer->mCurrentTexture[0] = -1;
    renderer->mCurrentTexture[1] = -1;
    renderer->mCurrentTextureTarget = 0;

    renderer->mVao = -1;
 
    // GLEW/GLDL initialisation
#ifdef USE_GLDL
    int noerr = gldlInit();

    check( noerr, "Failed to initialize GLDL!\n" );
    log_info( "GLDL successfully initialized!\n" );
#else
    glewExperimental = 1;
    GLenum glerr = glewInit();

    // remove GLEW error cause of Core profile
    glGetError();

    check( GLEW_OK == glerr, "GLEW Error : %s\n", glewGetErrorString( glerr ) );
    log_info( "GLEW v%s successfully initialized!\n", glewGetString( GLEW_VERSION ) );
#endif

    // GL Version
    int majV, minV;
    glGetIntegerv( GL_MAJOR_VERSION, &majV );
    glGetIntegerv( GL_MINOR_VERSION, &minV );
    log_info( "OpenGL %d.%d\n", majV, minV );
    log_info( "GLSL %s\n", glGetString( GL_SHADING_LANGUAGE_VERSION ) );
    log_info( "Hardware : %s - %s\n", glGetString( GL_VENDOR ), glGetString( GL_RENDERER ) );

    // GL state initialisations
    //glHint( GL_GENERATE_MIPMAP_HINT, GL_NICEST );

    glEnable( GL_DEPTH_TEST );
    glDepthFunc( GL_LEQUAL );

    glEnable( GL_CULL_FACE );
    glCullFace( GL_BACK );
    glFrontFace( GL_CCW );

    // enable alpha blend
    glEnable( GL_BLEND );
    glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );

    glClearColor( 0.f, 0.f, 0.f, 0.f );

    // clear init gl errors
    CheckGLError();

    log_info( "Renderer successfully initialized!\n" );

    return true;

error:
    Renderer_destroy();

    return false;
}