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
00167
00169
00170 vtkGetMacro(ContextCreationTime, vtkTimeStamp);
00171
00173
00176 vtkOpenGLExtensionManager* GetExtensionManager();
00177
00180 vtkOpenGLHardwareSupport* GetHardwareSupport();
00181
00182
00184
00186 vtkTextureUnitManager *GetTextureUnitManager();
00187
00189
00192 virtual void WaitForCompletion();
00193
00194 protected:
00195 vtkOpenGLRenderWindow();
00196 ~vtkOpenGLRenderWindow();
00197
00198 vtkIdList *TextureResourceIds;
00199
00200 int GetPixelData(int x,int y,int x2,int y2,int front, unsigned char* data);
00201 int GetRGBAPixelData(int x,int y,int x2,int y2, int front, float* data);
00202 int GetRGBACharPixelData(int x,int y,int x2,int y2, int front,
00203 unsigned char* data);
00204
00210 int CreateHardwareOffScreenWindow(int width, int height);
00211
00215 void DestroyHardwareOffScreenWindow();
00216
00218 int OffScreenUseFrameBuffer;
00219
00221
00222 int NumberOfFrameBuffers;
00223 unsigned int TextureObjects[4];
00224 unsigned int FrameBufferObject;
00225 unsigned int DepthRenderBufferObject;
00227
00229 virtual void CreateAWindow()=0;
00230
00232 virtual void DestroyWindow()=0;
00233
00235 void SetTextureUnitManager(vtkTextureUnitManager *textureUnitManager);
00236
00237 unsigned int BackLeftBuffer;
00238 unsigned int BackRightBuffer;
00239 unsigned int FrontLeftBuffer;
00240 unsigned int FrontRightBuffer;
00241 unsigned int FrontBuffer;
00242 unsigned int BackBuffer;
00243
00244
00245 unsigned int LastGraphicError;
00246
00247 vtkTimeStamp ContextCreationTime;
00248
00249 vtkTextureUnitManager *TextureUnitManager;
00250
00251 private:
00252 vtkOpenGLRenderWindow(const vtkOpenGLRenderWindow&);
00253 void operator=(const vtkOpenGLRenderWindow&);
00254
00255 void SetExtensionManager(vtkOpenGLExtensionManager*);
00256 void SetHardwareSupport(vtkOpenGLHardwareSupport * renderWindow);
00257
00258 vtkOpenGLExtensionManager* ExtensionManager;
00259 vtkOpenGLHardwareSupport* HardwareSupport;
00260 };
00261
00262 #endif