Fix T48162: GPU render gives wrong results in certain volume setups

ideally this part of code should be de-duplicated across __VOLUME_INTERSECT_ALL
and regular code.
This commit is contained in:
Sergey Sharybin
2016-04-20 13:49:54 +02:00
parent 4cdd6b9bdd
commit b9d9d93ff9

View File

@@ -1061,14 +1061,23 @@ ccl_device void kernel_volume_stack_init(KernelGlobals *kg,
/* If ray exited the volume and never entered to that volume /* If ray exited the volume and never entered to that volume
* it means that camera is inside such a volume. * it means that camera is inside such a volume.
*/ */
bool is_enclosed = false; bool need_add = true;
for(int i = 0; i < enclosed_index; ++i) { for(int i = 0; i < enclosed_index && need_add; ++i) {
/* If ray exited the volume and never entered to that volume
* it means that camera is inside such a volume.
*/
if(enclosed_volumes[i] == sd.object) { if(enclosed_volumes[i] == sd.object) {
is_enclosed = true; need_add = false;
}
}
for(int i = 0; i < stack_index && need_add; ++i) {
/* Don't add intersections twice. */
if(stack[i].object == sd.object) {
need_add = false;
break; break;
} }
} }
if(is_enclosed == false) { if(need_add) {
stack[stack_index].object = sd.object; stack[stack_index].object = sd.object;
stack[stack_index].shader = sd.shader; stack[stack_index].shader = sd.shader;
++stack_index; ++stack_index;