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/application | |
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/application')
8 files changed, 36 insertions, 22 deletions
diff --git a/source/blender/freestyle/intern/application/AppCanvas.cpp b/source/blender/freestyle/intern/application/AppCanvas.cpp index 2def2f269dd..e385eb76fbe 100644 --- a/source/blender/freestyle/intern/application/AppCanvas.cpp +++ b/source/blender/freestyle/intern/application/AppCanvas.cpp @@ -33,6 +33,8 @@ #include "../system/StringUtils.h" +namespace Freestyle { + AppCanvas::AppCanvas() :Canvas() { @@ -205,7 +207,8 @@ void AppCanvas::RenderStroke(Stroke *iStroke) iStroke->Render(_Renderer); } - void AppCanvas::update() { } + +} /* namespace Freestyle */ diff --git a/source/blender/freestyle/intern/application/AppCanvas.h b/source/blender/freestyle/intern/application/AppCanvas.h index 447bd493377..9a92cf482d0 100644 --- a/source/blender/freestyle/intern/application/AppCanvas.h +++ b/source/blender/freestyle/intern/application/AppCanvas.h @@ -28,6 +28,8 @@ #include "../stroke/Canvas.h" #include "AppView.h" +namespace Freestyle { + class AppCanvas : public Canvas { public: @@ -91,4 +93,6 @@ private: } _pass_diffuse, _pass_z; }; +} /* namespace Freestyle */ + #endif // __APPCANVAS_H__ diff --git a/source/blender/freestyle/intern/application/AppConfig.cpp b/source/blender/freestyle/intern/application/AppConfig.cpp index 2c8ef1238fa..94bda945701 100644 --- a/source/blender/freestyle/intern/application/AppConfig.cpp +++ b/source/blender/freestyle/intern/application/AppConfig.cpp @@ -33,6 +33,8 @@ extern "C" { #include "BLI_path_util.h" } +namespace Freestyle { + namespace Config { Path *Path::_pInstance = 0; @@ -95,3 +97,5 @@ string Path::getEnvVar(const string& iEnvVarName) } } // End of namepace Config + +} /* namespace Freestyle */ diff --git a/source/blender/freestyle/intern/application/AppConfig.h b/source/blender/freestyle/intern/application/AppConfig.h index b713c17f341..d647b7fc59c 100644 --- a/source/blender/freestyle/intern/application/AppConfig.h +++ b/source/blender/freestyle/intern/application/AppConfig.h @@ -34,6 +34,8 @@ using namespace std; +namespace Freestyle { + namespace Config { class Path { @@ -98,4 +100,6 @@ static const real DEFAULT_DKR_EPSILON = 0.0; } // End of namepace Config +} /* namespace Freestyle */ + #endif // __APP_CONFIG_H__ diff --git a/source/blender/freestyle/intern/application/AppView.cpp b/source/blender/freestyle/intern/application/AppView.cpp index 4937ec0eab6..ae202412c09 100644 --- a/source/blender/freestyle/intern/application/AppView.cpp +++ b/source/blender/freestyle/intern/application/AppView.cpp @@ -56,6 +56,8 @@ extern "C" { #include "FRS_freestyle.h" } +namespace Freestyle { + AppView::AppView(const char *iName) { _Fovy = DEG2RADF(30.0f); @@ -189,3 +191,5 @@ real AppView::GetFocalLength() real Near = std::max(0.1, (real)(-2.0f * _maxAbs + distanceToSceneCenter())); return Near; } + +} /* namespace Freestyle */ diff --git a/source/blender/freestyle/intern/application/AppView.h b/source/blender/freestyle/intern/application/AppView.h index 1c7f19607db..0a9bc6449f4 100644 --- a/source/blender/freestyle/intern/application/AppView.h +++ b/source/blender/freestyle/intern/application/AppView.h @@ -31,6 +31,8 @@ #include "../scene_graph/NodeDrawingStyle.h" #include "../system/Precision.h" +namespace Freestyle { + using namespace Geometry; class AppView @@ -228,4 +230,6 @@ protected: NodeDrawingStyle *_p2DSelectionNode; }; +} /* namespace Freestyle */ + #endif // __APPVIEW_H__ diff --git a/source/blender/freestyle/intern/application/Controller.cpp b/source/blender/freestyle/intern/application/Controller.cpp index 5b010d5ebc2..aaa8542d63b 100644 --- a/source/blender/freestyle/intern/application/Controller.cpp +++ b/source/blender/freestyle/intern/application/Controller.cpp @@ -63,19 +63,11 @@ #include "BKE_global.h" -// XXX Not inside an "extern C" block??? #include "DNA_freestyle_types.h" -// XXX Are those "ifdef __cplusplus" useful here? -#ifdef __cplusplus -extern "C" { -#endif - #include "FRS_freestyle.h" -#ifdef __cplusplus -} -#endif +namespace Freestyle { Controller::Controller() { @@ -1043,3 +1035,5 @@ void Controller::init_options() setPassDiffuse(NULL, 0, 0); setPassZ(NULL, 0, 0); } + +} /* namespace Freestyle */ diff --git a/source/blender/freestyle/intern/application/Controller.h b/source/blender/freestyle/intern/application/Controller.h index 3ac3ba0654c..ff9a85f8041 100644 --- a/source/blender/freestyle/intern/application/Controller.h +++ b/source/blender/freestyle/intern/application/Controller.h @@ -40,6 +40,13 @@ #include "../view_map/FEdgeXDetector.h" #include "../view_map/ViewMapBuilder.h" +extern "C" { +#include "render_types.h" +#include "DNA_scene_types.h" +} + +namespace Freestyle { + class AppView; class NodeGroup; class WShape; @@ -51,18 +58,6 @@ class InteractiveShader; class Shader; class StrokeRenderer; -// XXX Are those "ifdef __cplusplus" useful here? -#ifdef __cplusplus -extern "C" { -#endif - -#include "render_types.h" -#include "DNA_scene_types.h" - -#ifdef __cplusplus -} -#endif - class Controller { public: @@ -247,4 +242,6 @@ private: extern Controller *g_pController; +} /* namespace Freestyle */ + #endif // __CONTROLLER_H__ |