[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