Attempt to fix #21796: render crash on windows after slots commit.

This commit is contained in:
Brecht Van Lommel 2010-03-28 13:45:19 +00:00
parent 95d1d82313
commit 46895ab1f2
3 changed files with 22 additions and 18 deletions

@ -1948,8 +1948,11 @@ static ImBuf *image_get_render_result(Image *ima, ImageUser *iuser, void **lock_
ibuf->x= rres.rectx;
ibuf->y= rres.recty;
if(ibuf->rect_float!=rectf || rect) /* ensure correct redraw */
if(ibuf->rect_float!=rectf || rect) { /* ensure correct redraw */
BLI_lock_thread(LOCK_CUSTOM1);
imb_freerectImBuf(ibuf);
BLI_unlock_thread(LOCK_CUSTOM1);
}
if(rect)
ibuf->rect= rect;

@ -30,30 +30,24 @@
#include "MEM_guardedalloc.h"
#include "BLI_math.h"
#include "BLI_blenlib.h"
#include "BLI_editVert.h"
#include "BLI_dlrbTree.h"
#include "BLI_math.h"
#include "BLI_threads.h"
#include "DNA_scene_types.h"
#include "BKE_blender.h"
#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_customdata.h"
#include "BKE_global.h"
#include "BKE_image.h"
#include "BKE_idprop.h"
#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_mesh.h"
#include "BKE_multires.h"
#include "BKE_report.h"
#include "BKE_scene.h"
#include "BKE_screen.h"
#include "BKE_utildefines.h"
#include "BKE_sound.h"
#include "BKE_writeavi.h"
#include "WM_api.h"
#include "WM_types.h"
@ -68,7 +62,6 @@
#include "RNA_access.h"
#include "RNA_define.h"
#include "wm_window.h"
#include "render_intern.h"
@ -136,8 +129,12 @@ void image_buffer_rect_update(Scene *scene, RenderResult *rr, ImBuf *ibuf, volat
}
if(rectf==NULL) return;
if(ibuf->rect==NULL) {
BLI_lock_thread(LOCK_CUSTOM1);
if(ibuf->rect==NULL)
imb_addrectImBuf(ibuf);
BLI_unlock_thread(LOCK_CUSTOM1);
}
rectf+= 4*(rr->rectx*ymin + xmin);
rectc= (char *)(ibuf->rect + ibuf->x*rymin + rxmin);

@ -38,6 +38,7 @@
#include "DNA_screen_types.h"
#include "PIL_time.h"
#include "BLI_threads.h"
#include "IMB_imbuf.h"
#include "IMB_imbuf_types.h"
@ -75,16 +76,19 @@ static void image_verify_buffer_float(SpaceImage *sima, Image *ima, ImBuf *ibuf,
NOTE: if float buffer changes, we have to manually remove the rect
*/
if(ibuf->rect_float) {
if(ibuf->rect==NULL) {
if (color_manage) {
if (ima && ima->source == IMA_SRC_VIEWER)
if(ibuf->rect_float && ibuf->rect==NULL) {
BLI_lock_thread(LOCK_CUSTOM1);
if(ibuf->rect_float && ibuf->rect==NULL) {
if(color_manage) {
if(ima && ima->source == IMA_SRC_VIEWER)
ibuf->profile = IB_PROFILE_LINEAR_RGB;
} else {
ibuf->profile = IB_PROFILE_NONE;
}
else
ibuf->profile = IB_PROFILE_NONE;
IMB_rect_from_float(ibuf);
}
BLI_unlock_thread(LOCK_CUSTOM1);
}
}