[Bf-blender-cvs] [26c1ae8] master: OpenSubdiv: Proper detection of crease changes

2015-07-29 Thread Sergey Sharybin
Commit: 26c1ae81be1542ebcf45671016cb56e11bb9be81
Author: Sergey Sharybin
Date:   Wed Jul 29 18:05:29 2015 +0200
Branches: master
https://developer.blender.org/rB26c1ae81be1542ebcf45671016cb56e11bb9be81

OpenSubdiv: Proper detection of crease changes

===

M   intern/opensubdiv/opensubdiv_converter.cc

===

diff --git a/intern/opensubdiv/opensubdiv_converter.cc 
b/intern/opensubdiv/opensubdiv_converter.cc
index 80c567b..76db28a 100644
--- a/intern/opensubdiv/opensubdiv_converter.cc
+++ b/intern/opensubdiv/opensubdiv_converter.cc
@@ -461,17 +461,19 @@ int openSubdiv_topologyRefnerCompareConverter(
}
}
/* Compare sharpness. */
-#if 0
-   /* TODO(sergey): For some reason shrapness is not being reported 
correctly
-* from the base level, which cuases false-positive topology change 
detection.
-*/
for (int edge = 0; edge  num_edges; ++edge) {
+   ConstIndexArray edge_faces = base_level.GetEdgeFaces(edge);
float sharpness = base_level.GetEdgeSharpness(edge);
-   float conv_sharpness = converter-get_edge_sharpness(converter, 
edge);
+   float conv_sharpness;
+   if (edge_faces.size() == 2) {
+   conv_sharpness = 
converter-get_edge_sharpness(converter, edge);
+   }
+   else {
+   conv_sharpness = 
OpenSubdiv::Sdc::Crease::SHARPNESS_INFINITE;
+   }
if (sharpness != conv_sharpness) {
return false;
}
}
-#endif
return true;
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [7380166] master: OpenSubdiv: Workaround for vertices which are adjacent to several manifold islands

2015-07-29 Thread Sergey Sharybin
Commit: 7380166db2ca0a21511822c33b7751766a5165b1
Author: Sergey Sharybin
Date:   Wed Jul 29 18:41:05 2015 +0200
Branches: master
https://developer.blender.org/rB7380166db2ca0a21511822c33b7751766a5165b1

OpenSubdiv: Workaround for vertices which are adjacent to several manifold 
islands

===

M   intern/opensubdiv/opensubdiv_converter.cc

===

diff --git a/intern/opensubdiv/opensubdiv_converter.cc 
b/intern/opensubdiv/opensubdiv_converter.cc
index 76db28a..b818c84 100644
--- a/intern/opensubdiv/opensubdiv_converter.cc
+++ b/intern/opensubdiv/opensubdiv_converter.cc
@@ -141,6 +141,7 @@ inline bool 
TopologyRefinerFactoryOpenSubdiv_Converter::assignComponentTopolog
memset(face_used, 0, sizeof(bool) * num_faces);
std::stackStackElem stack;
int edge_count_ordered = 0, face_count_ordered = 0;
+   bool print = vert == 6;
if (num_vert_edges == num_vert_faces) {
/* Manifold vertex, start with any face and perform 
traversal. */
int face_start = vert_faces[0];
@@ -183,6 +184,7 @@ inline bool 
TopologyRefinerFactoryOpenSubdiv_Converter::assignComponentTopolog
if (append_start_edge) {
dst_vert_edges[edge_count_ordered++] = 
edge_start;
}
+   face_used[face_start] = true;
 
while (edge_count_ordered  num_vert_edges) {
IndexArray face_verts = 
getBaseFaceVertices(refiner, face_start);
@@ -191,6 +193,24 @@ inline bool 
TopologyRefinerFactoryOpenSubdiv_Converter::assignComponentTopolog
int face_edge_next = (face_edge_start  0) ? 
(face_edge_start - 1) : (face_verts.size() - 1);
Index edge_next = face_edges[face_edge_next];
if (edge_next == edge_first) {
+   /* TODO(sergey): Find more generic 
solution so non-manifold
+* edges combined with some manifold 
adjacent geometry is
+* handled correct.
+*/
+   if (num_vert_edges == num_vert_faces 
+   edge_count_ordered != 
num_vert_edges)
+   {
+   IndexArray edge_faces = 
getBaseEdgeFaces(refiner, edge_next);
+   for (int i = 0; i  
num_vert_faces; ++i) {
+   int face_start = 
edge_faces[i];
+   if 
(!face_used[face_start]) {
+   int edge_start 
= edge_next;
+   int 
face_vert_start = findInArray(getBaseFaceVertices(refiner, face_start), vert);
+   
stack.push(StackElem(face_start, edge_start, face_vert_start, false));
+   break;
+   }
+   }
+   }
break;
}
dst_vert_edges[edge_count_ordered++] = 
edge_next;
@@ -209,7 +229,6 @@ inline bool 
TopologyRefinerFactoryOpenSubdiv_Converter::assignComponentTopolog
int 
edge_start = edge_next;
int 
face_vert_start = findInArray(getBaseFaceVertices(refiner, face_start), vert);

stack.push(StackElem(face_start, edge_start, face_vert_start, false));
-   
face_used[face_start] = true;
}
}
}
@@ -219,6 +238,7 @@ inline bool 
TopologyRefinerFactoryOpenSubdiv_Converter::assignComponentTopolog
face_start = edge_faces[(edge_faces[0] 
== face_start) ? 1 : 0];
face_vert_start = 
findInArray(getBaseFaceEdges(refiner, face_start), edge_next);
dst_vert_faces[face_count_ordered++] = 
face_start;
+   face_used[face_start] = true;
 

[Bf-blender-cvs] [717a303] master: OpenSubdiv: Fixes for crease in non-manifold meshes

2015-07-29 Thread Sergey Sharybin
Commit: 717a303a18de232ab740ee969108044a4ff7ee6e
Author: Sergey Sharybin
Date:   Wed Jul 29 17:38:06 2015 +0200
Branches: master
https://developer.blender.org/rB717a303a18de232ab740ee969108044a4ff7ee6e

OpenSubdiv: Fixes for crease in non-manifold meshes

Basically non-manifold edges are expected to be sharp by OpenSubdiv.

There\s still some work required, see the inlined comment.

===

M   intern/opensubdiv/opensubdiv_converter.cc

===

diff --git a/intern/opensubdiv/opensubdiv_converter.cc 
b/intern/opensubdiv/opensubdiv_converter.cc
index 34ff17c..a84939f 100644
--- a/intern/opensubdiv/opensubdiv_converter.cc
+++ b/intern/opensubdiv/opensubdiv_converter.cc
@@ -266,11 +266,39 @@ inline bool 
TopologyRefinerFactoryOpenSubdiv_Converter::assignComponentTags(
 TopologyRefiner refiner,
 const OpenSubdiv_Converter conv)
 {
+   typedef OpenSubdiv::Sdc::Crease Crease;
+
int num_edges = conv.get_num_edges(conv);
for (int edge = 0; edge  num_edges; ++edge) {
-   float sharpness = conv.get_edge_sharpness(conv, edge);
+   float sharpness;
+   ConstIndexArray edge_faces = getBaseEdgeFaces(refiner, edge);
+   if (edge_faces.size() == 2) {
+   sharpness = conv.get_edge_sharpness(conv, edge);
+   }
+   else {
+   /* Non-manifold edges must be sharp. */
+   sharpness = Crease::SHARPNESS_INFINITE;
+   }
+   sharpness = Crease::SHARPNESS_INFINITE;
setBaseEdgeSharpness(refiner, edge, sharpness);
}
+
+#if 0
+   /* Non-manifold vertices can't be always smooth.
+* I.e. when there's loose edge adjacent to the vertex
+* opensubdiv expects vertices to be sharp. But this needs
+* some further investigation.
+*/
+   int num_vert = conv.get_num_verts(conv);
+   for (int vert = 0; vert  num_vert; ++vert) {
+   IndexArray vert_faces = getBaseVertexFaces(refiner, vert),
+  vert_edges = getBaseVertexEdges(refiner, vert);
+   if (vert_faces.size() != vert_edges.size()) {
+   setBaseVertexSharpness(refiner, vert, 
Crease::SHARPNESS_INFINITE);
+   }
+   }
+#endif
+
return true;
 }
 
@@ -308,13 +336,15 @@ OpenSubdiv::Sdc::SchemeType 
get_capi_scheme_type(OpenSubdiv_SchemeType type)
 struct OpenSubdiv_TopologyRefinerDescr *openSubdiv_createTopologyRefinerDescr(
 OpenSubdiv_Converter *converter)
 {
+   typedef OpenSubdiv::Sdc::Options Options;
+
using OpenSubdiv::Far::TopologyRefinerFactory;
OpenSubdiv::Sdc::SchemeType scheme_type =
get_capi_scheme_type(converter-get_type(converter));
-   OpenSubdiv::Sdc::Options options;
-   
options.SetVtxBoundaryInterpolation(OpenSubdiv::Sdc::Options::VTX_BOUNDARY_EDGE_ONLY);
-   options.SetCreasingMethod(OpenSubdiv::Sdc::Options::CREASE_UNIFORM);
-   
options.SetFVarLinearInterpolation(OpenSubdiv::Sdc::Options::FVAR_LINEAR_ALL);
+   Options options;
+   options.SetVtxBoundaryInterpolation(Options::VTX_BOUNDARY_EDGE_ONLY);
+   options.SetCreasingMethod(Options::CREASE_UNIFORM);
+   options.SetFVarLinearInterpolation(Options::FVAR_LINEAR_ALL);
 
TopologyRefinerFactoryOpenSubdiv_Converter::Options
topology_options(scheme_type, options);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [48c2f7b] master: OpenSubdiv: Some debug-only code sneaked into previous commit

2015-07-29 Thread Sergey Sharybin
Commit: 48c2f7b28856b657c67c9b0648f655223bf23980
Author: Sergey Sharybin
Date:   Wed Jul 29 17:43:43 2015 +0200
Branches: master
https://developer.blender.org/rB48c2f7b28856b657c67c9b0648f655223bf23980

OpenSubdiv: Some debug-only code sneaked into previous commit

===

M   intern/opensubdiv/opensubdiv_converter.cc

===

diff --git a/intern/opensubdiv/opensubdiv_converter.cc 
b/intern/opensubdiv/opensubdiv_converter.cc
index fe12c84..80c567b 100644
--- a/intern/opensubdiv/opensubdiv_converter.cc
+++ b/intern/opensubdiv/opensubdiv_converter.cc
@@ -284,7 +284,6 @@ inline bool 
TopologyRefinerFactoryOpenSubdiv_Converter::assignComponentTags(
/* Non-manifold edges must be sharp. */
sharpness = Crease::SHARPNESS_INFINITE;
}
-   sharpness = Crease::SHARPNESS_INFINITE;
setBaseEdgeSharpness(refiner, edge, sharpness);
}

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [ce5e62b] master: OpenSubdiv: Typo fixes in comments

2015-07-29 Thread Sergey Sharybin
Commit: ce5e62b78a90ea80cb799053382a9752baa53e45
Author: Sergey Sharybin
Date:   Wed Jul 29 17:12:55 2015 +0200
Branches: master
https://developer.blender.org/rBce5e62b78a90ea80cb799053382a9752baa53e45

OpenSubdiv: Typo fixes in comments

===

M   source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c

===

diff --git a/source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c 
b/source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c
index 57cf397..c6c8f14 100644
--- a/source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c
+++ b/source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c
@@ -245,7 +245,7 @@ bool ccgSubSurf_prepareGLMesh(CCGSubSurf *ss, bool 
use_osd_glsl)
if (ss-osd_mesh == NULL) {
if (ss-osd_topology_refiner == NULL) {
/* Happens with empty meshes. */
-   /* TODO(sergey): Add assert thet mesh is indeed empty. 
*/
+   /* TODO(sergey): Add assert that mesh is indeed empty. 
*/
return false;
}
 
@@ -415,7 +415,7 @@ static bool opensubdiv_createEvaluator(CCGSubSurf *ss)
OpenSubdiv_Converter converter;
OpenSubdiv_TopologyRefinerDescr *topology_refiner;
if (ss-fMap-numEntries == 0) {
-   /* OpenSubdiv doesn't support meshes withut faces. */
+   /* OpenSubdiv doesn't support meshes without faces. */
return false;
}
ccgSubSurf_converter_setup_from_ccg(ss, converter);
@@ -425,7 +425,7 @@ static bool opensubdiv_createEvaluator(CCGSubSurf *ss)
openSubdiv_createEvaluatorDescr(topology_refiner,
ss-subdivLevels);
if (ss-osd_evaluator == NULL) {
-   BLI_assert(!OpenSubdiv initializetion failed, should not 
happen.);
+   BLI_assert(!OpenSubdiv initialization failed, should not 
happen.);
return false;
}
return true;

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [b8e2b8a] master: OpenSubdiv: Rework vert-edge and vert-face ordering

2015-07-29 Thread Sergey Sharybin
Commit: b8e2b8ae8a65824ebe8a69d20971b5ad8474a875
Author: Sergey Sharybin
Date:   Wed Jul 29 17:10:13 2015 +0200
Branches: master
https://developer.blender.org/rBb8e2b8ae8a65824ebe8a69d20971b5ad8474a875

OpenSubdiv: Rework vert-edge and vert-face ordering

Now the code survives multiple non-manifolds happening on the vert.

Still not totally optimal but at least gives much better mesh support.

===

M   intern/opensubdiv/opensubdiv_converter.cc

===

diff --git a/intern/opensubdiv/opensubdiv_converter.cc 
b/intern/opensubdiv/opensubdiv_converter.cc
index 5ae9a6e..34ff17c 100644
--- a/intern/opensubdiv/opensubdiv_converter.cc
+++ b/intern/opensubdiv/opensubdiv_converter.cc
@@ -35,6 +35,8 @@
 #include opensubdiv_converter_capi.h
 #include opensubdiv_intern.h
 
+#include stack
+
 namespace OpenSubdiv {
 namespace OPENSUBDIV_VERSION {
 namespace Far {
@@ -49,6 +51,21 @@ inline int findInArray(T array, int value)
 
 }  /* namespace */
 
+struct StackElem {
+   StackElem(int face_start,
+ int edge_start,
+ int face_vert_start,
+ bool append_start_edge = true)
+   : face_start(face_start),
+ edge_start(edge_start),
+ face_vert_start(face_vert_start),
+ append_start_edge(append_start_edge){}
+   int face_start;
+   int edge_start;
+   int face_vert_start;
+   bool append_start_edge;
+};
+
 template 
 inline bool 
TopologyRefinerFactoryOpenSubdiv_Converter::resizeComponentTopology(
 TopologyRefiner refiner,
@@ -118,45 +135,124 @@ inline bool 
TopologyRefinerFactoryOpenSubdiv_Converter::assignComponentTopolog
int *vert_edges = new int[num_vert_edges];
conv.get_vert_edges(conv, vert, vert_edges);
/* Order vertex edges and faces in a CCW order. */
-   Index face_start = INDEX_INVALID;
-   Index edge_start = INDEX_INVALID;
-   int face_vert_start = 0;
+   /* TODO(sergey): Look into possible optimizations here. */
+   bool *face_used = new bool[num_faces];
+   memset(face_used, 0, sizeof(bool) * num_faces);
+   std::stackStackElem stack;
+   int edge_count_ordered = 0, face_count_ordered = 0;
if (num_vert_edges == num_vert_faces) {
-   face_start  = vert_faces[0];
-   face_vert_start = 
findInArray(getBaseFaceVertices(refiner, face_start), vert);
-   edge_start = getBaseFaceEdges(refiner, 
face_start)[face_vert_start];
-   } else {
+   /* Manifold vertex, start with any face and perform 
traversal. */
+   int face_start = vert_faces[0];
+   int face_vert_start = 
findInArray(getBaseFaceVertices(refiner, face_start), vert);
+   int edge_start = getBaseFaceEdges(refiner, 
face_start)[face_vert_start];
+   stack.push(StackElem(face_start, edge_start, 
face_vert_start));
+   }
+   else {
+   /* ** Non-manifold vertex. Special handle here. ** */
+   /* Add all loose edges adjacent to the vertex. */
for (int i = 0; i  num_vert_edges; ++i) {
IndexArray edge_faces = 
getBaseEdgeFaces(refiner, vert_edges[i]);
-   if (edge_faces.size() == 1) {
-   edge_start = vert_edges[i];
-   face_start = edge_faces[0];
-   face_vert_start = 
findInArray(getBaseFaceVertices(refiner, face_start), vert);
+   if (edge_faces.size() == 0) {
+   /* Can't really orient loose edges, 
just add then straight
+* to the vert-edges array.
+*/
+   dst_vert_edges[edge_count_ordered++] = 
vert_edges[i];
+   }
+   else if (edge_faces.size() == 1) {
+   int edge_start = vert_edges[i];
+   int face_start = edge_faces[0];
+   int face_vert_start = 
findInArray(getBaseFaceVertices(refiner, face_start), vert);
if (edge_start == 
(getBaseFaceEdges(refiner, face_start)[face_vert_start])) {
+   
stack.push(StackElem(face_start, edge_start, face_vert_start));
+   face_used[face_start] = true;
+   }
+   }

[Bf-blender-cvs] [af6bbab] master: OpenSubdiv: Fix for weirdly ordered lines

2015-07-29 Thread Sergey Sharybin
Commit: af6bbab5b485c83c20c0819f7171d3224e38b1e3
Author: Sergey Sharybin
Date:   Wed Jul 29 13:54:07 2015 +0200
Branches: master
https://developer.blender.org/rBaf6bbab5b485c83c20c0819f7171d3224e38b1e3

OpenSubdiv: Fix for weirdly ordered lines

===

M   intern/opensubdiv/opensubdiv_converter.cc

===

diff --git a/intern/opensubdiv/opensubdiv_converter.cc 
b/intern/opensubdiv/opensubdiv_converter.cc
index 6b245db..5ae9a6e 100644
--- a/intern/opensubdiv/opensubdiv_converter.cc
+++ b/intern/opensubdiv/opensubdiv_converter.cc
@@ -109,14 +109,14 @@ inline bool 
TopologyRefinerFactoryOpenSubdiv_Converter::assignComponentTopolog
for (int vert = 0; vert  num_verts; ++vert) {
/* Vert-Faces */
IndexArray dst_vert_faces = getBaseVertexFaces(refiner, vert);
-   int num_vert_edges = conv.get_num_vert_edges(conv, vert);
-   int *vert_edges = new int[num_vert_edges];
-   conv.get_vert_edges(conv, vert, vert_edges);
-   /* Vert-Edges */
-   IndexArray dst_vert_edges = getBaseVertexEdges(refiner, vert);
int num_vert_faces = conv.get_num_vert_faces(conv, vert);
int *vert_faces = new int[num_vert_faces];
conv.get_vert_faces(conv, vert, vert_faces);
+   /* Vert-Edges */
+   IndexArray dst_vert_edges = getBaseVertexEdges(refiner, vert);
+   int num_vert_edges = conv.get_num_vert_edges(conv, vert);
+   int *vert_edges = new int[num_vert_edges];
+   conv.get_vert_edges(conv, vert, vert_edges);
/* Order vertex edges and faces in a CCW order. */
Index face_start = INDEX_INVALID;
Index edge_start = INDEX_INVALID;

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [51c1927] master: OpenSubdiv: Make topology orientation optional

2015-07-29 Thread Sergey Sharybin
Commit: 51c1927ccb546cffe30ebcd9e4ecf6aa07b96ce1
Author: Sergey Sharybin
Date:   Wed Jul 29 17:41:57 2015 +0200
Branches: master
https://developer.blender.org/rB51c1927ccb546cffe30ebcd9e4ecf6aa07b96ce1

OpenSubdiv: Make topology orientation optional

===

M   intern/opensubdiv/opensubdiv_converter.cc
M   intern/opensubdiv/opensubdiv_intern.h

===

diff --git a/intern/opensubdiv/opensubdiv_converter.cc 
b/intern/opensubdiv/opensubdiv_converter.cc
index a84939f..fe12c84 100644
--- a/intern/opensubdiv/opensubdiv_converter.cc
+++ b/intern/opensubdiv/opensubdiv_converter.cc
@@ -134,6 +134,7 @@ inline bool 
TopologyRefinerFactoryOpenSubdiv_Converter::assignComponentTopolog
int num_vert_edges = conv.get_num_vert_edges(conv, vert);
int *vert_edges = new int[num_vert_edges];
conv.get_vert_edges(conv, vert, vert_edges);
+#ifdef OPENSUBDIV_ORIENT_TOPOLOGY
/* Order vertex edges and faces in a CCW order. */
/* TODO(sergey): Look into possible optimizations here. */
bool *face_used = new bool[num_faces];
@@ -253,6 +254,10 @@ inline bool 
TopologyRefinerFactoryOpenSubdiv_Converter::assignComponentTopolog
}
}
 #endif
+#else  /* OPENSUBDIV_ORIENT_TOPOLOGY */
+   memcpy(dst_vert_edges[0], vert_edges, sizeof(int) * 
num_vert_edges);
+   memcpy(dst_vert_faces[0], vert_faces, sizeof(int) * 
num_vert_faces);
+#endif  /* OPENSUBDIV_ORIENT_TOPOLOGY */
 
delete [] vert_edges;
delete [] vert_faces;
diff --git a/intern/opensubdiv/opensubdiv_intern.h 
b/intern/opensubdiv/opensubdiv_intern.h
index 034677f..3e3925e 100644
--- a/intern/opensubdiv/opensubdiv_intern.h
+++ b/intern/opensubdiv/opensubdiv_intern.h
@@ -33,4 +33,11 @@
 #  define OPENSUBDIV_VALIDATE_TOPOLOGY
 #endif
 
+/* Currently OpenSubdiv expects topology to be oriented,
+ * but sometimes it's handy to disable orientation code
+ * to check whether it causes some weird issues by using
+ * pre-oriented model.
+ */
+#define OPENSUBDIV_ORIENT_TOPOLOGY
+
 #endif  /* __OPENSUBDIV_INTERN_H__ */

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [4737b12] master: Cycles: Fix issue in closure merge function.

2015-07-29 Thread Lukas Stockner
Commit: 4737b1246241fd575921f93ddf229da656c7fb5a
Author: Lukas Stockner
Date:   Wed Jul 29 22:04:36 2015 +0200
Branches: master
https://developer.blender.org/rB4737b1246241fd575921f93ddf229da656c7fb5a

Cycles: Fix issue in closure merge function.

* Did not check data2, this partially fixes T45583.
* Initialize data2 in some closures to avoid potential problems.

Differential Revision: https://developer.blender.org/D1436

===

M   intern/cycles/kernel/kernel_shader.h
M   intern/cycles/kernel/svm/svm_closure.h

===

diff --git a/intern/cycles/kernel/kernel_shader.h 
b/intern/cycles/kernel/kernel_shader.h
index 94e1302..6b560f5 100644
--- a/intern/cycles/kernel/kernel_shader.h
+++ b/intern/cycles/kernel/kernel_shader.h
@@ -459,7 +459,7 @@ ccl_device void shader_merge_closures(ShaderData *sd)
continue;
 #endif
 
-   if(!(sci-type == scj-type  sci-data0 == scj-data0 
 sci-data1 == scj-data1))
+   if(!(sci-type == scj-type  sci-data0 == scj-data0 
 sci-data1 == scj-data1  sci-data2 == scj-data2))
continue;
 
if(CLOSURE_IS_BSDF_OR_BSSRDF(sci-type)) {
diff --git a/intern/cycles/kernel/svm/svm_closure.h 
b/intern/cycles/kernel/svm/svm_closure.h
index 20a6cb8..20105fd 100644
--- a/intern/cycles/kernel/svm/svm_closure.h
+++ b/intern/cycles/kernel/svm/svm_closure.h
@@ -30,6 +30,7 @@ ccl_device void svm_node_glass_setup(ShaderData *sd, 
ShaderClosure *sc, int type
else {
sc-data0 = 0.0f;
sc-data1 = 0.0f;
+   sc-data2 = 0.0f;
ccl_fetch(sd, flag) |= bsdf_reflection_setup(sc);
}
}
@@ -393,6 +394,7 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg, 
ShaderData *sd, float *
sc-N = N;
sc-data0 = 0.0f;
sc-data1 = 0.0f;
+   sc-data2 = 0.0f;
ccl_fetch(sd, flag) |= 
bsdf_transparent_setup(sc);
}
}
@@ -545,6 +547,7 @@ ccl_device void svm_node_closure_volume(KernelGlobals *kg, 
ShaderData *sd, float
if(sc) {
sc-data0 = param2; /* g */
sc-data1 = 0.0f;
+   sc-data2 = 0.0f;
ccl_fetch(sd, flag) |= 
volume_henyey_greenstein_setup(sc);
}
break;

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [d49703b] master: Fix SCons path issue on Windows.

2015-07-29 Thread Thomas Dinges
Commit: d49703b298ebab297fe3c3ecb337cd0a6fa78611
Author: Thomas Dinges
Date:   Wed Jul 29 21:48:24 2015 +0200
Branches: master
https://developer.blender.org/rBd49703b298ebab297fe3c3ecb337cd0a6fa78611

Fix SCons path issue on Windows.

===

M   intern/audaspace/SConscript

===

diff --git a/intern/audaspace/SConscript b/intern/audaspace/SConscript
index 2975545..8dfaa86 100644
--- a/intern/audaspace/SConscript
+++ b/intern/audaspace/SConscript
@@ -21,12 +21,14 @@
 #
 # * END LGPL LICENSE BLOCK *
 
+from os import path
 Import ('env')
 
 sources = env.Glob('intern/*.cpp') + env.Glob('FX/*.cpp')
 
 # AUD_PyInit is for external audaspace only
-sources.remove('intern/AUD_PyInit.cpp')
+sources.remove(path.join('intern', 'AUD_PyInit.cpp'))
+
 
 incs = '. intern FX ' + env['BF_PTHREADS_INC'] + ' ' + env['BF_BOOST_INC']
 defs = []

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] SVN commit: /data/svn/repos/bf-blender [61538] trunk/lib/benchmarks/cycles /pabellon_barcelona/reference: Cycles benchmark: Add reference images for barcelona

2015-07-29 Thread Sergey Sharybin
Revision: 61538
  https://developer.blender.org/rBL61538
Author:   sergey
Date: 2015-07-29 09:33:59 + (Wed, 29 Jul 2015)
Log Message:
---
Cycles benchmark: Add reference images for barcelona

The files are rendered with 32K samples and intended to be used for checking
convergence of the test renders.

All the files are rendered with the same light path settings as sunset scene.

Added Paths:
---
trunk/lib/benchmarks/cycles/pabellon_barcelona/reference/

trunk/lib/benchmarks/cycles/pabellon_barcelona/reference/barcelona_midday_32768s.exr

trunk/lib/benchmarks/cycles/pabellon_barcelona/reference/barcelona_night_32768s.exr

trunk/lib/benchmarks/cycles/pabellon_barcelona/reference/barcelona_sunset_32768s.exr
trunk/lib/benchmarks/cycles/pabellon_barcelona/reference/readme.txt

Added: 
trunk/lib/benchmarks/cycles/pabellon_barcelona/reference/barcelona_midday_32768s.exr
===
(Binary files differ)

Index: 
trunk/lib/benchmarks/cycles/pabellon_barcelona/reference/barcelona_midday_32768s.exr
===
--- 
trunk/lib/benchmarks/cycles/pabellon_barcelona/reference/barcelona_midday_32768s.exr
2015-07-21 16:09:23 UTC (rev 61537)
+++ 
trunk/lib/benchmarks/cycles/pabellon_barcelona/reference/barcelona_midday_32768s.exr
2015-07-29 09:33:59 UTC (rev 61538)

Property changes on: 
trunk/lib/benchmarks/cycles/pabellon_barcelona/reference/barcelona_midday_32768s.exr
___
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: 
trunk/lib/benchmarks/cycles/pabellon_barcelona/reference/barcelona_night_32768s.exr
===
(Binary files differ)

Index: 
trunk/lib/benchmarks/cycles/pabellon_barcelona/reference/barcelona_night_32768s.exr
===
--- 
trunk/lib/benchmarks/cycles/pabellon_barcelona/reference/barcelona_night_32768s.exr
 2015-07-21 16:09:23 UTC (rev 61537)
+++ 
trunk/lib/benchmarks/cycles/pabellon_barcelona/reference/barcelona_night_32768s.exr
 2015-07-29 09:33:59 UTC (rev 61538)

Property changes on: 
trunk/lib/benchmarks/cycles/pabellon_barcelona/reference/barcelona_night_32768s.exr
___
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: 
trunk/lib/benchmarks/cycles/pabellon_barcelona/reference/barcelona_sunset_32768s.exr
===
(Binary files differ)

Index: 
trunk/lib/benchmarks/cycles/pabellon_barcelona/reference/barcelona_sunset_32768s.exr
===
--- 
trunk/lib/benchmarks/cycles/pabellon_barcelona/reference/barcelona_sunset_32768s.exr
2015-07-21 16:09:23 UTC (rev 61537)
+++ 
trunk/lib/benchmarks/cycles/pabellon_barcelona/reference/barcelona_sunset_32768s.exr
2015-07-29 09:33:59 UTC (rev 61538)

Property changes on: 
trunk/lib/benchmarks/cycles/pabellon_barcelona/reference/barcelona_sunset_32768s.exr
___
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/lib/benchmarks/cycles/pabellon_barcelona/reference/readme.txt
===
--- trunk/lib/benchmarks/cycles/pabellon_barcelona/reference/readme.txt 
(rev 0)
+++ trunk/lib/benchmarks/cycles/pabellon_barcelona/reference/readme.txt 
2015-07-29 09:33:59 UTC (rev 61538)
@@ -0,0 +1 @@
+All the images were rendered with the same light path settings as sunset scene.
\ No newline at end of file

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [d4b5dd3] master: ImBuf: Fixes for openexr images

2015-07-29 Thread Sergey Sharybin
Commit: d4b5dd31a360313734f78a112daf4fd8f26fceb5
Author: Sergey Sharybin
Date:   Wed Jul 29 11:59:29 2015 +0200
Branches: master
https://developer.blender.org/rBd4b5dd31a360313734f78a112daf4fd8f26fceb5

ImBuf: Fixes for openexr images

- Fixed crash loading multilayer EXR
- Fixed another memory leak loading multilayer EXR

===

M   source/blender/imbuf/intern/openexr/openexr_api.cpp

===

diff --git a/source/blender/imbuf/intern/openexr/openexr_api.cpp 
b/source/blender/imbuf/intern/openexr/openexr_api.cpp
index 33555f0..e3c0273 100644
--- a/source/blender/imbuf/intern/openexr/openexr_api.cpp
+++ b/source/blender/imbuf/intern/openexr/openexr_api.cpp
@@ -1560,7 +1560,6 @@ static ExrHandle *imb_exr_begin_read_mem(IStream 
file_stream, MultiPartInputFil
std::vectorMultiViewChannelName channels;
GetChannelsInMultiPartFile(*data-ifile, channels);
 
-   data-multiView = new StringVector();
imb_exr_get_views(*data-ifile, *data-multiView);
 
for (size_t i = 0; i  channels.size(); i++) {
@@ -2048,13 +2047,19 @@ struct ImBuf *imb_load_openexr(const unsigned char 
*mem, size_t size, int flags,
}
}
 
+   /* file is no longer needed */
+   delete membuf;
+   delete file;
}
}
+   else {
+   delete membuf;
+   delete file;
+   }
+
if (flags  IB_alphamode_detect)
ibuf-flags |= IB_alphamode_premul;
}
-   delete file;
-   delete membuf;
return(ibuf);
}
catch (const std::exception exc)

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [8e9534a] master: OpenSubdiv: Make empty meshes supported and not crashing

2015-07-29 Thread Sergey Sharybin
Commit: 8e9534a850e593e7cd7bbb35c4326bb69eb5b58c
Author: Sergey Sharybin
Date:   Wed Jul 29 13:09:49 2015 +0200
Branches: master
https://developer.blender.org/rB8e9534a850e593e7cd7bbb35c4326bb69eb5b58c

OpenSubdiv: Make empty meshes supported and not crashing

===

M   intern/opensubdiv/opensubdiv_capi.cc
M   source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c

===

diff --git a/intern/opensubdiv/opensubdiv_capi.cc 
b/intern/opensubdiv/opensubdiv_capi.cc
index 717af4f..e3bc589 100644
--- a/intern/opensubdiv/opensubdiv_capi.cc
+++ b/intern/opensubdiv/opensubdiv_capi.cc
@@ -292,7 +292,7 @@ void openSubdiv_osdGLMeshBindVertexBuffer(OpenSubdiv_GLMesh 
*gl_mesh)
 const struct OpenSubdiv_TopologyRefinerDescr 
*openSubdiv_getGLMeshTopologyRefiner(
 OpenSubdiv_GLMesh *gl_mesh)
 {
-   return gl_mesh-topology_refiner;;
+   return gl_mesh-topology_refiner;
 }
 
 int openSubdiv_supportGPUDisplay(void)
diff --git a/source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c 
b/source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c
index d3898d9..57cf397 100644
--- a/source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c
+++ b/source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c
@@ -243,6 +243,12 @@ bool ccgSubSurf_prepareGLMesh(CCGSubSurf *ss, bool 
use_osd_glsl)
}
 
if (ss-osd_mesh == NULL) {
+   if (ss-osd_topology_refiner == NULL) {
+   /* Happens with empty meshes. */
+   /* TODO(sergey): Add assert thet mesh is indeed empty. 
*/
+   return false;
+   }
+
ss-osd_mesh = openSubdiv_createOsdGLMeshFromTopologyRefiner(
ss-osd_topology_refiner,
compute_type,
@@ -408,13 +414,21 @@ static bool opensubdiv_createEvaluator(CCGSubSurf *ss)
 {
OpenSubdiv_Converter converter;
OpenSubdiv_TopologyRefinerDescr *topology_refiner;
+   if (ss-fMap-numEntries == 0) {
+   /* OpenSubdiv doesn't support meshes withut faces. */
+   return false;
+   }
ccgSubSurf_converter_setup_from_ccg(ss, converter);
topology_refiner = openSubdiv_createTopologyRefinerDescr(converter);
ccgSubSurf_converter_free(converter);
ss-osd_evaluator =
openSubdiv_createEvaluatorDescr(topology_refiner,
ss-subdivLevels);
-   return ss-osd_evaluator != NULL;
+   if (ss-osd_evaluator == NULL) {
+   BLI_assert(!OpenSubdiv initializetion failed, should not 
happen.);
+   return false;
+   }
+   return true;
 }
 
 static bool opensubdiv_ensureEvaluator(CCGSubSurf *ss)
@@ -779,11 +793,13 @@ CCGError ccgSubSurf_initOpenSubdivSync(CCGSubSurf *ss)
 void ccgSubSurf_prepareTopologyRefiner(CCGSubSurf *ss, DerivedMesh *dm)
 {
if (ss-osd_mesh == NULL || ss-osd_mesh_invalid) {
-   OpenSubdiv_Converter converter;
-   ccgSubSurf_converter_setup_from_derivedmesh(ss, dm, converter);
-   /* TODO(sergey): Remove possibly previously allocated refiner. 
*/
-   ss-osd_topology_refiner = 
openSubdiv_createTopologyRefinerDescr(converter);
-   ccgSubSurf_converter_free(converter);
+   if (dm-getNumPolys(dm) != 0) {
+   OpenSubdiv_Converter converter;
+   ccgSubSurf_converter_setup_from_derivedmesh(ss, dm, 
converter);
+   /* TODO(sergey): Remove possibly previously allocated 
refiner. */
+   ss-osd_topology_refiner = 
openSubdiv_createTopologyRefinerDescr(converter);
+   ccgSubSurf_converter_free(converter);
+   }
}
 
/* Update number of grids, needed for things like final faces
@@ -837,9 +853,6 @@ void ccgSubSurf__sync_opensubdiv(CCGSubSurf *ss)
/* Evaluate opensubdiv mesh into the CCG grids. */
opensubdiv_evaluateGrids(ss);
}
-   else {
-   BLI_assert(!OpenSubdiv initializetion failed, should 
not happen.);
-   }
}
else {
BLI_assert(ss-meshIFC.numLayers == 3);
@@ -853,16 +866,22 @@ void ccgSubSurf__sync_opensubdiv(CCGSubSurf *ss)
 static const OpenSubdiv_TopologyRefinerDescr *get_effective_refiner(
 const CCGSubSurf *ss)
 {
-   if (ss-osd_topology_refiner) {
+   if (ss-osd_topology_refiner != NULL) {
return ss-osd_topology_refiner;
}
-   return openSubdiv_getGLMeshTopologyRefiner(ss-osd_mesh);
+   if (ss-osd_mesh != NULL) {
+   return openSubdiv_getGLMeshTopologyRefiner(ss-osd_mesh);
+   }
+   return 0;
 }
 
 int ccgSubSurf__getNumOsdBaseVerts(const CCGSubSurf *ss)
 {
const 

[Bf-blender-cvs] [792d665] master: Remove not really helpful debug print

2015-07-29 Thread Sergey Sharybin
Commit: 792d66527b1d699e8faa3a2e7a22c4b4d5dd9baa
Author: Sergey Sharybin
Date:   Wed Jul 29 12:01:41 2015 +0200
Branches: master
https://developer.blender.org/rB792d66527b1d699e8faa3a2e7a22c4b4d5dd9baa

Remove not really helpful debug print

If it's still considered useful please move it inside G.debug or ifdef code.

===

M   source/blender/render/intern/source/render_result.c

===

diff --git a/source/blender/render/intern/source/render_result.c 
b/source/blender/render/intern/source/render_result.c
index 639ce20..a03bf3c 100644
--- a/source/blender/render/intern/source/render_result.c
+++ b/source/blender/render/intern/source/render_result.c
@@ -912,7 +912,6 @@ RenderResult *render_result_new_from_exr(void *exrhandle, 
const char *colorspace
BLI_listbase_sort(rl-passes, order_render_passes);
 
for (rpass = rl-passes.first; rpass; rpass = rpass-next) {
-   printf(%d: %s\n, c++, rpass-name);
rpass-rectx = rectx;
rpass-recty = recty;

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [ba32d9d] master: Expose bvhtree_sphereray_tri_intersection for general use

2015-07-29 Thread Campbell Barton
Commit: ba32d9d4cd2ad256722a4405d2b1909ec8d4d811
Author: Campbell Barton
Date:   Wed Jul 29 21:14:16 2015 +1000
Branches: master
https://developer.blender.org/rBba32d9d4cd2ad256722a4405d2b1909ec8d4d811

Expose bvhtree_sphereray_tri_intersection for general use

===

M   source/blender/blenkernel/BKE_bvhutils.h
M   source/blender/blenkernel/intern/bvhutils.c

===

diff --git a/source/blender/blenkernel/BKE_bvhutils.h 
b/source/blender/blenkernel/BKE_bvhutils.h
index d8eaa35..18eda63 100644
--- a/source/blender/blenkernel/BKE_bvhutils.h
+++ b/source/blender/blenkernel/BKE_bvhutils.h
@@ -125,6 +125,9 @@ void free_bvhtree_from_mesh(struct BVHTreeFromMesh *data);
 float bvhtree_ray_tri_intersection(
 const BVHTreeRay *ray, const float m_dist,
 const float v0[3], const float v1[3], const float v2[3]);
+float bvhtree_sphereray_tri_intersection(
+const BVHTreeRay *ray, float radius, const float m_dist,
+const float v0[3], const float v1[3], const float v2[3]);
 float nearest_point_in_tri_surface_squared(
 const float v0[3], const float v1[3], const float v2[3],
 const float p[3], int *v, int *e, float nearest[3]);
diff --git a/source/blender/blenkernel/intern/bvhutils.c 
b/source/blender/blenkernel/intern/bvhutils.c
index a7a9dc1..6131153 100644
--- a/source/blender/blenkernel/intern/bvhutils.c
+++ b/source/blender/blenkernel/intern/bvhutils.c
@@ -66,7 +66,7 @@ float bvhtree_ray_tri_intersection(
return FLT_MAX;
 }
 
-static float sphereray_tri_intersection(
+float bvhtree_sphereray_tri_intersection(
 const BVHTreeRay *ray, float radius, const float m_dist,
 const float v0[3], const float v1[3], const float v2[3])
 {
@@ -194,7 +194,7 @@ static void mesh_faces_spherecast(void *userdata, int 
index, const BVHTreeRay *r
if (data-sphere_radius == 0.0f)
dist = bvhtree_ray_tri_intersection(ray, hit-dist, t0, 
t1, t2);
else
-   dist = sphereray_tri_intersection(ray, 
data-sphere_radius, hit-dist, t0, t1, t2);
+   dist = bvhtree_sphereray_tri_intersection(ray, 
data-sphere_radius, hit-dist, t0, t1, t2);
 
if (dist = 0  dist  hit-dist) {
hit-index = index;
@@ -229,7 +229,7 @@ static void mesh_looptri_spherecast(void *userdata, int 
index, const BVHTreeRay
if (data-sphere_radius == 0.0f)
dist = bvhtree_ray_tri_intersection(ray, hit-dist, 
UNPACK3(vtri_co));
else
-   dist = sphereray_tri_intersection(ray, data-sphere_radius, 
hit-dist, UNPACK3(vtri_co));
+   dist = bvhtree_sphereray_tri_intersection(ray, 
data-sphere_radius, hit-dist, UNPACK3(vtri_co));
 
if (dist = 0  dist  hit-dist) {
hit-index = index;
@@ -257,7 +257,7 @@ static void editmesh_faces_spherecast(void *userdata, int 
index, const BVHTreeRa
if (data-sphere_radius == 0.0f)
dist = bvhtree_ray_tri_intersection(ray, hit-dist, t0, 
t1, t2);
else
-   dist = sphereray_tri_intersection(ray, 
data-sphere_radius, hit-dist, t0, t1, t2);
+   dist = bvhtree_sphereray_tri_intersection(ray, 
data-sphere_radius, hit-dist, t0, t1, t2);
 
if (dist = 0  dist  hit-dist) {
hit-index = index;

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [18af73e] master: Add mathutils.bvhtree API

2015-07-29 Thread Campbell Barton
Commit: 18af73e461f9a943ae606fcc1401297f4afad20f
Author: Campbell Barton
Date:   Wed Jul 29 21:16:28 2015 +1000
Branches: master
https://developer.blender.org/rB18af73e461f9a943ae606fcc1401297f4afad20f

Add mathutils.bvhtree API

Originally D966 by @lukastoenne, with own additions

- trees can be initialized from Object's, BMesh,
  or passed in as vert+polygon arrays.
- original indices of ngons/faces are used. (instead of tessellated indices).
- ray_cast, find_nearest methods
- find overlapping faces between 2 trees

===

M   doc/python_api/sphinx_doc_gen.py
M   source/blender/python/mathutils/CMakeLists.txt
M   source/blender/python/mathutils/mathutils.c
A   source/blender/python/mathutils/mathutils_bvhtree.c
A   source/blender/python/mathutils/mathutils_bvhtree.h

===

diff --git a/doc/python_api/sphinx_doc_gen.py b/doc/python_api/sphinx_doc_gen.py
index 05ea0d0..4e14706 100644
--- a/doc/python_api/sphinx_doc_gen.py
+++ b/doc/python_api/sphinx_doc_gen.py
@@ -263,6 +263,7 @@ else:
 gpu,
 mathutils,
 mathutils.geometry,
+mathutils.bvhtree,
 mathutils.kdtree,
 mathutils.noise,
 freestyle,
@@ -1644,7 +1645,7 @@ def write_rst_contents(basepath):
 
 standalone_modules = (
 # mathutils
-mathutils, mathutils.geometry, mathutils.kdtree, 
mathutils.noise,
+mathutils, mathutils.geometry, mathutils.bvhtree, 
mathutils.kdtree, mathutils.noise,
 # misc
 freestyle, bgl, blf, gpu, aud, bpy_extras,
 # bmesh, submodules are in own page
@@ -1796,6 +1797,7 @@ def write_rst_importable_modules(basepath):
 bpy.props: Property Definitions,
 mathutils: Math Types  Utilities,
 mathutils.geometry   : Geometry Utilities,
+mathutils.bvhtree: BVHTree Utilities,
 mathutils.kdtree : KDTree Utilities,
 mathutils.noise  : Noise Utilities,
 freestyle: Freestyle Module,
diff --git a/source/blender/python/mathutils/CMakeLists.txt 
b/source/blender/python/mathutils/CMakeLists.txt
index ef6b090..f70f893 100644
--- a/source/blender/python/mathutils/CMakeLists.txt
+++ b/source/blender/python/mathutils/CMakeLists.txt
@@ -22,6 +22,7 @@ set(INC
.
../../blenlib
../../blenkernel
+   ../../bmesh
../../makesdna
../../../../intern/guardedalloc
 )
@@ -37,6 +38,7 @@ set(SRC
mathutils_Matrix.c
mathutils_Quaternion.c
mathutils_Vector.c
+   mathutils_bvhtree.c
mathutils_geometry.c
mathutils_interpolate.c
mathutils_kdtree.c
@@ -48,6 +50,7 @@ set(SRC
mathutils_Matrix.h
mathutils_Quaternion.h
mathutils_Vector.h
+   mathutils_bvhtree.h
mathutils_geometry.h
mathutils_interpolate.h
mathutils_kdtree.h
diff --git a/source/blender/python/mathutils/mathutils.c 
b/source/blender/python/mathutils/mathutils.c
index ba7f351..ec249e8 100644
--- a/source/blender/python/mathutils/mathutils.c
+++ b/source/blender/python/mathutils/mathutils.c
@@ -600,6 +600,7 @@ static struct PyModuleDef M_Mathutils_module_def = {
 #include mathutils_geometry.h
 #include mathutils_interpolate.h
 #ifndef MATH_STANDALONE
+#  include mathutils_bvhtree.h
 #  include mathutils_kdtree.h
 #  include mathutils_noise.h
 #endif
@@ -653,6 +654,11 @@ PyMODINIT_FUNC PyInit_mathutils(void)
PyDict_SetItemString(sys_modules, PyModule_GetName(submodule), 
submodule);
Py_INCREF(submodule);
 
+   /* BVHTree submodule */
+   PyModule_AddObject(mod, bvhtree, (submodule = 
PyInit_mathutils_bvhtree()));
+   PyDict_SetItemString(sys_modules, PyModule_GetName(submodule), 
submodule);
+   Py_INCREF(submodule);
+
/* KDTree submodule */
PyModule_AddObject(mod, kdtree, (submodule = 
PyInit_mathutils_kdtree()));
PyDict_SetItemString(sys_modules, PyModule_GetName(submodule), 
submodule);
diff --git a/source/blender/python/mathutils/mathutils_bvhtree.c 
b/source/blender/python/mathutils/mathutils_bvhtree.c
new file mode 100644
index 000..b3b9532
--- /dev/null
+++ b/source/blender/python/mathutils/mathutils_bvhtree.c
@@ -0,0 +1,1193 @@
+/*
+ * * BEGIN GPL LICENSE BLOCK *
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along 

[Bf-blender-cvs] [18c0a15] master: Cleanup

2015-07-29 Thread Campbell Barton
Commit: 18c0a15e1ebaa94177b848a2dc6ccc96a38dc5ed
Author: Campbell Barton
Date:   Wed Jul 29 20:18:22 2015 +1000
Branches: master
https://developer.blender.org/rB18c0a15e1ebaa94177b848a2dc6ccc96a38dc5ed

Cleanup

===

M   source/blender/editors/space_view3d/drawmesh.c
M   source/blender/render/intern/source/render_result.c

===

diff --git a/source/blender/editors/space_view3d/drawmesh.c 
b/source/blender/editors/space_view3d/drawmesh.c
index 6085f0c..d806dfa 100644
--- a/source/blender/editors/space_view3d/drawmesh.c
+++ b/source/blender/editors/space_view3d/drawmesh.c
@@ -662,7 +662,7 @@ static void update_tface_color_layer(DerivedMesh *dm, bool 
use_mcol)
copy_mode = COPY_PREV;
}
else if (ma  (ma-shade_flag  MA_OBCOLOR)) {
-   int loop_index = mp-loopstart;;
+   int loop_index = mp-loopstart;
for (j = 0; j  mp-totloop; j++, loop_index++) {
copy_v3_v3_char(finalCol[loop_index].r, (char 
*)Gtexdraw.obcol);
}
diff --git a/source/blender/render/intern/source/render_result.c 
b/source/blender/render/intern/source/render_result.c
index a03bf3c..27fc412 100644
--- a/source/blender/render/intern/source/render_result.c
+++ b/source/blender/render/intern/source/render_result.c
@@ -905,7 +905,6 @@ RenderResult *render_result_new_from_exr(void *exrhandle, 
const char *colorspace
IMB_exr_multilayer_convert(exrhandle, rr, ml_addview_cb, 
ml_addlayer_cb, ml_addpass_cb);
 
for (rl = rr-layers.first; rl; rl = rl-next) {
-   int c=0;
rl-rectx = rectx;
rl-recty = recty;

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [8b84c5f] master: Port optimization from gooseberry branch:

2015-07-29 Thread Antony Riakiotakis
Commit: 8b84c5f9de32e42e835a15aa1ef05504d0a4c198
Author: Antony Riakiotakis
Date:   Wed Jul 29 12:52:03 2015 +0200
Branches: master
https://developer.blender.org/rB8b84c5f9de32e42e835a15aa1ef05504d0a4c198

Port optimization from gooseberry branch:

Treat scrubbing as animation.

This is checked during various updates to avoid
some costly calculations.

===

M   source/blender/blenloader/intern/readfile.c
M   source/blender/editors/animation/anim_ops.c
M   source/blender/editors/screen/screen_edit.c
M   source/blender/editors/screen/screen_ops.c
M   source/blender/editors/space_graph/graph_ops.c
M   source/blender/makesdna/DNA_screen_types.h

===

diff --git a/source/blender/blenloader/intern/readfile.c 
b/source/blender/blenloader/intern/readfile.c
index 90aafa9..541b401 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -5948,6 +5948,7 @@ static void lib_link_screen(FileData *fd, Main *main)
sc-scene = main-scene.first;
 
sc-animtimer = NULL; /* saved in rare cases */
+   sc-scrubbing = false;

for (sa = sc-areabase.first; sa; sa = sa-next) {
SpaceLink *sl;
diff --git a/source/blender/editors/animation/anim_ops.c 
b/source/blender/editors/animation/anim_ops.c
index 2de4293..20d1dbe 100644
--- a/source/blender/editors/animation/anim_ops.c
+++ b/source/blender/editors/animation/anim_ops.c
@@ -148,18 +148,24 @@ static void change_frame_seq_preview_begin(bContext *C, 
const wmEvent *event)
 {
ScrArea *sa = CTX_wm_area(C);
if (sa  sa-spacetype == SPACE_SEQ) {
+   wmWindow *win = CTX_wm_window(C);
SpaceSeq *sseq = sa-spacedata.first;
if (ED_space_sequencer_check_show_strip(sseq)) {
ED_sequencer_special_preview_set(C, event-mval);
}
+   if (win-screen)
+   win-screen-scrubbing = true;
}
 }
 static void change_frame_seq_preview_end(bContext *C)
 {
if (ED_sequencer_special_preview_get() != NULL) {
+   wmWindow *win = CTX_wm_window(C);
Scene *scene = CTX_data_scene(C);
ED_sequencer_special_preview_clear();
WM_event_add_notifier(C, NC_SCENE | ND_FRAME, scene);
+   if (win-screen)
+   win-screen-scrubbing = false;
}
 }
 
diff --git a/source/blender/editors/screen/screen_edit.c 
b/source/blender/editors/screen/screen_edit.c
index 0c40c83..ae0d261 100644
--- a/source/blender/editors/screen/screen_edit.c
+++ b/source/blender/editors/screen/screen_edit.c
@@ -1314,7 +1314,8 @@ void ED_screen_exit(bContext *C, wmWindow *window, 
bScreen *screen)
if (screen-animtimer)
WM_event_remove_timer(wm, window, screen-animtimer);
screen-animtimer = NULL;
-   
+   screen-scrubbing = false;
+
if (screen-mainwin)
wm_subwindow_close(window, screen-mainwin);
screen-mainwin = 0;
diff --git a/source/blender/editors/screen/screen_ops.c 
b/source/blender/editors/screen/screen_ops.c
index 571dab6..b157c91 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -3626,7 +3626,7 @@ bScreen *ED_screen_animation_playing(const 
wmWindowManager *wm)
wmWindow *win;
 
for (win = wm-windows.first; win; win = win-next) {
-   if (win-screen-animtimer) {
+   if (win-screen-animtimer || win-screen-scrubbing) {
return win-screen;
}
}
diff --git a/source/blender/editors/space_graph/graph_ops.c 
b/source/blender/editors/space_graph/graph_ops.c
index f4cce29..93773a1 100644
--- a/source/blender/editors/space_graph/graph_ops.c
+++ b/source/blender/editors/space_graph/graph_ops.c
@@ -139,6 +139,7 @@ static void graphview_cursor_setprops(bContext *C, 
wmOperator *op, const wmEvent
 /* Modal Operator init */
 static int graphview_cursor_invoke(bContext *C, wmOperator *op, const wmEvent 
*event)
 {
+   wmWindow *win = CTX_wm_window(C);
/* Change to frame that mouse is over before adding modal handler,
 * as user could click on a single frame (jump to frame) as well as
 * click-dragging over a range (modal scrubbing).
@@ -148,6 +149,9 @@ static int graphview_cursor_invoke(bContext *C, wmOperator 
*op, const wmEvent *e
/* apply these changes first */
graphview_cursor_apply(C, op);

+   if (win-screen)
+   win-screen-scrubbing = true;
+
/* add temp handler */
WM_event_add_modal_handler(C, op);
return OPERATOR_RUNNING_MODAL;
@@ -156,9 +160,12 @@ static int 

[Bf-blender-cvs] [90655d0] master: Math Lib: add isect_tri_tri_epsilon_v3 function

2015-07-29 Thread Campbell Barton
Commit: 90655d06d410b831ff199cfc6f080004cf08ce8c
Author: Campbell Barton
Date:   Wed Jul 29 17:48:38 2015 +1000
Branches: master
https://developer.blender.org/rB90655d06d410b831ff199cfc6f080004cf08ce8c

Math Lib: add isect_tri_tri_epsilon_v3 function

===

M   source/blender/blenlib/BLI_math_geom.h
M   source/blender/blenlib/intern/math_geom.c

===

diff --git a/source/blender/blenlib/BLI_math_geom.h 
b/source/blender/blenlib/BLI_math_geom.h
index 8820b88..5124da4 100644
--- a/source/blender/blenlib/BLI_math_geom.h
+++ b/source/blender/blenlib/BLI_math_geom.h
@@ -187,6 +187,11 @@ bool isect_ray_tri_threshold_v3(const float p1[3], const 
float d[3],
 const float v0[3], const float v1[3], const 
float v2[3], float *r_lambda, float r_uv[2], const float threshold);
 bool isect_ray_tri_epsilon_v3(const float p1[3], const float d[3],
   const float v0[3], const float v1[3], const 
float v2[3], float *r_lambda, float r_uv[2], const float epsilon);
+bool isect_tri_tri_epsilon_v3(
+const float t_a0[3], const float t_a1[3], const float t_a2[3],
+const float t_b0[3], const float t_b1[3], const float t_b2[3],
+float r_i1[3], float r_i2[3],
+const float epsilon);
 
 /* point in polygon */
 bool isect_point_poly_v2(const float pt[2], const float verts[][2], const 
unsigned int nr, const bool use_holes);
diff --git a/source/blender/blenlib/intern/math_geom.c 
b/source/blender/blenlib/intern/math_geom.c
index 3fb6de4..e05cd7c 100644
--- a/source/blender/blenlib/intern/math_geom.c
+++ b/source/blender/blenlib/intern/math_geom.c
@@ -1475,6 +1475,84 @@ bool isect_plane_plane_v3(float r_isect_co[3], float 
r_isect_no[3],
return isect_line_plane_v3(r_isect_co, plane_a_co, plane_a_co_other, 
plane_b_co, plane_b_no);
 }
 
+/**
+ * Intersect two triangles.
+ *
+ * \param r_i1, r_i2: Optional arguments to retrieve the overlapping edge 
between the 2 triangles.
+ * \return true when the triangles intersect.
+ *
+ * \note intersections between coplanar triangles are currently undetected.
+ */
+bool isect_tri_tri_epsilon_v3(
+const float t_a0[3], const float t_a1[3], const float t_a2[3],
+const float t_b0[3], const float t_b1[3], const float t_b2[3],
+float r_i1[3], float r_i2[3],
+const float epsilon)
+{
+   const float *tri_pair[2][3] = {{t_a0, t_a1, t_a2}, {t_b0, t_b1, t_b2}};
+   float no_a[3], no_b[3];
+   float isect_co[3], isect_no[3];
+
+   BLI_assert((r_i1 != NULL) == (r_i2 != NULL));
+
+   normal_tri_v3(no_a, UNPACK3(tri_pair[0]));
+   normal_tri_v3(no_b, UNPACK3(tri_pair[1]));
+
+   if (isect_plane_plane_v3(isect_co, isect_no, t_a0, no_a, t_b0, no_b)) {
+   float isect_co_other[3];
+   struct {
+   float min, max;
+   } range[2] = {{FLT_MAX, -FLT_MAX}, {FLT_MAX, -FLT_MAX}};
+   int t;
+
+   add_v3_v3v3(isect_co_other, isect_co, isect_no);
+
+   /* For both triangles, find the overlap with the line defined 
by (isect_co, isect_co_other).
+* When the ranges overlap we know the triangles do too. */
+   for (t = 0; t  2; t++) {
+   int j, j_prev;
+
+   for (j = 0, j_prev = 2; j  3; j_prev = j++) {
+   /* intersection point on the line intersecting 
both planes */
+   float ix_span[3];
+   /* intersection point on the triangles edge */
+   float ix_tri[3];
+
+   if (isect_line_line_epsilon_v3(
+   isect_co, isect_co_other,
+   tri_pair[t][j], tri_pair[t][j_prev],
+   ix_span, ix_tri,
+   epsilon) == 2)
+   {
+   const float edge_fac = 
line_point_factor_v3(ix_tri, tri_pair[t][j], tri_pair[t][j_prev]);
+   if (edge_fac = -epsilon  edge_fac = 
1.0f + epsilon) {
+   const float span_fac = 
dist_signed_squared_to_plane3_v3(ix_tri, isect_no);
+   range[t].min = 
min_ff(range[t].min, span_fac);
+   range[t].max = 
max_ff(range[t].max, span_fac);
+   }
+   }
+   }
+
+   if (range[t].min == FLT_MAX) {
+   return false;
+   }
+   }
+
+   if (((range[0].min  range[1].max) ||
+(range[0].max  

[Bf-blender-cvs] [cbf936a] master: Gooseberry animation feature: Add toggle that disables modifiers on fcurves.

2015-07-29 Thread Antony Riakiotakis
Commit: cbf936a332728212c380c4761853d2d41981
Author: Antony Riakiotakis
Date:   Wed Apr 15 15:58:25 2015 +0200
Branches: master
https://developer.blender.org/rBcbf936a332728212c380c4761853d2d41981

Gooseberry animation feature: Add toggle that disables modifiers on fcurves.

Feature is found as per channel option in graph editor.

===

M   source/blender/blenkernel/intern/fmodifier.c
M   source/blender/editors/animation/anim_channels_defines.c
M   source/blender/editors/include/ED_anim_api.h
M   source/blender/editors/space_graph/graph_buttons.c
M   source/blender/makesdna/DNA_action_types.h
M   source/blender/makesdna/DNA_anim_types.h

===

diff --git a/source/blender/blenkernel/intern/fmodifier.c 
b/source/blender/blenkernel/intern/fmodifier.c
index 396a260..6e78d08 100644
--- a/source/blender/blenkernel/intern/fmodifier.c
+++ b/source/blender/blenkernel/intern/fmodifier.c
@@ -1398,7 +1398,10 @@ float evaluate_time_fmodifiers(FModifierStackStorage 
*storage, ListBase *modifie
/* sanity checks */
if (ELEM(NULL, modifiers, modifiers-last))
return evaltime;
-   
+
+   if (fcu-flag  FCURVE_MOD_OFF)
+   return evaltime;
+
/* Starting from the end of the stack, calculate the time effects of 
various stacked modifiers 
 * on the time the F-Curve should be evaluated at. 
 *
@@ -1455,6 +1458,9 @@ void evaluate_value_fmodifiers(FModifierStackStorage 
*storage, ListBase *modifie
/* sanity checks */
if (ELEM(NULL, modifiers, modifiers-first))
return;
+
+   if (fcu-flag  FCURVE_MOD_OFF)
+   return;

/* evaluate modifiers */
for (fcm = modifiers-first; fcm; fcm = fcm-next) {
diff --git a/source/blender/editors/animation/anim_channels_defines.c 
b/source/blender/editors/animation/anim_channels_defines.c
index 61dc638..db222f9 100644
--- a/source/blender/editors/animation/anim_channels_defines.c
+++ b/source/blender/editors/animation/anim_channels_defines.c
@@ -867,7 +867,11 @@ static int acf_group_setting_flag(bAnimContext *ac, 
eAnimChannel_Settings settin

case ACHANNEL_SETTING_MUTE: /* muted */
return AGRP_MUTED;
-   
+
+   case ACHANNEL_SETTING_MOD_OFF: /* muted */
+   *neg = 1;
+   return AGRP_MODIFIERS_OFF;
+
case ACHANNEL_SETTING_PROTECT: /* protected */
return AGRP_PROTECTED;

@@ -985,6 +989,10 @@ static int acf_fcurve_setting_flag(bAnimContext 
*UNUSED(ac), eAnimChannel_Settin
case ACHANNEL_SETTING_VISIBLE: /* visibility - graph editor */
return FCURVE_VISIBLE;

+   case ACHANNEL_SETTING_MOD_OFF:
+   *neg = 1;
+   return FCURVE_MOD_OFF;
+
default: /* unsupported */
return 0;
}
@@ -3979,6 +3987,7 @@ static void draw_setting_widget(bAnimContext *ac, 
bAnimListElem *ale, const bAni
 {
short ptrsize, butType;
bool negflag;
+   bool usetoggle = true;
int flag, icon;
void *ptr;
const char *tooltip;
@@ -4000,7 +4009,13 @@ static void draw_setting_widget(bAnimContext *ac, 
bAnimListElem *ale, const bAni
else
tooltip = TIP_(Channels are visible in Graph 
Editor for editing);
break;
-   
+
+   case ACHANNEL_SETTING_MOD_OFF:  /* modifiers disabled */
+   icon = ICON_MODIFIER;
+   usetoggle = false;
+   tooltip = TIP_(F-Curve modifiers are disabled);
+   break;
+
case ACHANNEL_SETTING_EXPAND: /* expanded triangle */
//icon = ((enabled) ? ICON_TRIA_DOWN : ICON_TRIA_RIGHT);
icon = ICON_TRIA_RIGHT;
@@ -4061,11 +4076,18 @@ static void draw_setting_widget(bAnimContext *ac, 
bAnimListElem *ale, const bAni
}

/* type of button */
-   if (negflag)
-   butType = UI_BTYPE_ICON_TOGGLE_N;
-   else
-   butType = UI_BTYPE_ICON_TOGGLE;
-   
+   if (usetoggle) {
+   if (negflag)
+   butType = UI_BTYPE_ICON_TOGGLE_N;
+   else
+   butType = UI_BTYPE_ICON_TOGGLE;
+   }
+   else {
+   if (negflag)
+   butType = UI_BTYPE_TOGGLE_N;
+   else
+   butType = UI_BTYPE_TOGGLE;
+   }
/* draw button for setting */
if (ptr  flag) {
switch (ptrsize) {
@@ 

[Bf-blender-cvs] [a3b8661] master: Do not show fps while scrubbing.

2015-07-29 Thread Antony Riakiotakis
Commit: a3b86611a8182a95c5ed2205b0b71bfcc8f0837b
Author: Antony Riakiotakis
Date:   Fri Jun 5 16:47:01 2015 +0200
Branches: master
https://developer.blender.org/rBa3b86611a8182a95c5ed2205b0b71bfcc8f0837b

Do not show fps while scrubbing.

===

M   source/blender/editors/include/ED_screen.h
M   source/blender/editors/screen/screen_ops.c
M   source/blender/editors/space_view3d/view3d_draw.c

===

diff --git a/source/blender/editors/include/ED_screen.h 
b/source/blender/editors/include/ED_screen.h
index 588b046..c8f1239 100644
--- a/source/blender/editors/include/ED_screen.h
+++ b/source/blender/editors/include/ED_screen.h
@@ -124,6 +124,7 @@ voidED_update_for_newframe(struct Main *bmain, struct 
Scene *scene, int mute
 voidED_refresh_viewport_fps(struct bContext *C);
 intED_screen_animation_play(struct bContext *C, int sync, int 
mode);
 bScreen*ED_screen_animation_playing(const struct wmWindowManager *wm);
+bScreen *ED_screen_animation_no_scrub(const struct wmWindowManager *wm);
 
 /* screen keymaps */
 voidED_operatortypes_screen(void);
diff --git a/source/blender/editors/screen/screen_ops.c 
b/source/blender/editors/screen/screen_ops.c
index b157c91..1d31cc0 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -3634,6 +3634,20 @@ bScreen *ED_screen_animation_playing(const 
wmWindowManager *wm)
return NULL;
 }
 
+bScreen *ED_screen_animation_no_scrub(const wmWindowManager *wm)
+{
+   wmWindow *win;
+
+   for (win = wm-windows.first; win; win = win-next) {
+   if (win-screen-animtimer) {
+   return win-screen;
+   }
+   }
+
+   return NULL;
+}
+
+
 /* toggle operator */
 int ED_screen_animation_play(bContext *C, int sync, int mode)
 {
diff --git a/source/blender/editors/space_view3d/view3d_draw.c 
b/source/blender/editors/space_view3d/view3d_draw.c
index 0f4e05c..7f553fe 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -3877,7 +3877,7 @@ static void view3d_main_area_draw_info(const bContext *C, 
Scene *scene,
if ((v3d-flag2  V3D_RENDER_OVERRIDE) == 0) {
wmWindowManager *wm = CTX_wm_manager(C);
 
-   if ((U.uiflag  USER_SHOW_FPS)  
ED_screen_animation_playing(wm)) {
+   if ((U.uiflag  USER_SHOW_FPS)  
ED_screen_animation_no_scrub(wm)) {
ED_scene_draw_fps(scene, rect);
}
else if (U.uiflag  USER_SHOW_VIEWPORTNAME) {

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [ce1bc18] master: Clean channels tool for Hwoozeberry.

2015-07-29 Thread Antony Riakiotakis
Commit: ce1bc1838b611b53fe06dc3ead81eb4b0460634b
Author: Antony Riakiotakis
Date:   Wed May 20 15:30:33 2015 +0200
Branches: master
https://developer.blender.org/rBce1bc1838b611b53fe06dc3ead81eb4b0460634b

Clean channels tool for Hwoozeberry.

Basically it's a clean keyframes tool, but also removes a channel if the
only remaining keyframe has the default value only and is not used by
drivers or generative modifiers.

It's was used to help with performance of keyframe-heavy scenes in
gooseberry.

Note, as always the curve left after the clean tool is used is not the
same as the original, so this tool is better used before doing custom
editing of fcurves and after initial keyframe insertion, to get rid
of any unwanted keyframes inserted while doing mass keyframe insertion
(by selecting all bones and pressing I for instance)

===

M   release/scripts/startup/bl_ui/space_dopesheet.py
M   release/scripts/startup/bl_ui/space_graph.py
M   source/blender/editors/animation/keyframes_general.c
M   source/blender/editors/include/ED_keyframes_edit.h
M   source/blender/editors/space_action/action_edit.c
M   source/blender/editors/space_graph/graph_edit.c

===

diff --git a/release/scripts/startup/bl_ui/space_dopesheet.py 
b/release/scripts/startup/bl_ui/space_dopesheet.py
index 0b7502b..7fd9719 100644
--- a/release/scripts/startup/bl_ui/space_dopesheet.py
+++ b/release/scripts/startup/bl_ui/space_dopesheet.py
@@ -339,6 +339,7 @@ class DOPESHEET_MT_key(Menu):
 
 layout.separator()
 layout.operator(action.clean)
+layout.operator(action.clean, text=Clean Channels).channels = True
 layout.operator(action.sample)
 
 layout.separator()
@@ -421,6 +422,8 @@ class DOPESHEET_MT_delete(Menu):
 layout.separator()
 
 layout.operator(action.clean)
+layout.operator(action.clean, text=Clean Channels).channels = True
+
 
 if __name__ == __main__:  # only for live edit.
 bpy.utils.register_module(__name__)
diff --git a/release/scripts/startup/bl_ui/space_graph.py 
b/release/scripts/startup/bl_ui/space_graph.py
index 2f5381e..104fd14 100644
--- a/release/scripts/startup/bl_ui/space_graph.py
+++ b/release/scripts/startup/bl_ui/space_graph.py
@@ -258,6 +258,7 @@ class GRAPH_MT_key(Menu):
 
 layout.separator()
 layout.operator(graph.clean)
+layout.operator(graph.clean, text=Clean Channels).channels = True
 layout.operator(graph.smooth)
 layout.operator(graph.sample)
 layout.operator(graph.bake)
@@ -293,6 +294,7 @@ class GRAPH_MT_delete(Menu):
 layout.separator()
 
 layout.operator(graph.clean)
+layout.operator(graph.clean, text=Clean Channels).channels = True
 
 
 if __name__ == __main__:  # only for live edit.
diff --git a/source/blender/editors/animation/keyframes_general.c 
b/source/blender/editors/animation/keyframes_general.c
index c198184..cb49c2f 100644
--- a/source/blender/editors/animation/keyframes_general.c
+++ b/source/blender/editors/animation/keyframes_general.c
@@ -179,17 +179,22 @@ void duplicate_fcurve_keys(FCurve *fcu)
 /*  */
 /* Various Tools */
 
-/* Basic F-Curve 'cleanup' function that removes 'double points' and 
unnecessary keyframes on linear-segments only */
-void clean_fcurve(FCurve *fcu, float thresh)
+/* Basic F-Curve 'cleanup' function that removes 'double points' and 
unnecessary keyframes on linear-segments only
+ * optionally clears up curve if one keyframe with default value remains */
+void clean_fcurve(struct bAnimContext *ac, bAnimListElem *ale, float thresh, 
bool cleardefault)
 {
+   FCurve *fcu = (FCurve *)ale-key_data;
BezTriple *old_bezts, *bezt, *beztn;
BezTriple *lastb;
int totCount, i;

/* check if any points  */
-   if ((fcu == NULL) || (fcu-bezt == NULL) || (fcu-totvert = 1))
+   if ((fcu == NULL) || (fcu-bezt == NULL) || (fcu-totvert == 0) ||
+   (!cleardefault  fcu-totvert == 1))
+   {
return;
-   
+   }
+
/* make a copy of the old BezTriples, and clear F-Curve */
old_bezts = fcu-bezt;
totCount = fcu-totvert;
@@ -284,6 +289,34 @@ void clean_fcurve(FCurve *fcu, float thresh)
/* now free the memory used by the old BezTriples */
if (old_bezts)
MEM_freeN(old_bezts);
+
+   /* final step, if there is just one key in fcurve, check if it's
+* the default value and if is, remove fcurve completely. */
+   if (cleardefault  fcu-totvert == 1) {
+   float default_value = 0.0f;
+   PointerRNA id_ptr, ptr;
+   PropertyRNA *prop;
+   RNA_id_pointer_create(ale-id, id_ptr);
+
+   /* get property to read from, and get value as appropriate */
+  

[Bf-blender-cvs] [7b82308] master: Cleanup: safe-free macro for collision modifier

2015-07-29 Thread Campbell Barton
Commit: 7b8230898e396230efc85750f8de47727be9f6cd
Author: Campbell Barton
Date:   Thu Jul 30 15:43:07 2015 +1000
Branches: master
https://developer.blender.org/rB7b8230898e396230efc85750f8de47727be9f6cd

Cleanup: safe-free macro for collision modifier

===

M   source/blender/modifiers/intern/MOD_collision.c

===

diff --git a/source/blender/modifiers/intern/MOD_collision.c 
b/source/blender/modifiers/intern/MOD_collision.c
index 931f82c..8590177 100644
--- a/source/blender/modifiers/intern/MOD_collision.c
+++ b/source/blender/modifiers/intern/MOD_collision.c
@@ -67,30 +67,20 @@ static void freeData(ModifierData *md)
CollisionModifierData *collmd = (CollisionModifierData *) md;

if (collmd) {
-   if (collmd-bvhtree)
+   if (collmd-bvhtree) {
BLI_bvhtree_free(collmd-bvhtree);
-   if (collmd-x)
-   MEM_freeN(collmd-x);
-   if (collmd-xnew)
-   MEM_freeN(collmd-xnew);
-   if (collmd-current_x)
-   MEM_freeN(collmd-current_x);
-   if (collmd-current_xnew)
-   MEM_freeN(collmd-current_xnew);
-   if (collmd-current_v)
-   MEM_freeN(collmd-current_v);
-   if (collmd-mfaces)
-   MEM_freeN(collmd-mfaces);
-   
-   collmd-x = NULL;
-   collmd-xnew = NULL;
-   collmd-current_x = NULL;
-   collmd-current_xnew = NULL;
-   collmd-current_v = NULL;
+   collmd-bvhtree = NULL;
+   }
+
+   MEM_SAFE_FREE(collmd-x);
+   MEM_SAFE_FREE(collmd-xnew);
+   MEM_SAFE_FREE(collmd-current_x);
+   MEM_SAFE_FREE(collmd-current_xnew);
+   MEM_SAFE_FREE(collmd-current_v);
+   MEM_SAFE_FREE(collmd-mfaces);
+
collmd-time_x = collmd-time_xnew = -1000;
collmd-numverts = 0;
-   collmd-bvhtree = NULL;
-   collmd-mfaces = NULL;
}
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [5fabcd0] master: Use looptri for smoke bvhtree

2015-07-29 Thread Campbell Barton
Commit: 5fabcd099b09d67269703ba1864e49df7f55563a
Author: Campbell Barton
Date:   Thu Jul 30 14:50:51 2015 +1000
Branches: master
https://developer.blender.org/rB5fabcd099b09d67269703ba1864e49df7f55563a

Use looptri for smoke bvhtree

Missed from D1424

===

M   source/blender/blenkernel/intern/smoke.c

===

diff --git a/source/blender/blenkernel/intern/smoke.c 
b/source/blender/blenkernel/intern/smoke.c
index e802b29..2637969 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -1662,7 +1662,7 @@ static void emit_from_derivedmesh(Object *flow_ob, 
SmokeDomainSettings *sds, Smo
res[i] = em-res[i] * hires_multiplier;
}
 
-   if (bvhtree_from_mesh_faces(treeData, dm, 0.0f, 4, 6)) {
+   if (bvhtree_from_mesh_looptri(treeData, dm, 0.0f, 4, 6)) {
 #pragma omp parallel for schedule(static)
for (z = min[2]; z  max[2]; z++) {
int x, y;
@@ -2650,7 +2650,7 @@ static void smokeModifier_process(SmokeModifierData *smd, 
Scene *scene, Object *
 
if (smd-flow-dm) smd-flow-dm-release(smd-flow-dm);
smd-flow-dm = CDDM_copy(dm);
-   DM_ensure_tessface(smd-flow-dm);
+   DM_ensure_looptri(smd-flow-dm);
 
if (scene-r.cfra  smd-time)
{
@@ -2673,7 +2673,7 @@ static void smokeModifier_process(SmokeModifierData *smd, 
Scene *scene, Object *
smd-coll-dm-release(smd-coll-dm);
 
smd-coll-dm = CDDM_copy(dm);
-   DM_ensure_tessface(smd-coll-dm);
+   DM_ensure_looptri(smd-coll-dm);
}
 
smd-time = scene-r.cfra;

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [75e387d] master: error reordering args

2015-07-29 Thread Campbell Barton
Commit: 75e387d6c568f48e085553547b0cb2f2c9cada99
Author: Campbell Barton
Date:   Thu Jul 30 09:49:12 2015 +1000
Branches: master
https://developer.blender.org/rB75e387d6c568f48e085553547b0cb2f2c9cada99

error reordering args

===

M   source/blender/render/intern/source/render_texture.c

===

diff --git a/source/blender/render/intern/source/render_texture.c 
b/source/blender/render/intern/source/render_texture.c
index fc95cf8..b282ec0 100644
--- a/source/blender/render/intern/source/render_texture.c
+++ b/source/blender/render/intern/source/render_texture.c
@@ -3527,8 +3527,9 @@ void render_realtime_texture(ShadeInput *shi, Image *ima)
 /* A modified part of shadeinput.c - shade_input_set_uv()
  *  Used for sampling UV mapped texture color */
 static void textured_face_generate_uv(
-float r_uv[2], const float normal[3], const float hit[3],
-const float v1[3], const float v2[3], const float v3[3])
+const float normal[3], const float hit[3],
+const float v1[3], const float v2[3], const float v3[3],
+float r_uv[2])
 {
 
float detsh, t00, t10, t01, t11;
@@ -3733,7 +3734,7 @@ void RE_sample_material_color(
const float *uv1, *uv2, *uv3;
const CustomData *data = 
orcoDm-loopData;
const MLoopUV *mloopuv = 
data-layers[layer_index + i].data;
-   const float uv[2];
+   float uv[2];
float l;
 
/* point layer name from actual layer 
data */

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [9f92a40] experimental-build: Merge remote-tracking branch 'origin/master' into experimental-build

2015-07-29 Thread Dalai Felinto
Commit: 9f92a40f224cfa3241b7c13d03793e6d05482a22
Author: Dalai Felinto
Date:   Wed Jul 29 11:29:37 2015 -0300
Branches: experimental-build
https://developer.blender.org/rB9f92a40f224cfa3241b7c13d03793e6d05482a22

Merge remote-tracking branch 'origin/master' into experimental-build

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [a1a4d50] experimental-build: Spherical Stereo - now building for OSX too

2015-07-29 Thread Dalai Felinto
Commit: a1a4d50cf5d1981f5fceb806749e4fa260d8aefc
Author: Dalai Felinto
Date:   Wed Jul 29 11:30:08 2015 -0300
Branches: experimental-build
https://developer.blender.org/rBa1a4d50cf5d1981f5fceb806749e4fa260d8aefc

Spherical Stereo - now building for OSX too

===

M   intern/cycles/app/cycles_xml.cpp
M   intern/cycles/blender/addon/properties.py
M   intern/cycles/blender/blender_camera.cpp
M   intern/cycles/blender/blender_session.cpp
M   intern/cycles/blender/blender_sync.h
M   intern/cycles/kernel/kernel_camera.h
M   intern/cycles/kernel/kernel_projection.h
M   intern/cycles/kernel/kernel_types.h
M   intern/cycles/render/camera.cpp
M   intern/cycles/render/camera.h
M   release/scripts/startup/bl_ui/properties_data_camera.py
M   source/blender/makesrna/intern/rna_render.c
M   source/blender/render/extern/include/RE_engine.h
M   source/blender/render/intern/source/external_engine.c
M   source/blenderplayer/bad_level_call_stubs/stubs.c

===

diff --git a/intern/cycles/app/cycles_xml.cpp b/intern/cycles/app/cycles_xml.cpp
index edea8cd..25da1be 100644
--- a/intern/cycles/app/cycles_xml.cpp
+++ b/intern/cycles/app/cycles_xml.cpp
@@ -359,6 +359,10 @@ static void xml_read_camera(const XMLReadState state, 
pugi::xml_node node)
xml_read_float(cam-fisheye_fov, node, fisheye_fov);
xml_read_float(cam-fisheye_lens, node, fisheye_lens);
 
+   xml_read_float(cam-use_spherical_stereo, node, 
use_spherical_stereo);
+   xml_read_float(cam-interocular_distance, node, 
interocular_distance);
+   xml_read_float(cam-convergence_distance, node, 
convergence_distance);
+
xml_read_float(cam-sensorwidth, node, sensorwidth);
xml_read_float(cam-sensorheight, node, sensorheight);
 
diff --git a/intern/cycles/blender/addon/properties.py 
b/intern/cycles/blender/addon/properties.py
index 3417435..4d38e50 100644
--- a/intern/cycles/blender/addon/properties.py
+++ b/intern/cycles/blender/addon/properties.py
@@ -630,6 +630,12 @@ class CyclesCameraSettings(bpy.types.PropertyGroup):
 subtype='ANGLE',
 default=math.pi,
 )
+cls.use_spherical_stereo = BoolProperty(
+name=Spherical Stereo,
+description=Render every pixel rotating the camera around the 

+middle of the interocular distance,
+default=True,
+)
 
 @classmethod
 def unregister(cls):
diff --git a/intern/cycles/blender/blender_camera.cpp 
b/intern/cycles/blender/blender_camera.cpp
index 0a79bfb..6fb2856 100644
--- a/intern/cycles/blender/blender_camera.cpp
+++ b/intern/cycles/blender/blender_camera.cpp
@@ -57,6 +57,9 @@ struct BlenderCamera {
float latitude_max;
float longitude_min;
float longitude_max;
+   bool use_spherical_stereo;
+   float interocular_distance;
+   float convergence_distance;
 
enum { AUTO, HORIZONTAL, VERTICAL } sensor_fit;
float sensor_width;
@@ -95,7 +98,24 @@ static void blender_camera_init(BlenderCamera *bcam, 
BL::RenderSettings b_render
bcam-full_height = render_resolution_y(b_render);
 }
 
-static float blender_camera_focal_distance(BL::RenderEngine b_engine, 
BL::Object b_ob, BL::Camera b_camera)
+static float camera_shift_x(BL::RenderEngine b_engine, BL::Object b_ob, 
BL::Camera b_camera, bool use_spherical_stereo)
+{
+   if(use_spherical_stereo)
+   return b_camera.shift_x();
+   else
+   return b_engine.camera_shift_x(b_ob);
+}
+
+static void camera_model_matrix(BL::RenderEngine b_engine, BL::Object b_ob, 
bool use_spherical_stereo,
+BL::Arrayfloat, 16 r_matrix)
+{
+   if(use_spherical_stereo)
+   memcpy(r_matrix, b_ob.matrix_world(), sizeof(float)*16);
+   else
+   b_engine.camera_model_matrix(b_ob, r_matrix);
+}
+
+static float blender_camera_focal_distance(BL::RenderEngine b_engine, 
BL::Object b_ob, BL::Camera b_camera, bool use_spherical_stereo)
 {
BL::Object b_dof_object = b_camera.dof_object();
 
@@ -104,15 +124,28 @@ static float 
blender_camera_focal_distance(BL::RenderEngine b_engine, BL::Object

/* for dof object, return distance along camera Z direction */
BL::Arrayfloat, 16 b_ob_matrix;
-   b_engine.camera_model_matrix(b_ob, b_ob_matrix);
-   Transform obmat = get_transform(b_ob_matrix);
+   camera_model_matrix(b_engine, b_ob, use_spherical_stereo, b_ob_matrix);
+   Transform obmat = transform_clear_scale(get_transform(b_ob_matrix));
Transform dofmat = get_transform(b_dof_object.matrix_world());
Transform mat = transform_inverse(obmat) * dofmat;
 
return fabsf(transform_get_column(mat, 3).z);
 }
 
-static void 

[Bf-blender-cvs] [7481c61] experimental-build: Revert Spherical Stereo - now building for OSX too

2015-07-29 Thread Dalai Felinto
Commit: 7481c61b67ae216e917ec80d6e6c1bd26e4bce7e
Author: Dalai Felinto
Date:   Wed Jul 29 11:30:36 2015 -0300
Branches: experimental-build
https://developer.blender.org/rB7481c61b67ae216e917ec80d6e6c1bd26e4bce7e

Revert Spherical Stereo - now building for OSX too

This reverts commit a1a4d50cf5d1981f5fceb806749e4fa260d8aefc.

===

M   intern/cycles/app/cycles_xml.cpp
M   intern/cycles/blender/addon/properties.py
M   intern/cycles/blender/blender_camera.cpp
M   intern/cycles/blender/blender_session.cpp
M   intern/cycles/blender/blender_sync.h
M   intern/cycles/kernel/kernel_camera.h
M   intern/cycles/kernel/kernel_projection.h
M   intern/cycles/kernel/kernel_types.h
M   intern/cycles/render/camera.cpp
M   intern/cycles/render/camera.h
M   release/scripts/startup/bl_ui/properties_data_camera.py
M   source/blender/makesrna/intern/rna_render.c
M   source/blender/render/extern/include/RE_engine.h
M   source/blender/render/intern/source/external_engine.c
M   source/blenderplayer/bad_level_call_stubs/stubs.c

===

diff --git a/intern/cycles/app/cycles_xml.cpp b/intern/cycles/app/cycles_xml.cpp
index 25da1be..edea8cd 100644
--- a/intern/cycles/app/cycles_xml.cpp
+++ b/intern/cycles/app/cycles_xml.cpp
@@ -359,10 +359,6 @@ static void xml_read_camera(const XMLReadState state, 
pugi::xml_node node)
xml_read_float(cam-fisheye_fov, node, fisheye_fov);
xml_read_float(cam-fisheye_lens, node, fisheye_lens);
 
-   xml_read_float(cam-use_spherical_stereo, node, 
use_spherical_stereo);
-   xml_read_float(cam-interocular_distance, node, 
interocular_distance);
-   xml_read_float(cam-convergence_distance, node, 
convergence_distance);
-
xml_read_float(cam-sensorwidth, node, sensorwidth);
xml_read_float(cam-sensorheight, node, sensorheight);
 
diff --git a/intern/cycles/blender/addon/properties.py 
b/intern/cycles/blender/addon/properties.py
index 4d38e50..3417435 100644
--- a/intern/cycles/blender/addon/properties.py
+++ b/intern/cycles/blender/addon/properties.py
@@ -630,12 +630,6 @@ class CyclesCameraSettings(bpy.types.PropertyGroup):
 subtype='ANGLE',
 default=math.pi,
 )
-cls.use_spherical_stereo = BoolProperty(
-name=Spherical Stereo,
-description=Render every pixel rotating the camera around the 

-middle of the interocular distance,
-default=True,
-)
 
 @classmethod
 def unregister(cls):
diff --git a/intern/cycles/blender/blender_camera.cpp 
b/intern/cycles/blender/blender_camera.cpp
index 6fb2856..0a79bfb 100644
--- a/intern/cycles/blender/blender_camera.cpp
+++ b/intern/cycles/blender/blender_camera.cpp
@@ -57,9 +57,6 @@ struct BlenderCamera {
float latitude_max;
float longitude_min;
float longitude_max;
-   bool use_spherical_stereo;
-   float interocular_distance;
-   float convergence_distance;
 
enum { AUTO, HORIZONTAL, VERTICAL } sensor_fit;
float sensor_width;
@@ -98,24 +95,7 @@ static void blender_camera_init(BlenderCamera *bcam, 
BL::RenderSettings b_render
bcam-full_height = render_resolution_y(b_render);
 }
 
-static float camera_shift_x(BL::RenderEngine b_engine, BL::Object b_ob, 
BL::Camera b_camera, bool use_spherical_stereo)
-{
-   if(use_spherical_stereo)
-   return b_camera.shift_x();
-   else
-   return b_engine.camera_shift_x(b_ob);
-}
-
-static void camera_model_matrix(BL::RenderEngine b_engine, BL::Object b_ob, 
bool use_spherical_stereo,
-BL::Arrayfloat, 16 r_matrix)
-{
-   if(use_spherical_stereo)
-   memcpy(r_matrix, b_ob.matrix_world(), sizeof(float)*16);
-   else
-   b_engine.camera_model_matrix(b_ob, r_matrix);
-}
-
-static float blender_camera_focal_distance(BL::RenderEngine b_engine, 
BL::Object b_ob, BL::Camera b_camera, bool use_spherical_stereo)
+static float blender_camera_focal_distance(BL::RenderEngine b_engine, 
BL::Object b_ob, BL::Camera b_camera)
 {
BL::Object b_dof_object = b_camera.dof_object();
 
@@ -124,28 +104,15 @@ static float 
blender_camera_focal_distance(BL::RenderEngine b_engine, BL::Object

/* for dof object, return distance along camera Z direction */
BL::Arrayfloat, 16 b_ob_matrix;
-   camera_model_matrix(b_engine, b_ob, use_spherical_stereo, b_ob_matrix);
-   Transform obmat = transform_clear_scale(get_transform(b_ob_matrix));
+   b_engine.camera_model_matrix(b_ob, b_ob_matrix);
+   Transform obmat = get_transform(b_ob_matrix);
Transform dofmat = get_transform(b_dof_object.matrix_world());
Transform mat = transform_inverse(obmat) * dofmat;
 
return 

[Bf-blender-cvs] [5b31669] temp_display_optimization: Merge branch 'master' into temp_display_optimization

2015-07-29 Thread Antony Riakiotakis
Commit: 5b316690edcc23298df2aebf3f5a6eb2a87250f6
Author: Antony Riakiotakis
Date:   Wed Jul 29 16:37:43 2015 +0200
Branches: temp_display_optimization
https://developer.blender.org/rB5b316690edcc23298df2aebf3f5a6eb2a87250f6

Merge branch 'master' into temp_display_optimization

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [3067917] master: Audaspace: fixes for building with Quicktime on Mac.

2015-07-29 Thread Jörg Müller
Commit: 30679179dd6af2fad61df0430951a37853aeb5b6
Author: Jörg Müller
Date:   Wed Jul 29 16:12:46 2015 +0200
Branches: master
https://developer.blender.org/rB30679179dd6af2fad61df0430951a37853aeb5b6

Audaspace: fixes for building with Quicktime on Mac.

===

M   CMakeLists.txt
M   source/blender/makesrna/SConscript
M   source/blender/quicktime/CMakeLists.txt
M   source/blender/quicktime/SConscript
M   source/blender/quicktime/apple/qtkit_export.m

===

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 591942c..c2c0e8e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -714,24 +714,29 @@ endif()
 
 if(WITH_AUDASPACE)
if(WITH_SYSTEM_AUDASPACE)
-   add_definitions(-DAUD_DEVICE_H=AUD_Device.h)
-   add_definitions(-DAUD_SPECIAL_H=AUD_Special.h)
-   add_definitions(-DAUD_SOUND_H=AUD_Sound.h)
-   add_definitions(-DAUD_HANDLE_H=AUD_Handle.h)
-   add_definitions(-DAUD_SEQUENCE_H=AUD_Sequence.h)
-   add_definitions(-DAUD_TYPES_H=AUD_Types.h)
-   add_definitions(-DAUD_PYTHON_H=python/PyAPI.h)
-   set(AUDASPACE_DEFINITIONS -DWITH_AUDASPACE 
-DWITH_SYSTEM_AUDASPACE)
+   set(AUDASPACE_DEFINITIONS
+   -DWITH_AUDASPACE
+   -DWITH_SYSTEM_AUDASPACE
+   -DAUD_DEVICE_H=AUD_Device.h
+   -DAUD_SPECIAL_H=AUD_Special.h
+   -DAUD_SOUND_H=AUD_Sound.h
+   -DAUD_HANDLE_H=AUD_Handle.h
+   -DAUD_SEQUENCE_H=AUD_Sequence.h
+   -DAUD_TYPES_H=AUD_Types.h
+   -DAUD_PYTHON_H=python/PyAPI.h
+   )
else()
-   add_definitions(-DAUD_DEVICE_H=AUD_C-API.h)
-   add_definitions(-DAUD_SPECIAL_H=AUD_C-API.h)
-   add_definitions(-DAUD_SOUND_H=AUD_C-API.h)
-   add_definitions(-DAUD_HANDLE_H=AUD_C-API.h)
-   add_definitions(-DAUD_SEQUENCE_H=AUD_C-API.h)
-   add_definitions(-DAUD_TYPES_H=AUD_Space.h)
set(AUDASPACE_C_INCLUDE_DIRS 
${CMAKE_SOURCE_DIR}/intern/audaspace/intern)
set(AUDASPACE_PY_INCLUDE_DIRS 
${CMAKE_SOURCE_DIR}/intern/audaspace/intern)
-   set(AUDASPACE_DEFINITIONS -DWITH_AUDASPACE)
+   set(AUDASPACE_DEFINITIONS
+   -DWITH_AUDASPACE
+   -DAUD_DEVICE_H=AUD_C-API.h
+   -DAUD_SPECIAL_H=AUD_C-API.h
+   -DAUD_SOUND_H=AUD_C-API.h
+   -DAUD_HANDLE_H=AUD_C-API.h
+   -DAUD_SEQUENCE_H=AUD_C-API.h
+   -DAUD_TYPES_H=AUD_Space.h
+   )
endif()
 endif()
 
diff --git a/source/blender/makesrna/SConscript 
b/source/blender/makesrna/SConscript
index 4b05a0d..089fbe1 100644
--- a/source/blender/makesrna/SConscript
+++ b/source/blender/makesrna/SConscript
@@ -99,6 +99,10 @@ if env['WITH_BF_FFMPEG']:
 if env['WITH_BF_QUICKTIME']:
 defs.append('WITH_QUICKTIME')
 incs += ' ../quicktime'
+# Quicktime needs audaspace defines
+if env['WITH_BF_AUDASPACE']:
+defs += env['BF_AUDASPACE_DEF']
+incs += ' ' + env['BF_AUDASPACE_C_INC']
 
 if env['WITH_BF_GAMEENGINE']:
 defs.append('WITH_GAMEENGINE')
diff --git a/source/blender/quicktime/CMakeLists.txt 
b/source/blender/quicktime/CMakeLists.txt
index b0a8c92..f853c35 100644
--- a/source/blender/quicktime/CMakeLists.txt
+++ b/source/blender/quicktime/CMakeLists.txt
@@ -52,10 +52,11 @@ set(SRC
 add_definitions(-DWITH_QUICKTIME)
 
 if(WITH_AUDASPACE)
-   list(APPEND INC
-   ../../../intern/audaspace/intern
+   add_definitions(${AUDASPACE_DEFINITIONS})
+
+   list(APPEND INC_SYS
+   ${AUDASPACE_C_INCLUDE_DIRS}
)
-   add_definitions(-DWITH_AUDASPACE)
 endif()
 
 blender_add_lib(bf_quicktime ${SRC} ${INC} ${INC_SYS})
diff --git a/source/blender/quicktime/SConscript 
b/source/blender/quicktime/SConscript
index 9b367a4..746662e 100644
--- a/source/blender/quicktime/SConscript
+++ b/source/blender/quicktime/SConscript
@@ -44,8 +44,7 @@ incs  = ['.',
  '../imbuf',
  '../imbuf/intern',
  '../render/extern/include',
- '../editors/include',
- '#/intern/audaspace/intern']
+ '../editors/include']
 
 incs.append(env['BF_QUICKTIME_INC'])
 
@@ -54,6 +53,10 @@ priorities = [200,235]
 
 defs=['WITH_QUICKTIME']
 
+if env['WITH_BF_AUDASPACE']:
+defs += env['BF_AUDASPACE_DEF']
+incs.append(env['BF_AUDASPACE_C_INC'])
+
 if env['C_COMPILER_ID'] == 'gcc' and  env['CCVERSION'] = '4.6': # always use 
default-Apple-gcc for objC language, gnu-compilers do not support it fully yet
 env.BlenderLib ('bf_quicktime', sources=source_files, includes=incs, 
defines=defs, libtype=types, 

[Bf-blender-cvs] [becf20e] master: Fix T45605 crash with editmode selection on solidify modifier.

2015-07-29 Thread Antony Riakiotakis
Commit: becf20e29f606cff01d2e6595572b86e734a01d4
Author: Antony Riakiotakis
Date:   Wed Jul 29 16:18:33 2015 +0200
Branches: master
https://developer.blender.org/rBbecf20e29f606cff01d2e6595572b86e734a01d4

Fix T45605 crash with editmode selection on solidify modifier.

Looks like derivedmesh draw code always assumed a mesh is available.
Make sure that if we use a bmesh, a flag is used to control that.

===

M   source/blender/blenkernel/BKE_DerivedMesh.h
M   source/blender/blenkernel/intern/cdderivedmesh.c
M   source/blender/editors/space_view3d/drawobject.c

===

diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h 
b/source/blender/blenkernel/BKE_DerivedMesh.h
index 32baa45..6b33198 100644
--- a/source/blender/blenkernel/BKE_DerivedMesh.h
+++ b/source/blender/blenkernel/BKE_DerivedMesh.h
@@ -151,6 +151,7 @@ typedef enum DMDrawFlag {
DM_DRAW_USE_TEXPAINT_UV = (1  3),
DM_DRAW_SKIP_HIDDEN = (1  4),
DM_DRAW_SKIP_SELECT = (1  5),
+   DM_DRAW_SELECT_USE_EDITMODE = (1  6)
 } DMDrawFlag;
 
 typedef enum DMForeachFlag {
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c 
b/source/blender/blenkernel/intern/cdderivedmesh.c
index 6a76603..b5ff4f6 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -654,9 +654,15 @@ static void cdDM_drawMappedFaces(
/* if we do selection, fill the selection buffer color */
if (G.f  G_BACKBUFSEL) {
if (!(flag  DM_DRAW_SKIP_SELECT)) {
-   Mesh *me = userData;
+   Mesh *me = NULL;
+   BMesh *bm = NULL;
unsigned int *fi_map;
 
+   if (flag  DM_DRAW_SELECT_USE_EDITMODE)
+   bm = userData;
+   else
+   me = userData;
+
findex_buffer = 
GPU_buffer_alloc(dm-drawObject-tot_loop_verts * sizeof(int), false);
fi_map = GPU_buffer_lock(findex_buffer, 
GPU_BINDING_ARRAY);
 
@@ -664,10 +670,22 @@ static void cdDM_drawMappedFaces(
for (i = 0; i  totpoly; i++, mpoly++) {
int selcol = 0x;
const int orig = (index_mp_to_orig) ? 
index_mp_to_orig[i] : i;
+   bool is_hidden;
 
-   if ((orig != ORIGINDEX_NONE)  
(!useHide || !(me-mpoly[orig].flag  ME_HIDE))) {
-   WM_framebuffer_index_get(orig + 
1, selcol);
+   if (useHide) {
+   if (flag  
DM_DRAW_SELECT_USE_EDITMODE) {
+   BMFace *efa = 
BM_face_at_index(bm, orig);
+   is_hidden = 
BM_elem_flag_test(efa, BM_ELEM_HIDDEN) != 0;
+   }
+   else {
+   is_hidden = 
(me-mpoly[orig].flag  ME_HIDE) != 0;
+   }
+
+   if ((orig != ORIGINDEX_NONE)  
!is_hidden)
+   
WM_framebuffer_index_get(orig + 1, selcol);
}
+   else if (orig != ORIGINDEX_NONE)
+   WM_framebuffer_index_get(orig + 
1, selcol);
 
for (j = 0; j  mpoly-totloop; j++)
fi_map[start_element++] = 
selcol;
diff --git a/source/blender/editors/space_view3d/drawobject.c 
b/source/blender/editors/space_view3d/drawobject.c
index fee6805..f03b008 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -8445,7 +8445,7 @@ static void bbs_mesh_solid_EM(BMEditMesh *em, Scene 
*scene, View3D *v3d,
cpack(0);
 
if (use_faceselect) {
-   dm-drawMappedFaces(dm, bbs_mesh_solid__setSolidDrawOptions, 
NULL, NULL, em-bm, DM_DRAW_SKIP_HIDDEN);
+   dm-drawMappedFaces(dm, bbs_mesh_solid__setSolidDrawOptions, 
NULL, NULL, em-bm, DM_DRAW_SKIP_HIDDEN | DM_DRAW_SELECT_USE_EDITMODE);
 
if (check_ob_drawface_dot(scene, v3d, ob-dt)) {
glPointSize(UI_GetThemeValuef(TH_FACEDOT_SIZE));
@@ -8457,7 +8457,7 @@ static void bbs_mesh_solid_EM(BMEditMesh *em, Scene 
*scene, View3D *v3d,
 
}
else {
-   dm-drawMappedFaces(dm, bbs_mesh_mask__setSolidDrawOptions,