Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2012-01-26 18:55:25 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2012-01-26 18:55:25 +0400
commitf8bddbd347e7ded7a14187ca96b69dfec70c20cd (patch)
tree28b5c642d3496cd40545f766d444017ae2934c01 /intern/cycles
parent331c235d93ef77bce3c5d5b668d433bfbb75ca88 (diff)
Cycles: fix issues rendering second render layer passes, and avoid unnecessary
clear of buffer.
Diffstat (limited to 'intern/cycles')
-rw-r--r--intern/cycles/blender/blender_session.cpp10
-rw-r--r--intern/cycles/kernel/kernel_passes.h9
-rw-r--r--intern/cycles/kernel/kernel_path.h2
-rw-r--r--intern/cycles/render/buffers.cpp15
4 files changed, 18 insertions, 18 deletions
diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp
index ff1c32831bb..5e3102fd7c7 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -203,6 +203,9 @@ void BlenderSession::render()
b_rlay = *b_iter;
/* add passes */
+ vector<Pass> passes;
+ Pass::add(PASS_COMBINED, passes);
+
if(session_params.device.type == DEVICE_CPU) { /* todo */
BL::RenderLayer::passes_iterator b_pass_iter;
@@ -211,12 +214,13 @@ void BlenderSession::render()
PassType pass_type = get_pass_type(b_pass);
if(pass_type != PASS_NONE)
- Pass::add(pass_type, buffer_params.passes);
+ Pass::add(pass_type, passes);
}
}
- scene->film->passes = buffer_params.passes;
- scene->film->need_update = true;
+ buffer_params.passes = passes;
+ scene->film->passes = passes;
+ scene->film->tag_update(scene);
/* update session */
session->reset(buffer_params, session_params.samples);
diff --git a/intern/cycles/kernel/kernel_passes.h b/intern/cycles/kernel/kernel_passes.h
index 0e775812eda..9a568229b17 100644
--- a/intern/cycles/kernel/kernel_passes.h
+++ b/intern/cycles/kernel/kernel_passes.h
@@ -36,15 +36,6 @@ __device_inline void kernel_write_pass_float4(__global float *buffer, int sample
*buf = (sample == 0)? value: *buf + value;
}
-__device_inline void kernel_clear_passes(__global float *buffer, int sample, int pass_stride)
-{
-#ifdef __PASSES__
- if(sample == 0 && pass_stride != 4)
- for(int i = 4; i < pass_stride; i++)
- buffer[i] = 0.0f;
-#endif
-}
-
__device void kernel_write_data_passes(KernelGlobals *kg, __global float *buffer, PathRadiance *L,
ShaderData *sd, int sample, int path_flag, float3 throughput)
{
diff --git a/intern/cycles/kernel/kernel_path.h b/intern/cycles/kernel/kernel_path.h
index c0bfa320405..aad7050ed1b 100644
--- a/intern/cycles/kernel/kernel_path.h
+++ b/intern/cycles/kernel/kernel_path.h
@@ -377,8 +377,6 @@ __device void kernel_path_trace(KernelGlobals *kg,
rng_state += index;
buffer += index*pass_stride;
- kernel_clear_passes(buffer, sample, pass_stride);
-
/* initialize random numbers */
RNG rng;
diff --git a/intern/cycles/render/buffers.cpp b/intern/cycles/render/buffers.cpp
index 08dda944111..56219482ef0 100644
--- a/intern/cycles/render/buffers.cpp
+++ b/intern/cycles/render/buffers.cpp
@@ -157,10 +157,17 @@ bool RenderBuffers::get_pass(PassType type, float exposure, int sample, int comp
assert(pass.components == components);
/* scalar */
- for(int i = 0; i < size; i++, in += pass_stride, pixels++) {
- float f = *in;
-
- pixels[0] = f*scale_exposure;
+ if(type == PASS_DEPTH) {
+ for(int i = 0; i < size; i++, in += pass_stride, pixels++) {
+ float f = *in;
+ pixels[0] = (f == 0.0f)? 1e10f: f*scale_exposure;
+ }
+ }
+ else {
+ for(int i = 0; i < size; i++, in += pass_stride, pixels++) {
+ float f = *in;
+ pixels[0] = f*scale_exposure;
+ }
}
}
else if(components == 3) {