Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2013-11-29 05:09:24 +0400
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2013-11-29 07:01:07 +0400
commit746628e0d021fa616c69e9ff0ef9ad71cba23694 (patch)
tree4ca4b0e2d1aae189bc06df1a0b652ec5280a37aa
parentaa3933b411fc61d673facc6ea6f8cce6d86a3c6c (diff)
Cycles OSL: refactoring to remove all dependencies on builtin OSL closures.
These were removed in new OSL versions. We only used these as base classes, not using them at all simplifies the code a bit.
-rw-r--r--intern/cycles/kernel/closure/volume.h5
-rw-r--r--intern/cycles/kernel/kernel_shader.h5
-rw-r--r--intern/cycles/kernel/osl/background.cpp33
-rw-r--r--intern/cycles/kernel/osl/bsdf_diffuse_ramp.cpp18
-rw-r--r--intern/cycles/kernel/osl/bsdf_phong_ramp.cpp18
-rw-r--r--intern/cycles/kernel/osl/emissive.cpp15
-rw-r--r--intern/cycles/kernel/osl/osl_bssrdf.cpp34
-rw-r--r--intern/cycles/kernel/osl/osl_bssrdf.h8
-rw-r--r--intern/cycles/kernel/osl/osl_closures.cpp25
-rw-r--r--intern/cycles/kernel/osl/osl_closures.h55
-rw-r--r--intern/cycles/kernel/osl/osl_shader.cpp61
-rw-r--r--intern/cycles/kernel/osl/osl_shader.h5
12 files changed, 80 insertions, 202 deletions
diff --git a/intern/cycles/kernel/closure/volume.h b/intern/cycles/kernel/closure/volume.h
index f30b30c8c76..f4932568c1f 100644
--- a/intern/cycles/kernel/closure/volume.h
+++ b/intern/cycles/kernel/closure/volume.h
@@ -53,11 +53,6 @@ ccl_device float3 volume_transparent_eval_phase(const ShaderClosure *sc, const f
ccl_device float3 volume_eval_phase(KernelGlobals *kg, const ShaderClosure *sc, const float3 omega_in, const float3 omega_out)
{
-#ifdef __OSL__
- if(kg->osl && sc->prim)
- return OSLShader::volume_eval_phase(sc, omega_in, omega_out);
-#endif
-
float3 eval;
switch(sc->type) {
diff --git a/intern/cycles/kernel/kernel_shader.h b/intern/cycles/kernel/kernel_shader.h
index 77154ce3aef..dbc705ea791 100644
--- a/intern/cycles/kernel/kernel_shader.h
+++ b/intern/cycles/kernel/kernel_shader.h
@@ -764,11 +764,6 @@ ccl_device float3 shader_bssrdf_sum(ShaderData *sd, float3 *N_, float *texture_b
ccl_device float3 emissive_eval(KernelGlobals *kg, ShaderData *sd, ShaderClosure *sc)
{
-#ifdef __OSL__
- if(kg->osl && sc->prim)
- return OSLShader::emissive_eval(sd, sc);
-#endif
-
return emissive_simple_eval(sd->Ng, sd->I);
}
diff --git a/intern/cycles/kernel/osl/background.cpp b/intern/cycles/kernel/osl/background.cpp
index eed4446cddc..2facced0914 100644
--- a/intern/cycles/kernel/osl/background.cpp
+++ b/intern/cycles/kernel/osl/background.cpp
@@ -46,14 +46,9 @@ using namespace OSL;
/// to return a color in background shaders. No methods,
/// only the weight is taking into account
///
-class GenericBackgroundClosure : public OSL::BackgroundClosure {
+class GenericBackgroundClosure : public CClosurePrimitive {
public:
- GenericBackgroundClosure() {}
-
- void setup() {};
- size_t memsize() const { return sizeof(*this); }
- const char *name() const { return "background"; }
- void print_on(std::ostream &out) const { out << name() << " ()"; }
+ GenericBackgroundClosure() : CClosurePrimitive(Background) {}
};
/// Holdout closure
@@ -63,14 +58,9 @@ public:
/// point. No parameters, only the weight will be
/// used
///
-class HoldoutClosure : ClosurePrimitive {
+class HoldoutClosure : CClosurePrimitive {
public:
- HoldoutClosure () : ClosurePrimitive(Holdout) {}
-
- void setup() {};
- size_t memsize() const { return sizeof(*this); }
- const char *name() const { return "holdout"; }
- void print_on(std::ostream &out) const { out << name() << " ()"; }
+ HoldoutClosure () : CClosurePrimitive(Holdout) {}
};
/// ambient occlusion closure
@@ -79,14 +69,9 @@ public:
/// to return a color in ambient occlusion shaders. No methods,
/// only the weight is taking into account
///
-class AmbientOcclusionClosure : public ClosurePrimitive {
+class AmbientOcclusionClosure : public CClosurePrimitive {
public:
- AmbientOcclusionClosure () : ClosurePrimitive((ClosurePrimitive::Category)AmbientOcclusion) {}
-
- void setup() {};
- size_t memsize() const { return sizeof(*this); }
- const char *name() const { return "ambient_occlusion"; }
- void print_on(std::ostream &out) const { out << name() << " ()"; }
+ AmbientOcclusionClosure () : CClosurePrimitive(AmbientOcclusion) {}
};
ClosureParam *closure_background_params()
@@ -98,7 +83,7 @@ ClosureParam *closure_background_params()
return params;
}
-CLOSURE_PREPARE(closure_background_prepare, GenericBackgroundClosure)
+CCLOSURE_PREPARE(closure_background_prepare, GenericBackgroundClosure)
ClosureParam *closure_holdout_params()
{
@@ -108,7 +93,7 @@ ClosureParam *closure_holdout_params()
return params;
}
-CLOSURE_PREPARE(closure_holdout_prepare, HoldoutClosure)
+CCLOSURE_PREPARE(closure_holdout_prepare, HoldoutClosure)
ClosureParam *closure_ambient_occlusion_params()
{
@@ -119,7 +104,7 @@ ClosureParam *closure_ambient_occlusion_params()
return params;
}
-CLOSURE_PREPARE(closure_ambient_occlusion_prepare, AmbientOcclusionClosure)
+CCLOSURE_PREPARE(closure_ambient_occlusion_prepare, AmbientOcclusionClosure)
CCL_NAMESPACE_END
diff --git a/intern/cycles/kernel/osl/bsdf_diffuse_ramp.cpp b/intern/cycles/kernel/osl/bsdf_diffuse_ramp.cpp
index a320bea118a..0e8193aa68c 100644
--- a/intern/cycles/kernel/osl/bsdf_diffuse_ramp.cpp
+++ b/intern/cycles/kernel/osl/bsdf_diffuse_ramp.cpp
@@ -46,14 +46,10 @@ using namespace OSL;
class DiffuseRampClosure : public CBSDFClosure {
public:
- DiffuseRampClosure() : CBSDFClosure(LABEL_DIFFUSE) {}
Color3 colors[8];
float3 fcolors[8];
- size_t memsize() const { return sizeof(*this); }
- const char *name() const { return "diffuse_ramp"; }
-
- void setup()
+ DiffuseRampClosure() : CBSDFClosure(LABEL_DIFFUSE)
{
sc.prim = this;
m_shaderdata_flag = bsdf_diffuse_ramp_setup(&sc);
@@ -62,21 +58,11 @@ public:
fcolors[i] = TO_FLOAT3(colors[i]);
}
- bool mergeable(const ClosurePrimitive *other) const
- {
- return false;
- }
-
void blur(float roughness)
{
bsdf_diffuse_ramp_blur(&sc, roughness);
}
- void print_on(std::ostream &out) const
- {
- out << name() << " ((" << sc.N[0] << ", " << sc.N[1] << ", " << sc.N[2] << "))";
- }
-
float3 eval_reflect(const float3 &omega_out, const float3 &omega_in, float& pdf) const
{
return bsdf_diffuse_ramp_eval_reflect(&sc, fcolors, omega_out, omega_in, &pdf);
@@ -109,7 +95,7 @@ ClosureParam *closure_bsdf_diffuse_ramp_params()
return params;
}
-CLOSURE_PREPARE(closure_bsdf_diffuse_ramp_prepare, DiffuseRampClosure)
+CCLOSURE_PREPARE(closure_bsdf_diffuse_ramp_prepare, DiffuseRampClosure)
CCL_NAMESPACE_END
diff --git a/intern/cycles/kernel/osl/bsdf_phong_ramp.cpp b/intern/cycles/kernel/osl/bsdf_phong_ramp.cpp
index ef656ee7d5f..3c95bfc119e 100644
--- a/intern/cycles/kernel/osl/bsdf_phong_ramp.cpp
+++ b/intern/cycles/kernel/osl/bsdf_phong_ramp.cpp
@@ -45,14 +45,10 @@ using namespace OSL;
class PhongRampClosure : public CBSDFClosure {
public:
- PhongRampClosure() : CBSDFClosure(LABEL_GLOSSY) {}
Color3 colors[8];
float3 fcolors[8];
- size_t memsize() const { return sizeof(*this); }
- const char *name() const { return "phong_ramp"; }
-
- void setup()
+ PhongRampClosure() : CBSDFClosure(LABEL_GLOSSY)
{
sc.prim = this;
m_shaderdata_flag = bsdf_phong_ramp_setup(&sc);
@@ -61,21 +57,11 @@ public:
fcolors[i] = TO_FLOAT3(colors[i]);
}
- bool mergeable(const ClosurePrimitive *other) const
- {
- return false;
- }
-
void blur(float roughness)
{
bsdf_phong_ramp_blur(&sc, roughness);
}
- void print_on(std::ostream &out) const
- {
- out << name() << " ((" << sc.N[0] << ", " << sc.N[1] << ", " << sc.N[2] << "))";
- }
-
float3 eval_reflect(const float3 &omega_out, const float3 &omega_in, float& pdf) const
{
return bsdf_phong_ramp_eval_reflect(&sc, fcolors, omega_out, omega_in, &pdf);
@@ -109,7 +95,7 @@ ClosureParam *closure_bsdf_phong_ramp_params()
return params;
}
-CLOSURE_PREPARE(closure_bsdf_phong_ramp_prepare, PhongRampClosure)
+CCLOSURE_PREPARE(closure_bsdf_phong_ramp_prepare, PhongRampClosure)
CCL_NAMESPACE_END
diff --git a/intern/cycles/kernel/osl/emissive.cpp b/intern/cycles/kernel/osl/emissive.cpp
index 7d9fa81dbdd..02935542c56 100644
--- a/intern/cycles/kernel/osl/emissive.cpp
+++ b/intern/cycles/kernel/osl/emissive.cpp
@@ -50,18 +50,9 @@ using namespace OSL;
/// outer_angle limit. It can also behave as a lambertian emitter
/// if the provided angles are PI/2, which is the default
///
-class GenericEmissiveClosure : public EmissiveClosure {
+class GenericEmissiveClosure : public CClosurePrimitive {
public:
- GenericEmissiveClosure() { }
-
- void setup() {}
- size_t memsize() const { return sizeof(*this); }
- const char *name() const { return "emission"; }
-
- void print_on(std::ostream &out) const
- {
- out << name() << "()";
- }
+ GenericEmissiveClosure() : CClosurePrimitive(Emissive) { }
Color3 eval(const Vec3 &Ng, const Vec3 &omega_out) const
{
@@ -92,7 +83,7 @@ ClosureParam *closure_emission_params()
return params;
}
-CLOSURE_PREPARE(closure_emission_prepare, GenericEmissiveClosure)
+CCLOSURE_PREPARE(closure_emission_prepare, GenericEmissiveClosure)
CCL_NAMESPACE_END
diff --git a/intern/cycles/kernel/osl/osl_bssrdf.cpp b/intern/cycles/kernel/osl/osl_bssrdf.cpp
index 975967c0bbb..887015c886e 100644
--- a/intern/cycles/kernel/osl/osl_bssrdf.cpp
+++ b/intern/cycles/kernel/osl/osl_bssrdf.cpp
@@ -51,24 +51,11 @@ using namespace OSL;
class CubicBSSRDFClosure : public CBSSRDFClosure {
public:
- size_t memsize() const { return sizeof(*this); }
- const char *name() const { return "bssrdf_cubic"; }
-
- void setup()
+ CubicBSSRDFClosure()
{
sc.type = CLOSURE_BSSRDF_CUBIC_ID;
sc.data0 = fabsf(average(radius));
}
-
- bool mergeable(const ClosurePrimitive *other) const
- {
- return false;
- }
-
- void print_on(std::ostream &out) const
- {
- out << name() << " ((" << sc.N[0] << ", " << sc.N[1] << ", " << sc.N[2] << "))";
- }
};
ClosureParam *closure_bssrdf_cubic_params()
@@ -96,30 +83,17 @@ ClosureParam *closure_bssrdf_cubic_extended_params()
return params;
}
-CLOSURE_PREPARE(closure_bssrdf_cubic_prepare, CubicBSSRDFClosure)
+CCLOSURE_PREPARE(closure_bssrdf_cubic_prepare, CubicBSSRDFClosure)
/* Gaussian */
class GaussianBSSRDFClosure : public CBSSRDFClosure {
public:
- size_t memsize() const { return sizeof(*this); }
- const char *name() const { return "bssrdf_gaussian"; }
-
- void setup()
+ GaussianBSSRDFClosure()
{
sc.type = CLOSURE_BSSRDF_GAUSSIAN_ID;
sc.data0 = fabsf(average(radius));
}
-
- bool mergeable(const ClosurePrimitive *other) const
- {
- return false;
- }
-
- void print_on(std::ostream &out) const
- {
- out << name() << " ((" << sc.N[0] << ", " << sc.N[1] << ", " << sc.N[2] << "))";
- }
};
ClosureParam *closure_bssrdf_gaussian_params()
@@ -146,7 +120,7 @@ ClosureParam *closure_bssrdf_gaussian_extended_params()
return params;
}
-CLOSURE_PREPARE(closure_bssrdf_gaussian_prepare, GaussianBSSRDFClosure)
+CCLOSURE_PREPARE(closure_bssrdf_gaussian_prepare, GaussianBSSRDFClosure)
CCL_NAMESPACE_END
diff --git a/intern/cycles/kernel/osl/osl_bssrdf.h b/intern/cycles/kernel/osl/osl_bssrdf.h
index fc1a4c587cc..6aee2c28ea8 100644
--- a/intern/cycles/kernel/osl/osl_bssrdf.h
+++ b/intern/cycles/kernel/osl/osl_bssrdf.h
@@ -37,20 +37,20 @@
#include <OSL/oslexec.h>
#include <OSL/genclosure.h>
+#include "osl_closures.h"
+
#include "kernel_types.h"
#include "util_types.h"
CCL_NAMESPACE_BEGIN
-class CBSSRDFClosure : public OSL::ClosurePrimitive {
+class CBSSRDFClosure : public CClosurePrimitive {
public:
ShaderClosure sc;
float3 radius;
- CBSSRDFClosure() : OSL::ClosurePrimitive(BSSRDF) { memset(&sc, 0, sizeof(sc)); }
- ~CBSSRDFClosure() { }
-
+ CBSSRDFClosure() : CClosurePrimitive(BSSRDF) { }
int scattering() const { return LABEL_DIFFUSE; }
};
diff --git a/intern/cycles/kernel/osl/osl_closures.cpp b/intern/cycles/kernel/osl/osl_closures.cpp
index 221406a1716..340e4492584 100644
--- a/intern/cycles/kernel/osl/osl_closures.cpp
+++ b/intern/cycles/kernel/osl/osl_closures.cpp
@@ -171,25 +171,16 @@ BSDF_CLOSURE_CLASS_END(HairTransmission, hair_transmission)
/* Registration */
-static void generic_closure_setup(OSL::RendererServices *, int id, void *data)
-{
- assert(data);
- OSL::ClosurePrimitive *prim = (OSL::ClosurePrimitive *)data;
- prim->setup();
-}
-
-static bool generic_closure_compare(int id, const void *dataA, const void *dataB)
-{
- assert(dataA && dataB);
-
- OSL::ClosurePrimitive *primA = (OSL::ClosurePrimitive *)dataA;
- OSL::ClosurePrimitive *primB = (OSL::ClosurePrimitive *)dataB;
- return primA->mergeable(primB);
-}
-
static void register_closure(OSL::ShadingSystem *ss, const char *name, int id, OSL::ClosureParam *params, OSL::PrepareClosureFunc prepare)
{
- ss->register_closure(name, id, params, prepare, generic_closure_setup, generic_closure_compare);
+ /* optimization: it's possible to not use a prepare function at all and
+ * only initialize the actual class when accessing the closure component
+ * data, but then we need to map the id to the class somehow */
+#ifdef CLOSURE_PREPARE
+ ss->register_closure(name, id, params, prepare, NULL, NULL);
+#else
+ ss->register_closure(name, id, params, prepare, NULL);
+#endif
}
void OSLShader::register_closures(OSLShadingSystem *ss_)
diff --git a/intern/cycles/kernel/osl/osl_closures.h b/intern/cycles/kernel/osl/osl_closures.h
index 6632c2c57e5..46d645d69b1 100644
--- a/intern/cycles/kernel/osl/osl_closures.h
+++ b/intern/cycles/kernel/osl/osl_closures.h
@@ -66,36 +66,51 @@ void closure_westin_sheen_prepare(OSL::RendererServices *, int id, void *data);
void closure_bssrdf_cubic_prepare(OSL::RendererServices *, int id, void *data);
void closure_bssrdf_gaussian_prepare(OSL::RendererServices *, int id, void *data);
-enum {
- AmbientOcclusion = 100
-};
-
-#define CLOSURE_PREPARE(name, classname) \
+#define CCLOSURE_PREPARE(name, classname) \
void name(RendererServices *, int id, void *data) \
{ \
memset(data, 0, sizeof(classname)); \
new (data) classname(); \
}
-#define CLOSURE_PREPARE_STATIC(name, classname) static CLOSURE_PREPARE(name, classname)
+#define CCLOSURE_PREPARE_STATIC(name, classname) static CCLOSURE_PREPARE(name, classname)
#define CLOSURE_FLOAT3_PARAM(st, fld) \
- { TypeDesc::TypeVector, reckless_offsetof(st, fld), NULL, sizeof(OSL::Vec3) }
+ { TypeDesc::TypeVector, reckless_offsetof(st, fld), NULL, sizeof(OSL::Vec3) }
#define TO_VEC3(v) OSL::Vec3(v.x, v.y, v.z)
#define TO_COLOR3(v) OSL::Color3(v.x, v.y, v.z)
#define TO_FLOAT3(v) make_float3(v[0], v[1], v[2])
+/* Closure */
+
+class CClosurePrimitive {
+public:
+ enum Category {
+ BSDF, ///< Reflective and/or transmissive surface
+ BSSRDF, ///< Sub-surface light transfer
+ Emissive, ///< Light emission
+ Background, ///< Background emission
+ Volume, ///< Volume scattering
+ Holdout, ///< Holdout from alpha
+ AmbientOcclusion, ///< Ambient occlusion
+ };
+
+ CClosurePrimitive (Category category_) : category (category_) { }
+ virtual ~CClosurePrimitive() {}
+
+ Category category;
+};
+
/* BSDF */
-class CBSDFClosure : public OSL::ClosurePrimitive {
+class CBSDFClosure : public CClosurePrimitive {
public:
ShaderClosure sc;
- CBSDFClosure(int scattering) : OSL::ClosurePrimitive(BSDF),
+ CBSDFClosure(int scattering) : CClosurePrimitive(BSDF),
m_scattering_label(scattering), m_shaderdata_flag(0)
- { memset(&sc, 0, sizeof(sc)); }
- ~CBSDFClosure() { }
+ { }
int scattering() const { return m_scattering_label; }
int shaderdata_flag() const { return m_shaderdata_flag; }
@@ -119,31 +134,17 @@ protected:
\
class Upper##Closure : public CBSDFClosure { \
public: \
- Upper##Closure() : CBSDFClosure(TYPE) {} \
- size_t memsize() const { return sizeof(*this); } \
- const char *name() const { return #lower; } \
-\
- void setup() \
+ Upper##Closure() : CBSDFClosure(TYPE) \
{ \
sc.prim = NULL; \
m_shaderdata_flag = bsdf_##lower##_setup(&sc); \
} \
\
- bool mergeable(const ClosurePrimitive *other) const \
- { \
- return false; \
- } \
- \
void blur(float roughness) \
{ \
bsdf_##svmlower##_blur(&sc, roughness); \
} \
\
- void print_on(std::ostream &out) const \
- { \
- out << name() << " ((" << sc.N[0] << ", " << sc.N[1] << ", " << sc.N[2] << "))"; \
- } \
-\
float3 eval_reflect(const float3 &omega_out, const float3 &omega_in, float& pdf) const \
{ \
return bsdf_##svmlower##_eval_reflect(&sc, omega_out, omega_in, &pdf); \
@@ -178,7 +179,7 @@ static ClosureParam *bsdf_##lower##_params() \
return params; \
} \
\
-CLOSURE_PREPARE_STATIC(bsdf_##lower##_prepare, Upper##Closure)
+CCLOSURE_PREPARE_STATIC(bsdf_##lower##_prepare, Upper##Closure)
CCL_NAMESPACE_END
diff --git a/intern/cycles/kernel/osl/osl_shader.cpp b/intern/cycles/kernel/osl/osl_shader.cpp
index 18e8fee4348..146736ba799 100644
--- a/intern/cycles/kernel/osl/osl_shader.cpp
+++ b/intern/cycles/kernel/osl/osl_shader.cpp
@@ -146,7 +146,7 @@ static void flatten_surface_closure_tree(ShaderData *sd, int path_flag,
if (closure->type == OSL::ClosureColor::COMPONENT) {
OSL::ClosureComponent *comp = (OSL::ClosureComponent *)closure;
- OSL::ClosurePrimitive *prim = (OSL::ClosurePrimitive *)comp->data();
+ CClosurePrimitive *prim = (CClosurePrimitive *)comp->data();
if (prim) {
ShaderClosure sc;
@@ -156,8 +156,8 @@ static void flatten_surface_closure_tree(ShaderData *sd, int path_flag,
sc.weight = weight;
#endif
- switch (prim->category()) {
- case OSL::ClosurePrimitive::BSDF: {
+ switch (prim->category) {
+ case CClosurePrimitive::BSDF: {
CBSDFClosure *bsdf = (CBSDFClosure *)prim;
int scattering = bsdf->scattering();
@@ -191,7 +191,7 @@ static void flatten_surface_closure_tree(ShaderData *sd, int path_flag,
}
break;
}
- case OSL::ClosurePrimitive::Emissive: {
+ case CClosurePrimitive::Emissive: {
/* sample weight */
float sample_weight = fabsf(average(weight));
@@ -208,7 +208,7 @@ static void flatten_surface_closure_tree(ShaderData *sd, int path_flag,
}
break;
}
- case AmbientOcclusion: {
+ case CClosurePrimitive::AmbientOcclusion: {
/* sample weight */
float sample_weight = fabsf(average(weight));
@@ -224,7 +224,7 @@ static void flatten_surface_closure_tree(ShaderData *sd, int path_flag,
}
break;
}
- case OSL::ClosurePrimitive::Holdout: {
+ case CClosurePrimitive::Holdout: {
sc.sample_weight = 0.0f;
sc.type = CLOSURE_HOLDOUT_ID;
sc.data0 = 0.0f;
@@ -237,7 +237,7 @@ static void flatten_surface_closure_tree(ShaderData *sd, int path_flag,
}
break;
}
- case OSL::ClosurePrimitive::BSSRDF: {
+ case CClosurePrimitive::BSSRDF: {
CBSSRDFClosure *bssrdf = (CBSSRDFClosure *)prim;
float sample_weight = fabsf(average(weight));
@@ -280,10 +280,8 @@ static void flatten_surface_closure_tree(ShaderData *sd, int path_flag,
}
break;
}
- case OSL::ClosurePrimitive::Debug:
- break; /* not implemented */
- case OSL::ClosurePrimitive::Background:
- case OSL::ClosurePrimitive::Volume:
+ case CClosurePrimitive::Background:
+ case CClosurePrimitive::Volume:
break; /* not relevant */
}
}
@@ -332,9 +330,9 @@ static float3 flatten_background_closure_tree(const OSL::ClosureColor *closure)
if (closure->type == OSL::ClosureColor::COMPONENT) {
OSL::ClosureComponent *comp = (OSL::ClosureComponent *)closure;
- OSL::ClosurePrimitive *prim = (OSL::ClosurePrimitive *)comp->data();
+ CClosurePrimitive *prim = (CClosurePrimitive *)comp->data();
- if (prim && prim->category() == OSL::ClosurePrimitive::Background)
+ if (prim && prim->category == CClosurePrimitive::Background)
#ifdef OSL_SUPPORTS_WEIGHTED_CLOSURE_COMPONENTS
return TO_FLOAT3(comp->w);
#else
@@ -387,7 +385,7 @@ static void flatten_volume_closure_tree(ShaderData *sd,
if (closure->type == OSL::ClosureColor::COMPONENT) {
OSL::ClosureComponent *comp = (OSL::ClosureComponent *)closure;
- OSL::ClosurePrimitive *prim = (OSL::ClosurePrimitive *)comp->data();
+ CClosurePrimitive *prim = (CClosurePrimitive *)comp->data();
if (prim) {
ShaderClosure sc;
@@ -397,8 +395,8 @@ static void flatten_volume_closure_tree(ShaderData *sd,
sc.weight = weight;
#endif
- switch (prim->category()) {
- case OSL::ClosurePrimitive::Volume: {
+ switch (prim->category) {
+ case CClosurePrimitive::Volume: {
/* sample weight */
float sample_weight = fabsf(average(weight));
@@ -413,13 +411,13 @@ static void flatten_volume_closure_tree(ShaderData *sd,
sd->closure[sd->num_closure++] = sc;
break;
}
- case OSL::ClosurePrimitive::Holdout:
- case OSL::ClosurePrimitive::Debug:
+ case CClosurePrimitive::Holdout:
break; /* not implemented */
- case OSL::ClosurePrimitive::Background:
- case OSL::ClosurePrimitive::BSDF:
- case OSL::ClosurePrimitive::Emissive:
- case OSL::ClosurePrimitive::BSSRDF:
+ case CClosurePrimitive::Background:
+ case CClosurePrimitive::BSDF:
+ case CClosurePrimitive::Emissive:
+ case CClosurePrimitive::BSSRDF:
+ case CClosurePrimitive::AmbientOcclusion:
break; /* not relevant */
}
}
@@ -509,25 +507,6 @@ void OSLShader::bsdf_blur(ShaderClosure *sc, float roughness)
bsdf->blur(roughness);
}
-/* Emissive Closure */
-
-float3 OSLShader::emissive_eval(const ShaderData *sd, const ShaderClosure *sc)
-{
- OSL::EmissiveClosure *emissive = (OSL::EmissiveClosure *)sc->prim;
- OSL::Color3 emissive_eval = emissive->eval(TO_VEC3(sd->Ng), TO_VEC3(sd->I));
-
- return TO_FLOAT3(emissive_eval);
-}
-
-/* Volume Closure */
-
-float3 OSLShader::volume_eval_phase(const ShaderClosure *sc, const float3 omega_in, const float3 omega_out)
-{
- OSL::VolumeClosure *volume = (OSL::VolumeClosure *)sc->prim;
- OSL::Color3 volume_eval = volume->eval_phase(TO_VEC3(omega_in), TO_VEC3(omega_out));
- return TO_FLOAT3(volume_eval) * sc->weight;
-}
-
/* Attributes */
int OSLShader::find_attribute(KernelGlobals *kg, const ShaderData *sd, uint id, AttributeElement *elem)
diff --git a/intern/cycles/kernel/osl/osl_shader.h b/intern/cycles/kernel/osl/osl_shader.h
index 777ecb6af81..2520b703ab7 100644
--- a/intern/cycles/kernel/osl/osl_shader.h
+++ b/intern/cycles/kernel/osl/osl_shader.h
@@ -66,11 +66,6 @@ public:
const float3& omega_in, float& pdf);
static void bsdf_blur(ShaderClosure *sc, float roughness);
- static float3 emissive_eval(const ShaderData *sd, const ShaderClosure *sc);
-
- static float3 volume_eval_phase(const ShaderClosure *sc,
- const float3 omega_in, const float3 omega_out);
-
/* attributes */
static int find_attribute(KernelGlobals *kg, const ShaderData *sd, uint id, AttributeElement *elem);
};