Example #1
0
DrawableContext *visual_2d_get_drawable_context(GF_VisualManager *visual)
{
#ifdef SKIP_CONTEXT
	return NULL;
#endif

	if (!visual->context) {
		visual->context = NewDrawableContext();
		visual->cur_context = visual->context;
		drawctx_reset(visual->context);
		visual->num_nodes_current_frame ++;
		return visual->context;
	}
//	assert(visual->cur_context);
	/*current context is OK*/
	if (!visual->cur_context->drawable) {
		/*reset next context in display list for next call*/
		if (visual->cur_context->next) visual->cur_context->next->drawable = NULL;
		drawctx_reset(visual->cur_context);
		return visual->cur_context;
	}
	/*need a new context and next one is OK*/
	if (visual->cur_context->next) {
		visual->cur_context = visual->cur_context->next;
//		assert(visual->cur_context->drawable == NULL);
		/*reset next context in display list for next call*/
		if (visual->cur_context->next) visual->cur_context->next->drawable = NULL;
		drawctx_reset(visual->cur_context);
		visual->num_nodes_current_frame ++;
		return visual->cur_context;
	}
	/*need to create a new context*/
	visual->cur_context->next = NewDrawableContext();
	visual->cur_context = visual->cur_context->next;
	drawctx_reset(visual->cur_context);
	visual->num_nodes_current_frame ++;

	//pre-allocate some contexts
#if 0
	{
		u32 i;
		DrawableContext *last = visual->cur_context;
		for (i=0; i<50; i++) {
			last->next = gf_malloc(sizeof(DrawableContext));
			last = last->next;
			last->drawable = NULL;
			last->col_mat = NULL;
		}
		last->next = NULL;
	}
#endif

	return visual->cur_context;
}
Example #2
0
DrawableContext *VS2D_GetDrawableContext(VisualSurface2D *surf)
{
    u32 i;
    if (surf->alloc_contexts==surf->num_contexts) {
        surf->alloc_contexts += CONTEXT_ALLOC_STEP;
        surf->contexts = (DrawableContext **) realloc(surf->contexts, surf->alloc_contexts * sizeof(DrawableContext *) );
        for (i=surf->num_contexts; i<surf->alloc_contexts; i++)
            surf->contexts[i] = NewDrawableContext();

        surf->nodes_to_draw = realloc(surf->nodes_to_draw, surf->alloc_contexts * sizeof(u32));
    }
    i = surf->num_contexts;
    surf->num_contexts++;
    drawctx_reset(surf->contexts[i]);
    surf->contexts[i]->surface = surf;
    return surf->contexts[i];

}
Example #3
0
void DeleteDrawableContext(DrawableContext *ctx)
{
	drawctx_reset(ctx);
	if (ctx->sensors) DeleteChain(ctx->sensors);
	free(ctx);
}