f4932568c1f9fb0a262d6f523a20512b2de66452
[blender.git] / intern / cycles / kernel / closure / volume.h
1 /*
2  * Copyright 2011-2013 Blender Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License
15  */
16
17 CCL_NAMESPACE_BEGIN
18
19 /* note: the interfaces here are just as an example, need to figure
20  * out the right functions and parameters to use */
21
22 /* ISOTROPIC VOLUME CLOSURE */
23
24 ccl_device int volume_isotropic_setup(ShaderClosure *sc, float density)
25 {
26         sc->type = CLOSURE_VOLUME_ISOTROPIC_ID;
27         sc->data0 = density;
28
29         return SD_VOLUME;
30 }
31
32 ccl_device float3 volume_isotropic_eval_phase(const ShaderClosure *sc, const float3 omega_in, const float3 omega_out)
33 {
34         return make_float3(1.0f, 1.0f, 1.0f);
35 }
36
37 /* TRANSPARENT VOLUME CLOSURE */
38
39 ccl_device int volume_transparent_setup(ShaderClosure *sc, float density)
40 {
41         sc->type = CLOSURE_VOLUME_TRANSPARENT_ID;
42         sc->data0 = density;
43
44         return SD_VOLUME;
45 }
46
47 ccl_device float3 volume_transparent_eval_phase(const ShaderClosure *sc, const float3 omega_in, const float3 omega_out)
48 {
49         return make_float3(1.0f, 1.0f, 1.0f);
50 }
51
52 /* VOLUME CLOSURE */
53
54 ccl_device float3 volume_eval_phase(KernelGlobals *kg, const ShaderClosure *sc, const float3 omega_in, const float3 omega_out)
55 {
56         float3 eval;
57
58         switch(sc->type) {
59                 case CLOSURE_VOLUME_ISOTROPIC_ID:
60                         eval = volume_isotropic_eval_phase(sc, omega_in, omega_out);
61                         break;
62                 case CLOSURE_VOLUME_TRANSPARENT_ID:
63                         eval = volume_transparent_eval_phase(sc, omega_in, omega_out);
64                         break;
65                 default:
66                         eval = make_float3(0.0f, 0.0f, 0.0f);
67                         break;
68         }
69
70         return eval;
71 }
72
73 CCL_NAMESPACE_END
74