void obs_display_free(obs_display_t display) { pthread_mutex_destroy(&display->draw_callbacks_mutex); da_free(display->draw_callbacks); if (display->swap) { swapchain_destroy(display->swap); display->swap = NULL; } }
swapchain_t device_create_swapchain(device_t device, struct gs_init_data *info) { struct gs_swap_chain *swap = bzalloc(sizeof(struct gs_swap_chain)); swap->device = device; swap->info = *info; swap->wi = gl_windowinfo_create(info); if (!swap->wi) { blog(LOG_ERROR, "device_create_swapchain (GL) failed"); swapchain_destroy(swap); return NULL; } if (!gl_platform_init_swapchain(swap)) { blog(LOG_ERROR, "gl_platform_init_swapchain failed"); swapchain_destroy(swap); return NULL; } return swap; }
void obs_display_destroy(obs_display_t display) { if (display) { size_t i; pthread_mutex_lock(&obs->data.displays_mutex); da_erase_item(obs->data.displays, &display); pthread_mutex_unlock(&obs->data.displays_mutex); for (i = 0; i < MAX_CHANNELS; i++) obs_source_release(display->channels[i]); swapchain_destroy(display->swap); bfree(display); } }