[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [45721] branches/tile/source/blender/ compositor: TileBranch
Jeroen Bakker
j.bakker at atmind.nl
Tue Apr 17 19:48:45 CEST 2012
Revision: 45721
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45721
Author: jbakker
Date: 2012-04-17 17:48:45 +0000 (Tue, 17 Apr 2012)
Log Message:
-----------
TileBranch
* Cycles layers
* OpenEXR support
Modified Paths:
--------------
branches/tile/source/blender/compositor/CMakeLists.txt
branches/tile/source/blender/compositor/nodes/COM_ImageNode.cpp
branches/tile/source/blender/compositor/nodes/COM_ImageNode.h
branches/tile/source/blender/compositor/operations/COM_ImageOperation.cpp
branches/tile/source/blender/compositor/operations/COM_ImageOperation.h
branches/tile/source/blender/compositor/operations/COM_RenderLayersCyclesOperation.cpp
Added Paths:
-----------
branches/tile/source/blender/compositor/operations/COM_MultilayerImageOperation.cpp
branches/tile/source/blender/compositor/operations/COM_MultilayerImageOperation.h
Modified: branches/tile/source/blender/compositor/CMakeLists.txt
===================================================================
--- branches/tile/source/blender/compositor/CMakeLists.txt 2012-04-17 17:25:10 UTC (rev 45720)
+++ branches/tile/source/blender/compositor/CMakeLists.txt 2012-04-17 17:48:45 UTC (rev 45721)
@@ -364,6 +364,8 @@
operations/COM_ImageOperation.cpp
operations/COM_ImageOperation.h
+operations/COM_MultilayerImageOperation.cpp
+operations/COM_MultilayerImageOperation.h
operations/COM_TextureOperation.cpp
operations/COM_TextureOperation.h
operations/COM_BokehImageOperation.cpp
Modified: branches/tile/source/blender/compositor/nodes/COM_ImageNode.cpp
===================================================================
--- branches/tile/source/blender/compositor/nodes/COM_ImageNode.cpp 2012-04-17 17:25:10 UTC (rev 45720)
+++ branches/tile/source/blender/compositor/nodes/COM_ImageNode.cpp 2012-04-17 17:48:45 UTC (rev 45721)
@@ -23,17 +23,51 @@
#include "COM_ImageNode.h"
#include "COM_ExecutionSystem.h"
#include "COM_ImageOperation.h"
+#include "COM_MultilayerImageOperation.h"
+#include "BKE_node.h"
ImageNode::ImageNode(bNode *editorNode): Node(editorNode) {
}
+void ImageNode::doMultilayerCheck(ExecutionSystem *system, RenderLayer* rl, Image* image, ImageUser* user, int framenumber, int outputsocketIndex, int pass, DataType datatype) {
+ OutputSocket *outputSocket = this->getOutputSocket(outputsocketIndex);
+ if (outputSocket->isConnected()) {
+ MultilayerBaseOperation * operation = NULL;
+ switch (datatype) {
+ case COM_DT_VALUE:
+ operation = new MultilayerValueOperation(pass);
+ break;
+ case COM_DT_VECTOR:
+ operation = new MultilayerVectorOperation(pass);
+ break;
+ case COM_DT_COLOR:
+ operation = new MultilayerColorOperation(pass);
+ break;
+ }
+ operation->setImage(image);
+ operation->setRenderLayer(rl);
+ operation->setImageUser(user);
+ operation->setFramenumber(framenumber);
+ outputSocket->relinkConnections(operation->getOutputSocket());
+ system->addOperation(operation);
+ }
+}
+
void ImageNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context) {
/// Image output
OutputSocket *outputImage = this->getOutputSocket(0);
bNode *editorNode = this->getbNode();
Image *image = (Image*)editorNode->id;
ImageUser *imageuser = (ImageUser*)editorNode->storage;
+ int framenumber = context->getFramenumber();
+ /* first set the right frame number in iuser */
+ BKE_image_user_calc_frame(imageuser, framenumber, 0);
+
+ /* force a load, we assume iuser index will be set OK anyway */
+ if(image && image->type==IMA_TYPE_MULTILAYER) {
+ BKE_image_get_ibuf(image, imageuser);
+ }
ImageOperation *operation = new ImageOperation();
if (outputImage->isConnected()) {
@@ -41,7 +75,7 @@
}
operation->setImage(image);
operation->setImageUser(imageuser);
- operation->setFramenumber(context->getFramenumber());
+ operation->setFramenumber(framenumber);
graph->addOperation(operation);
addPreviewOperation(graph, operation->getOutputSocket(), 9);
@@ -50,9 +84,39 @@
ImageAlphaOperation *alphaOperation = new ImageAlphaOperation();
alphaOperation->setImage(image);
alphaOperation->setImageUser(imageuser);
- alphaOperation->setFramenumber(context->getFramenumber());
+ alphaOperation->setFramenumber(framenumber);
alphaImage->relinkConnections(alphaOperation->getOutputSocket());
graph->addOperation(alphaOperation);
}
- /// @todo: ImageZOperation
+
+ if(image && image->type==IMA_TYPE_MULTILAYER && image->rr) {
+ RenderLayer *rl= (RenderLayer*)BLI_findlink(&image->rr->layers, imageuser->layer);
+
+ doMultilayerCheck(graph, rl, image, imageuser, framenumber, RRES_OUT_Z, SCE_PASS_Z, COM_DT_VALUE);
+ doMultilayerCheck(graph, rl, image, imageuser, framenumber, RRES_OUT_VEC, SCE_PASS_VECTOR, COM_DT_COLOR);
+ doMultilayerCheck(graph, rl, image, imageuser, framenumber, RRES_OUT_NORMAL, SCE_PASS_NORMAL, COM_DT_VECTOR);
+ doMultilayerCheck(graph, rl, image, imageuser, framenumber, RRES_OUT_UV, SCE_PASS_UV, COM_DT_VECTOR);
+ doMultilayerCheck(graph, rl, image, imageuser, framenumber, RRES_OUT_RGBA, SCE_PASS_RGBA, COM_DT_COLOR);
+ doMultilayerCheck(graph, rl, image, imageuser, framenumber, RRES_OUT_DIFF, SCE_PASS_DIFFUSE, COM_DT_COLOR);
+ doMultilayerCheck(graph, rl, image, imageuser, framenumber, RRES_OUT_SPEC, SCE_PASS_SPEC, COM_DT_COLOR);
+ doMultilayerCheck(graph, rl, image, imageuser, framenumber, RRES_OUT_SHADOW, SCE_PASS_SHADOW, COM_DT_COLOR);
+ doMultilayerCheck(graph, rl, image, imageuser, framenumber, RRES_OUT_AO, SCE_PASS_AO, COM_DT_COLOR);
+ doMultilayerCheck(graph, rl, image, imageuser, framenumber, RRES_OUT_REFLECT, SCE_PASS_REFLECT, COM_DT_COLOR);
+ doMultilayerCheck(graph, rl, image, imageuser, framenumber, RRES_OUT_REFRACT, SCE_PASS_REFRACT, COM_DT_COLOR);
+ doMultilayerCheck(graph, rl, image, imageuser, framenumber, RRES_OUT_INDIRECT, SCE_PASS_INDIRECT, COM_DT_COLOR);
+ doMultilayerCheck(graph, rl, image, imageuser, framenumber, RRES_OUT_INDEXOB, SCE_PASS_INDEXOB, COM_DT_VALUE);
+ doMultilayerCheck(graph, rl, image, imageuser, framenumber, RRES_OUT_INDEXMA, SCE_PASS_INDEXMA, COM_DT_VALUE);
+ doMultilayerCheck(graph, rl, image, imageuser, framenumber, RRES_OUT_MIST, SCE_PASS_MIST, COM_DT_COLOR);
+ doMultilayerCheck(graph, rl, image, imageuser, framenumber, RRES_OUT_EMIT, SCE_PASS_EMIT, COM_DT_COLOR);
+ doMultilayerCheck(graph, rl, image, imageuser, framenumber, RRES_OUT_ENV, SCE_PASS_ENVIRONMENT, COM_DT_COLOR);
+ doMultilayerCheck(graph, rl, image, imageuser, framenumber, RRES_OUT_DIFF_DIRECT, SCE_PASS_DIFFUSE_DIRECT, COM_DT_COLOR);
+ doMultilayerCheck(graph, rl, image, imageuser, framenumber, RRES_OUT_DIFF_INDIRECT, SCE_PASS_DIFFUSE_INDIRECT, COM_DT_COLOR);
+ doMultilayerCheck(graph, rl, image, imageuser, framenumber, RRES_OUT_DIFF_COLOR, SCE_PASS_DIFFUSE_COLOR, COM_DT_COLOR);
+ doMultilayerCheck(graph, rl, image, imageuser, framenumber, RRES_OUT_GLOSSY_DIRECT, SCE_PASS_GLOSSY_DIRECT, COM_DT_COLOR);
+ doMultilayerCheck(graph, rl, image, imageuser, framenumber, RRES_OUT_GLOSSY_INDIRECT, SCE_PASS_GLOSSY_INDIRECT, COM_DT_COLOR);
+ doMultilayerCheck(graph, rl, image, imageuser, framenumber, RRES_OUT_GLOSSY_COLOR, SCE_PASS_GLOSSY_COLOR, COM_DT_COLOR);
+ doMultilayerCheck(graph, rl, image, imageuser, framenumber, RRES_OUT_TRANSM_DIRECT, SCE_PASS_TRANSM_DIRECT, COM_DT_COLOR);
+ doMultilayerCheck(graph, rl, image, imageuser, framenumber, RRES_OUT_TRANSM_INDIRECT, SCE_PASS_TRANSM_INDIRECT, COM_DT_COLOR);
+ doMultilayerCheck(graph, rl, image, imageuser, framenumber, RRES_OUT_TRANSM_COLOR, SCE_PASS_TRANSM_COLOR, COM_DT_COLOR);
+ }
}
Modified: branches/tile/source/blender/compositor/nodes/COM_ImageNode.h
===================================================================
--- branches/tile/source/blender/compositor/nodes/COM_ImageNode.h 2012-04-17 17:25:10 UTC (rev 45720)
+++ branches/tile/source/blender/compositor/nodes/COM_ImageNode.h 2012-04-17 17:48:45 UTC (rev 45721)
@@ -23,6 +23,9 @@
#include "COM_Node.h"
#include "DNA_node_types.h"
#include "DNA_image_types.h"
+extern "C" {
+#include "RE_engine.h"
+}
/**
* @brief ImageNode
@@ -30,7 +33,8 @@
*/
class ImageNode : public Node {
-
+private:
+ void doMultilayerCheck(ExecutionSystem *system, RenderLayer* rl, Image* image, ImageUser* user, int framenumber, int outputsocketIndex, int pass, DataType datatype);
public:
ImageNode(bNode* editorNode);
void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
Modified: branches/tile/source/blender/compositor/operations/COM_ImageOperation.cpp
===================================================================
--- branches/tile/source/blender/compositor/operations/COM_ImageOperation.cpp 2012-04-17 17:25:10 UTC (rev 45720)
+++ branches/tile/source/blender/compositor/operations/COM_ImageOperation.cpp 2012-04-17 17:48:45 UTC (rev 45721)
@@ -44,6 +44,7 @@
this->imagewidth = 0;
this->imageheight = 0;
this->framenumber = 0;
+ this->numberOfChannels = 0;
}
ImageOperation::ImageOperation(): BaseImageOperation() {
this->addOutputSocket(COM_DT_COLOR);
@@ -52,30 +53,30 @@
this->addOutputSocket(COM_DT_VALUE);
}
-static ImBuf *node_composit_get_image(Image *ima, ImageUser *iuser)
-{
- ImBuf *ibuf;
+ImBuf* BaseImageOperation::getImBuf() {
+ ImBuf *ibuf;
+
+ ibuf= BKE_image_get_ibuf(this->image, this->imageUser);
+ if(ibuf==NULL || (ibuf->rect==NULL && ibuf->rect_float==NULL)) {
+ return NULL;
+ }
+
+ if (ibuf->rect_float == NULL) {
+ IMB_float_from_rect(ibuf);
+ }
+ return ibuf;
+}
- ibuf= BKE_image_get_ibuf(ima, iuser);
- if(ibuf==NULL || (ibuf->rect==NULL && ibuf->rect_float==NULL)) {
- return NULL;
- }
- if (ibuf->rect_float == NULL) {
- IMB_float_from_rect(ibuf);
- }
-
- return ibuf;
-}
-
void BaseImageOperation::initExecution() {
BKE_image_user_calc_frame(this->imageUser, this->framenumber, 0);
- ImBuf *stackbuf= node_composit_get_image(this->image, this->imageUser);
+ ImBuf *stackbuf= getImBuf();
this->buffer = stackbuf;
if (stackbuf) {
this->imageBuffer = stackbuf->rect_float;
this->imagewidth = stackbuf->x;
this->imageheight = stackbuf->y;
+ this->numberOfChannels = stackbuf->channels;
}
}
@@ -84,12 +85,12 @@
}
void BaseImageOperation::determineResolution(unsigned int resolution[], unsigned int preferredResolution[]) {
- BKE_image_user_calc_frame(this->imageUser, 0, 0);
- ImBuf *stackbuf= node_composit_get_image(this->image, this->imageUser);
- if (stackbuf) {
- resolution[0] = stackbuf->x;
- resolution[1] = stackbuf->y;
- }
+ BKE_image_user_calc_frame(this->imageUser, 0, 0);
+ ImBuf *stackbuf= getImBuf();
+ if (stackbuf) {
+ resolution[0] = stackbuf->x;
+ resolution[1] = stackbuf->y;
+ }
}
void ImageOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]) {
Modified: branches/tile/source/blender/compositor/operations/COM_ImageOperation.h
===================================================================
--- branches/tile/source/blender/compositor/operations/COM_ImageOperation.h 2012-04-17 17:25:10 UTC (rev 45720)
+++ branches/tile/source/blender/compositor/operations/COM_ImageOperation.h 2012-04-17 17:48:45 UTC (rev 45721)
@@ -49,12 +49,15 @@
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list