forked from bartvdbraak/blender
Cycles: fix some invalid memory access problems found by running the windows build in debug mode.
This commit is contained in:
parent
c7fce6be2e
commit
f7b9c85871
@ -497,12 +497,6 @@ if(UNIX AND NOT APPLE)
|
||||
set(BOOST "/usr" CACHE PATH "Boost Directory")
|
||||
endif()
|
||||
|
||||
#set(Boost_ADDITIONAL_VERSIONS "1.46" "1.45" "1.44"
|
||||
# "1.43" "1.43.0" "1.42" "1.42.0"
|
||||
# "1.41" "1.41.0" "1.40" "1.40.0"
|
||||
# "1.39" "1.39.0" "1.38" "1.38.0"
|
||||
# "1.37" "1.37.0" "1.34.1" "1_34_1")
|
||||
|
||||
set(BOOST_ROOT ${BOOST})
|
||||
set(Boost_USE_MULTITHREADED ON)
|
||||
find_package(Boost 1.34 REQUIRED COMPONENTS filesystem regex system thread)
|
||||
@ -819,8 +813,12 @@ elseif(WIN32)
|
||||
set(BOOST ${LIBDIR}/boost)
|
||||
set(BOOST_INCLUDE_DIR ${BOOST}/include)
|
||||
set(BOOST_POSTFIX "vc90-mt-s-1_46_1.lib")
|
||||
set(BOOST_LIBRARIES libboost_date_time-${BOOST_POSTFIX} libboost_filesystem-${BOOST_POSTFIX}
|
||||
libboost_regex-${BOOST_POSTFIX} libboost_system-${BOOST_POSTFIX} libboost_thread-${BOOST_POSTFIX})
|
||||
set(BOOST_DEBUG_POSTFIX "vc90-mt-sgd-1_46_1.lib")
|
||||
set(BOOST_LIBRARIES
|
||||
optimized libboost_date_time-${BOOST_POSTFIX} libboost_filesystem-${BOOST_POSTFIX}
|
||||
libboost_regex-${BOOST_POSTFIX} libboost_system-${BOOST_POSTFIX} libboost_thread-${BOOST_POSTFIX}
|
||||
debug libboost_date_time-${BOOST_DEBUG_POSTFIX} libboost_filesystem-${BOOST_DEBUG_POSTFIX}
|
||||
libboost_regex-${BOOST_DEBUG_POSTFIX} libboost_system-${BOOST_DEBUG_POSTFIX} libboost_thread-${BOOST_DEBUG_POSTFIX})
|
||||
set(BOOST_LIBPATH ${BOOST}/lib)
|
||||
set(BOOST_DEFINITIONS "-DBOOST_ALL_NO_LIB")
|
||||
endif()
|
||||
|
@ -62,14 +62,14 @@ static void create_mesh(Scene *scene, Mesh *mesh, BL::Mesh b_mesh, const vector<
|
||||
/* create vertices */
|
||||
BL::Mesh::vertices_iterator v;
|
||||
|
||||
for(v = b_mesh.vertices.begin(); v != b_mesh.vertices.end(); ++v)
|
||||
for(b_mesh.vertices.begin(v); v != b_mesh.vertices.end(); ++v)
|
||||
mesh->verts.push_back(get_float3(v->co()));
|
||||
|
||||
/* create faces */
|
||||
BL::Mesh::faces_iterator f;
|
||||
vector<int> nverts;
|
||||
|
||||
for(f = b_mesh.faces.begin(); f != b_mesh.faces.end(); ++f) {
|
||||
for(b_mesh.faces.begin(f); f != b_mesh.faces.end(); ++f) {
|
||||
int4 vi = get_int4(f->vertices_raw());
|
||||
int n= (vi[3] == 0)? 3: 4;
|
||||
int shader = used_shaders[f->material_index()];
|
||||
@ -101,7 +101,7 @@ static void create_mesh(Scene *scene, Mesh *mesh, BL::Mesh b_mesh, const vector<
|
||||
BL::Mesh::vertices_iterator v;
|
||||
size_t i = 0;
|
||||
|
||||
for(v = b_mesh.vertices.begin(); v != b_mesh.vertices.end(); ++v)
|
||||
for(b_mesh.vertices.begin(v); v != b_mesh.vertices.end(); ++v)
|
||||
fdata[i++] = get_float3(v->co())*size - loc;
|
||||
}
|
||||
|
||||
@ -109,7 +109,7 @@ static void create_mesh(Scene *scene, Mesh *mesh, BL::Mesh b_mesh, const vector<
|
||||
{
|
||||
BL::Mesh::vertex_colors_iterator l;
|
||||
|
||||
for(l = b_mesh.vertex_colors.begin(); l != b_mesh.vertex_colors.end(); ++l) {
|
||||
for(b_mesh.vertex_colors.begin(l); l != b_mesh.vertex_colors.end(); ++l) {
|
||||
if(!mesh_need_attribute(scene, mesh, ustring(l->name())))
|
||||
continue;
|
||||
|
||||
@ -120,7 +120,7 @@ static void create_mesh(Scene *scene, Mesh *mesh, BL::Mesh b_mesh, const vector<
|
||||
float3 *fdata = attr->data_float3();
|
||||
size_t i = 0;
|
||||
|
||||
for(c = l->data.begin(); c != l->data.end(); ++c, ++i) {
|
||||
for(l->data.begin(c); c != l->data.end(); ++c, ++i) {
|
||||
fdata[0] = get_float3(c->color1());
|
||||
fdata[1] = get_float3(c->color2());
|
||||
fdata[2] = get_float3(c->color3());
|
||||
@ -140,7 +140,7 @@ static void create_mesh(Scene *scene, Mesh *mesh, BL::Mesh b_mesh, const vector<
|
||||
{
|
||||
BL::Mesh::uv_textures_iterator l;
|
||||
|
||||
for(l = b_mesh.uv_textures.begin(); l != b_mesh.uv_textures.end(); ++l) {
|
||||
for(b_mesh.uv_textures.begin(l); l != b_mesh.uv_textures.end(); ++l) {
|
||||
Attribute::Standard std = (l->active_render())? Attribute::STD_UV: Attribute::STD_NONE;
|
||||
ustring name = ustring(l->name());
|
||||
|
||||
@ -158,7 +158,7 @@ static void create_mesh(Scene *scene, Mesh *mesh, BL::Mesh b_mesh, const vector<
|
||||
float3 *fdata = attr->data_float3();
|
||||
size_t i = 0;
|
||||
|
||||
for(t = l->data.begin(); t != l->data.end(); ++t, ++i) {
|
||||
for(l->data.begin(t); t != l->data.end(); ++t, ++i) {
|
||||
fdata[0] = get_float3(t->uv1());
|
||||
fdata[1] = get_float3(t->uv2());
|
||||
fdata[2] = get_float3(t->uv3());
|
||||
@ -183,13 +183,13 @@ static void create_subd_mesh(Mesh *mesh, BL::Mesh b_mesh, PointerRNA *cmesh, con
|
||||
/* create vertices */
|
||||
BL::Mesh::vertices_iterator v;
|
||||
|
||||
for(v = b_mesh.vertices.begin(); v != b_mesh.vertices.end(); ++v)
|
||||
for(b_mesh.vertices.begin(v); v != b_mesh.vertices.end(); ++v)
|
||||
sdmesh.add_vert(get_float3(v->co()));
|
||||
|
||||
/* create faces */
|
||||
BL::Mesh::faces_iterator f;
|
||||
|
||||
for(f = b_mesh.faces.begin(); f != b_mesh.faces.end(); ++f) {
|
||||
for(b_mesh.faces.begin(f); f != b_mesh.faces.end(); ++f) {
|
||||
int4 vi = get_int4(f->vertices_raw());
|
||||
int n= (vi[3] == 0)? 3: 4;
|
||||
//int shader = used_shaders[f->material_index()];
|
||||
@ -223,7 +223,7 @@ Mesh *BlenderSync::sync_mesh(BL::Object b_ob, bool object_updated)
|
||||
vector<uint> used_shaders;
|
||||
|
||||
BL::Object::material_slots_iterator slot;
|
||||
for(slot = b_ob.material_slots.begin(); slot != b_ob.material_slots.end(); ++slot)
|
||||
for(b_ob.material_slots.begin(slot); slot != b_ob.material_slots.end(); ++slot)
|
||||
find_shader(slot->material(), used_shaders);
|
||||
|
||||
if(used_shaders.size() == 0)
|
||||
|
@ -40,7 +40,7 @@ bool BlenderSync::object_is_modified(BL::Object b_ob)
|
||||
else {
|
||||
/* object level material links */
|
||||
BL::Object::material_slots_iterator slot;
|
||||
for(slot = b_ob.material_slots.begin(); slot != b_ob.material_slots.end(); ++slot)
|
||||
for(b_ob.material_slots.begin(slot); slot != b_ob.material_slots.end(); ++slot)
|
||||
if(slot->link() == BL::MaterialSlot::link_OBJECT)
|
||||
return true;
|
||||
}
|
||||
@ -144,7 +144,7 @@ void BlenderSync::sync_objects(BL::SpaceView3D b_v3d)
|
||||
/* object loop */
|
||||
BL::Scene::objects_iterator b_ob;
|
||||
|
||||
for(b_ob = b_scene.objects.begin(); b_ob != b_scene.objects.end(); ++b_ob) {
|
||||
for(b_scene.objects.begin(b_ob); b_ob != b_scene.objects.end(); ++b_ob) {
|
||||
bool hide = (b_v3d)? b_ob->hide(): b_ob->hide_render();
|
||||
|
||||
if(!hide && get_layer(b_ob->layers()) & layer) {
|
||||
@ -155,7 +155,7 @@ void BlenderSync::sync_objects(BL::SpaceView3D b_v3d)
|
||||
BL::Object::dupli_list_iterator b_dup;
|
||||
int b_index = 0;
|
||||
|
||||
for(b_dup = b_ob->dupli_list.begin(); b_dup != b_ob->dupli_list.end(); ++b_dup) {
|
||||
for(b_ob->dupli_list.begin(b_dup); b_dup != b_ob->dupli_list.end(); ++b_dup) {
|
||||
Transform tfm = get_transform(b_dup->matrix());
|
||||
sync_object(*b_ob, b_index, b_dup->object(), tfm);
|
||||
b_index++;
|
||||
|
@ -148,7 +148,9 @@ void BlenderSession::write_render_result()
|
||||
RNA_pointer_create(NULL, &RNA_RenderResult, rrp, &rrptr);
|
||||
BL::RenderResult rr(rrptr);
|
||||
|
||||
rna_RenderLayer_rect_set(&rr.layers.begin()->ptr, (float*)&buffer[0]);
|
||||
BL::RenderResult::layers_iterator layer;
|
||||
rr.layers.begin(layer);
|
||||
rna_RenderLayer_rect_set(&layer->ptr, (float*)&buffer[0]);
|
||||
|
||||
RE_engine_end_result((RenderEngine*)b_engine.ptr.data, rrp);
|
||||
}
|
||||
|
@ -54,18 +54,18 @@ static BL::NodeSocket get_node_input(BL::Node *b_group_node, BL::Node b_node, co
|
||||
{
|
||||
BL::Node::inputs_iterator b_in;
|
||||
|
||||
for(b_in = b_node.inputs.begin(); b_in != b_node.inputs.end(); ++b_in) {
|
||||
for(b_node.inputs.begin(b_in); b_in != b_node.inputs.end(); ++b_in) {
|
||||
if(b_in->name() == name) {
|
||||
if(b_group_node) {
|
||||
|
||||
BL::NodeTree b_ntree = BL::NodeGroup(*b_group_node).node_tree();
|
||||
BL::NodeTree::links_iterator b_link;
|
||||
|
||||
for(b_link = b_ntree.links.begin(); b_link != b_ntree.links.end(); ++b_link) {
|
||||
for(b_ntree.links.begin(b_link); b_link != b_ntree.links.end(); ++b_link) {
|
||||
if(b_link->to_socket().ptr.data == b_in->ptr.data) {
|
||||
BL::Node::inputs_iterator b_gin;
|
||||
|
||||
for(b_gin = b_group_node->inputs.begin(); b_gin != b_group_node->inputs.end(); ++b_gin)
|
||||
for(b_group_node->inputs.begin(b_gin); b_gin != b_group_node->inputs.end(); ++b_gin)
|
||||
if(b_gin->group_socket().ptr.data == b_link->from_socket().ptr.data)
|
||||
return *b_gin;
|
||||
|
||||
@ -86,7 +86,7 @@ static BL::NodeSocket get_node_output(BL::Node b_node, const string& name)
|
||||
{
|
||||
BL::Node::outputs_iterator b_out;
|
||||
|
||||
for(b_out = b_node.outputs.begin(); b_out != b_node.outputs.end(); ++b_out)
|
||||
for(b_node.outputs.begin(b_out); b_out != b_node.outputs.end(); ++b_out)
|
||||
if(b_out->name() == name)
|
||||
return *b_out;
|
||||
|
||||
@ -405,7 +405,7 @@ static void add_nodes(BL::BlendData b_data, ShaderGraph *graph, BL::ShaderNodeTr
|
||||
PtrNodeMap node_map;
|
||||
map<void*, PtrSockMap> node_groups;
|
||||
|
||||
for(b_node = b_ntree.nodes.begin(); b_node != b_ntree.nodes.end(); ++b_node) {
|
||||
for(b_ntree.nodes.begin(b_node); b_node != b_ntree.nodes.end(); ++b_node) {
|
||||
if(b_node->is_a(&RNA_NodeGroup)) {
|
||||
BL::NodeGroup b_gnode(*b_node);
|
||||
BL::ShaderNodeTree b_group_ntree(b_gnode.node_tree());
|
||||
@ -422,7 +422,7 @@ static void add_nodes(BL::BlendData b_data, ShaderGraph *graph, BL::ShaderNodeTr
|
||||
|
||||
node_map[b_node->ptr.data] = node;
|
||||
|
||||
for(b_input = b_node->inputs.begin(); b_input != b_node->inputs.end(); ++b_input) {
|
||||
for(b_node->inputs.begin(b_input); b_input != b_node->inputs.end(); ++b_input) {
|
||||
ShaderInput *input = node->input(b_input->name().c_str());
|
||||
BL::NodeSocket sock(get_node_input(b_group_node, *b_node, b_input->name()));
|
||||
|
||||
@ -458,7 +458,7 @@ static void add_nodes(BL::BlendData b_data, ShaderGraph *graph, BL::ShaderNodeTr
|
||||
/* connect nodes */
|
||||
BL::NodeTree::links_iterator b_link;
|
||||
|
||||
for(b_link = b_ntree.links.begin(); b_link != b_ntree.links.end(); ++b_link) {
|
||||
for(b_ntree.links.begin(b_link); b_link != b_ntree.links.end(); ++b_link) {
|
||||
/* get blender link data */
|
||||
BL::Node b_from_node = b_link->from_node();
|
||||
BL::Node b_to_node = b_link->to_node();
|
||||
@ -528,7 +528,7 @@ void BlenderSync::sync_materials()
|
||||
/* material loop */
|
||||
BL::BlendData::materials_iterator b_mat;
|
||||
|
||||
for(b_mat = b_data.materials.begin(); b_mat != b_data.materials.end(); ++b_mat) {
|
||||
for(b_data.materials.begin(b_mat); b_mat != b_data.materials.end(); ++b_mat) {
|
||||
Shader *shader;
|
||||
|
||||
/* test if we need to sync */
|
||||
@ -610,7 +610,7 @@ void BlenderSync::sync_lamps()
|
||||
/* lamp loop */
|
||||
BL::BlendData::lamps_iterator b_lamp;
|
||||
|
||||
for(b_lamp = b_data.lamps.begin(); b_lamp != b_data.lamps.end(); ++b_lamp) {
|
||||
for(b_data.lamps.begin(b_lamp); b_lamp != b_data.lamps.end(); ++b_lamp) {
|
||||
Shader *shader;
|
||||
|
||||
/* test if we need to sync */
|
||||
|
@ -65,19 +65,19 @@ bool BlenderSync::sync_recalc()
|
||||
|
||||
BL::BlendData::materials_iterator b_mat;
|
||||
|
||||
for(b_mat = b_data.materials.begin(); b_mat != b_data.materials.end(); ++b_mat)
|
||||
for(b_data.materials.begin(b_mat); b_mat != b_data.materials.end(); ++b_mat)
|
||||
if(b_mat->recalc())
|
||||
shader_map.set_recalc(*b_mat);
|
||||
|
||||
BL::BlendData::lamps_iterator b_lamp;
|
||||
|
||||
for(b_lamp = b_data.lamps.begin(); b_lamp != b_data.lamps.end(); ++b_lamp)
|
||||
for(b_data.lamps.begin(b_lamp); b_lamp != b_data.lamps.end(); ++b_lamp)
|
||||
if(b_lamp->recalc())
|
||||
shader_map.set_recalc(*b_lamp);
|
||||
|
||||
BL::BlendData::objects_iterator b_ob;
|
||||
|
||||
for(b_ob = b_data.objects.begin(); b_ob != b_data.objects.end(); ++b_ob) {
|
||||
for(b_data.objects.begin(b_ob); b_ob != b_data.objects.end(); ++b_ob) {
|
||||
if(b_ob->recalc()) {
|
||||
object_map.set_recalc(*b_ob);
|
||||
light_map.set_recalc(*b_ob);
|
||||
@ -92,13 +92,13 @@ bool BlenderSync::sync_recalc()
|
||||
|
||||
BL::BlendData::meshes_iterator b_mesh;
|
||||
|
||||
for(b_mesh = b_data.meshes.begin(); b_mesh != b_data.meshes.end(); ++b_mesh)
|
||||
for(b_data.meshes.begin(b_mesh); b_mesh != b_data.meshes.end(); ++b_mesh)
|
||||
if(b_mesh->recalc())
|
||||
mesh_map.set_recalc(*b_mesh);
|
||||
|
||||
BL::BlendData::worlds_iterator b_world;
|
||||
|
||||
for(b_world = b_data.worlds.begin(); b_world != b_data.worlds.end(); ++b_world)
|
||||
for(b_data.worlds.begin(b_world); b_world != b_data.worlds.end(); ++b_world)
|
||||
if(world_map == b_world->ptr.data && b_world->recalc())
|
||||
world_recalc = true;
|
||||
|
||||
|
@ -324,7 +324,7 @@ void ShaderGraph::clean()
|
||||
break_cycles(output(), visited, on_stack);
|
||||
|
||||
/* remove unused nodes */
|
||||
vector<ShaderNode*> newnodes;
|
||||
list<ShaderNode*> newnodes;
|
||||
|
||||
foreach(ShaderNode *node, nodes) {
|
||||
if(visited[node->id])
|
||||
|
@ -21,6 +21,7 @@
|
||||
|
||||
#include "kernel_types.h"
|
||||
|
||||
#include "util_list.h"
|
||||
#include "util_map.h"
|
||||
#include "util_param.h"
|
||||
#include "util_set.h"
|
||||
@ -193,7 +194,7 @@ public:
|
||||
|
||||
class ShaderGraph {
|
||||
public:
|
||||
vector<ShaderNode*> nodes;
|
||||
list<ShaderNode*> nodes;
|
||||
bool finalized;
|
||||
|
||||
ShaderGraph();
|
||||
|
@ -2670,8 +2670,6 @@ static const char *cpp_classes = ""
|
||||
" operator bool(void)\n"
|
||||
" { return iter.valid != 0; }\n"
|
||||
" const CollectionIterator<T, Tbegin, Tnext, Tend>& operator++() { Tnext(&iter); t = T(iter.ptr); return *this; }\n"
|
||||
" const CollectionIterator<T, Tbegin, Tnext, Tend>& operator=(const CollectionIterator<T, Tbegin, Tnext, Tend>& copy)\n"
|
||||
" { if(init) Tend(&iter); iter= copy.iter; if(iter.internal) iter.internal= MEM_dupallocN(iter.internal); t= copy.t; init= copy.init; return *this; }\n"
|
||||
"\n"
|
||||
" T& operator*(void) { return t; }\n"
|
||||
" T* operator->(void) { return &t; }\n"
|
||||
@ -2682,6 +2680,8 @@ static const char *cpp_classes = ""
|
||||
" { if(init) Tend(&iter); Tbegin(&iter, (PointerRNA*)&ptr.ptr); t = T(iter.ptr); init = true; }\n"
|
||||
"\n"
|
||||
"private:\n"
|
||||
" const CollectionIterator<T, Tbegin, Tnext, Tend>& operator=(const CollectionIterator<T, Tbegin, Tnext, Tend>& copy) {}\n"
|
||||
""
|
||||
" CollectionPropertyIterator iter;\n"
|
||||
" T t;\n"
|
||||
" bool init;\n"
|
||||
@ -2692,8 +2692,8 @@ static const char *cpp_classes = ""
|
||||
"public:\n"
|
||||
" Collection(const PointerRNA& p) : ptr(p) {}\n"
|
||||
"\n"
|
||||
" CollectionIterator<T, Tbegin, Tnext, Tend> begin()\n"
|
||||
" { CollectionIterator<T, Tbegin, Tnext, Tend> iter; iter.begin(ptr); return iter; }\n"
|
||||
" void begin(CollectionIterator<T, Tbegin, Tnext, Tend>& iter)\n"
|
||||
" { iter.begin(ptr); }\n"
|
||||
" CollectionIterator<T, Tbegin, Tnext, Tend> end()\n"
|
||||
" { return CollectionIterator<T, Tbegin, Tnext, Tend>(); } /* test */ \n"
|
||||
"\n"
|
||||
|
Loading…
Reference in New Issue
Block a user