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:
authorMiika Hamalainen <blender@miikah.org>2011-11-05 12:04:49 +0400
committerMiika Hamalainen <blender@miikah.org>2011-11-05 12:04:49 +0400
commit2ed6f077b3952123d56916980d18a379ecb3e5ac (patch)
tree1aa273e5566c95214739fb224d4c6cf115417882 /source/blender/render
parentb9c83456b27da57a14bcf8d274b460e670d49990 (diff)
parent62f22185546e80b661424b45c88006f8b592d8b1 (diff)
Merge with trunk r41545
Diffstat (limited to 'source/blender/render')
-rw-r--r--source/blender/render/extern/include/RE_engine.h16
-rw-r--r--source/blender/render/extern/include/RE_pipeline.h2
-rw-r--r--source/blender/render/intern/include/render_types.h3
-rw-r--r--source/blender/render/intern/include/texture.h33
-rw-r--r--source/blender/render/intern/source/convertblender.c2
-rw-r--r--source/blender/render/intern/source/envmap.c1
-rw-r--r--source/blender/render/intern/source/external_engine.c39
-rw-r--r--source/blender/render/intern/source/initrender.c4
-rw-r--r--source/blender/render/intern/source/pipeline.c18
-rw-r--r--source/blender/render/intern/source/shadbuf.c8
10 files changed, 96 insertions, 30 deletions
diff --git a/source/blender/render/extern/include/RE_engine.h b/source/blender/render/extern/include/RE_engine.h
index 1326ed495ec..e521479bbcd 100644
--- a/source/blender/render/extern/include/RE_engine.h
+++ b/source/blender/render/extern/include/RE_engine.h
@@ -46,10 +46,18 @@ struct Scene;
/* External Engine */
+/* RenderEngineType.flag */
#define RE_INTERNAL 1
#define RE_GAME 2
#define RE_USE_PREVIEW 4
#define RE_USE_POSTPROCESS 8
+#define RE_USE_SHADING_NODES 16
+
+/* RenderEngine.flag */
+#define RE_ENGINE_ANIMATION 1
+#define RE_ENGINE_PREVIEW 2
+#define RE_ENGINE_DO_DRAW 4
+#define RE_ENGINE_DO_UPDATE 8
extern ListBase R_engines;
@@ -61,17 +69,25 @@ typedef struct RenderEngineType {
char name[64];
int flag;
+ void (*update)(struct RenderEngine *engine, struct Main *bmain, struct Scene *scene);
void (*render)(struct RenderEngine *engine, struct Scene *scene);
+ void (*view_update)(struct RenderEngine *engine, const struct bContext *context);
+ void (*view_draw)(struct RenderEngine *engine, const struct bContext *context);
+
/* RNA integration */
ExtensionRNA ext;
} RenderEngineType;
typedef struct RenderEngine {
RenderEngineType *type;
+ void *py_instance;
+
+ int flag;
struct Render *re;
ListBase fullresult;
+ char *text;
} RenderEngine;
RenderEngine *RE_engine_create(RenderEngineType *type);
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h
index cbb2f17043c..fac3329bae0 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -249,6 +249,8 @@ float RE_filter_value(int type, float x);
/* vector blur zbuffer method */
void RE_zbuf_accumulate_vecblur(struct NodeBlurData *nbd, int xsize, int ysize, float *newrect, float *imgrect, float *vecbufrect, float *zbufrect);
+int RE_seq_render_active(struct Scene *scene, struct RenderData *rd);
+
/* shaded view or baking options */
#define RE_BAKE_LIGHT 0 /* not listed in rna_scene.c -> can't be enabled! */
#define RE_BAKE_ALL 1
diff --git a/source/blender/render/intern/include/render_types.h b/source/blender/render/intern/include/render_types.h
index aa2dd29814e..7cad8c36df4 100644
--- a/source/blender/render/intern/include/render_types.h
+++ b/source/blender/render/intern/include/render_types.h
@@ -153,7 +153,9 @@ struct Render
/* values for viewing */
float lens;
+ float sensor_x, sensor_y; /* image sensor size, same variable in camera */
float ycor; /* (scene->xasp / scene->yasp), multiplied with 'winy' */
+ short sensor_fit;
float panophi, panosi, panoco, panodxp, panodxv;
@@ -601,6 +603,7 @@ typedef struct LampRen {
#define R_NEED_TANGENT 16
#define R_BAKE_TRACE 32
#define R_BAKING 64
+#define R_ANIMATION 128
/* vlakren->flag (vlak = face in dutch) char!!! */
#define R_SMOOTH 1
diff --git a/source/blender/render/intern/include/texture.h b/source/blender/render/intern/include/texture.h
index d7d0a7e086d..a8d13077680 100644
--- a/source/blender/render/intern/include/texture.h
+++ b/source/blender/render/intern/include/texture.h
@@ -36,21 +36,26 @@
#ifndef TEXTURE_EXT_H
#define TEXTURE_EXT_H
-#define BRICONT texres->tin= (texres->tin-0.5f)*tex->contrast+tex->bright-0.5f; \
-if(texres->tin<0.0f) texres->tin= 0.0f; else if(texres->tin>1.0f) texres->tin= 1.0f;
+#define BRICONT \
+ texres->tin= (texres->tin-0.5f) * tex->contrast+tex->bright-0.5f; \
+ if(texres->tin < 0.0f) texres->tin= 0.0f; \
+ else if(texres->tin > 1.0f) texres->tin= 1.0f; \
-#define BRICONTRGB texres->tr= tex->rfac*((texres->tr-0.5f)*tex->contrast+tex->bright-0.5f); \
-if(texres->tr<0.0f) texres->tr= 0.0f; \
-texres->tg= tex->gfac*((texres->tg-0.5f)*tex->contrast+tex->bright-0.5f); \
-if(texres->tg<0.0f) texres->tg= 0.0f; \
-texres->tb= tex->bfac*((texres->tb-0.5f)*tex->contrast+tex->bright-0.5f); \
-if(texres->tb<0.0f) texres->tb= 0.0f; \
-if(tex->saturation != 1.0f) { \
- float _hsv[3]; \
- rgb_to_hsv(texres->tr, texres->tg, texres->tb, _hsv, _hsv+1, _hsv+2); \
- _hsv[1] *= tex->saturation; \
- hsv_to_rgb(_hsv[0], _hsv[1], _hsv[2], &texres->tr, &texres->tg, &texres->tb); \
-} \
+#define BRICONTRGB \
+ texres->tr= tex->rfac*((texres->tr-0.5f)*tex->contrast+tex->bright-0.5f); \
+ if(texres->tr<0.0f) texres->tr= 0.0f; \
+ texres->tg= tex->gfac*((texres->tg-0.5f)*tex->contrast+tex->bright-0.5f); \
+ if(texres->tg<0.0f) texres->tg= 0.0f; \
+ texres->tb= tex->bfac*((texres->tb-0.5f)*tex->contrast+tex->bright-0.5f); \
+ if(texres->tb<0.0f) texres->tb= 0.0f; \
+ if(tex->saturation != 1.0f) { \
+ float _hsv[3]; \
+ rgb_to_hsv(texres->tr, texres->tg, texres->tb, \
+ _hsv, _hsv+1, _hsv+2); \
+ _hsv[1] *= tex->saturation; \
+ hsv_to_rgb(_hsv[0], _hsv[1], _hsv[2], \
+ &texres->tr, &texres->tg, &texres->tb); \
+ } \
#define RGBTOBW(r,g,b) ( r*0.35f + g*0.45f + b*0.2f ) /* keep this in sync with gpu_shader_material.glsl:rgbtobw */
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c
index e6ecfa0b9e2..4c210d34284 100644
--- a/source/blender/render/intern/source/convertblender.c
+++ b/source/blender/render/intern/source/convertblender.c
@@ -2391,7 +2391,7 @@ static void do_displacement(Render *re, ObjectRen *obr, float mat[][4], float im
/* Object Size with parenting */
obt=obr->ob;
while(obt){
- add_v3_v3v3(temp, obt->size, obt->dsize);
+ mul_v3_v3v3(temp, obt->size, obt->dsize);
scale[0]*=temp[0]; scale[1]*=temp[1]; scale[2]*=temp[2];
obt=obt->parent;
}
diff --git a/source/blender/render/intern/source/envmap.c b/source/blender/render/intern/source/envmap.c
index e285b9b1ed9..2f20c328405 100644
--- a/source/blender/render/intern/source/envmap.c
+++ b/source/blender/render/intern/source/envmap.c
@@ -157,6 +157,7 @@ static Render *envmap_render_copy(Render *re, EnvMap *env)
/* view stuff in env render */
envre->lens= 16.0f;
+ envre->sensor_x= 32.0f;
if(env->type==ENV_PLANE)
envre->lens*= env->viewscale;
envre->ycor= 1.0f;
diff --git a/source/blender/render/intern/source/external_engine.c b/source/blender/render/intern/source/external_engine.c
index a4d1e502f13..b7f89e260a8 100644
--- a/source/blender/render/intern/source/external_engine.c
+++ b/source/blender/render/intern/source/external_engine.c
@@ -26,7 +26,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
-/** \file blender/render/intern/pipeline/engine.c
+/** \file blender/render/intern/source/external_engine.c
* \ingroup render
*/
@@ -61,7 +61,7 @@
static RenderEngineType internal_render_type = {
NULL, NULL,
"BLENDER_RENDER", "Blender Render", RE_INTERNAL,
- NULL,
+ NULL, NULL, NULL, NULL,
{NULL, NULL, NULL}};
#ifdef WITH_GAMEENGINE
@@ -69,7 +69,7 @@ static RenderEngineType internal_render_type = {
static RenderEngineType internal_game_type = {
NULL, NULL,
"BLENDER_GAME", "Blender Game", RE_INTERNAL|RE_GAME,
- NULL,
+ NULL, NULL, NULL, NULL,
{NULL, NULL, NULL}};
#endif
@@ -125,6 +125,15 @@ RenderEngine *RE_engine_create(RenderEngineType *type)
void RE_engine_free(RenderEngine *engine)
{
+#ifdef WITH_PYTHON
+ if(engine->py_instance) {
+ BPY_DECREF(engine->py_instance);
+ }
+#endif
+
+ if(engine->text)
+ MEM_freeN(engine->text);
+
MEM_freeN(engine);
}
@@ -216,6 +225,19 @@ void RE_engine_update_stats(RenderEngine *engine, const char *stats, const char
re->i.infostr= NULL;
re->i.statstr= NULL;
}
+
+ /* set engine text */
+ if(engine->text) {
+ MEM_freeN(engine->text);
+ engine->text= NULL;
+ }
+
+ if(stats && stats[0] && info && info[0])
+ engine->text= BLI_sprintfN("%s | %s", stats, info);
+ else if(info && info[0])
+ engine->text= BLI_strdup(info);
+ else if(stats && stats[0])
+ engine->text= BLI_strdup(stats);
}
void RE_engine_update_progress(RenderEngine *engine, float progress)
@@ -265,11 +287,18 @@ int RE_engine_render(Render *re, int do_all)
engine = RE_engine_create(type);
engine->re= re;
+ if(re->flag & R_ANIMATION)
+ engine->flag |= RE_ENGINE_ANIMATION;
+ if(re->r.scemode & R_PREVIEWBUTS)
+ engine->flag |= RE_ENGINE_PREVIEW;
+
if((re->r.scemode & (R_NO_FRAME_UPDATE|R_PREVIEWBUTS))==0)
scene_update_for_newframe(re->main, re->scene, re->lay);
- type->render(engine, re->scene);
-
+ if(type->update)
+ type->update(engine, re->main, re->scene);
+ if(type->render)
+ type->render(engine, re->scene);
free_render_result(&engine->fullresult, engine->fullresult.first);
diff --git a/source/blender/render/intern/source/initrender.c b/source/blender/render/intern/source/initrender.c
index da935d0415d..f8e4ee8f6a7 100644
--- a/source/blender/render/intern/source/initrender.c
+++ b/source/blender/render/intern/source/initrender.c
@@ -451,14 +451,14 @@ struct Object *RE_GetCamera(Render *re)
}
/* call this after InitState() */
-/* per render, there's one persistant viewplane. Parts will set their own viewplanes */
+/* per render, there's one persistent viewplane. Parts will set their own viewplanes */
void RE_SetCamera(Render *re, Object *camera)
{
object_camera_mode(&re->r, camera);
object_camera_matrix(&re->r, camera, re->winx, re->winy, re->flag & R_SEC_FIELD,
re->winmat, &re->viewplane, &re->clipsta, &re->clipend,
- &re->lens, &re->ycor, &re->viewdx, &re->viewdy);
+ &re->lens, &re->sensor_x, &re->sensor_y, &re->sensor_fit, &re->ycor, &re->viewdx, &re->viewdy);
}
void RE_SetPixelSize(Render *re, float pixsize)
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index 64b36c1fd12..de5d037675e 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -2517,14 +2517,14 @@ static void renderresult_stampinfo(Render *re)
RE_ReleaseResultImage(re);
}
-static int seq_render_active(Render *re)
+int RE_seq_render_active(Scene *scene, RenderData *rd)
{
Editing *ed;
Sequence *seq;
- ed = re->scene->ed;
+ ed = scene->ed;
- if (!(re->r.scemode & R_DOSEQ) || !ed || !ed->seqbase.first)
+ if (!(rd->scemode & R_DOSEQ) || !ed || !ed->seqbase.first)
return 0;
for (seq= ed->seqbase.first; seq; seq= seq->next) {
@@ -2632,6 +2632,12 @@ static void do_render_seq(Render * re)
/* just in case this flag went missing at some point */
re->r.scemode |= R_DOSEQ;
+
+ /* set overall progress of sequence rendering */
+ if(re->r.efra!=re->r.sfra)
+ re->progress(re->prh, (float)(cfra-re->r.sfra) / (re->r.efra-re->r.sfra));
+ else
+ re->progress(re->prh, 1.0f);
}
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
@@ -2649,7 +2655,7 @@ static void do_render_all_options(Render *re)
if(RE_engine_render(re, 1)) {
/* in this case external render overrides all */
}
- else if(seq_render_active(re)) {
+ else if(RE_seq_render_active(re->scene, &re->r)) {
/* note: do_render_seq() frees rect32 when sequencer returns float images */
if(!re->test_break(re->tbh))
do_render_seq(re);
@@ -3085,6 +3091,8 @@ void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, Object *camera_overri
/* is also set by caller renderwin.c */
G.rendering= 1;
+ re->flag |= R_ANIMATION;
+
if(BKE_imtype_is_movie(scene->r.imtype))
if(!mh->start_movie(scene, &re->r, re->rectx, re->recty, re->reports))
G.afbreek= 1;
@@ -3193,6 +3201,8 @@ void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, Object *camera_overri
scene->r.cfra= cfrao;
+ re->flag &= ~R_ANIMATION;
+
/* UGLY WARNING */
G.rendering= 0;
}
diff --git a/source/blender/render/intern/source/shadbuf.c b/source/blender/render/intern/source/shadbuf.c
index a4bf6c6b5e1..274fa4469e0 100644
--- a/source/blender/render/intern/source/shadbuf.c
+++ b/source/blender/render/intern/source/shadbuf.c
@@ -2156,7 +2156,7 @@ static int isb_add_samples(RenderPart *pa, ISBBranch *root, MemArena *memarena,
int xi, yi, *xcos, *ycos;
int sample, bsp_err= 0;
- /* bsp split doesn't like to handle regular sequenes */
+ /* bsp split doesn't like to handle regular sequences */
xcos= MEM_mallocN( pa->rectx*sizeof(int), "xcos");
ycos= MEM_mallocN( pa->recty*sizeof(int), "ycos");
for(xi=0; xi<pa->rectx; xi++)
@@ -2301,7 +2301,7 @@ static void isb_make_buffer(RenderPart *pa, LampRen *lar)
isb_bsp_fillfaces(&R, lar, &root); /* shb->persmat should have been calculated */
- /* copy shadow samples to persistant buffer, reduce memory overhead */
+ /* copy shadow samples to persistent buffer, reduce memory overhead */
if(R.osa) {
ISBShadfacA **isbsa= isbdata->shadfaca= MEM_callocN(pa->rectx*pa->recty*sizeof(void *), "isb shadfacs");
@@ -2360,7 +2360,7 @@ static int isb_add_samples_transp(RenderPart *pa, ISBBranch *root, MemArena *mem
int xi, yi, *xcos, *ycos;
int sample, bsp_err= 0;
- /* bsp split doesn't like to handle regular sequenes */
+ /* bsp split doesn't like to handle regular sequences */
xcos= MEM_mallocN( pa->rectx*sizeof(int), "xcos");
ycos= MEM_mallocN( pa->recty*sizeof(int), "ycos");
for(xi=0; xi<pa->rectx; xi++)
@@ -2505,7 +2505,7 @@ static void isb_make_buffer_transp(RenderPart *pa, APixstr *apixbuf, LampRen *la
/* go over all faces and fill in shadow values */
isb_bsp_fillfaces(&R, lar, &root); /* shb->persmat should have been calculated */
- /* copy shadow samples to persistant buffer, reduce memory overhead */
+ /* copy shadow samples to persistent buffer, reduce memory overhead */
isbsa= isbdata->shadfaca= MEM_callocN(pa->rectx*pa->recty*sizeof(void *), "isb shadfacs");
isbdata->memarena = BLI_memarena_new(0x8000 * sizeof(ISBSampleA), "isb arena");