[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