// ResourcePool explicitly if you delete a context, or they will leak (and the
// ResourcePool destructor will assert-fail). See clean_context().
// ResourcePool explicitly if you delete a context, or they will leak (and the
// ResourcePool destructor will assert-fail). See clean_context().
GLuint create_2d_texture(GLint internal_format, GLsizei width, GLsizei height);
void release_2d_texture(GLuint texture_num);
GLuint create_2d_texture(GLint internal_format, GLsizei width, GLsizei height);
void release_2d_texture(GLuint texture_num);
// or fetch a previous used if possible. Unbinds GL_FRAMEBUFFER afterwards.
// Keeps ownership of the FBO; you must call release_fbo() of deleting
// it when you no longer want it.
// or fetch a previous used if possible. Unbinds GL_FRAMEBUFFER afterwards.
// Keeps ownership of the FBO; you must call release_fbo() of deleting
// it when you no longer want it.
// in particular on NVidia cards. Also, keep in mind that FBOs are not
// shareable across contexts, so you must have the context that's supposed
// to own the FBO current when you create or release it.
// in particular on NVidia cards. Also, keep in mind that FBOs are not
// shareable across contexts, so you must have the context that's supposed
// to own the FBO current when you create or release it.
- GLuint create_fbo(GLuint texture_num);
+ GLuint create_fbo(GLuint texture0_num,
+ GLuint texture1_num = 0,
+ GLuint texture2_num = 0,
+ GLuint texture3_num = 0);
void release_fbo(GLuint fbo_num);
// Informs the ResourcePool that the current context is going away soon,
void release_fbo(GLuint fbo_num);
// Informs the ResourcePool that the current context is going away soon,
- GLuint texture_num; // 0 means associated to a texture that has since been deleted.
+ GLuint fbo_num;
+ // GL_INVALID_INDEX means associated to a texture that has since been deleted.
+ // 0 means the output isn't bound.
+ GLuint texture_num[num_fbo_attachments];
};
// For each context, a mapping from FBO number to format details. This is
// filled if the FBO is given out to a client or on the freelist, but
// not if it is deleted from the freelist.
std::map<std::pair<void *, GLuint>, FBO> fbo_formats;
};
// For each context, a mapping from FBO number to format details. This is
// filled if the FBO is given out to a client or on the freelist, but
// not if it is deleted from the freelist.
std::map<std::pair<void *, GLuint>, FBO> fbo_formats;
// For each context, a list of all FBOs that are released but not freed
// (most recently freed first). Once this reaches <fbo_freelist_max_length>,
// the last element will be deleted.
// For each context, a list of all FBOs that are released but not freed
// (most recently freed first). Once this reaches <fbo_freelist_max_length>,
// the last element will be deleted.
// See the caveats at the constructor.
static size_t estimate_texture_size(const Texture2D &texture_format);
// See the caveats at the constructor.
static size_t estimate_texture_size(const Texture2D &texture_format);