static void free_spans(cg_texture_2d_sliced_t *tex_2ds) { if (tex_2ds->slice_x_spans != NULL) { c_array_free(tex_2ds->slice_x_spans, true); tex_2ds->slice_x_spans = NULL; } if (tex_2ds->slice_y_spans != NULL) { c_array_free(tex_2ds->slice_y_spans, true); tex_2ds->slice_y_spans = NULL; } }
void _cg_destroy_texture_units(cg_device_t *dev) { int i; for (i = 0; i < dev->texture_units->len; i++) { cg_texture_unit_t *unit = &c_array_index(dev->texture_units, cg_texture_unit_t, i); texture_unit_free(unit); } c_array_free(dev->texture_units, true); }
static void free_slices(cg_texture_2d_sliced_t *tex_2ds) { if (tex_2ds->slice_textures != NULL) { int i; for (i = 0; i < tex_2ds->slice_textures->len; i++) { cg_texture_2d_t *slice_tex = c_array_index(tex_2ds->slice_textures, cg_texture_2d_t *, i); cg_object_unref(slice_tex); } c_array_free(tex_2ds->slice_textures, true); }
void rig_pb_stream_disconnect(rig_pb_stream_t *stream) { switch (stream->type) { #ifdef USE_UV case STREAM_TYPE_FD: uv_read_stop((uv_stream_t *)&stream->fd.uv_fd_pipe); uv_close((uv_handle_t *)&stream->fd.uv_fd_pipe, NULL /* closed callback */); break; case STREAM_TYPE_TCP: uv_read_stop((uv_stream_t *)&stream->tcp.socket); uv_close((uv_handle_t *)&stream->tcp.socket, NULL /* closed callback */); break; #endif case STREAM_TYPE_BUFFER: { int i; /* Give all incoming write closures back to the other end * so they can be freed */ for (i = 0; i < stream->buffer.incoming_write_closures->len; i++) { rig_pb_stream_write_closure_t *closure = c_array_index(stream->buffer.incoming_write_closures, void *, i); c_array_append_val(stream->buffer.other_end->buffer.finished_write_closures, closure); } c_array_free(stream->buffer.incoming_write_closures, true /* free storage */); stream->buffer.incoming_write_closures = NULL; drain_finished_write_closures(stream); c_array_free(stream->buffer.finished_write_closures, true /* free storage */); stream->buffer.finished_write_closures = NULL; stream->buffer.other_end->buffer.other_end = NULL; stream->buffer.other_end = NULL; } if (stream->buffer.read_idle) { rut_poll_shell_remove_idle_FIXME(stream->shell, stream->buffer.read_idle); stream->buffer.read_idle = NULL; } break; #ifdef __EMSCRIPTEN__ case STREAM_TYPE_WORKER_IPC: stream->worker_ipc.worker = 0; break; case STREAM_TYPE_WEBSOCKET_CLIENT: if (stream->websocket_client.socket != -1) { close(stream->websocket_client.socket); stream->websocket_client.socket = -1; } break; #endif #ifdef USE_UV case STREAM_TYPE_WEBSOCKET_SERVER: stream->websocket_server.ctx = NULL; break; #endif case STREAM_TYPE_DISCONNECTED: #ifdef USE_UV if (stream->resolving) uv_cancel((uv_req_t *)&stream->resolver); if (stream->connecting) uv_cancel((uv_req_t *)&stream->connection_request); #endif return; } stream->type = STREAM_TYPE_DISCONNECTED; rut_closure_list_invoke(&stream->on_error_closures, rig_pb_stream_callback_t, stream); }
static void _cg_device_free(cg_device_t *dev) { const cg_winsys_vtable_t *winsys = _cg_device_get_winsys(dev); winsys->device_deinit(dev); if (dev->atlas_set) cg_object_unref(dev->atlas_set); if (dev->default_gl_texture_2d_tex) cg_object_unref(dev->default_gl_texture_2d_tex); if (dev->default_gl_texture_3d_tex) cg_object_unref(dev->default_gl_texture_3d_tex); if (dev->opaque_color_pipeline) cg_object_unref(dev->opaque_color_pipeline); if (dev->blit_texture_pipeline) cg_object_unref(dev->blit_texture_pipeline); c_warn_if_fail(dev->gles2_context_stack.length == 0); if (dev->rectangle_byte_indices) cg_object_unref(dev->rectangle_byte_indices); if (dev->rectangle_short_indices) cg_object_unref(dev->rectangle_short_indices); if (dev->default_pipeline) cg_object_unref(dev->default_pipeline); if (dev->dummy_layer_dependant) cg_object_unref(dev->dummy_layer_dependant); if (dev->default_layer_n) cg_object_unref(dev->default_layer_n); if (dev->default_layer_0) cg_object_unref(dev->default_layer_0); if (dev->current_clip_stack_valid) _cg_clip_stack_unref(dev->current_clip_stack); _cg_bitmask_destroy(&dev->enabled_custom_attributes); _cg_bitmask_destroy(&dev->enable_custom_attributes_tmp); _cg_bitmask_destroy(&dev->changed_bits_tmp); if (dev->current_modelview_entry) cg_matrix_entry_unref(dev->current_modelview_entry); if (dev->current_projection_entry) cg_matrix_entry_unref(dev->current_projection_entry); _cg_matrix_entry_cache_destroy(&dev->builtin_flushed_projection); _cg_matrix_entry_cache_destroy(&dev->builtin_flushed_modelview); _cg_pipeline_cache_free(dev->pipeline_cache); _cg_sampler_cache_free(dev->sampler_cache); _cg_destroy_texture_units(dev); c_ptr_array_free(dev->uniform_names, true); c_hash_table_destroy(dev->uniform_name_hash); c_hash_table_destroy(dev->attribute_name_states_hash); c_array_free(dev->attribute_name_index_map, true); c_byte_array_free(dev->buffer_map_fallback_array, true); #ifdef CG_HAS_UV_SUPPORT _cg_uv_cleanup(dev); #endif cg_object_unref(dev->display); cg_object_unref(dev->renderer); c_free(dev); }