[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21213] branches/blender2.5/blender/source /blender: 2.5
Ton Roosendaal
ton at blender.org
Sun Jun 28 11:35:37 CEST 2009
Revision: 21213
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21213
Author: ton
Date: 2009-06-28 11:35:37 +0200 (Sun, 28 Jun 2009)
Log Message:
-----------
2.5
Bugfixes:
- Preview Icon for render result crashed, there was still need for a scene
pointer to be passed on.
- Added quick fix for preventing shaded drawmode to call render while
rendering is in progress. It crashes badly.
Rendering while UI is alive is still in probation, most UI stuff will
probably get blocked, with exception from inspecting buttons and using
the image window.
Modified Paths:
--------------
branches/blender2.5/blender/source/blender/blenkernel/intern/displist.c
branches/blender2.5/blender/source/blender/blenkernel/intern/image.c
branches/blender2.5/blender/source/blender/editors/interface/interface_icons.c
Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/displist.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/displist.c 2009-06-28 07:32:00 UTC (rev 21212)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/displist.c 2009-06-28 09:35:37 UTC (rev 21213)
@@ -315,13 +315,19 @@
static Render *fastshade_get_render(Scene *scene)
{
- Render *re= RE_GetRender("_Shade View_");
- if(re==NULL) {
- re= RE_NewRender("_Shade View_");
+ /* XXX ugly global still, but we can't do preview while rendering */
+ if(G.rendering==0) {
+
+ Render *re= RE_GetRender("_Shade View_");
+ if(re==NULL) {
+ re= RE_NewRender("_Shade View_");
+
+ RE_Database_Baking(re, scene, 0, 0); /* 0= no faces */
+ }
+ return re;
+ }
- RE_Database_Baking(re, scene, 0, 0); /* 0= no faces */
- }
- return re;
+ return NULL;
}
/* called on file reading */
@@ -611,18 +617,20 @@
void shadeMeshMCol(Scene *scene, Object *ob, Mesh *me)
{
+ Render *re= fastshade_get_render(scene);
int a;
char *cp;
unsigned int *mcol= (unsigned int*)me->mcol;
- Render *re= fastshade_get_render(scene);
- mesh_create_shadedColors(re, ob, 1, &mcol, NULL);
- me->mcol= (MCol*)mcol;
+ if(re) {
+ mesh_create_shadedColors(re, ob, 1, &mcol, NULL);
+ me->mcol= (MCol*)mcol;
- /* swap bytes */
- for(cp= (char *)me->mcol, a= 4*me->totface; a>0; a--, cp+=4) {
- SWAP(char, cp[0], cp[3]);
- SWAP(char, cp[1], cp[2]);
+ /* swap bytes */
+ for(cp= (char *)me->mcol, a= 4*me->totface; a>0; a--, cp+=4) {
+ SWAP(char, cp[0], cp[3]);
+ SWAP(char, cp[1], cp[2]);
+ }
}
}
@@ -641,6 +649,8 @@
int a, need_orco;
re= fastshade_get_render(scene);
+ if(re==NULL)
+ return;
dl = find_displist(&ob->disp, DL_VERTCOL);
if (dl) {
Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/image.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/image.c 2009-06-28 07:32:00 UTC (rev 21212)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/image.c 2009-06-28 09:35:37 UTC (rev 21213)
@@ -1812,7 +1812,7 @@
Render *re= NULL;
RenderResult *rr= NULL;
- if(iuser->scene) {
+ if(iuser && iuser->scene) {
re= RE_GetRender(iuser->scene->id.name);
rr= RE_GetResult(re);
}
Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_icons.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_icons.c 2009-06-28 07:32:00 UTC (rev 21212)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_icons.c 2009-06-28 09:35:37 UTC (rev 21213)
@@ -728,21 +728,28 @@
}
/* create single icon from jpg, png etc. */
-static void icon_from_image(Image *img, int miplevel)
+static void icon_from_image(Scene *scene, Image *img, int miplevel)
{
+ ImBuf *ibuf= NULL;
+ ImageUser iuser;
+ PreviewImage *pi;
unsigned int pr_size;
short image_loaded = 0;
- struct ImBuf* ibuf=NULL;
- PreviewImage* pi;
/* img->ok is zero when Image cannot load */
if (img==NULL || img->ok==0)
return;
+ /* setup dummy image user */
+ memset(&iuser, 0, sizeof(ImageUser));
+ iuser.ok= iuser.framenr= 1;
+ iuser.scene= scene;
+
/* elubie: this needs to be changed: here image is always loaded if not
already there. Very expensive for large images. Need to find a way to
only get existing ibuf */
- ibuf = BKE_image_get_ibuf(img, NULL);
+
+ ibuf = BKE_image_get_ibuf(img, &iuser);
if(ibuf==NULL || ibuf->rect==NULL) {
return;
}
@@ -788,7 +795,7 @@
/* no drawing (see last parameter doDraw, just calculate preview image
- hopefully small enough to be fast */
if (GS(id->name) == ID_IM)
- icon_from_image((struct Image*)id, miplevel);
+ icon_from_image(scene, (struct Image*)id, miplevel);
else {
/* create the preview rect */
icon_create_mipmap(prv_img, miplevel);
More information about the Bf-blender-cvs
mailing list