blob: 493a11b6c390c925fa5e73037421096e72337791 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
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
|