ext/say_image_target.c in ray-0.2.0 vs ext/say_image_target.c in ray-0.2.1
- old
+ new
@@ -42,51 +42,40 @@
GL_RENDERBUFFER, target->rbo);
fbo->img = target->img;
}
-static GLuint say_current_fbo = 0;
-static say_context *say_fbo_last_context = NULL;
-
void say_fbo_make_current(GLuint fbo) {
say_context *context = say_context_current();
- if (context != say_fbo_last_context ||
- fbo != say_current_fbo) {
- say_current_fbo = fbo;
- say_fbo_last_context = context;
-
+ if (context->fbo != fbo) {
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
+ context->fbo = fbo;
}
}
-static GLuint say_current_rbo = 0;
-static say_context *say_rbo_last_context = NULL;
-
void say_rbo_make_current(GLuint rbo) {
say_context *context = say_context_current();
- if (context != say_rbo_last_context ||
- rbo != say_current_rbo) {
- say_current_rbo = rbo;
- say_rbo_last_context = context;
-
+ if (context->rbo != rbo) {
glBindRenderbuffer(GL_RENDERBUFFER, rbo);
+ context->rbo = rbo;
}
}
void say_image_target_will_delete(mo_hash *fbos, GLuint rbo) {
- mo_hash_it it = mo_hash_begin(fbos);
- for (; !mo_hash_it_is_end(&it); mo_hash_it_next(&it)) {
- say_fbo *fbo = mo_hash_it_val_ptr(&it, say_fbo);
- if (fbo->id == say_current_fbo) {
- say_current_fbo = 0;
- break;
- }
- }
+ mo_array *contexts = say_context_get_all();
- if (say_current_rbo == rbo)
- say_current_rbo = 0;
+ for (size_t i = 0; i < contexts->size; i++) {
+ say_context *context = mo_array_get_as(contexts, i, say_context*);
+
+ say_fbo *fbo = mo_hash_get_ptr(fbos, &context, say_fbo);
+ if (fbo && fbo->id == context->fbo)
+ context->fbo = 0;
+
+ if (context->rbo == rbo)
+ context->rbo = 0;
+ }
}
bool say_image_target_is_available() {
say_context_ensure();
return GLEW_EXT_framebuffer_object || GLEW_VERSION_3_0;