Revision: 46543
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46543
Author: jbakker
Date: 2012-05-11 09:08:58 +0000 (Fri, 11 May 2012)
Log Message:
-----------
TileBranch
* fixed support for file output node trunk
Modified Paths:
--------------
branches/tile/source/blender/compositor/intern/COM_Converter.cpp
branches/tile/source/blender/compositor/nodes/COM_ImageNode.cpp
branches/tile/source/blender/compositor/nodes/COM_ImageNode.h
branches/tile/source/blender/compositor/nodes/COM_OutputFileNode.cpp
branches/tile/source/blender/compositor/nodes/COM_OutputFileNode.h
branches/tile/source/blender/compositor/operations/COM_MultilayerImageOperation.cpp
branches/tile/source/blender/compositor/operations/COM_MultilayerImageOperation.h
branches/tile/source/blender/compositor/operations/COM_OutputFileOperation.cpp
branches/tile/source/blender/compositor/operations/COM_OutputFileOperation.h
Modified: branches/tile/source/blender/compositor/intern/COM_Converter.cpp
===================================================================
--- branches/tile/source/blender/compositor/intern/COM_Converter.cpp
2012-05-11 08:06:01 UTC (rev 46542)
+++ branches/tile/source/blender/compositor/intern/COM_Converter.cpp
2012-05-11 09:08:58 UTC (rev 46543)
@@ -314,9 +314,11 @@
case CMP_NODE_COLOR_SPILL:
node = new ColorSpillNode(bNode);
break;
+#ifdef COM_TRUNK
case CMP_NODE_OUTPUT_FILE:
node = new OutputFileNode(bNode);
break;
+#endif
case CMP_NODE_MAP_VALUE:
node = new MapValueNode(bNode);
break;
Modified: branches/tile/source/blender/compositor/nodes/COM_ImageNode.cpp
===================================================================
--- branches/tile/source/blender/compositor/nodes/COM_ImageNode.cpp
2012-05-11 08:06:01 UTC (rev 46542)
+++ branches/tile/source/blender/compositor/nodes/COM_ImageNode.cpp
2012-05-11 09:08:58 UTC (rev 46543)
@@ -18,6 +18,7 @@
* Contributor:
* Jeroen Bakker
* Monique Dewanchand
+ * Lukas Tönne
*/
#include "COM_ImageNode.h"
Modified: branches/tile/source/blender/compositor/nodes/COM_ImageNode.h
===================================================================
--- branches/tile/source/blender/compositor/nodes/COM_ImageNode.h
2012-05-11 08:06:01 UTC (rev 46542)
+++ branches/tile/source/blender/compositor/nodes/COM_ImageNode.h
2012-05-11 09:08:58 UTC (rev 46543)
@@ -18,6 +18,7 @@
* Contributor:
* Jeroen Bakker
* Monique Dewanchand
+ * Lukas Tönne
*/
#include "COM_defines.h"
Modified: branches/tile/source/blender/compositor/nodes/COM_OutputFileNode.cpp
===================================================================
--- branches/tile/source/blender/compositor/nodes/COM_OutputFileNode.cpp
2012-05-11 08:06:01 UTC (rev 46542)
+++ branches/tile/source/blender/compositor/nodes/COM_OutputFileNode.cpp
2012-05-11 09:08:58 UTC (rev 46543)
@@ -18,33 +18,71 @@
* Contributor:
* Jeroen Bakker
* Monique Dewanchand
+ * Lukas Tönne
*/
#include "COM_OutputFileNode.h"
#include "COM_OutputFileOperation.h"
#include "COM_ExecutionSystem.h"
+#include "BLI_path_util.h"
+#include "BKE_utildefines.h"
+#ifdef COM_TRUNK
OutputFileNode::OutputFileNode(bNode *editorNode): Node(editorNode) {
}
void OutputFileNode::convertToOperations(ExecutionSystem *graph,
CompositorContext * context) {
- InputSocket *imageSocket = this->getInputSocket(0);
- InputSocket *zSocket = this->getInputSocket(1);
- NodeImageFile* storage = (NodeImageFile*)this->getbNode()->storage;
- if (imageSocket->isConnected()) {
-// if (context->isRendering()) {
- if (storage->sfra == storage->efra ||
(context->getFramenumber()<=storage->efra &&
context->getFramenumber()>=storage->sfra)) {
- OutputFileOperation *outputFileOperation = new
OutputFileOperation();
-
outputFileOperation->setScene(context->getScene());
- outputFileOperation->setNodeImageFile(storage);
-
outputFileOperation->setbNodeTree(context->getbNodeTree());
-
imageSocket->relinkConnections(outputFileOperation->getInputSocket(0));
-
zSocket->relinkConnections(outputFileOperation->getInputSocket(1));
- graph->addOperation(outputFileOperation);
- addPreviewOperation(graph,
outputFileOperation->getInputSocket(0), 5);
-// }
- } else {
- addPreviewOperation(graph,
imageSocket->getOperation()->getOutputSocket(), 5);
+ NodeImageMultiFile* storage =
(NodeImageMultiFile*)this->getbNode()->storage;
+
+ if (!context->isRendering()) {
+ /* XXX TODO as in previous implementation?
+ * add dummy operations and exit, to prevent file writing on
each compo update.
+ */
+ }
+
+ if (storage->format.imtype==R_IMF_IMTYPE_MULTILAYER) {
+ /* single output operation for the multilayer file */
+ OutputOpenExrMultiLayerOperation *outputOperation = new
OutputOpenExrMultiLayerOperation(
+ context->getScene(), context->getbNodeTree(),
storage->base_path, storage->format.exr_codec);
+
+ int num_inputs = getNumberOfInputSockets();
+ for (int i=0; i < num_inputs; ++i) {
+ InputSocket *input = getInputSocket(i);
+ if (input->isConnected()) {
+ NodeImageMultiFileSocket *sockdata =
(NodeImageMultiFileSocket *)input->getbNodeSocket()->storage;
+
+ outputOperation->add_layer(sockdata->path,
input->getDataType());
+
+
input->relinkConnections(outputOperation->getInputSocket(i));
+ }
}
+ if (num_inputs>0) addPreviewOperation(graph,
outputOperation->getInputSocket(0), 5);
+
+ graph->addOperation(outputOperation);
}
+ else { /* single layer format */
+ int num_inputs = getNumberOfInputSockets();
+ bool previewAdded = false;
+ for (int i=0; i < num_inputs; ++i) {
+ InputSocket *input = getInputSocket(i);
+ if (input->isConnected()) {
+ NodeImageMultiFileSocket *sockdata =
(NodeImageMultiFileSocket *)input->getbNodeSocket()->storage;
+ ImageFormatData *format =
(sockdata->use_node_format ? &storage->format : &sockdata->format);
+ char path[FILE_MAX];
+
+ /* combine file path for the input */
+ BLI_join_dirfile(path, FILE_MAX,
storage->base_path, sockdata->path);
+
+ OutputSingleLayerOperation *outputOperation =
new OutputSingleLayerOperation(
+ context->getScene(),
context->getbNodeTree(), input->getActualDataType(), format, path);
+
input->relinkConnections(outputOperation->getInputSocket(0));
+ graph->addOperation(outputOperation);
+ if (!previewAdded) {
+ addPreviewOperation(graph,
outputOperation->getInputSocket(0), 5);
+ previewAdded = true;
+ }
+ }
+ }
+ }
}
+#endif
Modified: branches/tile/source/blender/compositor/nodes/COM_OutputFileNode.h
===================================================================
--- branches/tile/source/blender/compositor/nodes/COM_OutputFileNode.h
2012-05-11 08:06:01 UTC (rev 46542)
+++ branches/tile/source/blender/compositor/nodes/COM_OutputFileNode.h
2012-05-11 09:08:58 UTC (rev 46543)
@@ -18,6 +18,7 @@
* Contributor:
* Jeroen Bakker
* Monique Dewanchand
+ * Lukas Tönne
*/
#ifndef _COM_OutputFileNode_h
@@ -25,6 +26,7 @@
#include "COM_Node.h"
#include "DNA_node_types.h"
+#ifdef COM_TRUNK
/**
* @brief OutputFileNode
* @ingroup Node
@@ -35,3 +37,4 @@
void convertToOperations(ExecutionSystem *graph, CompositorContext *
context);
};
#endif
+#endif
Modified:
branches/tile/source/blender/compositor/operations/COM_MultilayerImageOperation.cpp
===================================================================
---
branches/tile/source/blender/compositor/operations/COM_MultilayerImageOperation.cpp
2012-05-11 08:06:01 UTC (rev 46542)
+++
branches/tile/source/blender/compositor/operations/COM_MultilayerImageOperation.cpp
2012-05-11 09:08:58 UTC (rev 46543)
@@ -18,6 +18,7 @@
* Contributor:
* Jeroen Bakker
* Monique Dewanchand
+ * Lukas Tönne
*/
#include "COM_MultilayerImageOperation.h"
Modified:
branches/tile/source/blender/compositor/operations/COM_MultilayerImageOperation.h
===================================================================
---
branches/tile/source/blender/compositor/operations/COM_MultilayerImageOperation.h
2012-05-11 08:06:01 UTC (rev 46542)
+++
branches/tile/source/blender/compositor/operations/COM_MultilayerImageOperation.h
2012-05-11 09:08:58 UTC (rev 46543)
@@ -18,6 +18,7 @@
* Contributor:
* Jeroen Bakker
* Monique Dewanchand
+ * Lukas Tönne
*/
Modified:
branches/tile/source/blender/compositor/operations/COM_OutputFileOperation.cpp
===================================================================
---
branches/tile/source/blender/compositor/operations/COM_OutputFileOperation.cpp
2012-05-11 08:06:01 UTC (rev 46542)
+++
branches/tile/source/blender/compositor/operations/COM_OutputFileOperation.cpp
2012-05-11 09:08:58 UTC (rev 46543)
@@ -18,11 +18,15 @@
* Contributor:
* Jeroen Bakker
* Monique Dewanchand
+ * Lukas Tönne
*/
#include "COM_OutputFileOperation.h"
#include "COM_SocketConnection.h"
+#include <string.h>
#include "BLI_listbase.h"
+#include "BLI_path_util.h"
+#include "BLI_string.h"
#include "DNA_scene_types.h"
#include "BKE_image.h"
#include "BKE_global.h"
@@ -34,100 +38,218 @@
#include "IMB_imbuf_types.h"
}
+#ifdef COM_TRUNK
+static int get_datatype_size(DataType datatype)
+{
+ switch (datatype) {
+ case COM_DT_VALUE: return 1;
+ case COM_DT_VECTOR: return 3;
+ case COM_DT_COLOR: return 4;
+ default: return 0;
+ }
+}
-OutputFileOperation::OutputFileOperation() : NodeOperation() {
- this->addInputSocket(COM_DT_COLOR);
- this->addInputSocket(COM_DT_VALUE);
+static float *init_buffer(unsigned int width, unsigned int height, DataType
datatype) {
+ // When initializing the tree during initial load the width and height
can be zero.
+ if (width != 0 && height != 0) {
+ int size = get_datatype_size(datatype);
+ return (float *)MEM_callocN(width*height*size*sizeof(float),
"OutputFile buffer");
+ }
+ else
+ return NULL;
+}
- this->setScene(NULL);
+static void write_buffer_rect(rcti *rect, MemoryBuffer** memoryBuffers, const
bNodeTree *tree,
+ SocketReader *reader, float* buffer, unsigned
int width, DataType datatype)
+{
+ float color[4];
+ int i, size = get_datatype_size(datatype);
+
+ if (!buffer) return;
+ int x1 = rect->xmin;
+ int y1 = rect->ymin;
+ int x2 = rect->xmax;
+ int y2 = rect->ymax;
+ int offset = (y1*width + x1 ) * size;
+ int x;
+ int y;
+ bool breaked = false;
+
+ for (y = y1 ; y < y2 && (!breaked); y++) {
+ for (x = x1 ; x < x2 && (!breaked) ; x++) {
+ reader->read(color, x, y, COM_PS_NEAREST,
memoryBuffers);
+
+ for (i=0; i < size; ++i)
+ buffer[offset+i] = color[i];
+ offset += size;
+
+ if (tree->test_break && tree->test_break(tree->tbh))
+ breaked = true;
+ }
+ offset += (width-(x2-x1)) * size;
+ }
+}
+
+
+OutputSingleLayerOperation::OutputSingleLayerOperation(
+ const Scene *scene, const bNodeTree *tree, DataType datatype,
ImageFormatData *format, const char *path)
+{
+ this->scene = scene;
+ this->tree = tree;
+
+ this->addInputSocket(datatype);
+
this->outputBuffer = NULL;
- this->zBuffer = NULL;
+ this->datatype = datatype;
this->imageInput = NULL;
- this->zInput = NULL;
+
+ this->format = format;
+ BLI_strncpy(this->path, path, sizeof(this->path));
}
-void OutputFileOperation::initExecution() {
- // When initializing the tree during initial load the width and height
can be zero.
+void OutputSingleLayerOperation::initExecution() {
this->imageInput = getInputSocketReader(0);
@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs