37 : shared_orphan_list_(shared_orphan_list)
40 debug::init_gl_callbacks();
43 float data[4] = {0.0f, 0.0f, 0.0f, 1.0f};
46 glBufferData(GL_ARRAY_BUFFER,
sizeof(
data),
data, GL_STATIC_DRAW);
47 glBindBuffer(GL_ARRAY_BUFFER, 0);
60 if (default_fbo != 0) {
62 glBindFramebuffer(GL_FRAMEBUFFER, default_fbo);
71 GLboolean supports_stereo_quad_buffer = GL_FALSE;
72 glGetBooleanv(GL_STEREO, &supports_stereo_quad_buffer);
73 if (supports_stereo_quad_buffer) {
93 process_frame_timings();
166 process_frame_timings();
194void GLSharedOrphanLists::OrphanList::clear(
FunctionRef<
void(GLuint, GLuint *)> free_fn)
196 std::scoped_lock
lock(mutex_);
203void GLSharedOrphanLists::OrphanList::append(GLuint handle)
205 std::scoped_lock
lock(mutex_);
206 handles_.append(handle);
214 buffers.clear(glDeleteBuffers);
228void GLContext::orphans_clear()
234 if (!orphaned_vertarrays_.is_empty()) {
235 glDeleteVertexArrays(
uint(orphaned_vertarrays_.size()), orphaned_vertarrays_.data());
236 orphaned_vertarrays_.clear();
238 if (!orphaned_framebuffers_.is_empty()) {
239 glDeleteFramebuffers(
uint(orphaned_framebuffers_.size()), orphaned_framebuffers_.data());
240 orphaned_framebuffers_.clear();
242 lists_mutex_.unlock();
244 shared_orphan_list_.orphans_clear();
247void GLContext::orphans_add(Vector<GLuint> &orphan_list, std::mutex &list_mutex, GLuint
id)
257 glDeleteVertexArrays(1, &vao_id);
260 orphans_add(orphaned_vertarrays_, lists_mutex_, vao_id);
267 glDeleteFramebuffers(1, &fbo_id);
270 orphans_add(orphaned_framebuffers_, lists_mutex_, fbo_id);
278 glDeleteBuffers(1, &buf_id);
282 orphan_list.
buffers.append(buf_id);
290 glDeleteTextures(1, &tex_id);
294 orphan_list.
textures.append(tex_id);
302 glDeleteShader(shader_id);
306 orphan_list.
shaders.append(shader_id);
314 glDeleteProgram(program_id);
318 orphan_list.
programs.append(program_id);
335 vao_caches_.add(cache);
336 lists_mutex_.unlock();
342 vao_caches_.remove(cache);
343 lists_mutex_.unlock();
354 if (epoxy_has_gl_extension(
"GL_NVX_gpu_memory_info")) {
356 glGetIntegerv(GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX, r_total_mem);
357 glGetIntegerv(GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX, r_free_mem);
359 else if (epoxy_has_gl_extension(
"GL_ATI_meminfo")) {
361 glGetIntegerv(GL_TEXTURE_FREE_MEMORY_ATI, stats);
364 *r_free_mem = stats[0];
GHOST C-API function and type declarations.
int32_t GHOST_GetWidthRectangle(GHOST_RectangleHandle rectanglehandle)
void GHOST_DisposeRectangle(GHOST_RectangleHandle rectanglehandle)
int32_t GHOST_GetHeightRectangle(GHOST_RectangleHandle rectanglehandle)
unsigned int GHOST_GetDefaultGPUFramebuffer(GHOST_WindowHandle windowhandle)
GHOST_RectangleHandle GHOST_GetClientBounds(GHOST_WindowHandle windowhandle)
BMesh const char void * data
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
void append(const T &value)
StateManager * state_manager
FrameBuffer * front_right
GLSharedOrphanLists & shared_orphan_list_get()
uint16_t bound_ssbo_slots
void memory_statistics_get(int *r_total_mem, int *r_free_mem) override
static void buffer_free(GLuint buf_id)
void begin_frame() override
static void shader_free(GLuint shader_id)
GLContext(void *ghost_window, GLSharedOrphanLists &shared_orphan_list)
void vao_cache_unregister(GLVaoCache *cache)
static void texture_free(GLuint tex_id)
void deactivate() override
void vao_free(GLuint vao_id)
static void program_free(GLuint program_id)
void end_frame() override
void vao_cache_register(GLVaoCache *cache)
void fbo_free(GLuint fbo_id)