[Bf-blender-cvs] [45b46cf] openvdb: Setup a texture with volume shaders.
Kévin Dietrich
noreply at git.blender.org
Sun Nov 13 21:44:15 CET 2016
Commit: 45b46cfbe32bff9efa1ae94b454669bb1165663c
Author: Kévin Dietrich
Date: Sun Feb 28 08:31:24 2016 +0100
Branches: openvdb
https://developer.blender.org/rB45b46cfbe32bff9efa1ae94b454669bb1165663c
Setup a texture with volume shaders.
===================================================================
M intern/cycles/kernel/kernel_shader.h
M intern/cycles/kernel/kernel_textures.h
M intern/cycles/render/scene.h
M intern/cycles/render/volume.cpp
===================================================================
diff --git a/intern/cycles/kernel/kernel_shader.h b/intern/cycles/kernel/kernel_shader.h
index a575dba..5682769 100644
--- a/intern/cycles/kernel/kernel_shader.h
+++ b/intern/cycles/kernel/kernel_shader.h
@@ -110,7 +110,7 @@ ccl_device_noinline void shader_setup_from_ray(KernelGlobals *kg,
#endif
}
else if(ccl_fetch(sd, type) & PRIMITIVE_VOLUME) {
- // ccl_fetch(sd, shader) = kernel_tex_fetch(__vol_shader, ccl_fetch(sd, prim));
+ ccl_fetch(sd, shader) = kernel_tex_fetch(__vol_shader, ccl_fetch(sd, prim));
}
else {
/* motion triangle */
diff --git a/intern/cycles/kernel/kernel_textures.h b/intern/cycles/kernel/kernel_textures.h
index 24cb1c3..cb76a17 100644
--- a/intern/cycles/kernel/kernel_textures.h
+++ b/intern/cycles/kernel/kernel_textures.h
@@ -72,6 +72,9 @@ KERNEL_TEX(float, texture_float, __lookup_table)
/* sobol */
KERNEL_TEX(uint, texture_uint, __sobol_directions)
+/* volume */
+KERNEL_TEX(uint, texture_uint, __vol_shader)
+
/* full-float image */
KERNEL_IMAGE_TEX(float4, texture_image_float4, __tex_image_float_000)
KERNEL_IMAGE_TEX(float4, texture_image_float4, __tex_image_float_001)
diff --git a/intern/cycles/render/scene.h b/intern/cycles/render/scene.h
index d5f7a86..cb13ab8 100644
--- a/intern/cycles/render/scene.h
+++ b/intern/cycles/render/scene.h
@@ -118,6 +118,9 @@ public:
device_vector<uchar4> tex_image_packed;
device_vector<uint4> tex_image_packed_info;
+ /* volume */
+ device_vector<uint> vol_shader;
+
KernelData data;
};
diff --git a/intern/cycles/render/volume.cpp b/intern/cycles/render/volume.cpp
index 945e9b3..9ca1a52 100644
--- a/intern/cycles/render/volume.cpp
+++ b/intern/cycles/render/volume.cpp
@@ -466,7 +466,7 @@ void VolumeManager::update_svm_attributes(Device *device, DeviceScene *dscene, S
device->tex_alloc("__attributes_map", dscene->attributes_map);
}
-void VolumeManager::device_update(Device *device, DeviceScene *dscene, Scene */*scene*/, Progress& progress)
+void VolumeManager::device_update(Device *device, DeviceScene *dscene, Scene *scene, Progress& progress)
{
if(!need_update) {
return;
@@ -475,6 +475,9 @@ void VolumeManager::device_update(Device *device, DeviceScene *dscene, Scene */*
device_free(device, dscene);
progress.set_status("Updating OpenVDB volumes", "Sending volumes to device.");
+ uint *vol_shader = dscene->vol_shader.resize(num_float_volume + num_float3_volume);
+ int s = 0;
+
for (size_t i = 0; i < volumes.size(); ++i) {
Volume *volume = volumes[i];
@@ -482,13 +485,17 @@ void VolumeManager::device_update(Device *device, DeviceScene *dscene, Scene */*
if(!volume->float_fields[i]) {
continue;
}
+
device->const_copy_to("__float_volume", volume->float_fields[i], i);
+ vol_shader[s++] = scene->shader_manager->get_shader_id(volume->used_shaders[0], NULL, false);
}
for(size_t i = 0; i < volume->float3_fields.size(); ++i) {
if(!volume->float3_fields[i]) {
continue;
}
+
+ vol_shader[s++] = scene->shader_manager->get_shader_id(volume->used_shaders[0], NULL, false);
device->const_copy_to("__float3_volume", volume->float3_fields[i], i);
}
@@ -497,6 +504,8 @@ void VolumeManager::device_update(Device *device, DeviceScene *dscene, Scene */*
}
}
+ device->tex_alloc("__vol_shader", dscene->vol_shader);
+
#if 0
for(size_t i = 0; i < float_volumes.size(); ++i) {
if(!float_volumes[i]) {
More information about the Bf-blender-cvs
mailing list