static void paint_cb(uv_idle_t *idle) { Data *data = idle->data; cg_error_t *error = NULL; const cg_gles2_vtable_t *gles2 = data->gles2_vtable; /* Draw scene with GLES2 */ if (!cg_push_gles2_context( data->dev, data->gles2_ctx, data->fb, data->fb, &error)) { c_error("Failed to push gles2 context: %s\n", error->message); } /* Clear offscreen framebuffer with a random color */ gles2->glClearColor( c_random_double(), c_random_double(), c_random_double(), 1.0f); gles2->glClear(GL_COLOR_BUFFER_BIT); cg_pop_gles2_context(data->dev); /* Draw scene with Cogl */ cg_primitive_draw(data->triangle, data->fb, data->pipeline); cg_onscreen_swap_buffers(CG_ONSCREEN(data->fb)); uv_idle_stop(&data->idle); }
static void redraw(Data *data) { cg_framebuffer_t *fb = data->fb; cg_framebuffer_clear4f(fb, CG_BUFFER_BIT_COLOR, 0, 0, 0, 1); cg_framebuffer_push_matrix(fb); cg_framebuffer_translate(fb, data->center_x, -data->center_y, 0.0f); cg_primitive_draw(data->triangle, fb, data->pipeline); cg_framebuffer_pop_matrix(fb); cg_onscreen_swap_buffers(CG_ONSCREEN(fb)); }
static void paint_cb(uv_idle_t *idle) { struct demo *demo = idle->data; unsigned int i; update_catherine_wheel(demo); cg_framebuffer_clear4f(demo->fb, CG_BUFFER_BIT_COLOR | CG_BUFFER_BIT_DEPTH, 0, 0, 0, 1); for (i = 0; i < C_N_ELEMENTS(demo->emitter); i++) particle_emitter_paint(demo->emitter[i]); cg_onscreen_swap_buffers(demo->fb); uv_idle_stop(&demo->idle); }