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; }
void Tetris_destroy(Tetris *tetris) { Renderer_destroy(tetris->renderer); Block_destroy(tetris->current_block); Block_destroy(tetris->ghost_block); free(tetris); cleanup_screen(); }
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; }
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; }