-glsl_fbo GlslManager::get_fbo(int width, int height)
-{
-#if defined(__DARWIN__)
- CGLContextObj context = CGLGetCurrentContext();
-#elif defined(WIN32)
- HGLRC context = wglGetCurrentContext();
-#else
- GLXContext context = glXGetCurrentContext();
-#endif
-
- lock();
- for (int i = 0; i < fbo_list.count(); ++i) {
- glsl_fbo fbo = (glsl_fbo) fbo_list.peek(i);
- if (!fbo->used && (fbo->width == width) && (fbo->height == height) && (fbo->context == context)) {
- fbo->used = 1;
- unlock();
- return fbo;
- }
- }
- unlock();
-
- GLuint fb = 0;
- glGenFramebuffers(1, &fb);
- if (!fb)
- return NULL;
-
- glsl_fbo fbo = new glsl_fbo_s;
- if (!fbo) {
- glDeleteFramebuffers(1, &fb);
- return NULL;
- }
- fbo->fbo = fb;
- fbo->width = width;
- fbo->height = height;
- fbo->used = 1;
- fbo->context = context;
- lock();
- fbo_list.push_back(fbo);
- unlock();
- return fbo;
-}
-
-void GlslManager::release_fbo(glsl_fbo fbo)
-{
- fbo->used = 0;
-}
-