void compositor_init_compositetexture2d(GF_Compositor *compositor, GF_Node *node) { M_CompositeTexture2D *c2d = (M_CompositeTexture2D *)node; CompositeTextureStack *st; GF_SAFEALLOC(st, CompositeTextureStack); st->sensors = gf_list_new(); st->previous_sensors = gf_list_new(); gf_sc_texture_setup(&st->txh, compositor, node); /*remove texture from compositor and add it at the end, so that any sub-textures are handled before*/ gf_list_del_item(compositor->textures, &st->txh); gf_list_add(compositor->textures, &st->txh); st->txh.update_texture_fcnt = composite_update; if ((c2d->repeatSandT==1) || (c2d->repeatSandT==3) ) st->txh.flags |= GF_SR_TEXTURE_REPEAT_S; if (c2d->repeatSandT>1) st->txh.flags |= GF_SR_TEXTURE_REPEAT_T; /*create composite visual*/ st->visual = visual_new(compositor); st->visual->offscreen = node; st->visual->GetSurfaceAccess = composite_get_video_access; st->visual->ReleaseSurfaceAccess = composite_release_video_access; st->visual->raster_surface = compositor->rasterizer->surface_new(compositor->rasterizer, 1); st->visual->DrawBitmap = composite2d_draw_bitmap; st->first = 1; st->visual->compositor = compositor; gf_node_set_private(node, st); gf_node_set_callback_function(node, composite_traverse); gf_sc_visual_register(compositor, st->visual); }
void compositor_init_layer3d(GF_Compositor *compositor, GF_Node *node) { Layer3DStack *stack; GF_SAFEALLOC(stack, Layer3DStack); if (!stack) { GF_LOG(GF_LOG_ERROR, GF_LOG_COMPOSE, ("[Compositor] Failed to allocate layer 3d stack\n")); return; } stack->visual = visual_new(compositor); stack->visual->type_3d = 2; stack->visual->camera.is_3D = 1; stack->visual->camera.visibility = 0; stack->visual->camera.speed = FIX_ONE; camera_invalidate(&stack->visual->camera); stack->first = 1; stack->txh.compositor = compositor; stack->drawable = drawable_new(); stack->drawable->node = node; stack->drawable->flags = DRAWABLE_USE_TRAVERSE_DRAW; gf_node_set_private(node, stack); gf_node_set_callback_function(node, TraverseLayer3D); }
void compositor_init_compositetexture3d(GF_Compositor *compositor, GF_Node *node) { M_CompositeTexture3D *c3d = (M_CompositeTexture3D *)node; CompositeTextureStack *st; GF_SAFEALLOC(st, CompositeTextureStack); st->sensors = gf_list_new(); st->previous_sensors = gf_list_new(); gf_sc_texture_setup(&st->txh, compositor, node); /*remove texture from compositor and add it at the end, so that any sub-textures are handled before*/ gf_list_del_item(compositor->textures, &st->txh); gf_list_add(compositor->textures, &st->txh); st->txh.update_texture_fcnt = composite_update; if (c3d->repeatS) st->txh.flags |= GF_SR_TEXTURE_REPEAT_S; if (c3d->repeatT) st->txh.flags |= GF_SR_TEXTURE_REPEAT_T; /*create composite visual*/ st->visual = visual_new(compositor); st->visual->offscreen = node; st->visual->GetSurfaceAccess = composite_get_video_access; st->visual->ReleaseSurfaceAccess = composite_release_video_access; st->first = 1; st->visual->compositor = compositor; gf_node_set_private(node, st); gf_node_set_callback_function(node, composite_traverse); gf_sc_visual_register(compositor, st->visual); #ifdef GPAC_USE_TINYGL st->visual->type_3d = 2; st->visual->camera.is_3D = 1; #else if (! (compositor->video_out->hw_caps & GF_VIDEO_HW_OPENGL_OFFSCREEN)) { st->visual->type_3d = 0; st->visual->camera.is_3D = 0; } else { st->visual->type_3d = 2; st->visual->camera.is_3D = 1; } #endif camera_invalidate(&st->visual->camera); }