Cycles: Fixes for recent refactor
authorSergey Sharybin <sergey.vfx@gmail.com>
Tue, 31 May 2016 13:32:31 +0000 (15:32 +0200)
committerSergey Sharybin <sergey.vfx@gmail.com>
Tue, 31 May 2016 13:32:31 +0000 (15:32 +0200)
- add_vertex() can be called from split_vertex() which does not guarantee
  to have properly pre-allocate arrays.

- Need to check whether Cycles is compiled with OSL in XML reader.

intern/cycles/app/cycles_xml.cpp
intern/cycles/render/mesh.cpp
intern/cycles/render/mesh.h

index 6f9cbe37a5828f76973bb5ec21778b404b5a770b..9f967a4bde909e9316710bfdc21d7c9f3218d8cf 100644 (file)
@@ -306,6 +306,7 @@ static void xml_read_shader_graph(XMLReadState& state, Shader *shader, pugi::xml
 
                        snode = env;
                }
+#ifdef WITH_OSL
                else if(string_iequals(node.name(), "osl_shader")) {
                        if(manager->use_osl()) {
                                std::string filepath;
@@ -329,6 +330,7 @@ static void xml_read_shader_graph(XMLReadState& state, Shader *shader, pugi::xml
                                fprintf(stderr, "OSL node without using --shadingsys osl.\n");
                        }
                }
+#endif
                else if(string_iequals(node.name(), "sky_texture")) {
                        SkyTextureNode *sky = new SkyTextureNode();
                        
index d92226d69103b82b10f1d747b81a285e6119e106..755b16a51c7ff4c44a1d32eaefed2e942e3c2433 100644 (file)
@@ -206,7 +206,7 @@ void Mesh::clear()
 int Mesh::split_vertex(int vertex)
 {
        /* copy vertex location and vertex attributes */
-       add_vertex(verts[vertex]);
+       add_vertex_slow(verts[vertex]);
 
        foreach(Attribute& attr, attributes.attributes) {
                if(attr.element == ATTR_ELEMENT_VERTEX) {
@@ -224,6 +224,11 @@ void Mesh::add_vertex(float3 P)
        verts.push_back_reserved(P);
 }
 
+void Mesh::add_vertex_slow(float3 P)
+{
+       verts.push_back_slow(P);
+}
+
 void Mesh::add_triangle(int v0, int v1, int v2, int shader_, bool smooth_, bool forms_quad_)
 {
        triangles.push_back_reserved(v0);
index 5c788fc12c7a8fb34d036de0feed53502ba5f98b..edad6d32f00f84e137713319221c9c29f9ee9f65 100644 (file)
@@ -156,6 +156,7 @@ public:
        void reserve_curves(int numcurves, int numkeys);
        void clear();
        void add_vertex(float3 P);
+       void add_vertex_slow(float3 P);
        void add_triangle(int v0, int v1, int v2, int shader, bool smooth, bool forms_quad = false);
        void add_curve_key(float3 loc, float radius);
        void add_curve(int first_key, int shader);