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;
|
b_rlay = *b_iter;
|
||||||
|
|
||||||
/* add passes */
|
/* add passes */
|
||||||
|
vector<Pass> passes;
|
||||||
|
Pass::add(PASS_COMBINED, passes);
|
||||||
|
|
||||||
if(session_params.device.type == DEVICE_CPU) { /* todo */
|
if(session_params.device.type == DEVICE_CPU) { /* todo */
|
||||||
BL::RenderLayer::passes_iterator b_pass_iter;
|
BL::RenderLayer::passes_iterator b_pass_iter;
|
||||||
|
|
||||||
@ -211,12 +214,13 @@ void BlenderSession::render()
|
|||||||
PassType pass_type = get_pass_type(b_pass);
|
PassType pass_type = get_pass_type(b_pass);
|
||||||
|
|
||||||
if(pass_type != PASS_NONE)
|
if(pass_type != PASS_NONE)
|
||||||
Pass::add(pass_type, buffer_params.passes);
|
Pass::add(pass_type, passes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
scene->film->passes = buffer_params.passes;
|
buffer_params.passes = passes;
|
||||||
scene->film->need_update = true;
|
scene->film->passes = passes;
|
||||||
|
scene->film->tag_update(scene);
|
||||||
|
|
||||||
/* update session */
|
/* update session */
|
||||||
session->reset(buffer_params, session_params.samples);
|
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;
|
*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,
|
__device void kernel_write_data_passes(KernelGlobals *kg, __global float *buffer, PathRadiance *L,
|
||||||
ShaderData *sd, int sample, int path_flag, float3 throughput)
|
ShaderData *sd, int sample, int path_flag, float3 throughput)
|
||||||
{
|
{
|
||||||
|
@ -377,8 +377,6 @@ __device void kernel_path_trace(KernelGlobals *kg,
|
|||||||
rng_state += index;
|
rng_state += index;
|
||||||
buffer += index*pass_stride;
|
buffer += index*pass_stride;
|
||||||
|
|
||||||
kernel_clear_passes(buffer, sample, pass_stride);
|
|
||||||
|
|
||||||
/* initialize random numbers */
|
/* initialize random numbers */
|
||||||
RNG rng;
|
RNG rng;
|
||||||
|
|
||||||
|
@ -157,10 +157,17 @@ bool RenderBuffers::get_pass(PassType type, float exposure, int sample, int comp
|
|||||||
assert(pass.components == components);
|
assert(pass.components == components);
|
||||||
|
|
||||||
/* scalar */
|
/* scalar */
|
||||||
for(int i = 0; i < size; i++, in += pass_stride, pixels++) {
|
if(type == PASS_DEPTH) {
|
||||||
float f = *in;
|
for(int i = 0; i < size; i++, in += pass_stride, pixels++) {
|
||||||
|
float f = *in;
|
||||||
pixels[0] = f*scale_exposure;
|
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) {
|
else if(components == 3) {
|
||||||
|
Loading…
Reference in New Issue
Block a user