X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=resource_pool.cpp;h=7f813765c53ac1dd47c21d69dfd9bc552eb1b89c;hp=5abc1b28b81729671bd0e4758ae9803d53c096f9;hb=4a35c01ed5407a3d9b9616f9d13e77970ee003ef;hpb=7ea0b3a5be9bafaa2d1fa5a17ce285a725ce132b diff --git a/resource_pool.cpp b/resource_pool.cpp index 5abc1b2..7f81376 100644 --- a/resource_pool.cpp +++ b/resource_pool.cpp @@ -186,6 +186,9 @@ void ResourcePool::release_glsl_program(GLuint glsl_program_num) GLuint ResourcePool::create_2d_texture(GLint internal_format, GLsizei width, GLsizei height) { + assert(width > 0); + assert(height > 0); + pthread_mutex_lock(&lock); // See if there's a texture on the freelist we can use. for (list::iterator freelist_it = texture_freelist.begin(); @@ -291,8 +294,8 @@ void ResourcePool::release_2d_texture(GLuint texture_num) texture_freelist_bytes += estimate_texture_size(texture_formats[texture_num]); while (texture_freelist_bytes > texture_freelist_max_bytes) { - GLuint free_texture_num = texture_freelist.front(); - texture_freelist.pop_front(); + GLuint free_texture_num = texture_freelist.back(); + texture_freelist.pop_back(); assert(texture_formats.count(free_texture_num) != 0); texture_freelist_bytes -= estimate_texture_size(texture_formats[free_texture_num]); texture_formats.erase(free_texture_num); @@ -398,6 +401,7 @@ void ResourcePool::cleanup_unlinked_fbos(void *context) pair key(context, fbo_num); assert(fbo_formats.count(key) != 0); if (fbo_formats[key].texture_num == 0) { + fbo_formats.erase(key); glDeleteFramebuffers(1, &fbo_num); check_error(); fbo_freelist[context].erase(freelist_it++); @@ -457,6 +461,9 @@ size_t ResourcePool::estimate_texture_size(const Texture2D &texture_format) case GL_R16F: bytes_per_pixel = 2; break; + case GL_RG8: + bytes_per_pixel = 2; + break; case GL_R8: bytes_per_pixel = 1; break;