[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [36729] branches/cycles: Render API: first step in updating RenderEngine to work according to:
Brecht Van Lommel
brechtvanlommel at pandora.be
Tue May 17 16:26:45 CEST 2011
Revision: 36729
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36729
Author: blendix
Date: 2011-05-17 14:26:45 +0000 (Tue, 17 May 2011)
Log Message:
-----------
Render API: first step in updating RenderEngine to work according to:
http://wiki.blender.org/index.php/Dev:2.5/Source/Render/RenderEngineAPI
Modified Paths:
--------------
branches/cycles/intern/cycles/blender/addon/__init__.py
branches/cycles/intern/cycles/blender/addon/engine.py
branches/cycles/source/blender/blenkernel/BKE_depsgraph.h
branches/cycles/source/blender/blenkernel/BKE_scene.h
branches/cycles/source/blender/blenkernel/intern/depsgraph.c
branches/cycles/source/blender/blenkernel/intern/scene.c
branches/cycles/source/blender/editors/include/ED_render.h
branches/cycles/source/blender/editors/render/CMakeLists.txt
branches/cycles/source/blender/editors/render/render_shading.c
branches/cycles/source/blender/editors/space_view3d/space_view3d.c
branches/cycles/source/blender/editors/space_view3d/view3d_draw.c
branches/cycles/source/blender/makesrna/intern/rna_render.c
branches/cycles/source/blender/makesrna/intern/rna_scene_api.c
branches/cycles/source/blender/render/CMakeLists.txt
branches/cycles/source/blender/render/SConscript
branches/cycles/source/blender/render/extern/include/RE_engine.h
branches/cycles/source/blender/render/intern/pipeline/engine.c
branches/cycles/source/blender/windowmanager/intern/wm_event_system.c
branches/cycles/source/blenderplayer/bad_level_call_stubs/stubs.c
Added Paths:
-----------
branches/cycles/source/blender/editors/render/render_update.c
Modified: branches/cycles/intern/cycles/blender/addon/__init__.py
===================================================================
--- branches/cycles/intern/cycles/blender/addon/__init__.py 2011-05-17 14:18:02 UTC (rev 36728)
+++ branches/cycles/intern/cycles/blender/addon/__init__.py 2011-05-17 14:26:45 UTC (rev 36729)
@@ -47,17 +47,30 @@
def __del__(self):
engine.free(self)
- def render(self, scene):
- engine.create(self, scene, True)
- engine.render(self, scene)
+ # final render
+ def update(self, data, scene):
+ engine.create(self, data, scene)
+ engine.update(self, data, scene)
- def draw(self, scene):
+ def render(self):
+ engine.render(self)
+
+ # preview render
+ # def preview_update(self, context, id):
+ # pass
+ #
+ # def preview_render(self):
+ # pass
+
+ # viewport render
+ def view_update(self, context):
if not self.session:
- engine.create(self, scene, False)
- engine.draw(self, scene)
+ engine.create(self, context.blend_data, context.scene,
+ context.region, context.space_data, context.region_data)
+ engine.update(self, context.blend_data, context.scene)
- def update(self, scene):
- engine.update(self, scene)
+ def view_draw(self, context):
+ engine.draw(self, context.region, context.space_data, context.region_data)
def register():
properties.register()
Modified: branches/cycles/intern/cycles/blender/addon/engine.py
===================================================================
--- branches/cycles/intern/cycles/blender/addon/engine.py 2011-05-17 14:18:02 UTC (rev 36728)
+++ branches/cycles/intern/cycles/blender/addon/engine.py 2011-05-17 14:26:45 UTC (rev 36729)
@@ -23,20 +23,18 @@
import os.path
lib.init(os.path.dirname(__file__))
-def create(engine, scene, offline):
+def create(engine, data, scene, region = 0, v3d = 0, rv3d = 0):
from cycles import libcycles_blender as lib
- data = bpy.data.as_pointer()
+
+ data = data.as_pointer()
scene = scene.as_pointer()
+ if region:
+ region = region.as_pointer()
+ if v3d:
+ v3d = v3d.as_pointer()
+ if rv3d:
+ rv3d = rv3d.as_pointer()
- if not offline and bpy.context.area.type == 'VIEW_3D':
- region = bpy.context.region.as_pointer()
- v3d = bpy.context.space_data.as_pointer()
- rv3d = bpy.context.region_data.as_pointer()
- else:
- region = 0
- v3d = 0
- rv3d = 0
-
engine.session = lib.create(engine.as_pointer(), data, scene, region, v3d, rv3d)
def free(engine):
@@ -46,19 +44,18 @@
lib.free(engine.session)
del engine.session
-def render(engine, scene):
+def render(engine):
from cycles import libcycles_blender as lib
lib.render(engine.session)
-def update(engine, scene):
+def update(engine, data, scene):
from cycles import libcycles_blender as lib
lib.sync(engine.session)
-def draw(engine, scene):
+def draw(engine, region, v3d, rv3d):
from cycles import libcycles_blender as lib
- v3d = bpy.context.space_data.as_pointer()
- rv3d = bpy.context.region_data.as_pointer()
- region = bpy.context.region
+ v3d = v3d.as_pointer()
+ rv3d = rv3d.as_pointer()
# draw render image
status, substatus = lib.draw(engine.session, v3d, rv3d)
Modified: branches/cycles/source/blender/blenkernel/BKE_depsgraph.h
===================================================================
--- branches/cycles/source/blender/blenkernel/BKE_depsgraph.h 2011-05-17 14:18:02 UTC (rev 36728)
+++ branches/cycles/source/blender/blenkernel/BKE_depsgraph.h 2011-05-17 14:26:45 UTC (rev 36729)
@@ -121,7 +121,8 @@
void DAG_id_tag_update(struct ID *id, short flag);
/* flush all tagged updates */
void DAG_ids_flush_tagged(struct Main *bmain);
- /* clear ID recalc flags */
+ /* check and clear ID recalc flags */
+void DAG_ids_check_recalc(struct Main *bmain);
void DAG_ids_clear_recalc(struct Main *bmain);
/* test if any of this id type is tagged for update */
int DAG_id_type_tagged(struct Main *bmain, short idtype);
Modified: branches/cycles/source/blender/blenkernel/BKE_scene.h
===================================================================
--- branches/cycles/source/blender/blenkernel/BKE_scene.h 2011-05-17 14:18:02 UTC (rev 36728)
+++ branches/cycles/source/blender/blenkernel/BKE_scene.h 2011-05-17 14:26:45 UTC (rev 36729)
@@ -90,6 +90,8 @@
float BKE_curframe(struct Scene *scene);
void scene_update_tagged(struct Main *bmain, struct Scene *sce);
+void scene_clear_tagged(struct Main *bmain, struct Scene *sce);
+
void scene_update_for_newframe(struct Main *bmain, struct Scene *sce, unsigned int lay);
void scene_add_render_layer(struct Scene *sce);
Modified: branches/cycles/source/blender/blenkernel/intern/depsgraph.c
===================================================================
--- branches/cycles/source/blender/blenkernel/intern/depsgraph.c 2011-05-17 14:18:02 UTC (rev 36728)
+++ branches/cycles/source/blender/blenkernel/intern/depsgraph.c 2011-05-17 14:26:45 UTC (rev 36729)
@@ -2508,10 +2508,10 @@
DAG_scene_flush_update(bmain, sce, lay, 0);
}
-void DAG_ids_clear_recalc(Main *bmain)
+void DAG_ids_check_recalc(Main *bmain)
{
ListBase *lbarray[MAX_LIBARRAY];
- int a, first_tag = 1;
+ int a;
/* loop over all ID types */
a = set_listbasepointers(bmain, lbarray);
@@ -2524,11 +2524,28 @@
looping over all ID's in case there are no tags */
if(id && bmain->id_tag_update[id->name[0]]) {
/* do editors update */
- if(first_tag) {
- dag_editors_update(bmain, NULL);
- first_tag = 0;
- }
+ dag_editors_update(bmain, NULL);
+ return;
+ }
+ }
+}
+
+void DAG_ids_clear_recalc(Main *bmain)
+{
+ ListBase *lbarray[MAX_LIBARRAY];
+ int a;
+
+ /* loop over all ID types */
+ a = set_listbasepointers(bmain, lbarray);
+
+ while(a--) {
+ ListBase *lb = lbarray[a];
+ ID *id = lb->first;
+
+ /* we tag based on first ID type character to avoid
+ looping over all ID's in case there are no tags */
+ if(id && bmain->id_tag_update[id->name[0]]) {
for(; id; id=id->next)
if(id->flag & (LIB_ID_RECALC|LIB_ID_RECALC_DATA))
id->flag &= ~(LIB_ID_RECALC|LIB_ID_RECALC_DATA);
Modified: branches/cycles/source/blender/blenkernel/intern/scene.c
===================================================================
--- branches/cycles/source/blender/blenkernel/intern/scene.c 2011-05-17 14:18:02 UTC (rev 36728)
+++ branches/cycles/source/blender/blenkernel/intern/scene.c 2011-05-17 14:26:45 UTC (rev 36729)
@@ -989,13 +989,18 @@
if (scene->physics_settings.quick_cache_step)
BKE_ptcache_quick_cache_all(bmain, scene);
-
- DAG_ids_clear_recalc(bmain);
+ DAG_ids_check_recalc(bmain);
+
/* in the future this should handle updates for all datablocks, not
only objects and scenes. - brecht */
}
+void scene_clear_tagged(Main *bmain, Scene *scene)
+{
+ DAG_ids_clear_recalc(bmain);
+}
+
/* applies changes right away, does all sets too */
void scene_update_for_newframe(Main *bmain, Scene *sce, unsigned int lay)
{
Modified: branches/cycles/source/blender/editors/include/ED_render.h
===================================================================
--- branches/cycles/source/blender/editors/include/ED_render.h 2011-05-17 14:18:02 UTC (rev 36728)
+++ branches/cycles/source/blender/editors/include/ED_render.h 2011-05-17 14:26:45 UTC (rev 36729)
@@ -45,7 +45,7 @@
void ED_render_id_flush_update(struct Main *bmain, struct ID *id);
void ED_render_engine_changed(struct Main *bmain);
-void ED_render_engine_update_tagged(struct Main *bmain);
+void ED_render_engine_update_tagged(struct bContext *C, struct Main *bmain);
/* render_preview.c */
Modified: branches/cycles/source/blender/editors/render/CMakeLists.txt
===================================================================
--- branches/cycles/source/blender/editors/render/CMakeLists.txt 2011-05-17 14:18:02 UTC (rev 36728)
+++ branches/cycles/source/blender/editors/render/CMakeLists.txt 2011-05-17 14:26:45 UTC (rev 36729)
@@ -41,6 +41,7 @@
render_ops.c
render_preview.c
render_shading.c
+ render_update.c
render_intern.h
)
Modified: branches/cycles/source/blender/editors/render/render_shading.c
===================================================================
--- branches/cycles/source/blender/editors/render/render_shading.c 2011-05-17 14:18:02 UTC (rev 36728)
+++ branches/cycles/source/blender/editors/render/render_shading.c 2011-05-17 14:26:45 UTC (rev 36729)
@@ -88,244 +88,6 @@
#include "render_intern.h" // own include
-/***************************** Updates ***********************************
- * ED_render_id_flush_update gets called from DAG_id_tag_update, to do *
- * editor level updates when the ID changes. when these ID blocks are in *
- * the dependency graph, we can get rid of the manual dependency checks */
-
-static int mtex_use_tex(MTex **mtex, int tot, Tex *tex)
-{
- int a;
-
- if(!mtex)
- return 0;
-
- for(a=0; a<tot; a++)
- if(mtex[a] && mtex[a]->tex == tex)
- return 1;
-
- return 0;
-}
-
-static int nodes_use_tex(bNodeTree *ntree, Tex *tex)
-{
- bNode *node;
-
- for(node=ntree->nodes.first; node; node= node->next) {
- if(node->id) {
- if(node->id == (ID*)tex) {
- return 1;
- }
- else if(node->type==NODE_GROUP) {
- if(nodes_use_tex((bNodeTree *)node->id, tex))
- return 1;
- }
- }
- }
-
- return 0;
-}
-
-static void material_changed(Main *UNUSED(bmain), Material *ma)
-{
- /* icons */
- BKE_icon_changed(BKE_icon_getid(&ma->id));
-
- /* glsl */
- if(ma->gpumaterial.first)
- GPU_material_free(ma);
-}
-
-static void texture_changed(Main *bmain, Tex *tex)
-{
- Material *ma;
- Lamp *la;
- World *wo;
-
- /* icons */
- BKE_icon_changed(BKE_icon_getid(&tex->id));
-
- /* find materials */
- for(ma=bmain->mat.first; ma; ma=ma->id.next) {
- if(mtex_use_tex(ma->mtex, MAX_MTEX, tex));
- else if(ma->use_nodes && ma->nodetree && nodes_use_tex(ma->nodetree, tex));
- else continue;
-
- BKE_icon_changed(BKE_icon_getid(&ma->id));
-
- if(ma->gpumaterial.first)
- GPU_material_free(ma);
- }
-
- /* find lamps */
- for(la=bmain->lamp.first; la; la=la->id.next) {
- if(mtex_use_tex(la->mtex, MAX_MTEX, tex));
- else if(la->nodetree && nodes_use_tex(la->nodetree, tex));
- else continue;
-
- BKE_icon_changed(BKE_icon_getid(&la->id));
- }
-
- /* find worlds */
- for(wo=bmain->world.first; wo; wo=wo->id.next) {
- if(mtex_use_tex(wo->mtex, MAX_MTEX, tex));
- else if(wo->nodetree && nodes_use_tex(wo->nodetree, tex));
- else continue;
-
- BKE_icon_changed(BKE_icon_getid(&wo->id));
- }
-}
-
-static void lamp_changed(Main *bmain, Lamp *la)
-{
- Object *ob;
- Material *ma;
-
- /* icons */
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list