00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00049 #ifndef __vtkRenderWindow_h
00050 #define __vtkRenderWindow_h
00051
00052 #include "vtkWindow.h"
00053
00054 class vtkFloatArray;
00055 class vtkPainterDeviceAdapter;
00056 class vtkRenderWindowInteractor;
00057 class vtkRenderer;
00058 class vtkRendererCollection;
00059 class vtkUnsignedCharArray;
00060
00061
00062 #define VTK_STEREO_CRYSTAL_EYES 1
00063 #define VTK_STEREO_RED_BLUE 2
00064 #define VTK_STEREO_INTERLACED 3
00065 #define VTK_STEREO_LEFT 4
00066 #define VTK_STEREO_RIGHT 5
00067 #define VTK_STEREO_DRESDEN 6
00068 #define VTK_STEREO_ANAGLYPH 7
00069 #define VTK_STEREO_CHECKERBOARD 8
00070
00071 #define VTK_CURSOR_DEFAULT 0
00072 #define VTK_CURSOR_ARROW 1
00073 #define VTK_CURSOR_SIZENE 2
00074 #define VTK_CURSOR_SIZENW 3
00075 #define VTK_CURSOR_SIZESW 4
00076 #define VTK_CURSOR_SIZESE 5
00077 #define VTK_CURSOR_SIZENS 6
00078 #define VTK_CURSOR_SIZEWE 7
00079 #define VTK_CURSOR_SIZEALL 8
00080 #define VTK_CURSOR_HAND 9
00081 #define VTK_CURSOR_CROSSHAIR 10
00082
00084
00091 #ifdef VTK_LEAN_AND_MEAN
00092 # define vtkGraphicErrorMacro(renderWindow,message)
00093
00094 #else
00095 # define vtkGraphicErrorMacro(renderWindow,message) \
00096 if(renderWindow->GetReportGraphicErrors()) \
00097 { \
00098 renderWindow->CheckGraphicError(); \
00099 if(renderWindow->HasGraphicError()) \
00100 { \
00101 vtkErrorMacro(<<message<<" "<<renderWindow->GetLastGraphicErrorString()); \
00102 } \
00103 }
00104 #endif
00105
00106 class VTK_RENDERING_EXPORT vtkRenderWindow : public vtkWindow
00107 {
00108 public:
00109 vtkTypeMacro(vtkRenderWindow,vtkWindow);
00110 void PrintSelf(ostream& os, vtkIndent indent);
00111
00115 static vtkRenderWindow *New();
00116
00118 virtual void AddRenderer(vtkRenderer *);
00119
00121 void RemoveRenderer(vtkRenderer *);
00122
00124 int HasRenderer(vtkRenderer *);
00125
00127 static const char *GetRenderLibrary();
00128
00130 vtkRendererCollection *GetRenderers() {return this->Renderers;};
00131
00134 virtual void Render();
00135
00137 virtual void Start() = 0;
00138
00140 virtual void Finalize() = 0;
00141
00144 virtual void Frame() = 0;
00145
00148 virtual void WaitForCompletion()=0;
00149
00152 virtual void CopyResultFrame();
00153
00157 virtual vtkRenderWindowInteractor *MakeRenderWindowInteractor();
00158
00160
00163 virtual void HideCursor() = 0;
00164 virtual void ShowCursor() = 0;
00165 virtual void SetCursorPosition(int , int ) {};
00167
00169
00170 vtkSetMacro(CurrentCursor,int);
00171 vtkGetMacro(CurrentCursor,int);
00173
00175
00176 virtual void SetFullScreen(int) = 0;
00177 vtkGetMacro(FullScreen,int);
00178 vtkBooleanMacro(FullScreen,int);
00180
00182
00185 vtkSetMacro(Borders,int);
00186 vtkGetMacro(Borders,int);
00187 vtkBooleanMacro(Borders,int);
00189
00191
00193 vtkGetMacro(StereoCapableWindow,int);
00194 vtkBooleanMacro(StereoCapableWindow,int);
00195 virtual void SetStereoCapableWindow(int capable);
00197
00199
00200 vtkGetMacro(StereoRender,int);
00201 void SetStereoRender(int stereo);
00202 vtkBooleanMacro(StereoRender,int);
00204
00206
00207 vtkSetMacro(AlphaBitPlanes, int);
00208 vtkGetMacro(AlphaBitPlanes, int);
00209 vtkBooleanMacro(AlphaBitPlanes, int);
00211
00213
00215 vtkSetMacro(PointSmoothing,int);
00216 vtkGetMacro(PointSmoothing,int);
00217 vtkBooleanMacro(PointSmoothing,int);
00219
00221
00223 vtkSetMacro(LineSmoothing,int);
00224 vtkGetMacro(LineSmoothing,int);
00225 vtkBooleanMacro(LineSmoothing,int);
00227
00229
00231 vtkSetMacro(PolygonSmoothing,int);
00232 vtkGetMacro(PolygonSmoothing,int);
00233 vtkBooleanMacro(PolygonSmoothing,int);
00235
00237
00249 vtkGetMacro(StereoType,int);
00250 vtkSetMacro(StereoType,int);
00251 void SetStereoTypeToCrystalEyes()
00252 {this->SetStereoType(VTK_STEREO_CRYSTAL_EYES);}
00253 void SetStereoTypeToRedBlue()
00254 {this->SetStereoType(VTK_STEREO_RED_BLUE);}
00255 void SetStereoTypeToInterlaced()
00256 {this->SetStereoType(VTK_STEREO_INTERLACED);}
00257 void SetStereoTypeToLeft()
00258 {this->SetStereoType(VTK_STEREO_LEFT);}
00259 void SetStereoTypeToRight()
00260 {this->SetStereoType(VTK_STEREO_RIGHT);}
00261 void SetStereoTypeToDresden()
00262 {this->SetStereoType(VTK_STEREO_DRESDEN);}
00263 void SetStereoTypeToAnaglyph()
00264 {this->SetStereoType(VTK_STEREO_ANAGLYPH);}
00265 void SetStereoTypeToCheckerboard()
00266 {this->SetStereoType(VTK_STEREO_CHECKERBOARD);}
00268
00269 const char *GetStereoTypeAsString();
00270
00274 virtual void StereoUpdate();
00275
00278 virtual void StereoMidpoint();
00279
00282 virtual void StereoRenderComplete();
00283
00285
00290 vtkSetClampMacro(AnaglyphColorSaturation,float, 0.0f, 1.0f);
00291 vtkGetMacro(AnaglyphColorSaturation,float);
00293
00295
00306 vtkSetVector2Macro(AnaglyphColorMask,int);
00307 vtkGetVectorMacro(AnaglyphColorMask,int,2);
00309
00313 virtual void WindowRemap() = 0;
00314
00316
00317 vtkSetMacro(SwapBuffers,int);
00318 vtkGetMacro(SwapBuffers,int);
00319 vtkBooleanMacro(SwapBuffers,int);
00321
00323
00332 virtual int SetPixelData(int x, int y, int x2, int y2, unsigned char *data,
00333 int front) = 0;
00334 virtual int SetPixelData(int x, int y, int x2, int y2,
00335 vtkUnsignedCharArray *data, int front) = 0;
00337
00339
00344 virtual float *GetRGBAPixelData(int x, int y, int x2, int y2, int front) = 0;
00345 virtual int GetRGBAPixelData(int x, int y, int x2, int y2, int front,
00346 vtkFloatArray *data) = 0;
00347 virtual int SetRGBAPixelData(int x, int y, int x2, int y2, float *,
00348 int front, int blend=0) = 0;
00349 virtual int SetRGBAPixelData(int, int, int, int, vtkFloatArray*,
00350 int, int blend=0) = 0;
00351 virtual void ReleaseRGBAPixelData(float *data)=0;
00352 virtual unsigned char *GetRGBACharPixelData(int x, int y, int x2, int y2,
00353 int front) = 0;
00354 virtual int GetRGBACharPixelData(int x, int y, int x2, int y2, int front,
00355 vtkUnsignedCharArray *data) = 0;
00356 virtual int SetRGBACharPixelData(int x,int y, int x2, int y2,
00357 unsigned char *data, int front,
00358 int blend=0) = 0;
00359 virtual int SetRGBACharPixelData(int x, int y, int x2, int y2,
00360 vtkUnsignedCharArray *data, int front,
00361 int blend=0) = 0;
00363
00365
00367 virtual float *GetZbufferData(int x, int y, int x2, int y2) = 0;
00368 virtual int GetZbufferData(int x, int y, int x2, int y2, float *z) = 0;
00369 virtual int GetZbufferData(int x, int y, int x2, int y2,
00370 vtkFloatArray *z) = 0;
00371 virtual int SetZbufferData(int x, int y, int x2, int y2, float *z) = 0;
00372 virtual int SetZbufferData(int x, int y, int x2, int y2,
00373 vtkFloatArray *z) = 0;
00374 float GetZbufferDataAtPoint(int x, int y)
00375 {
00376 float value;
00377 this->GetZbufferData(x, y, x, y, &value);
00378 return value;
00379 }
00381
00383
00386 vtkGetMacro(AAFrames,int);
00387 vtkSetMacro(AAFrames,int);
00389
00391
00396 vtkGetMacro(FDFrames,int);
00397 vtkSetMacro(FDFrames,int);
00399
00401
00407 vtkGetMacro(SubFrames,int);
00408 virtual void SetSubFrames(int subFrames);
00410
00412
00413 vtkGetMacro(NeverRendered,int);
00415
00417
00419 vtkGetMacro(AbortRender,int);
00420 vtkSetMacro(AbortRender,int);
00421 vtkGetMacro(InAbortCheck,int);
00422 vtkSetMacro(InAbortCheck,int);
00423 virtual int CheckAbortStatus();
00425
00426 vtkGetMacro(IsPicking,int);
00427 vtkSetMacro(IsPicking,int);
00428 vtkBooleanMacro(IsPicking,int);
00429
00434 virtual int GetEventPending() = 0;
00435
00437 virtual int CheckInRenderStatus() { return this->InRender; }
00438
00440 virtual void ClearInRenderStatus() { this->InRender = 0; }
00441
00443
00448 virtual void SetDesiredUpdateRate(double);
00449 vtkGetMacro(DesiredUpdateRate,double);
00451
00453
00457 vtkGetMacro(NumberOfLayers, int);
00458 vtkSetClampMacro(NumberOfLayers, int, 1, VTK_LARGE_INTEGER);
00460
00462
00463 vtkGetObjectMacro(Interactor,vtkRenderWindowInteractor);
00465
00467 void SetInteractor(vtkRenderWindowInteractor *);
00468
00471 virtual void UnRegister(vtkObjectBase *o);
00472
00474
00475 virtual void SetDisplayId(void *) = 0;
00476 virtual void SetWindowId(void *) = 0;
00477 virtual void SetNextWindowId(void *) = 0;
00478 virtual void SetParentId(void *) = 0;
00479 virtual void *GetGenericDisplayId() = 0;
00480 virtual void *GetGenericWindowId() = 0;
00481 virtual void *GetGenericParentId() = 0;
00482 virtual void *GetGenericContext() = 0;
00483 virtual void *GetGenericDrawable() = 0;
00484 virtual void SetWindowInfo(char *) = 0;
00485 virtual void SetNextWindowInfo(char *) = 0;
00486 virtual void SetParentInfo(char *) = 0;
00488
00491 virtual void MakeCurrent() = 0;
00492
00495 virtual bool IsCurrent()=0;
00496
00500 virtual void SetForceMakeCurrent() {};
00501
00503 virtual const char *ReportCapabilities() { return "Not Implemented";};
00504
00506 virtual int SupportsOpenGL() { return 0;};
00507
00509 virtual int IsDirect() { return 0;};
00510
00513 virtual int GetDepthBufferSize() = 0;
00514
00517 virtual int GetColorBufferSizes(int *rgba) = 0;
00518
00520
00522 vtkGetObjectMacro(PainterDeviceAdapter, vtkPainterDeviceAdapter);
00524
00526
00528 vtkSetMacro(MultiSamples,int);
00529 vtkGetMacro(MultiSamples,int);
00531
00533
00534 vtkSetMacro(StencilCapable, int);
00535 vtkGetMacro(StencilCapable, int);
00536 vtkBooleanMacro(StencilCapable, int);
00538
00540
00542 vtkSetMacro(ReportGraphicErrors,int);
00543 vtkGetMacro(ReportGraphicErrors,int);
00544 vtkBooleanMacro(ReportGraphicErrors,int);
00546
00550 virtual void CheckGraphicError()=0;
00551
00553 virtual int HasGraphicError()=0;
00554
00556 virtual const char *GetLastGraphicErrorString()=0;
00557
00558 protected:
00559 vtkRenderWindow();
00560 ~vtkRenderWindow();
00561
00562 virtual void DoStereoRender();
00563 virtual void DoFDRender();
00564 virtual void DoAARender();
00565
00566 vtkPainterDeviceAdapter* PainterDeviceAdapter;
00567 vtkRendererCollection *Renderers;
00568 int Borders;
00569 int FullScreen;
00570 int OldScreen[5];
00571 int PointSmoothing;
00572 int LineSmoothing;
00573 int PolygonSmoothing;
00574 int StereoRender;
00575 int StereoType;
00576 int StereoStatus;
00577 int StereoCapableWindow;
00578 int AlphaBitPlanes;
00579 vtkRenderWindowInteractor *Interactor;
00580 unsigned char* StereoBuffer;
00581 float *AccumulationBuffer;
00582 unsigned int AccumulationBufferSize;
00583 int AAFrames;
00584 int FDFrames;
00585 int SubFrames;
00586 int CurrentSubFrame;
00587 unsigned char *ResultFrame;
00588 int SwapBuffers;
00589 double DesiredUpdateRate;
00590 int AbortRender;
00591 int InAbortCheck;
00592 int InRender;
00593 int NeverRendered;
00594 int NumberOfLayers;
00595 int CurrentCursor;
00596 int IsPicking;
00597 float AnaglyphColorSaturation;
00598 int AnaglyphColorMask[2];
00599 int MultiSamples;
00600 int StencilCapable;
00601
00604 int ReportGraphicErrors;
00605
00607 double AbortCheckTime;
00608
00609 private:
00610 vtkRenderWindow(const vtkRenderWindow&);
00611 void operator=(const vtkRenderWindow&);
00612 };
00613
00614 #endif