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>2018-03-08 07:33:55 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2018-03-10 06:54:04 +0300
commit516e82a90012da3911518103829158215d94215f (patch)
treed91fac1a4fb558f15870900a5415e61235cc983e /intern/cycles/kernel/osl/osl_services.cpp
parentcd15d87bfcb4aafb0d4f13dcc902a135f472c9df (diff)
Code refactor: add ProjectionTransform separate from regular Transform.
This is in preparation of making Transform affine only.
Diffstat (limited to 'intern/cycles/kernel/osl/osl_services.cpp')
-rw-r--r--intern/cycles/kernel/osl/osl_services.cpp89
1 files changed, 36 insertions, 53 deletions
diff --git a/intern/cycles/kernel/osl/osl_services.cpp b/intern/cycles/kernel/osl/osl_services.cpp
index ae4c521659c..dec56c6665b 100644
--- a/intern/cycles/kernel/osl/osl_services.cpp
+++ b/intern/cycles/kernel/osl/osl_services.cpp
@@ -62,11 +62,18 @@ CCL_NAMESPACE_BEGIN
/* RenderServices implementation */
-#define COPY_MATRIX44(m1, m2) { \
- CHECK_TYPE(m1, OSL::Matrix44*); \
- CHECK_TYPE(m2, Transform*); \
- memcpy(m1, m2, sizeof(*m2)); \
-} (void)0
+static void copy_matrix(OSL::Matrix44& m, const Transform& tfm)
+{
+ // TODO: remember when making affine
+ Transform t = transform_transpose(tfm);
+ memcpy(&m, &t, sizeof(m));
+}
+
+static void copy_matrix(OSL::Matrix44& m, const ProjectionTransform& tfm)
+{
+ ProjectionTransform t = projection_transpose(tfm);
+ memcpy(&m, &t, sizeof(m));
+}
/* static ustrings */
ustring OSLRenderServices::u_distance("distance");
@@ -167,14 +174,12 @@ bool OSLRenderServices::get_matrix(OSL::ShaderGlobals *sg, OSL::Matrix44 &result
#else
Transform tfm = object_fetch_transform(kg, object, OBJECT_TRANSFORM);
#endif
- tfm = transform_transpose(tfm);
- COPY_MATRIX44(&result, &tfm);
+ copy_matrix(result, tfm);
return true;
}
else if(sd->type == PRIMITIVE_LAMP) {
- Transform tfm = transform_transpose(sd->ob_tfm);
- COPY_MATRIX44(&result, &tfm);
+ copy_matrix(result, sd->ob_tfm);
return true;
}
@@ -203,14 +208,12 @@ bool OSLRenderServices::get_inverse_matrix(OSL::ShaderGlobals *sg, OSL::Matrix44
#else
Transform itfm = object_fetch_transform(kg, object, OBJECT_INVERSE_TRANSFORM);
#endif
- itfm = transform_transpose(itfm);
- COPY_MATRIX44(&result, &itfm);
+ copy_matrix(result, itfm);
return true;
}
else if(sd->type == PRIMITIVE_LAMP) {
- Transform tfm = transform_transpose(sd->ob_itfm);
- COPY_MATRIX44(&result, &tfm);
+ copy_matrix(result, sd->ob_itfm);
return true;
}
@@ -224,23 +227,19 @@ bool OSLRenderServices::get_matrix(OSL::ShaderGlobals *sg, OSL::Matrix44 &result
KernelGlobals *kg = kernel_globals;
if(from == u_ndc) {
- Transform tfm = transform_transpose(transform_quick_inverse(kernel_data.cam.worldtondc));
- COPY_MATRIX44(&result, &tfm);
+ copy_matrix(result, kernel_data.cam.ndctoworld);
return true;
}
else if(from == u_raster) {
- Transform tfm = transform_transpose(kernel_data.cam.rastertoworld);
- COPY_MATRIX44(&result, &tfm);
+ copy_matrix(result, kernel_data.cam.rastertoworld);
return true;
}
else if(from == u_screen) {
- Transform tfm = transform_transpose(kernel_data.cam.screentoworld);
- COPY_MATRIX44(&result, &tfm);
+ copy_matrix(result, kernel_data.cam.screentoworld);
return true;
}
else if(from == u_camera) {
- Transform tfm = transform_transpose(kernel_data.cam.cameratoworld);
- COPY_MATRIX44(&result, &tfm);
+ copy_matrix(result, kernel_data.cam.cameratoworld);
return true;
}
else if(from == u_world) {
@@ -256,23 +255,19 @@ bool OSLRenderServices::get_inverse_matrix(OSL::ShaderGlobals *sg, OSL::Matrix44
KernelGlobals *kg = kernel_globals;
if(to == u_ndc) {
- Transform tfm = transform_transpose(kernel_data.cam.worldtondc);
- COPY_MATRIX44(&result, &tfm);
+ copy_matrix(result, kernel_data.cam.worldtondc);
return true;
}
else if(to == u_raster) {
- Transform tfm = transform_transpose(kernel_data.cam.worldtoraster);
- COPY_MATRIX44(&result, &tfm);
+ copy_matrix(result, kernel_data.cam.worldtoraster);
return true;
}
else if(to == u_screen) {
- Transform tfm = transform_transpose(kernel_data.cam.worldtoscreen);
- COPY_MATRIX44(&result, &tfm);
+ copy_matrix(result, kernel_data.cam.worldtoscreen);
return true;
}
else if(to == u_camera) {
- Transform tfm = transform_transpose(kernel_data.cam.worldtocamera);
- COPY_MATRIX44(&result, &tfm);
+ copy_matrix(result, kernel_data.cam.worldtocamera);
return true;
}
else if(to == u_world) {
@@ -298,14 +293,12 @@ bool OSLRenderServices::get_matrix(OSL::ShaderGlobals *sg, OSL::Matrix44 &result
KernelGlobals *kg = sd->osl_globals;
Transform tfm = object_fetch_transform(kg, object, OBJECT_TRANSFORM);
#endif
- tfm = transform_transpose(tfm);
- COPY_MATRIX44(&result, &tfm);
+ copy_matrix(result, tfm);
return true;
}
else if(sd->type == PRIMITIVE_LAMP) {
- Transform tfm = transform_transpose(sd->ob_tfm);
- COPY_MATRIX44(&result, &tfm);
+ copy_matrix(result, sd->ob_tfm);
return true;
}
@@ -329,14 +322,12 @@ bool OSLRenderServices::get_inverse_matrix(OSL::ShaderGlobals *sg, OSL::Matrix44
KernelGlobals *kg = sd->osl_globals;
Transform tfm = object_fetch_transform(kg, object, OBJECT_INVERSE_TRANSFORM);
#endif
- tfm = transform_transpose(tfm);
- COPY_MATRIX44(&result, &tfm);
+ copy_matrix(result, tfm);
return true;
}
else if(sd->type == PRIMITIVE_LAMP) {
- Transform tfm = transform_transpose(sd->ob_itfm);
- COPY_MATRIX44(&result, &tfm);
+ copy_matrix(result, sd->ob_itfm);
return true;
}
@@ -350,23 +341,19 @@ bool OSLRenderServices::get_matrix(OSL::ShaderGlobals *sg, OSL::Matrix44 &result
KernelGlobals *kg = kernel_globals;
if(from == u_ndc) {
- Transform tfm = transform_transpose(transform_quick_inverse(kernel_data.cam.worldtondc));
- COPY_MATRIX44(&result, &tfm);
+ copy_matrix(result, kernel_data.cam.ndctoworld);
return true;
}
else if(from == u_raster) {
- Transform tfm = transform_transpose(kernel_data.cam.rastertoworld);
- COPY_MATRIX44(&result, &tfm);
+ copy_matrix(result, kernel_data.cam.rastertoworld);
return true;
}
else if(from == u_screen) {
- Transform tfm = transform_transpose(kernel_data.cam.screentoworld);
- COPY_MATRIX44(&result, &tfm);
+ copy_matrix(result, kernel_data.cam.screentoworld);
return true;
}
else if(from == u_camera) {
- Transform tfm = transform_transpose(kernel_data.cam.cameratoworld);
- COPY_MATRIX44(&result, &tfm);
+ copy_matrix(result, kernel_data.cam.cameratoworld);
return true;
}
@@ -378,23 +365,19 @@ bool OSLRenderServices::get_inverse_matrix(OSL::ShaderGlobals *sg, OSL::Matrix44
KernelGlobals *kg = kernel_globals;
if(to == u_ndc) {
- Transform tfm = transform_transpose(kernel_data.cam.worldtondc);
- COPY_MATRIX44(&result, &tfm);
+ copy_matrix(result, kernel_data.cam.worldtondc);
return true;
}
else if(to == u_raster) {
- Transform tfm = transform_transpose(kernel_data.cam.worldtoraster);
- COPY_MATRIX44(&result, &tfm);
+ copy_matrix(result, kernel_data.cam.worldtoraster);
return true;
}
else if(to == u_screen) {
- Transform tfm = transform_transpose(kernel_data.cam.worldtoscreen);
- COPY_MATRIX44(&result, &tfm);
+ copy_matrix(result, kernel_data.cam.worldtoscreen);
return true;
}
else if(to == u_camera) {
- Transform tfm = transform_transpose(kernel_data.cam.worldtocamera);
- COPY_MATRIX44(&result, &tfm);
+ copy_matrix(result, kernel_data.cam.worldtocamera);
return true;
}