Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/kernel/closure/bsdf_diffuse.h
| Show All 24 Lines | |||||
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||||
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||
| * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||
| * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||
| * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| */ | */ | ||||
| #ifndef __BSDF_DIFFUSE_H__ | #pragma once | ||||
| #define __BSDF_DIFFUSE_H__ | |||||
| CCL_NAMESPACE_BEGIN | CCL_NAMESPACE_BEGIN | ||||
| typedef ccl_addr_space struct DiffuseBsdf { | typedef ccl_addr_space struct DiffuseBsdf { | ||||
| SHADER_CLOSURE_BASE; | SHADER_CLOSURE_BASE; | ||||
| } DiffuseBsdf; | } DiffuseBsdf; | ||||
| static_assert(sizeof(ShaderClosure) >= sizeof(DiffuseBsdf), "DiffuseBsdf is too large!"); | static_assert(sizeof(ShaderClosure) >= sizeof(DiffuseBsdf), "DiffuseBsdf is too large!"); | ||||
| /* DIFFUSE */ | /* DIFFUSE */ | ||||
| ccl_device int bsdf_diffuse_setup(DiffuseBsdf *bsdf) | ccl_device int bsdf_diffuse_setup(DiffuseBsdf *bsdf) | ||||
| { | { | ||||
| bsdf->type = CLOSURE_BSDF_DIFFUSE_ID; | bsdf->type = CLOSURE_BSDF_DIFFUSE_ID; | ||||
| return SD_BSDF | SD_BSDF_HAS_EVAL; | return SD_BSDF | SD_BSDF_HAS_EVAL; | ||||
| } | } | ||||
| ccl_device bool bsdf_diffuse_merge(const ShaderClosure *a, const ShaderClosure *b) | |||||
| { | |||||
| const DiffuseBsdf *bsdf_a = (const DiffuseBsdf *)a; | |||||
| const DiffuseBsdf *bsdf_b = (const DiffuseBsdf *)b; | |||||
| return (isequal_float3(bsdf_a->N, bsdf_b->N)); | |||||
| } | |||||
| ccl_device float3 bsdf_diffuse_eval_reflect(const ShaderClosure *sc, | ccl_device float3 bsdf_diffuse_eval_reflect(const ShaderClosure *sc, | ||||
| const float3 I, | const float3 I, | ||||
| const float3 omega_in, | const float3 omega_in, | ||||
| float *pdf) | float *pdf) | ||||
| { | { | ||||
| const DiffuseBsdf *bsdf = (const DiffuseBsdf *)sc; | const DiffuseBsdf *bsdf = (const DiffuseBsdf *)sc; | ||||
| float3 N = bsdf->N; | float3 N = bsdf->N; | ||||
| ▲ Show 20 Lines • Show All 101 Lines • ▼ Show 20 Lines | #endif | ||||
| } | } | ||||
| else { | else { | ||||
| *pdf = 0; | *pdf = 0; | ||||
| } | } | ||||
| return LABEL_TRANSMIT | LABEL_DIFFUSE; | return LABEL_TRANSMIT | LABEL_DIFFUSE; | ||||
| } | } | ||||
| CCL_NAMESPACE_END | CCL_NAMESPACE_END | ||||
| #endif /* __BSDF_DIFFUSE_H__ */ | |||||