diff options
author | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2013-04-09 04:46:49 +0400 |
---|---|---|
committer | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2013-04-09 04:46:49 +0400 |
commit | 800f86c8454ced85c29d1dcb04dcb163689a89d3 (patch) | |
tree | 4598a2ea78a1d1cf6a4c0a9e7030de4c826a006d /source/blender/freestyle/intern/blender_interface | |
parent | e6bd510dde6289efcead80e3d21cb21876282a56 (diff) |
Attempt to fix a potential name conflict between Freestyle and the compositor.
A crash in the Freestyle renderer was reported by Ton on IRC with a stack trace
below. Note that #2 is in Freestyle, whereas #1 is in the compositor. The problem
was observed in a debug build on OS X 10.7 (gcc 4.2, openmp disabled, no llvm).
----------------------------------------------------------------------
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: 13 at address: 0x0000000000000000
[Switching to process 72386 thread 0xf303]
0x0000000100c129f3 in NodeBase::~NodeBase (this=0x10e501c80) at COM_NodeBase.cpp:43
43 delete (this->m_outputsockets.back());
Current language: auto; currently c++
(gdb) where
#0 0x0000000100c129f3 in NodeBase::~NodeBase (this=0x10e501c80) at COM_NodeBase.cpp:43
#1 0x0000000100c29066 in Node::~Node (this=0x10e501c80) at COM_Node.h:49
#2 0x000000010089c273 in NodeShape::~NodeShape (this=0x10e501c80) at NodeShape.cpp:43
#3 0x000000010089910b in NodeGroup::destroy (this=0x10e501da0) at NodeGroup.cpp:61
#4 0x00000001008990cd in NodeGroup::destroy (this=0x10e5014b0) at NodeGroup.cpp:59
#5 0x00000001008990cd in NodeGroup::destroy (this=0x114e18da0) at NodeGroup.cpp:59
#6 0x00000001007e6602 in Controller::ClearRootNode (this=0x114e19640) at Controller.cpp:329
#7 0x00000001007ea52e in Controller::LoadMesh (this=0x114e19640, re=0x10aba4638, srl=0x1140f5258) at Controller.cpp:302
#8 0x00000001008030ad in prepare (re=0x10aba4638, srl=0x1140f5258) at FRS_freestyle.cpp:302
#9 0x000000010080457a in FRS_do_stroke_rendering (re=0x10aba4638, srl=0x1140f5258) at FRS_freestyle.cpp:600
#10 0x00000001006aeb9d in add_freestyle (re=0x10aba4638) at pipeline.c:1584
#11 0x00000001006aceb7 in do_render_3d (re=0x10aba4638) at pipeline.c:1094
#12 0x00000001006ae061 in do_render_fields_blur_3d (re=0x10aba4638) at pipeline.c:1367
#13 0x00000001006afa16 in do_render_composite_fields_blur_3d (re=0x10aba4638) at pipeline.c:1815
#14 0x00000001006b04e4 in do_render_all_options (re=0x10aba4638) at pipeline.c:2021
----------------------------------------------------------------------
Apparently a name conflict between the two Blender modules is taking place.
The present commit hence intends to address it by putting all the Freestyle C++
classes in the namespace 'Freestyle'. This revision will also prevent potential
name conflicts with other Blender modules in the future.
Special thanks to Lukas Toenne for the help with C++ namespace.
Diffstat (limited to 'source/blender/freestyle/intern/blender_interface')
8 files changed, 28 insertions, 14 deletions
diff --git a/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp b/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp index 915493dad7a..2f98a042e27 100644 --- a/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp +++ b/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp @@ -28,6 +28,8 @@ #include "BKE_global.h" +namespace Freestyle { + BlenderFileLoader::BlenderFileLoader(Render *re, SceneRenderLayer *srl) { _re = re; @@ -756,3 +758,5 @@ void BlenderFileLoader::insertShapeNode(ObjectInstanceRen *obi, int id) currentMesh->AddChild(shape); _Scene->AddChild(currentMesh); } + +} /* namespace Freestyle */ diff --git a/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.h b/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.h index 48c20b6b931..fd0672d8e13 100644 --- a/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.h +++ b/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.h @@ -39,11 +39,7 @@ #include "../system/FreestyleConfig.h" #include "../system/RenderMonitor.h" -// XXX Are those "ifdef __cplusplus" useful here? -#ifdef __cplusplus extern "C" { -#endif - #include "DNA_material_types.h" #include "DNA_meshdata_types.h" #include "DNA_scene_types.h" @@ -55,11 +51,9 @@ extern "C" { #include "BKE_scene.h" #include "BLI_math.h" - -#ifdef __cplusplus } -#endif +namespace Freestyle { class NodeGroup; @@ -128,4 +122,6 @@ protected: RenderMonitor *_pRenderMonitor; }; +} /* namespace Freestyle */ + #endif // __BLENDER_FILE_LOADER_H__ diff --git a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp index 05fc30a6bd5..0bd990ad03a 100644 --- a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp +++ b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp @@ -60,6 +60,8 @@ extern "C" { } #endif +namespace Freestyle { + BlenderStrokeRenderer::BlenderStrokeRenderer(Render *re, int render_count) : StrokeRenderer() { // TEMPORARY - need a texture manager @@ -510,3 +512,5 @@ Render *BlenderStrokeRenderer::RenderScene(Render *re) RE_RenderFreestyleStrokes(freestyle_render, G.main, freestyle_scene); return freestyle_render; } + +} /* namespace Freestyle */ diff --git a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h index 43e7a699b5e..f4af5e3aba0 100644 --- a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h +++ b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h @@ -28,19 +28,14 @@ #include "../stroke/StrokeRenderer.h" #include "../system/FreestyleConfig.h" -// XXX Are those "ifdef __cplusplus" useful here? -#ifdef __cplusplus extern "C" { -#endif - #include "DNA_material_types.h" #include "DNA_scene_types.h" #include "render_types.h" - -#ifdef __cplusplus } -#endif + +namespace Freestyle { class LIB_STROKE_EXPORT BlenderStrokeRenderer : public StrokeRenderer { @@ -68,4 +63,6 @@ protected: unsigned int get_stroke_mesh_id(void) const; }; +} /* namespace Freestyle */ + #endif // __BLENDER_STROKE_RENDERER_H__ diff --git a/source/blender/freestyle/intern/blender_interface/BlenderStyleModule.h b/source/blender/freestyle/intern/blender_interface/BlenderStyleModule.h index 7848b75749f..7419d49ba4d 100644 --- a/source/blender/freestyle/intern/blender_interface/BlenderStyleModule.h +++ b/source/blender/freestyle/intern/blender_interface/BlenderStyleModule.h @@ -34,6 +34,8 @@ extern "C" { #include "BKE_text.h" } +namespace Freestyle { + class BlenderStyleModule : public StyleModule { public: @@ -58,4 +60,6 @@ private: struct Text *_text; }; +} /* namespace Freestyle */ + #endif // __BLENDERSTYLEMODULE_H__ diff --git a/source/blender/freestyle/intern/blender_interface/BlenderTextureManager.cpp b/source/blender/freestyle/intern/blender_interface/BlenderTextureManager.cpp index c1eaa1f5928..7b397f5eea1 100644 --- a/source/blender/freestyle/intern/blender_interface/BlenderTextureManager.cpp +++ b/source/blender/freestyle/intern/blender_interface/BlenderTextureManager.cpp @@ -26,6 +26,8 @@ #include "BKE_global.h" +namespace Freestyle { + BlenderTextureManager::BlenderTextureManager() : TextureManager() { @@ -95,3 +97,5 @@ unsigned int BlenderTextureManager::loadBrush(string sname, Stroke::MediumType m return 0; #endif } + +} /* namespace Freestyle */ diff --git a/source/blender/freestyle/intern/blender_interface/BlenderTextureManager.h b/source/blender/freestyle/intern/blender_interface/BlenderTextureManager.h index d55ed8d7ddc..1484188851d 100644 --- a/source/blender/freestyle/intern/blender_interface/BlenderTextureManager.h +++ b/source/blender/freestyle/intern/blender_interface/BlenderTextureManager.h @@ -29,6 +29,8 @@ # include "../stroke/StrokeRep.h" # include "../system/FreestyleConfig.h" +namespace Freestyle { + /*! Class to load textures */ class LIB_RENDERING_EXPORT BlenderTextureManager : public TextureManager { @@ -43,4 +45,6 @@ protected: virtual void loadStandardBrushes(); }; +} /* namespace Freestyle */ + #endif // __BLENDERTEXTUREMANAGER_H__ diff --git a/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp b/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp index 325c314a570..56d12612dbc 100644 --- a/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp +++ b/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp @@ -32,6 +32,7 @@ #include "../application/Controller.h" using namespace std; +using namespace Freestyle; extern "C" { |