[Bf-blender-cvs] [4b39404] compositor-2016: Added render layer (only combined pass)

Jeroen Bakker noreply at git.blender.org
Wed Jun 1 20:30:13 CEST 2016


Commit: 4b3940448f471a52e3d5df28d4d3f0e7536375c6
Author: Jeroen Bakker
Date:   Mon May 23 23:04:57 2016 +0200
Branches: compositor-2016
https://developer.blender.org/rB4b3940448f471a52e3d5df28d4d3f0e7536375c6

Added render layer (only combined pass)

===================================================================

M	release/datafiles/locale
M	release/scripts/addons
M	release/scripts/addons_contrib
M	source/blender/compositor/cmp/cmp_compositor.cpp
M	source/blender/compositor/cmp/cmp_node.cpp
M	source/blender/compositor/cmp/cmp_node.hpp
M	source/blender/compositor/cmp/cmp_nodesocket.cpp
M	source/blender/compositor/cmp/cmp_nodesocket.hpp
A	source/blender/compositor/cmp/cmp_rendercontext.hpp
M	source/blender/compositor/cmp/cmp_unroll.cpp
M	source/blender/compositor/cmp/cmp_unroll.hpp
M	source/blender/compositor/device/device_cpu.cpp
M	source/blender/compositor/kernel/cvm/cvm_node_mix.h
A	source/blender/compositor/kernel/cvm/cvm_node_renderlayer.h
M	source/blender/compositor/kernel/cvm/cvm_node_viewer.h
M	source/blender/compositor/kernel/cvm/cvm_nodes.h
M	source/blender/compositor/kernel/kernel_functions.h
M	source/blender/compositor/kernel/kernel_types.h

===================================================================

diff --git a/release/datafiles/locale b/release/datafiles/locale
index 9628dc1..9d507d4 160000
--- a/release/datafiles/locale
+++ b/release/datafiles/locale
@@ -1 +1 @@
-Subproject commit 9628dc1922be2fb6281bc66f5f7512c2a57c294a
+Subproject commit 9d507d4ecfc8b2884a2d7276bff0171078b4ae57
diff --git a/release/scripts/addons b/release/scripts/addons
index 407d0ea..e42f47d 160000
--- a/release/scripts/addons
+++ b/release/scripts/addons
@@ -1 +1 @@
-Subproject commit 407d0ea752b3af73d3f13ba072671bd09eefecb1
+Subproject commit e42f47d181a4d725b95200fd33d873fc85be6704
diff --git a/release/scripts/addons_contrib b/release/scripts/addons_contrib
index 9f29e18..4dc84d6 160000
--- a/release/scripts/addons_contrib
+++ b/release/scripts/addons_contrib
@@ -1 +1 @@
-Subproject commit 9f29e18707917ec5be262431d2e09dbb85332f41
+Subproject commit 4dc84d67773154f08f8c2c670c88e4f76f855be4
diff --git a/source/blender/compositor/cmp/cmp_compositor.cpp b/source/blender/compositor/cmp/cmp_compositor.cpp
index 2ea7caa..a4251b8 100644
--- a/source/blender/compositor/cmp/cmp_compositor.cpp
+++ b/source/blender/compositor/cmp/cmp_compositor.cpp
@@ -7,6 +7,7 @@ extern "C" {
 
 #include "cmp_unroll.hpp"
 #include "cmp_output.hpp"
+#include "cmp_rendercontext.hpp"
 #include "device_cpu.hpp"
 #include <iostream>
 
@@ -30,10 +31,12 @@ void COM_execute(RenderData *rd, Scene *scene, bNodeTree *editingtree, int rende
    BLI_mutex_lock(&s_compositorMutex);
 
 
-
+  // Create render context
+  Compositor::RenderContext *render_context = new Compositor::RenderContext();
+  render_context->view_name = viewName;
 
   // UNROLL editingtree
-  Compositor::Node* node = Compositor::unroll(editingtree);
+  Compositor::Node* node = Compositor::unroll(editingtree, render_context);
   if (node != NULL) {
     // SELECT DEVICE
     Compositor::Device::Device *device = new Compositor::Device::DeviceCPU();
@@ -77,7 +80,7 @@ void COM_execute(RenderData *rd, Scene *scene, bNodeTree *editingtree, int rende
     device->stop();
 
 
-    output.update_subimage(0, 0, output.width, output.height);
+    // output.update_subimage(0, 0, output.width, output.height);
 
     delete device;
     for (int i = 0 ; i < num_tiles; i ++) {
@@ -87,9 +90,12 @@ void COM_execute(RenderData *rd, Scene *scene, bNodeTree *editingtree, int rende
       }
     }
   }
+
+  delete render_context;
   BLI_mutex_unlock(&s_compositorMutex);
 
 
+
 }
 
 void COM_deinitialize(void) {
diff --git a/source/blender/compositor/cmp/cmp_node.cpp b/source/blender/compositor/cmp/cmp_node.cpp
index 3009da6..7cb9673 100644
--- a/source/blender/compositor/cmp/cmp_node.cpp
+++ b/source/blender/compositor/cmp/cmp_node.cpp
@@ -1,29 +1,93 @@
 #include "cmp_node.hpp"
 
+#include "BKE_node.h"
+#include "DNA_node_types.h"
+#include "RNA_access.h"
+
+#include "BLI_listbase.h"
+extern "C" {
+#  include "RE_pipeline.h"
+#  include "RE_shader_ext.h"
+#  include "RE_render_ext.h"
+}
+
+
 namespace Compositor {
   Node::Node() {
     this->node_tree = NULL;
     this->b_node = NULL;
     this->stack_index = -1;
+    this->texture_index = -1;
+    this->buffer = NULL;
   }
 
-  Node::Node(bNodeTree* node_tree, bNode *node) {
+  Node::Node(bNodeTree* node_tree, bNode *node, RenderContext * render_context) {
     this->node_tree = node_tree;
     this->b_node = node;
     this->stack_index = -1;
     this->texture_index = -1;
+    this->buffer = NULL;
 
     this->type = node->type;
 
     for (bNodeSocket *socket = (bNodeSocket *)node->inputs.first; socket; socket = socket->next) {
-      this->add_input_socket(new NodeSocket(this, socket));
+      this->inputs.push_back(new NodeSocket(this, socket, render_context));
     }
-  }
 
-  Node::~Node() {
+    switch (node->type) {
+      case CMP_NODE_MIX_RGB:
+        this->var_int_0 = node->custom1;
+        break;
+
+      case CMP_NODE_VALUE:
+        PointerRNA ptr;
+        RNA_pointer_create((ID *)node_tree, &RNA_NodeSocket, node->outputs.first, &ptr);
+        this->var_float_0 = RNA_float_get(&ptr, "default_value");
+        break;
+
+      case CMP_NODE_R_LAYERS:
+        short layer_id = node->custom1;
+        Scene* scene = (Scene*)node->id;
+
+        // TODO: Do not hardcode, but base on the output socket.
+        int renderpass = SCE_PASS_COMBINED;
+        int elementsize = 4;
+        const char *view_name = render_context->view_name;
+
+        Render *re = (scene) ? RE_GetRender(scene->id.name) : NULL;
+        RenderResult *rr = NULL;
+        float *buffer = NULL;
+
+        if (re)
+          rr = RE_AcquireResultRead(re);
+
+        if (rr) {
+      		SceneRenderLayer *srl = (SceneRenderLayer *)BLI_findlink(&scene->r.layers, layer_id);
+
+          if (srl) {
+
+      			RenderLayer *rl = RE_GetRenderLayer(rr, srl->name);
+      			if (rl) {
+      				buffer = RE_RenderLayerGetPass(rl, renderpass, view_name);
+              // TODO: Looks double....
+      				// if (buffer == NULL && renderpass == SCE_PASS_COMBINED) {
+      				// 	buffer = RE_RenderLayerGetPass(rl, SCE_PASS_COMBINED, view_name);
+      				// }
+              this->buffer = buffer;
+              this->buffer_width = rl->rectx;
+              this->buffer_height = rl->recty;
+      			}
+      		}
+      	}
+      	if (re) {
+      		RE_ReleaseResult(re);
+      		re = NULL;
+      	}
+
+        break;
+    }
   }
 
-  void Node::add_input_socket(NodeSocket* socket) {
-    this->inputs.push_back(socket);
+  Node::~Node() {
   }
 }
diff --git a/source/blender/compositor/cmp/cmp_node.hpp b/source/blender/compositor/cmp/cmp_node.hpp
index 5be645a..42e2dd4 100644
--- a/source/blender/compositor/cmp/cmp_node.hpp
+++ b/source/blender/compositor/cmp/cmp_node.hpp
@@ -6,12 +6,19 @@ namespace Compositor {
 
 #include "DNA_node_types.h"
 #include "cmp_nodesocket.hpp"
+#include "cmp_rendercontext.hpp"
 #include <list>
 
 namespace Compositor {
   struct Node {
     bNodeTree * node_tree;
+
+    /**
+     * Reference to the (optional) bNode for this Node instance.
+     * This is for debugging and possible (not likely) future enhancements.
+     */
     bNode* b_node;
+
     int type;
     int stack_index;
 
@@ -22,14 +29,22 @@ namespace Compositor {
     float var_float_2;
     float var_float_3;
 
+    int var_int_0;
+    int var_int_1;
+    int var_int_2;
+    int var_int_3;
+
+    float* buffer;
+    // TODO: Make int2
+    int buffer_width;
+    int buffer_height;
+
     std::list<NodeSocket*> inputs;
 
-    Node(bNodeTree* node_tree, bNode *node);
+    // TODO: Needs optional parameter with output socket you are evaluating.
+    Node(bNodeTree* node_tree, bNode *node, RenderContext * render_context);
     Node();
     ~Node();
-
-    void add_input_socket(NodeSocket* socket);
-
   };
 }
 #endif
diff --git a/source/blender/compositor/cmp/cmp_nodesocket.cpp b/source/blender/compositor/cmp/cmp_nodesocket.cpp
index b2c27e5..92dd655 100644
--- a/source/blender/compositor/cmp/cmp_nodesocket.cpp
+++ b/source/blender/compositor/cmp/cmp_nodesocket.cpp
@@ -6,14 +6,14 @@
 #include "RNA_access.h"
 
 namespace Compositor {
-  NodeSocket::NodeSocket(Node* node, bNodeSocket * socket) {
+  NodeSocket::NodeSocket(Node* node, bNodeSocket * socket, RenderContext * render_context) {
     this->node = node;
     this->b_socket = socket;
 
     bNodeTree* node_tree = node->node_tree;
     for (bNodeLink *link = (bNodeLink*)node_tree->links.first; link; link = (bNodeLink*)link->next) {
       if (link->tosock == socket) {
-        this->connected_node = new Node(node_tree, link->fromnode);
+        this->connected_node = new Node(node_tree, link->fromnode, render_context);
         return;
       }
     }
diff --git a/source/blender/compositor/cmp/cmp_nodesocket.hpp b/source/blender/compositor/cmp/cmp_nodesocket.hpp
index 30d59bb..13ee8e0 100644
--- a/source/blender/compositor/cmp/cmp_nodesocket.hpp
+++ b/source/blender/compositor/cmp/cmp_nodesocket.hpp
@@ -6,6 +6,7 @@ namespace Compositor {
 
 #include "DNA_node_types.h"
 #include "cmp_node.hpp"
+#include "cmp_rendercontext.hpp"
 
 namespace Compositor {
   struct NodeSocket {
@@ -13,7 +14,7 @@ namespace Compositor {
     bNodeSocket *b_socket;
     Node* connected_node;
 
-    NodeSocket(Node* node, bNodeSocket *socket);
+    NodeSocket(Node* node, bNodeSocket *socket, RenderContext * render_context);
     ~NodeSocket();
   };
 }
diff --git a/source/blender/compositor/cmp/cmp_rendercontext.hpp b/source/blender/compositor/cmp/cmp_rendercontext.hpp
new file mode 100644
index 0000000..54a12fb
--- /dev/null
+++ b/source/blender/compositor/cmp/cmp_rendercontext.hpp
@@ -0,0 +1,9 @@
+#ifndef CMP_RENDERCONTEXT_HPP
+#define CMP_RENDERCONTEXT_HPP
+
+namespace Compositor {
+  struct RenderContext {
+    const char *view_name;
+  };
+}
+#endif
diff --git a/source/blender/compositor/cmp/cmp_unroll.cpp b/source/blender/compositor/cmp/cmp_unroll.cpp
index 00813e8..50ea143 100644
--- a/source/blender/compositor/cmp/cmp_unroll.cpp
+++ b/source/blender/compositor/cmp/cmp_unroll.cpp
@@ -15,19 +15,19 @@ namespace Compositor {
     return NULL;
   }
 
-  static Node* unroll_b_node(bNodeTree *node_tree, bNode * node) {
-    Node* result = new Node(node_tree, node);
+  static Node* unroll_b_node(bNodeTree *node_tree, bNode * node, RenderContext * render_context) {
+    Node* result = new Node(node_tree, node, render_context);
     return result;
   }
 
-  Node* unroll(bNodeTree *node_tree) {
+  Node* unroll(bNodeTree *node_tree, RenderContext *render_context) {
     bNode* viewer_node = find_active_viewer_node(node_tree);
     if (viewer_node == NULL) {
       return NULL;
     }
 
 
-    Node* result = unroll_b_node(node_tree, viewer_node);
+    Node* result = unroll_b_node(node_tree, viewer_node, render_context);
     return result;
   }
 }
diff --git a/source/blender/compositor/cmp/cmp_unroll.hpp b/source/blender/compositor/cmp/cmp_unroll.hpp
index 6a4dd6f..3a19040 100644
--- a/source/blender/compositor/cmp/cmp_unroll.hpp
+++ b/source/blender/compositor/cmp/cmp_unroll.hpp
@@ -3,8 +3,9 @@
 
 #include "cmp_node.hpp"
 #include "DNA_node_types.h"
+#include "cmp_rendercontext.hpp"
 
 namespace Compositor {
-  Node* unroll(bNodeTree * node_tree);
+  Node* unroll(bNodeTree * node_tree, RenderContext * render_context);

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list