mirror of https://github.com/vitalif/openscad
83 lines
2.1 KiB
Diff
83 lines
2.1 KiB
Diff
diff --git a/include/opencsg.h b/include/opencsg.h
|
|
index daecacc..ffde239 100644
|
|
--- a/include/opencsg.h
|
|
+++ b/include/opencsg.h
|
|
@@ -188,6 +188,9 @@ namespace OpenCSG {
|
|
Algorithm = AlgorithmUnused,
|
|
DepthComplexityAlgorithm = NoDepthComplexitySampling);
|
|
|
|
+ // call this function whenever switching the OpenGL context
|
|
+ void reset();
|
|
+
|
|
} // namespace OpenCSG
|
|
|
|
#endif // __OpenCSG__opencsg_h__
|
|
diff --git a/src/channelManager.h b/src/channelManager.h
|
|
index ecd5a1d..0e1458a 100644
|
|
--- a/src/channelManager.h
|
|
+++ b/src/channelManager.h
|
|
@@ -79,9 +79,9 @@ namespace OpenCSG {
|
|
/// moved into alpha, to allow alpha testing of the channel.
|
|
static void setupTexEnv(Channel channel);
|
|
|
|
- private:
|
|
-
|
|
static OpenGL::OffscreenBuffer* gOffscreenBuffer;
|
|
+
|
|
+ private:
|
|
static int gOffscreenType;
|
|
static bool gInUse;
|
|
|
|
diff --git a/src/offscreenBuffer.cpp b/src/offscreenBuffer.cpp
|
|
index e02dd83..4f978d5 100644
|
|
--- a/src/offscreenBuffer.cpp
|
|
+++ b/src/offscreenBuffer.cpp
|
|
@@ -22,19 +22,41 @@
|
|
#include "offscreenBuffer.h"
|
|
#include "frameBufferObject.h"
|
|
#include "pBufferTexture.h"
|
|
+#include "channelManager.h"
|
|
+
|
|
+static bool reset_f = false;
|
|
+static bool reset_p = false;
|
|
|
|
namespace OpenCSG {
|
|
|
|
+ void reset()
|
|
+ {
|
|
+ reset_f = true;
|
|
+ reset_p = true;
|
|
+ OpenCSG::ChannelManager::gOffscreenBuffer = NULL;
|
|
+ }
|
|
+
|
|
namespace OpenGL {
|
|
|
|
OffscreenBuffer* getOffscreenBuffer(bool fbo) {
|
|
- static FrameBufferObject* f = new FrameBufferObject;
|
|
- static PBufferTexture* p = new PBufferTexture;
|
|
-
|
|
- if (fbo)
|
|
- return f;
|
|
- else
|
|
+ static FrameBufferObject* f = NULL;
|
|
+ static PBufferTexture* p = NULL;
|
|
+
|
|
+ if (fbo) {
|
|
+ if (reset_f || f == NULL) {
|
|
+ delete f;
|
|
+ f = new FrameBufferObject;
|
|
+ reset_f = false;
|
|
+ }
|
|
+ return f;
|
|
+ } else {
|
|
+ if (reset_p || p == NULL) {
|
|
+ delete p;
|
|
+ p = new PBufferTexture;
|
|
+ reset_p = false;
|
|
+ }
|
|
return p;
|
|
+ }
|
|
}
|
|
|
|
} // namespace OpenGL
|