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 WGLPBUFFERSTREAMS_HPP
00028 #define WGLPBUFFERSTREAMS_HPP
00029
00030 #include "ShStream.hpp"
00031 #include "ShProgram.hpp"
00032 #include "PBufferStreams.hpp"
00033
00034 namespace shgl {
00035
00036 struct ShWGLPBufferInfo
00037 {
00038 ShWGLPBufferInfo() :
00039 extension(SH_ARB_NO_FLOAT_EXT),
00040 pbuffer(0),
00041 pbuffer_hdc(0),
00042 pbuffer_hglrc(0),
00043 width(0),
00044 height(0)
00045 {
00046 }
00047
00048 FloatExtension extension;
00049 HPBUFFERARB pbuffer;
00050 HDC pbuffer_hdc;
00051 HGLRC pbuffer_hglrc;
00052 int width, height;
00053
00054 bool valid()
00055 {
00056 if (extension == SH_ARB_NO_FLOAT_EXT ||
00057 pbuffer == NULL ||
00058 pbuffer_hdc == NULL ||
00059 pbuffer_hglrc == NULL)
00060 {
00061 return false;
00062 }
00063 else
00064 {
00065 return true;
00066 }
00067 }
00068 };
00069
00070 struct WGLPBufferStreams: public PBufferStreams
00071 {
00072 public:
00073 WGLPBufferStreams(void);
00074 virtual ~WGLPBufferStreams();
00075
00076 virtual StreamStrategy* create(void);
00077
00078 private:
00079 virtual FloatExtension setupContext(int width, int height);
00080 virtual void restoreContext(void);
00081
00082 private:
00083 ShWGLPBufferInfo createContext(int width, int height);
00084
00085 private:
00086 HDC m_orig_hdc;
00087 HGLRC m_orig_hglrc;
00088 std::list<ShWGLPBufferInfo> m_infos;
00089 };
00090
00091 }
00092
00093 #endif