forked from bartvdbraak/blender
Cycles: fix issues rendering second render layer passes, and avoid unnecessary
clear of buffer.
This commit is contained in:
parent
331c235d93
commit
f8bddbd347
@ -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,12 +157,19 @@ bool RenderBuffers::get_pass(PassType type, float exposure, int sample, int comp
|
||||
assert(pass.components == components);
|
||||
|
||||
/* scalar */
|
||||
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) {
|
||||
assert(pass.components == 4);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user