Cycles: fix issues rendering second render layer passes, and avoid unnecessary

clear of buffer.
This commit is contained in:
Brecht Van Lommel 2012-01-26 14:55:25 +00:00
parent 331c235d93
commit f8bddbd347
4 changed files with 18 additions and 18 deletions

@ -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);

@ -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)
{

@ -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;

@ -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) {