00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00027 #ifndef GLXPBUFFERSTREAMS_HPP
00028 #define GLXPBUFFERSTREAMS_HPP
00029
00030 #include "ShStream.hpp"
00031 #include "ShProgram.hpp"
00032 #include "PBufferStreams.hpp"
00033
00034 namespace shgl {
00035
00036 struct ShGLXPBufferInfo
00037 {
00038 ShGLXPBufferInfo() :
00039 extension(SH_ARB_NO_FLOAT_EXT),
00040 pbuffer(0),
00041 context(0),
00042 width(0),
00043 height(0)
00044 {
00045 }
00046
00047 FloatExtension extension;
00048 GLXPbuffer pbuffer;
00049 GLXContext context;
00050 int width, height;
00051
00052 bool valid()
00053 {
00054 if (extension == SH_ARB_NO_FLOAT_EXT ||
00055 pbuffer == 0 ||
00056 context == 0)
00057 {
00058 return false;
00059 }
00060 else
00061 {
00062 return true;
00063 }
00064 }
00065 };
00066
00067 struct GLXPBufferStreams: public PBufferStreams
00068 {
00069 public:
00070 GLXPBufferStreams(void);
00071 virtual ~GLXPBufferStreams();
00072
00073 virtual StreamStrategy* create(void);
00074
00075 private:
00076 virtual FloatExtension setupContext(int width, int height);
00077 virtual void restoreContext(void);
00078
00079 private:
00080 ShGLXPBufferInfo createContext(int width, int height);
00081
00082 private:
00083 Display* m_display;
00084 GLXDrawable m_orig_drawable;
00085 GLXContext m_orig_context;
00086 std::list<ShGLXPBufferInfo> m_infos;
00087 };
00088
00089 }
00090
00091 #endif