00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00027 #ifndef __vtkOpenGLRenderWindow_h
00028 #define __vtkOpenGLRenderWindow_h
00029
00030 #include "vtkRenderWindow.h"
00031
00032 #include "vtkOpenGL.h"
00033
00034 class vtkIdList;
00035 class vtkOpenGLExtensionManager;
00036 class vtkOpenGLHardwareSupport;
00037 class vtkTextureUnitManager;
00038
00039 class VTK_RENDERING_EXPORT vtkOpenGLRenderWindow : public vtkRenderWindow
00040 {
00041 protected:
00042 long OldMonitorSetting;
00043
00044 public:
00045 vtkTypeMacro(vtkOpenGLRenderWindow,vtkRenderWindow);
00046 void PrintSelf(ostream& os, vtkIndent indent);
00047
00049
00050 static void SetGlobalMaximumNumberOfMultiSamples(int val);
00051 static int GetGlobalMaximumNumberOfMultiSamples();
00053
00055 virtual void StereoUpdate();
00056
00058
00059 virtual unsigned char *GetPixelData(int x,int y,int x2,int y2,int front);
00060 virtual int GetPixelData(int x,int y,int x2,int y2, int front,
00061 vtkUnsignedCharArray *data);
00062 virtual int SetPixelData(int x,int y,int x2,int y2,unsigned char *data,
00063 int front);
00064 virtual int SetPixelData(int x,int y,int x2,int y2,
00065 vtkUnsignedCharArray *data, int front);
00067
00069
00070 virtual float *GetRGBAPixelData(int x,int y,int x2,int y2,int front);
00071 virtual int GetRGBAPixelData(int x,int y,int x2,int y2, int front,
00072 vtkFloatArray* data);
00073 virtual int SetRGBAPixelData(int x,int y,int x2,int y2, float *data,
00074 int front, int blend=0);
00075 virtual int SetRGBAPixelData(int x,int y,int x2,int y2, vtkFloatArray *data,
00076 int front, int blend=0);
00077 virtual void ReleaseRGBAPixelData(float *data);
00078 virtual unsigned char *GetRGBACharPixelData(int x,int y,int x2,int y2,
00079 int front);
00080 virtual int GetRGBACharPixelData(int x,int y,int x2,int y2, int front,
00081 vtkUnsignedCharArray *data);
00082 virtual int SetRGBACharPixelData(int x, int y, int x2, int y2,
00083 unsigned char *data, int front,
00084 int blend=0);
00085 virtual int SetRGBACharPixelData(int x,int y,int x2,int y2,
00086 vtkUnsignedCharArray *data, int front,
00087 int blend=0);
00089
00091
00092 virtual float *GetZbufferData( int x1, int y1, int x2, int y2 );
00093 virtual int GetZbufferData( int x1, int y1, int x2, int y2, float* z );
00094 virtual int GetZbufferData( int x1, int y1, int x2, int y2,
00095 vtkFloatArray* z );
00096 virtual int SetZbufferData( int x1, int y1, int x2, int y2, float *buffer );
00097 virtual int SetZbufferData( int x1, int y1, int x2, int y2,
00098 vtkFloatArray *buffer );
00100
00102 void RegisterTextureResource (GLuint id);
00103
00105 int GetDepthBufferSize();
00106
00109 int GetColorBufferSizes(int *rgba);
00110
00112 virtual void OpenGLInit();
00113
00119 unsigned int GetBackLeftBuffer();
00120
00126 unsigned int GetBackRightBuffer();
00127
00133 unsigned int GetFrontLeftBuffer();
00134
00140 unsigned int GetFrontRightBuffer();
00141
00147 unsigned int GetBackBuffer();
00148
00154 unsigned int GetFrontBuffer();
00155
00159 virtual void CheckGraphicError();
00160
00162 virtual int HasGraphicError();
00163
00165 virtual const char *GetLastGraphicErrorString();
00166
00168
00169 vtkGetMacro(ContextCreationTime, vtkTimeStamp);
00171
00172
00175 vtkOpenGLExtensionManager* GetExtensionManager();
00176
00179 vtkOpenGLHardwareSupport* GetHardwareSupport();
00180
00181
00183
00185 vtkTextureUnitManager *GetTextureUnitManager();
00186
00188
00191 virtual void WaitForCompletion();
00192
00193 protected:
00194 vtkOpenGLRenderWindow();
00195 ~vtkOpenGLRenderWindow();
00196
00197 vtkIdList *TextureResourceIds;
00198
00199 int GetPixelData(int x,int y,int x2,int y2,int front, unsigned char* data);
00200 int GetRGBAPixelData(int x,int y,int x2,int y2, int front, float* data);
00201 int GetRGBACharPixelData(int x,int y,int x2,int y2, int front,
00202 unsigned char* data);
00203
00209 int CreateHardwareOffScreenWindow(int width, int height);
00210
00214 void DestroyHardwareOffScreenWindow();
00215
00217 int OffScreenUseFrameBuffer;
00218
00220
00221 int NumberOfFrameBuffers;
00222 unsigned int TextureObjects[4];
00223 unsigned int FrameBufferObject;
00224 unsigned int DepthRenderBufferObject;
00226
00228 virtual void CreateAWindow()=0;
00229
00231 virtual void DestroyWindow()=0;
00232
00234 void SetTextureUnitManager(vtkTextureUnitManager *textureUnitManager);
00235
00236 unsigned int BackLeftBuffer;
00237 unsigned int BackRightBuffer;
00238 unsigned int FrontLeftBuffer;
00239 unsigned int FrontRightBuffer;
00240 unsigned int FrontBuffer;
00241 unsigned int BackBuffer;
00242
00243
00244 unsigned int LastGraphicError;
00245
00246 vtkTimeStamp ContextCreationTime;
00247
00248 vtkTextureUnitManager *TextureUnitManager;
00249
00250 private:
00251 vtkOpenGLRenderWindow(const vtkOpenGLRenderWindow&);
00252 void operator=(const vtkOpenGLRenderWindow&);
00253
00254 void SetExtensionManager(vtkOpenGLExtensionManager*);
00255 void SetHardwareSupport(vtkOpenGLHardwareSupport * renderWindow);
00256
00257 vtkOpenGLExtensionManager* ExtensionManager;
00258 vtkOpenGLHardwareSupport* HardwareSupport;
00259 };
00260
00261 #endif