bool vl_compositor_init(struct vl_compositor *c, struct pipe_context *pipe) { assert(c); memset(c, 0, sizeof(*c)); c->pipe = pipe; if (!init_pipe_state(c)) return false; if (!init_shaders(c)) { cleanup_pipe_state(c); return false; } if (!init_buffers(c)) { cleanup_shaders(c); cleanup_pipe_state(c); return false; } return true; }
bool vl_compositor_init(struct vl_compositor *c, struct pipe_context *pipe) { assert(c); memset(c, 0, sizeof(*c)); c->pipe = pipe; c->upload = u_upload_create(pipe, 128 * 1024, 4, PIPE_BIND_VERTEX_BUFFER); if (!c->upload) return false; if (!init_pipe_state(c)) { u_upload_destroy(c->upload); return false; } if (!init_shaders(c)) { u_upload_destroy(c->upload); cleanup_pipe_state(c); return false; } if (!init_buffers(c)) { u_upload_destroy(c->upload); cleanup_shaders(c); cleanup_pipe_state(c); return false; } return true; }
void vl_compositor_cleanup(struct vl_compositor *compositor) { assert(compositor); cleanup_buffers(compositor); cleanup_shaders(compositor); cleanup_pipe_state(compositor); }
void vl_compositor_cleanup(struct vl_compositor *c) { assert(c); u_upload_destroy(c->upload); cleanup_buffers(c); cleanup_shaders(c); cleanup_pipe_state(c); }
void vl_mc_cleanup(struct vl_mc *renderer) { assert(renderer); cleanup_pipe_state(renderer); renderer->pipe->delete_vs_state(renderer->pipe, renderer->vs_ref); renderer->pipe->delete_vs_state(renderer->pipe, renderer->vs_ycbcr); renderer->pipe->delete_fs_state(renderer->pipe, renderer->fs_ref); renderer->pipe->delete_fs_state(renderer->pipe, renderer->fs_ycbcr); renderer->pipe->delete_fs_state(renderer->pipe, renderer->fs_ycbcr_sub); }
bool vl_mc_init(struct vl_mc *renderer, struct pipe_context *pipe, unsigned buffer_width, unsigned buffer_height, unsigned macroblock_size, float scale, vl_mc_ycbcr_vert_shader vs_callback, vl_mc_ycbcr_frag_shader fs_callback, void *callback_priv) { assert(renderer); assert(pipe); memset(renderer, 0, sizeof(struct vl_mc)); renderer->pipe = pipe; renderer->buffer_width = buffer_width; renderer->buffer_height = buffer_height; renderer->macroblock_size = macroblock_size; if (!init_pipe_state(renderer)) goto error_pipe_state; renderer->vs_ref = create_ref_vert_shader(renderer); if (!renderer->vs_ref) goto error_vs_ref; renderer->vs_ycbcr = create_ycbcr_vert_shader(renderer, vs_callback, callback_priv); if (!renderer->vs_ycbcr) goto error_vs_ycbcr; renderer->fs_ref = create_ref_frag_shader(renderer); if (!renderer->fs_ref) goto error_fs_ref; renderer->fs_ycbcr = create_ycbcr_frag_shader(renderer, scale, false, fs_callback, callback_priv); if (!renderer->fs_ycbcr) goto error_fs_ycbcr; renderer->fs_ycbcr_sub = create_ycbcr_frag_shader(renderer, scale, true, fs_callback, callback_priv); if (!renderer->fs_ycbcr_sub) goto error_fs_ycbcr_sub; return true; error_fs_ycbcr_sub: renderer->pipe->delete_fs_state(renderer->pipe, renderer->fs_ycbcr); error_fs_ycbcr: renderer->pipe->delete_fs_state(renderer->pipe, renderer->fs_ref); error_fs_ref: renderer->pipe->delete_vs_state(renderer->pipe, renderer->vs_ycbcr); error_vs_ycbcr: renderer->pipe->delete_vs_state(renderer->pipe, renderer->vs_ref); error_vs_ref: cleanup_pipe_state(renderer); error_pipe_state: return false; }