]> git.sesse.net Git - movit/blobdiff - resource_pool.cpp
Add proper formats for RGB without alpha.
[movit] / resource_pool.cpp
index a83add2a7117ccfb99bea2cce3afcdb1ed062cdb..d322a1764f96ad43a8557f947127b8674262d8f6 100644 (file)
@@ -200,6 +200,12 @@ GLuint ResourcePool::create_2d_texture(GLint internal_format, GLsizei width, GLs
        case GL_SRGB8_ALPHA8:
                format = GL_RGBA;
                break;
+       case GL_RGB32F_ARB:
+       case GL_RGB16F_ARB:
+       case GL_RGB8:
+       case GL_SRGB8:
+               format = GL_RGB;
+               break;
        case GL_RG32F:
        case GL_RG16F:
                format = GL_RG;
@@ -256,6 +262,7 @@ void ResourcePool::release_2d_texture(GLuint texture_num)
                        map<GLuint, FBO>::const_iterator format_it = fbo_formats.find(fbo_num);
                        assert(format_it != fbo_formats.end());
                        if (format_it->second.texture_num == free_texture_num) {
+                               fbo_formats.erase(fbo_num);
                                glDeleteFramebuffers(1, &fbo_num);
                                fbo_freelist.erase(fbo_freelist_it++);
                        } else {
@@ -344,6 +351,16 @@ size_t ResourcePool::estimate_texture_size(const Texture2D &texture_format)
        case GL_SRGB8_ALPHA8:
                bytes_per_pixel = 4;
                break;
+       case GL_RGB32F_ARB:
+               bytes_per_pixel = 12;
+               break;
+       case GL_RGB16F_ARB:
+               bytes_per_pixel = 6;
+               break;
+       case GL_RGB8:
+       case GL_SRGB8:
+               bytes_per_pixel = 3;
+               break;
        case GL_RG32F:
                bytes_per_pixel = 8;
                break;