Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2006-01-29 16:10:20 +0300
committerTon Roosendaal <ton@blender.org>2006-01-29 16:10:20 +0300
commit2d12365f7c18aa280af51665ddca130052c838a6 (patch)
tree0e162478fdb385c72f5d4b0c9c5526889d5574b8 /source/blender/src/previewrender.c
parentabe7e7bc726d180b84b9ff720766a093fe4b6f41 (diff)
Previewrender (buttons) now supports Lamp, Texture and Sky previews
again. One exception I didn't solve yet... for the Stucci texture. In a next commit I will add the preview.blend, so people can play with it! The rules for preview.blend are pretty primitive still... might become a bit more advanced later. Here's what it uses now: - If Object has name starting with 'p' it will get the to-be-previewed Material or Lamp assigned - If Object has name starting with 't' its Material gets the texture assigned for Texture previews The layer codes for current preview options are in DNA_material_types.h; #define MA_SPHERE 0 #define MA_CUBE 1 #define MA_FLAT 2 #define MA_MONKEY 3 #define MA_SPHERE_A 4 #define MA_TEXTURE 5 #define MA_LAMP 6 #define MA_SKY 7 (SPHERE_A is sphere with alpha for icons)
Diffstat (limited to 'source/blender/src/previewrender.c')
-rw-r--r--source/blender/src/previewrender.c79
1 files changed, 47 insertions, 32 deletions
diff --git a/source/blender/src/previewrender.c b/source/blender/src/previewrender.c
index 0109d0d146c..6335bf03ec3 100644
--- a/source/blender/src/previewrender.c
+++ b/source/blender/src/previewrender.c
@@ -250,7 +250,9 @@ void BIF_preview_free_dbase(void)
free_main(pr_main);
}
-static Scene *preview_prepare_scene(RenderInfo *ri, ID *id, int pr_method)
+/* call this with an ID pointer to initialize preview scene */
+/* call this with ID NULL to restore assigned ID pointers in preview scene */
+static Scene *preview_prepare_scene(RenderInfo *ri, int id_type, ID *id, int pr_method)
{
Scene *sce;
Base *base;
@@ -259,18 +261,19 @@ static Scene *preview_prepare_scene(RenderInfo *ri, ID *id, int pr_method)
sce= pr_main->scene.first;
if(sce) {
- if(GS(id->name)==ID_MA) {
+ if(id_type==ID_MA) {
Material *mat= (Material *)id;
- if(pr_method==PR_ICON_RENDER) {
- sce->lay= 1<<MA_SPHERE_A;
- }
- else {
- sce->lay= 1<<mat->pr_type;
- if(mat->nodetree)
- ntreeInitPreview(mat->nodetree, ri->pr_rectx, ri->pr_recty);
- }
-
+ if(id) {
+ if(pr_method==PR_ICON_RENDER) {
+ sce->lay= 1<<MA_SPHERE_A;
+ }
+ else {
+ sce->lay= 1<<mat->pr_type;
+ if(mat->nodetree)
+ ntreeInitPreview(mat->nodetree, ri->pr_rectx, ri->pr_recty);
+ }
+ }
for(base= sce->base.first; base; base= base->next) {
if(base->object->id.name[2]=='p') {
if(ELEM4(base->object->type, OB_MESH, OB_CURVE, OB_SURF, OB_MBALL))
@@ -278,31 +281,41 @@ static Scene *preview_prepare_scene(RenderInfo *ri, ID *id, int pr_method)
}
}
}
- return sce;
- }
-
- return NULL;
-}
-
-/* prevent pointer from being 'hanging' in preview dbase */
-static void preview_exit_scene(RenderInfo *ri, ID *id)
-{
- Scene *sce;
- Base *base;
-
- if(pr_main==NULL) return;
-
- sce= pr_main->scene.first;
- if(sce) {
- if(GS(id->name)==ID_MA) {
+ else if(id_type==ID_TE) {
+ Tex *tex= (Tex *)id;
+
+ sce->lay= 1<<MA_TEXTURE;
+
+ for(base= sce->base.first; base; base= base->next) {
+ if(base->object->id.name[2]=='t') {
+ Material *mat= give_current_material(base->object, base->object->actcol);
+ if(mat && mat->mtex[0]) {
+ mat->mtex[0]->tex= tex;
+ }
+ }
+ }
+ }
+ else if(id_type==ID_LA) {
+ Lamp *la= (Lamp *)id;
+
+ sce->lay= 1<<MA_LAMP;
+
for(base= sce->base.first; base; base= base->next) {
if(base->object->id.name[2]=='p') {
- if(ELEM4(base->object->type, OB_MESH, OB_CURVE, OB_SURF, OB_MBALL))
- assign_material(base->object, NULL, base->object->actcol);
+ if(base->object->type==OB_LAMP)
+ base->object->data= la;
}
}
}
+ else if(id_type==ID_WO) {
+ sce->lay= 1<<MA_SKY;
+ sce->world= (World *)id;
+ }
+
+ return sce;
}
+
+ return NULL;
}
static void previewrender_progress(RenderResult *rr, rcti *unused)
@@ -345,7 +358,7 @@ void BIF_previewrender(struct ID *id, struct RenderInfo *ri, struct ScrArea *are
}
/* get the stuff from the builtin preview dbase */
- sce= preview_prepare_scene(ri, id, pr_method);
+ sce= preview_prepare_scene(ri, GS(id->name), id, pr_method);
if(sce==NULL) return;
/* just create new render always now */
@@ -384,6 +397,7 @@ void BIF_previewrender(struct ID *id, struct RenderInfo *ri, struct ScrArea *are
RE_ResultGet32(re, ri->rect);
if(GS(id->name)==ID_MA && ((Material *)id)->use_nodes)
allqueue(REDRAWNODE, 0);
+ allqueue(REDRAWBUTSSHADING, 0);
}
else {
if(pr_method==PR_DRAW_RENDER && qtest()) {
@@ -391,7 +405,8 @@ void BIF_previewrender(struct ID *id, struct RenderInfo *ri, struct ScrArea *are
}
}
}
- preview_exit_scene(ri, id);
+ /* unassign the pointer */
+ preview_prepare_scene(ri, GS(id->name), NULL, 0);
RE_FreeRender(re);
}