Fix for bug #8324: J-key render buffer switching had various issues.
One problem was that the previous render buffer was stored in the render window or image window itself, which means that when closing it, or switching from one to the other, things didn't work as expected. Also in the image editor, color sampling the previous render buffer or saving it didn't work correct.
This commit is contained in:
@@ -4020,8 +4020,6 @@ static void direct_link_screen(FileData *fd, bScreen *sc)
|
||||
sima->cumap= newdataadr(fd, sima->cumap);
|
||||
if(sima->cumap)
|
||||
direct_link_curvemapping(fd, sima->cumap);
|
||||
sima->info_str= sima->info_spare= NULL;
|
||||
sima->spare= NULL;
|
||||
sima->iuser.ok= 1;
|
||||
}
|
||||
else if(sl->spacetype==SPACE_NODE) {
|
||||
|
||||
@@ -63,8 +63,6 @@ void imagespace_composite_flipbook(struct ScrArea *sa);
|
||||
|
||||
void imagewindow_render_callbacks(struct Render *re);
|
||||
void imagewindow_toggle_render(void);
|
||||
void imagewindow_swap_render_rects(void);
|
||||
void imagewin_store_spare(void);
|
||||
struct ImBuf *imagewindow_get_ibuf(struct SpaceImage *sima);
|
||||
|
||||
void image_editvertex_buts(struct uiBlock *block);
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
struct Render;
|
||||
struct ScrArea;
|
||||
struct RenderStats;
|
||||
struct ImBuf;
|
||||
|
||||
void calc_renderwin_rectangle(int rectx, int recty, int posmask, int renderpos_r[2], int rendersize_r[2]);
|
||||
|
||||
@@ -40,6 +41,15 @@ void BIF_close_render_display(void);
|
||||
|
||||
void BIF_do_render(int anim);
|
||||
|
||||
/* render text */
|
||||
void BIF_make_render_text(struct RenderStats *rs);
|
||||
char *BIF_render_text(void);
|
||||
|
||||
/* render spare buffer */
|
||||
int BIF_show_render_spare(void);
|
||||
struct ImBuf *BIF_render_spare_imbuf(void);
|
||||
void BIF_free_render_spare(void);
|
||||
|
||||
/**
|
||||
* @param v3d The View3D space to render.
|
||||
*/
|
||||
|
||||
@@ -236,7 +236,7 @@ typedef struct SpaceImage {
|
||||
short curtile; /* the currently active tile of the image when tile is enabled, is kept in sync with the active faces tile */
|
||||
int flag;
|
||||
short imtypenr, lock;
|
||||
short showspare, pin;
|
||||
short pin, pad2;
|
||||
float zoom;
|
||||
char dt_uv; /* UV draw type */
|
||||
char sticky; /* sticky selection type */
|
||||
@@ -245,9 +245,6 @@ typedef struct SpaceImage {
|
||||
float xof, yof; /* user defined offset, image is centered */
|
||||
float centx, centy; /* storage for offset while render drawing */
|
||||
|
||||
char *info_str, *info_spare; /* info string for render */
|
||||
struct ImBuf *spare;
|
||||
|
||||
} SpaceImage;
|
||||
|
||||
typedef struct SpaceNla {
|
||||
|
||||
@@ -191,7 +191,7 @@ void calc_image_view(SpaceImage *sima, char mode)
|
||||
|
||||
if(image_preview_active(curarea, &xim, &yim));
|
||||
else if(sima->image) {
|
||||
ImBuf *ibuf= BKE_image_get_ibuf(sima->image, &sima->iuser);
|
||||
ImBuf *ibuf= imagewindow_get_ibuf(sima);
|
||||
float xuser_asp, yuser_asp;
|
||||
|
||||
aspect_sima(sima, &xuser_asp, &yuser_asp);
|
||||
@@ -278,11 +278,10 @@ void what_image(SpaceImage *sima)
|
||||
/* after a what_image(), this call will give ibufs, includes the spare image */
|
||||
ImBuf *imagewindow_get_ibuf(SpaceImage *sima)
|
||||
{
|
||||
|
||||
if(G.sima->image) {
|
||||
/* check for spare */
|
||||
if(sima->image->type==IMA_TYPE_R_RESULT && sima->showspare)
|
||||
return sima->spare;
|
||||
if(sima->image->type==IMA_TYPE_R_RESULT && BIF_show_render_spare())
|
||||
return BIF_render_spare_imbuf();
|
||||
else
|
||||
return BKE_image_get_ibuf(sima->image, &sima->iuser);
|
||||
}
|
||||
@@ -1834,10 +1833,10 @@ static void sima_draw_zbuffloat_pixels(float x1, float y1, int rectx, int recty,
|
||||
|
||||
static void imagewindow_draw_renderinfo(ScrArea *sa)
|
||||
{
|
||||
SpaceImage *sima= sa->spacedata.first;
|
||||
rcti rect;
|
||||
float colf[3];
|
||||
char *str= sima->showspare?sima->info_spare:sima->info_str;
|
||||
int showspare= BIF_show_render_spare();
|
||||
char *str= BIF_render_text();
|
||||
|
||||
if(str==NULL)
|
||||
return;
|
||||
@@ -1854,7 +1853,7 @@ static void imagewindow_draw_renderinfo(ScrArea *sa)
|
||||
|
||||
BIF_ThemeColor(TH_TEXT_HI);
|
||||
glRasterPos2i(12, 5);
|
||||
if(sima->showspare) {
|
||||
if(showspare) {
|
||||
BMF_DrawString(G.fonts, "(Previous)");
|
||||
glRasterPos2i(72, 5);
|
||||
}
|
||||
@@ -2342,7 +2341,7 @@ void image_home(void)
|
||||
|
||||
void image_viewcenter(void)
|
||||
{
|
||||
ImBuf *ibuf= BKE_image_get_ibuf(G.sima->image, &G.sima->iuser);
|
||||
ImBuf *ibuf= imagewindow_get_ibuf(G.sima);
|
||||
float size, min[2], max[2], d[2], xim=256.0f, yim=256.0f;
|
||||
|
||||
if( is_uv_tface_editing_allowed()==0 ) return;
|
||||
@@ -2596,9 +2595,6 @@ static void imagewindow_init_display_cb(RenderResult *rr)
|
||||
|
||||
areawinset(image_area->win);
|
||||
|
||||
if(sima->info_str==NULL)
|
||||
sima->info_str= MEM_callocN(RW_MAXTEXT, "info str imagewin");
|
||||
|
||||
/* calc location using original size (tiles don't tell) */
|
||||
sima->centx= (image_area->winx - sima->zoom*(float)rr->rectx)/2.0f;
|
||||
sima->centy= (image_area->winy - sima->zoom*(float)rr->recty)/2.0f;
|
||||
@@ -2646,10 +2642,7 @@ static void imagewindow_renderinfo_cb(RenderStats *rs)
|
||||
{
|
||||
|
||||
if(image_area) {
|
||||
SpaceImage *sima= image_area->spacedata.first;
|
||||
|
||||
if(rs)
|
||||
make_renderinfo_string(rs, sima->info_str);
|
||||
BIF_make_render_text(rs);
|
||||
|
||||
imagewindow_draw_renderinfo(image_area);
|
||||
|
||||
@@ -2666,54 +2659,3 @@ void imagewindow_render_callbacks(Render *re)
|
||||
RE_stats_draw_cb(re, imagewindow_renderinfo_cb);
|
||||
}
|
||||
|
||||
void imagewin_store_spare(void)
|
||||
{
|
||||
ScrArea *sa= find_area_showing_r_result();
|
||||
|
||||
if(sa) {
|
||||
ImBuf *ibuf;
|
||||
SpaceImage *sima= sa->spacedata.first;
|
||||
|
||||
if(sima->spare==NULL)
|
||||
return;
|
||||
|
||||
/* only store when it does not show spare */
|
||||
if(sima->showspare==0)
|
||||
return;
|
||||
sima->showspare= 0;
|
||||
|
||||
/* free spare */
|
||||
IMB_freeImBuf(sima->spare);
|
||||
|
||||
/* make a copy of render result */
|
||||
ibuf= BKE_image_get_ibuf(sima->image, &sima->iuser);
|
||||
sima->spare= IMB_dupImBuf(ibuf);
|
||||
|
||||
if(sima->info_str)
|
||||
BLI_strncpy(sima->info_spare, sima->info_str, RW_MAXTEXT);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/* context: in current image window? */
|
||||
void imagewindow_swap_render_rects(void)
|
||||
{
|
||||
ScrArea *sa= find_area_showing_r_result();
|
||||
|
||||
if(sa) {
|
||||
SpaceImage *sima= sa->spacedata.first;
|
||||
ImBuf *ibuf= BKE_image_get_ibuf(sima->image, &sima->iuser);
|
||||
if(ibuf) {
|
||||
|
||||
sima->showspare ^= 1;
|
||||
|
||||
if(sima->spare==NULL)
|
||||
sima->spare= IMB_allocImBuf(ibuf->x, ibuf->y, 32, 0, 0);
|
||||
if(sima->info_spare==NULL)
|
||||
sima->info_spare= MEM_callocN(RW_MAXTEXT, "info str imagewin");
|
||||
|
||||
allqueue(REDRAWIMAGE, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -148,7 +148,7 @@ int is_uv_tface_editing_allowed(void)
|
||||
|
||||
void get_connected_limit_tface_uv(float *limit)
|
||||
{
|
||||
ImBuf *ibuf= BKE_image_get_ibuf(G.sima->image, &G.sima->iuser);
|
||||
ImBuf *ibuf= imagewindow_get_ibuf(G.sima);
|
||||
if(ibuf && ibuf->x > 0 && ibuf->y > 0) {
|
||||
limit[0]= 0.05/(float)ibuf->x;
|
||||
limit[1]= 0.05/(float)ibuf->y;
|
||||
@@ -228,7 +228,7 @@ void transform_aspect_ratio_tface_uv(float *aspx, float *aspy)
|
||||
|
||||
void transform_width_height_tface_uv(int *width, int *height)
|
||||
{
|
||||
ImBuf *ibuf= BKE_image_get_ibuf(G.sima->image, &G.sima->iuser);
|
||||
ImBuf *ibuf= imagewindow_get_ibuf(G.sima);
|
||||
|
||||
if(ibuf) {
|
||||
*width= ibuf->x;
|
||||
@@ -1197,7 +1197,7 @@ void sel_uvco_inside_radius(short sel, EditFace *efa, MTFace *tface, int index,
|
||||
/** gets image dimensions of the 2D view 'v' */
|
||||
static void getSpaceImageDimension(SpaceImage *sima, float *xy)
|
||||
{
|
||||
ImBuf *ibuf= BKE_image_get_ibuf(sima->image, &sima->iuser);
|
||||
ImBuf *ibuf= imagewindow_get_ibuf(G.sima);
|
||||
|
||||
if (ibuf) {
|
||||
xy[0] = ibuf->x * sima->zoom;
|
||||
@@ -1337,7 +1337,7 @@ void stitch_limit_uv_tface(void)
|
||||
|
||||
limit[0]= limit[1]= limit[0]/256.0;
|
||||
if(G.sima->image) {
|
||||
ImBuf *ibuf= BKE_image_get_ibuf(G.sima->image, &G.sima->iuser);
|
||||
ImBuf *ibuf= imagewindow_get_ibuf(G.sima);
|
||||
|
||||
if(ibuf && ibuf->x > 0 && ibuf->y > 0) {
|
||||
limit[1]= limit[0]/(float)ibuf->y;
|
||||
@@ -1874,7 +1874,7 @@ static void sima_show_info(int channels, int x, int y, char *cp, float *fp, int
|
||||
|
||||
void sima_sample_color(void)
|
||||
{
|
||||
ImBuf *ibuf= BKE_image_get_ibuf(G.sima->image, &G.sima->iuser);
|
||||
ImBuf *ibuf= imagewindow_get_ibuf(G.sima);
|
||||
float fx, fy;
|
||||
short mval[2], mvalo[2], firsttime=1;
|
||||
|
||||
@@ -1996,7 +1996,7 @@ static void replace_image_filesel(char *str) /* called from fileselect */
|
||||
static void save_image_doit(char *name)
|
||||
{
|
||||
Image *ima= G.sima->image;
|
||||
ImBuf *ibuf= BKE_image_get_ibuf(ima, &G.sima->iuser);
|
||||
ImBuf *ibuf= imagewindow_get_ibuf(G.sima);
|
||||
int len;
|
||||
char str[FILE_MAXDIR+FILE_MAXFILE];
|
||||
|
||||
@@ -2126,7 +2126,7 @@ static char *filesel_imagetype_string(Image *ima)
|
||||
void save_as_image_sima(void)
|
||||
{
|
||||
Image *ima = G.sima->image;
|
||||
ImBuf *ibuf= BKE_image_get_ibuf(ima, &G.sima->iuser);
|
||||
ImBuf *ibuf= imagewindow_get_ibuf(G.sima);
|
||||
char name[FILE_MAXDIR+FILE_MAXFILE];
|
||||
|
||||
if (ima) {
|
||||
@@ -2153,7 +2153,7 @@ void save_as_image_sima(void)
|
||||
void save_image_sima(void)
|
||||
{
|
||||
Image *ima = G.sima->image;
|
||||
ImBuf *ibuf= BKE_image_get_ibuf(ima, &G.sima->iuser);
|
||||
ImBuf *ibuf= imagewindow_get_ibuf(G.sima);
|
||||
char name[FILE_MAXDIR+FILE_MAXFILE];
|
||||
|
||||
if (ima) {
|
||||
@@ -2286,7 +2286,7 @@ void pack_image_sima()
|
||||
}
|
||||
}
|
||||
else {
|
||||
ImBuf *ibuf= BKE_image_get_ibuf(ima, &G.sima->iuser);
|
||||
ImBuf *ibuf= imagewindow_get_ibuf(G.sima);
|
||||
if (ibuf && (ibuf->userflags & IB_BITMAPDIRTY)) {
|
||||
if(okee("Can't pack painted image. Use Repack as PNG?"))
|
||||
BKE_image_memorypack(ima);
|
||||
|
||||
@@ -137,13 +137,8 @@ typedef struct {
|
||||
|
||||
int rectx, recty; /* size of image */
|
||||
|
||||
int sparex, sparey; /* spare rect size */
|
||||
unsigned int *rectspare;
|
||||
float *rectsparef;
|
||||
|
||||
float zoom, zoomofs[2];
|
||||
int active;
|
||||
short storespare, showspare;
|
||||
|
||||
int mbut[5];
|
||||
int lmouse[2];
|
||||
@@ -153,14 +148,29 @@ typedef struct {
|
||||
float pan_mouse_start[2], pan_ofs_start[2];
|
||||
|
||||
char *info_text;
|
||||
char *render_text, *render_text_spare;
|
||||
|
||||
} RenderWin;
|
||||
|
||||
typedef struct RenderSpare {
|
||||
ImBuf *ibuf;
|
||||
|
||||
short storespare, showspare;
|
||||
char *render_text_spare;
|
||||
} RenderSpare;
|
||||
|
||||
static RenderWin *render_win= NULL;
|
||||
static RenderSpare *render_spare= NULL;
|
||||
static char *render_text= NULL;
|
||||
|
||||
/* --------------- help functions for RenderWin struct ---------------------------- */
|
||||
|
||||
static RenderSpare *renderspare_alloc()
|
||||
{
|
||||
RenderSpare *rspare= MEM_callocN(sizeof(*rspare), "RenderSpare");
|
||||
rspare->render_text_spare= MEM_callocN(RW_MAXTEXT, "rendertext spare");
|
||||
|
||||
return rspare;
|
||||
}
|
||||
|
||||
/* only called in function open_renderwin */
|
||||
static RenderWin *renderwin_alloc(Window *win)
|
||||
@@ -172,8 +182,6 @@ static RenderWin *renderwin_alloc(Window *win)
|
||||
rw->flags= 0;
|
||||
rw->zoomofs[0]= rw->zoomofs[1]= 0;
|
||||
rw->info_text= NULL;
|
||||
rw->render_text= MEM_callocN(RW_MAXTEXT, "rendertext");
|
||||
rw->render_text_spare= MEM_callocN(RW_MAXTEXT, "rendertext spare");
|
||||
|
||||
rw->lmouse[0]= rw->lmouse[1]= 0;
|
||||
rw->mbut[0]= rw->mbut[1]= rw->mbut[2]= rw->mbut[3] = rw->mbut[4] = 0;
|
||||
@@ -291,10 +299,7 @@ static void renderwin_draw_render_info(RenderWin *rw)
|
||||
glClearColor(colf[0], colf[1], colf[2], 1.0);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
if(rw->showspare)
|
||||
str= rw->render_text_spare;
|
||||
else
|
||||
str= rw->render_text;
|
||||
str= BIF_render_text();
|
||||
|
||||
if(str) {
|
||||
BIF_ThemeColor(TH_TEXT);
|
||||
@@ -339,12 +344,17 @@ static void renderwin_draw(RenderWin *rw, int just_clear)
|
||||
glRectfv(fullrect[0], fullrect[1]);
|
||||
} else {
|
||||
RenderResult rres;
|
||||
RenderSpare *rspare= render_spare;
|
||||
|
||||
if(rw->showspare) {
|
||||
rres.rectx= rw->sparex;
|
||||
rres.recty= rw->sparey;
|
||||
rres.rect32= (int *)rw->rectspare;
|
||||
rres.rectf= rw->rectsparef;
|
||||
if(rspare->showspare) {
|
||||
if(rspare->ibuf) {
|
||||
rres.rectx= rspare->ibuf->x;
|
||||
rres.recty= rspare->ibuf->y;
|
||||
rres.rect32= (int *)rspare->ibuf->rect;
|
||||
rres.rectf= rspare->ibuf->rect_float;
|
||||
}
|
||||
else
|
||||
memset(&rres, 0, sizeof(rres));
|
||||
}
|
||||
else
|
||||
RE_GetResultImage(RE_GetRender(G.scene->id.name), &rres);
|
||||
@@ -612,14 +622,11 @@ static void renderwin_handler(Window *win, void *user_data, short evt, short val
|
||||
}
|
||||
}
|
||||
|
||||
static char *renderwin_get_title(int doswap)
|
||||
static char *renderwin_get_title()
|
||||
{
|
||||
static int swap= 0;
|
||||
char *title="";
|
||||
|
||||
swap+= doswap;
|
||||
|
||||
if(swap & 1) {
|
||||
if(BIF_show_render_spare()) {
|
||||
if (G.scene->r.renderer==R_YAFRAY) title = "YafRay:Render (previous)";
|
||||
else title = "Blender:Render (previous)";
|
||||
}
|
||||
@@ -638,7 +645,7 @@ static void open_renderwin(int winpos[2], int winsize[2], int imagesize[2])
|
||||
Window *win;
|
||||
char *title;
|
||||
|
||||
title= renderwin_get_title(0); /* 0 = no swap */
|
||||
title= renderwin_get_title();
|
||||
win= window_open(title, winpos[0], winpos[1], winsize[0], winsize[1]+RW_HEADERY, 0);
|
||||
|
||||
render_win= renderwin_alloc(win);
|
||||
@@ -922,7 +929,7 @@ static void renderwin_renderinfo_cb(RenderStats *rs)
|
||||
|
||||
if(render_win) {
|
||||
|
||||
make_renderinfo_string(rs, render_win->render_text);
|
||||
BIF_make_render_text(rs);
|
||||
|
||||
#ifdef __APPLE__
|
||||
#else
|
||||
@@ -1124,36 +1131,41 @@ static void do_render(int anim)
|
||||
}
|
||||
|
||||
/* called before render, store old render in spare buffer */
|
||||
static void renderwin_store_spare(void)
|
||||
static int render_store_spare(void)
|
||||
{
|
||||
RenderResult rres;
|
||||
RenderSpare *rspare= render_spare;
|
||||
|
||||
if(render_win==0 || render_win->storespare==0)
|
||||
return;
|
||||
if(rspare==0 || rspare->storespare==0)
|
||||
return 0;
|
||||
|
||||
/* only store when it does not show spare */
|
||||
if(render_win->showspare==0)
|
||||
return;
|
||||
if(rspare->showspare==0)
|
||||
return 0;
|
||||
|
||||
render_win->showspare= 0;
|
||||
window_set_title(render_win->win, renderwin_get_title(1));
|
||||
|
||||
BLI_strncpy(render_win->render_text_spare, render_win->render_text, RW_MAXTEXT);
|
||||
|
||||
if(render_win->rectspare) MEM_freeN(render_win->rectspare);
|
||||
render_win->rectspare= NULL;
|
||||
if(render_win->rectsparef) MEM_freeN(render_win->rectsparef);
|
||||
render_win->rectsparef= NULL;
|
||||
rspare->showspare= 0;
|
||||
|
||||
if(rspare->ibuf) {
|
||||
IMB_freeImBuf(rspare->ibuf);
|
||||
rspare->ibuf= NULL;
|
||||
}
|
||||
|
||||
RE_GetResultImage(RE_GetRender(G.scene->id.name), &rres);
|
||||
|
||||
if(rres.rect32)
|
||||
render_win->rectspare= MEM_dupallocN(rres.rect32);
|
||||
else if(rres.rectf)
|
||||
render_win->rectsparef= MEM_dupallocN(rres.rectf);
|
||||
|
||||
render_win->sparex= rres.rectx;
|
||||
render_win->sparey= rres.recty;
|
||||
rspare->ibuf= IMB_allocImBuf(rres.rectx, rres.recty, 32, 0, 0);
|
||||
|
||||
if(rres.rect32) {
|
||||
rspare->ibuf->rect= MEM_dupallocN(rres.rect32);
|
||||
rspare->ibuf->flags |= IB_rect;
|
||||
rspare->ibuf->mall |= IB_rect;
|
||||
}
|
||||
else if(rres.rectf) {
|
||||
rspare->ibuf->rect_float= MEM_dupallocN(rres.rectf);
|
||||
rspare->ibuf->flags |= IB_rectfloat;
|
||||
rspare->ibuf->mall |= IB_rectfloat;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* -------------- API: externally called --------------- */
|
||||
@@ -1210,10 +1222,14 @@ void BIF_end_render_callbacks(void)
|
||||
|
||||
void BIF_store_spare(void)
|
||||
{
|
||||
if(render_win)
|
||||
renderwin_store_spare();
|
||||
else
|
||||
imagewin_store_spare();
|
||||
if(render_store_spare()) {
|
||||
if(render_text)
|
||||
BLI_strncpy(render_spare->render_text_spare, render_text, RW_MAXTEXT);
|
||||
|
||||
if(render_win)
|
||||
window_set_title(render_win->win, renderwin_get_title());
|
||||
allqueue(REDRAWIMAGE, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/* set up display, render an image or scene */
|
||||
@@ -1363,53 +1379,88 @@ void BIF_do_ogl_render(View3D *v3d, int anim)
|
||||
void BIF_redraw_render_rect(void)
|
||||
{
|
||||
/* redraw */
|
||||
if (render_win) {
|
||||
if(render_win)
|
||||
renderwin_queue_redraw(render_win);
|
||||
}
|
||||
else {
|
||||
allqueue(REDRAWIMAGE, 0);
|
||||
}
|
||||
allqueue(REDRAWIMAGE, 0);
|
||||
}
|
||||
|
||||
void BIF_swap_render_rects(void)
|
||||
{
|
||||
RenderResult rres;
|
||||
RenderSpare *rspare;
|
||||
ImBuf *ibuf;
|
||||
|
||||
if(G.displaymode!=R_DISPLAYWIN) {
|
||||
imagewindow_swap_render_rects();
|
||||
}
|
||||
else if(render_win) {
|
||||
if(!render_spare)
|
||||
render_spare= renderspare_alloc();
|
||||
|
||||
rspare= render_spare;
|
||||
rspare->storespare= 1;
|
||||
rspare->showspare ^= 1;
|
||||
|
||||
render_win->storespare= 1;
|
||||
render_win->showspare ^= 1;
|
||||
|
||||
RE_GetResultImage(RE_GetRender(G.scene->id.name), &rres);
|
||||
|
||||
if(render_win->sparex!=rres.rectx || render_win->sparey!=rres.recty) {
|
||||
if(render_win->rectspare) MEM_freeN(render_win->rectspare);
|
||||
render_win->rectspare= NULL;
|
||||
if(render_win->rectsparef) MEM_freeN(render_win->rectsparef);
|
||||
render_win->rectsparef= NULL;
|
||||
}
|
||||
|
||||
window_set_title(render_win->win, renderwin_get_title(1));
|
||||
RE_GetResultImage(RE_GetRender(G.scene->id.name), &rres);
|
||||
|
||||
ibuf= rspare->ibuf;
|
||||
if(ibuf && (ibuf->x!=rres.rectx || ibuf->y!=rres.recty)) {
|
||||
IMB_freeImBuf(ibuf);
|
||||
rspare->ibuf= NULL;
|
||||
}
|
||||
|
||||
if(render_win)
|
||||
window_set_title(render_win->win, renderwin_get_title());
|
||||
|
||||
/* redraw */
|
||||
BIF_redraw_render_rect();
|
||||
|
||||
}
|
||||
|
||||
ImBuf *BIF_render_spare_imbuf()
|
||||
{
|
||||
return (render_spare)? render_spare->ibuf: NULL;
|
||||
}
|
||||
|
||||
int BIF_show_render_spare()
|
||||
{
|
||||
return (render_spare && render_spare->showspare);
|
||||
}
|
||||
|
||||
char *BIF_render_text()
|
||||
{
|
||||
if(render_spare && render_spare->showspare)
|
||||
return render_spare->render_text_spare;
|
||||
else
|
||||
return render_text;
|
||||
}
|
||||
|
||||
void BIF_make_render_text(RenderStats *rs)
|
||||
{
|
||||
if(!render_text)
|
||||
render_text= MEM_callocN(RW_MAXTEXT, "rendertext");
|
||||
make_renderinfo_string(rs, render_text);
|
||||
}
|
||||
|
||||
/* called from usiblender.c too, to free and close renderwin */
|
||||
|
||||
void BIF_free_render_spare()
|
||||
{
|
||||
RenderSpare *rspare= render_spare;
|
||||
|
||||
if(render_text) {
|
||||
MEM_freeN(render_text);
|
||||
render_text= NULL;
|
||||
}
|
||||
|
||||
if(rspare) {
|
||||
if (rspare->render_text_spare) MEM_freeN(rspare->render_text_spare);
|
||||
if (rspare->ibuf) IMB_freeImBuf(rspare->ibuf);
|
||||
|
||||
MEM_freeN(rspare);
|
||||
render_spare= NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void BIF_close_render_display(void)
|
||||
{
|
||||
if (render_win) {
|
||||
if (render_win->info_text) MEM_freeN(render_win->info_text);
|
||||
if (render_win->render_text) MEM_freeN(render_win->render_text);
|
||||
if (render_win->render_text_spare) MEM_freeN(render_win->render_text_spare);
|
||||
if (render_win->rectspare) MEM_freeN(render_win->rectspare);
|
||||
if (render_win->rectsparef) MEM_freeN(render_win->rectsparef);
|
||||
|
||||
window_destroy(render_win->win); /* ghost close window */
|
||||
MEM_freeN(render_win);
|
||||
|
||||
|
||||
@@ -6182,12 +6182,6 @@ void freespacelist(ScrArea *sa)
|
||||
SpaceImage *sima= (SpaceImage *)sl;
|
||||
if(sima->cumap)
|
||||
curvemapping_free(sima->cumap);
|
||||
if(sima->info_str)
|
||||
MEM_freeN(sima->info_str);
|
||||
if(sima->info_spare)
|
||||
MEM_freeN(sima->info_spare);
|
||||
if(sima->spare)
|
||||
IMB_freeImBuf(sima->spare);
|
||||
}
|
||||
else if(sl->spacetype==SPACE_NODE) {
|
||||
/* SpaceNode *snode= (SpaceNode *)sl; */
|
||||
@@ -6277,10 +6271,6 @@ void duplicatespacelist(ScrArea *newarea, ListBase *lb1, ListBase *lb2)
|
||||
SpaceImage *sima= (SpaceImage *)sl;
|
||||
if(sima->cumap)
|
||||
sima->cumap= curvemapping_copy(sima->cumap);
|
||||
if(sima->info_str)
|
||||
sima->info_str= MEM_dupallocN(sima->info_str);
|
||||
if(sima->info_spare)
|
||||
sima->info_spare= MEM_dupallocN(sima->info_spare);
|
||||
}
|
||||
sl= sl->next;
|
||||
}
|
||||
|
||||
@@ -1097,6 +1097,7 @@ void exit_usiblender(void)
|
||||
|
||||
BIF_filelist_free_icons();
|
||||
|
||||
BIF_free_render_spare();
|
||||
BIF_close_render_display();
|
||||
mainwindow_close();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user