You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWTAI-Platform/3rd/VTK7.1/source/VTK-7.1.1/Rendering/OpenGL/vtkCocoaRenderWindow.h

408 lines
11 KiB
C

/*=========================================================================
Program: Visualization Toolkit
Module: vtkCocoaRenderWindow.h
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
/**
* @class vtkCocoaRenderWindow
* @brief Cocoa OpenGL rendering window
*
*
* vtkCocoaRenderWindow is a concrete implementation of the abstract
* class vtkOpenGLRenderWindow. It is only available on Mac OS X 10.6
* and later.
* To use this class, build VTK with VTK_USE_COCOA turned ON (this is
* the default).
* This class can be used by 32 and 64 bit processes, and either in
* garbage collected or reference counted modes. ARC is not yet supported.
* vtkCocoaRenderWindow uses Objective-C++, and the OpenGL and
* Cocoa APIs. This class's default behaviour is to create an NSWindow and
* a vtkCocoaGLView which are used together to draw all VTK content.
* If you already have an NSWindow and vtkCocoaGLView and you want this
* class to use them you must call both SetRootWindow() and SetWindowId(),
* respectively, early on (before WindowInitialize() is executed).
*
* @sa
* vtkOpenGLRenderWindow vtkCocoaGLView
*
* @warning
* This header must be in C++ only because it is included by .cxx files.
* That means no Objective-C may be used. That's why some instance variables
* are void* instead of what they really should be.
*/
#ifndef vtkCocoaRenderWindow_h
#define vtkCocoaRenderWindow_h
#include "vtkRenderingOpenGLModule.h" // For export macro
#include "vtkOpenGLRenderWindow.h"
class VTKRENDERINGOPENGL_EXPORT vtkCocoaRenderWindow : public vtkOpenGLRenderWindow
{
public:
static vtkCocoaRenderWindow *New();
vtkTypeMacro(vtkCocoaRenderWindow,vtkOpenGLRenderWindow);
void PrintSelf(ostream& os, vtkIndent indent);
/**
* Begin the rendering process.
*/
virtual void Start();
/**
* Finish the rendering process.
*/
virtual void Frame();
/**
* Specify various window parameters.
*/
virtual void WindowConfigure();
/**
* Initialize the window for rendering.
* virtual void WindowInitialize();
*/
/**
* Initialize the rendering window.
*/
virtual void Initialize();
/**
* Change the window to fill the entire screen. This is only partially
* implemented for the vtkCocoaRenderWindow. It can only be called
* before the window has been created, and it might not work on all
* versions of OS X.
*/
virtual void SetFullScreen(int);
/**
* Remap the window. This is not implemented for the vtkCocoaRenderWindow.
*/
virtual void WindowRemap();
/**
* Set the preferred window size to full screen. This is not implemented
* for the vtkCocoaRenderWindow.
*/
virtual void PrefFullScreen();
//@{
/**
* Set the size of the window in pixels.
*/
virtual void SetSize(int a[2]);
virtual void SetSize(int,int);
//@}
/**
* Get the current size of the window in pixels.
*/
virtual int *GetSize();
//@{
/**
* Set the position of the window.
*/
virtual void SetPosition(int a[2]);
virtual void SetPosition(int,int);
//@}
/**
* Get the current size of the screen in pixels.
*/
virtual int *GetScreenSize();
/**
* Get the position in screen coordinates of the window.
*/
virtual int *GetPosition();
/**
* Set the name of the window. This appears at the top of the window
* normally.
*/
virtual void SetWindowName(const char *);
void SetNextWindowInfo(char *)
{
vtkWarningMacro("SetNextWindowInfo not implemented (WindowRemap not implemented).");
}
virtual void* GetGenericDrawable()
{
vtkWarningMacro("Method not implemented.");
return 0;
}
virtual void SetDisplayId(void*)
{
vtkWarningMacro("Method not implemented.");
}
virtual void *GetGenericDisplayId()
{
vtkWarningMacro("Method not implemented.");
return 0;
}
/**
* Set this RenderWindow's window id to a pre-existing window.
* The paramater is an ASCII string of a decimal number representing
* a pointer to the window.
*/
virtual void SetWindowInfo(char*);
/**
* See the documenation for SetParentId(). This method allows the ParentId
* to be set as an ASCII string of a decimal number that is the memory
* address of the parent NSView.
*/
virtual void SetParentInfo(char*);
void SetNextWindowId(void*)
{
vtkWarningMacro("SetNextWindowId not implemented (WindowRemap not implemented).");
}
/**
* Initialize the render window from the information associated
* with the currently activated OpenGL context.
*/
virtual bool InitializeFromCurrentContext();
/**
* Update system if needed due to stereo rendering.
*/
virtual void StereoUpdate();
/**
* Prescribe that the window be created in a stereo-capable mode. This
* method must be called before the window is realized. This method
* overrrides the superclass method since this class can actually check
* whether the window has been realized yet.
*/
virtual void SetStereoCapableWindow(int capable);
/**
* Make this windows OpenGL context the current context.
*/
virtual void MakeCurrent();
/**
* Tells if this window is the current OpenGL context for the calling thread.
*/
virtual bool IsCurrent();
/**
* Test if the window has a valid drawable. This is
* currently only an issue on Mac OS X Cocoa where rendering
* to an invalid drawable results in all OpenGL calls to fail
* with "invalid framebuffer operation".
*/
virtual bool IsDrawable();
/**
* Update this window's OpenGL context, e.g. when the window is resized.
*/
void UpdateContext();
/**
* Get report of capabilities for the render window
*/
const char *ReportCapabilities();
/**
* Does this render window support OpenGL? 0-false, 1-true
*/
int SupportsOpenGL();
/**
* Is this render window using hardware acceleration? 0-false, 1-true
*/
int IsDirect();
/**
* If called, allow MakeCurrent() to skip cache-check when called.
* MakeCurrent() reverts to original behavior of cache-checking
* on the next render.
*/
virtual void SetForceMakeCurrent();
/**
* Check to see if an event is pending for this window.
* This is a useful check to abort a long render.
*/
virtual int GetEventPending();
//@{
/**
* Initialize OpenGL for this window.
*/
virtual void SetupPalette(void *hDC);
virtual void SetupPixelFormat(void *hDC, void *dwFlags, int debug,
int bpp=16, int zbpp=16);
//@}
/**
* Clean up device contexts, rendering contexts, etc.
*/
void Finalize();
/**
* Get the size of the depth buffer.
*/
int GetDepthBufferSize();
//@{
/**
* Hide or Show the mouse cursor, it is nice to be able to hide the
* default cursor if you want VTK to display a 3D cursor instead.
* Set cursor position in window (note that (0,0) is the lower left
* corner).
*/
virtual void HideCursor();
virtual void ShowCursor();
virtual void SetCursorPosition(int x, int y);
//@}
/**
* Change the shape of the cursor.
*/
virtual void SetCurrentCursor(int);
/**
* Get the ViewCreated flag. It is 1 if this object created an instance
* of NSView, 0 otherwise.
*/
virtual int GetViewCreated();
/**
* Get the WindowCreated flag. It is 1 if this object created an instance
* of NSWindow, 0 otherwise.
*/
virtual int GetWindowCreated();
//@{
/**
* Accessors for the OpenGL context (Really an NSOpenGLContext*).
*/
void SetContextId(void *);
void *GetContextId();
virtual void *GetGenericContext() {return this->GetContextId();}
//@}
/**
* Sets the NSWindow* associated with this vtkRenderWindow.
* This class' default behaviour, that is, if you never call
* SetWindowId()/SetRootWindow() is to create an NSWindow and a
* vtkCocoaGLView (NSView subclass) which are used together to draw
* all vtk stuff into. If you already have an NSWindow and NSView and
* you want this class to use them you must call both SetRootWindow()
* and SetWindowId(), respectively, early on (before WindowInitialize()
* is executed). In the case of Java, you should call only SetWindowId().
*/
virtual void SetRootWindow(void *);
/**
* Returns the NSWindow* associated with this vtkRenderWindow.
*/
virtual void *GetRootWindow();
/**
* Sets the NSView* associated with this vtkRenderWindow.
* This class' default behaviour, that is, if you never call this
* SetWindowId()/SetRootWindow() is to create an NSWindow and a
* vtkCocoaGLView (NSView subclass) which are used together to draw all
* vtk stuff into. If you already have an NSWindow and NSView and you
* want this class to use them you must call both SetRootWindow()
* and SetWindowId(), respectively, early on (before WindowInitialize()
* is executed). In the case of Java, you should call only SetWindowId().
*/
virtual void SetWindowId(void *);
/**
* Returns the NSView* associated with this vtkRenderWindow.
*/
virtual void *GetWindowId();
virtual void *GetGenericWindowId() {return this->GetWindowId();}
/**
* Set the NSView* for the vtkRenderWindow to be parented within. The
* Position and Size of the RenderWindow will set the rectangle of the
* NSView that the vtkRenderWindow will create within this parent.
* If you set the WindowId, then this ParentId will be ignored.
*/
virtual void SetParentId(void *nsview);
/**
* Get the parent NSView* for this vtkRenderWindow. This method will
* return "NULL" if the parent was not set with SetParentId() or
* SetParentInfo().
*/
virtual void *GetParentId();
virtual void *GetGenericParentId() { return this->GetParentId(); }
//@{
/**
* Accessors for the pixel format object (Really an NSOpenGLPixelFormat*).
*/
void SetPixelFormat(void *pixelFormat);
void *GetPixelFormat();
//@}
protected:
vtkCocoaRenderWindow();
~vtkCocoaRenderWindow();
void CreateGLContext();
void CreateAWindow();
void DestroyWindow();
void DestroyOffScreenWindow();
int OffScreenInitialized;
int OnScreenInitialized;
//@{
/**
* Accessors for the cocoa manager (Really an NSMutableDictionary*).
* It manages all Cocoa objects in this C++ class.
*/
void SetCocoaManager(void *manager);
void *GetCocoaManager();
//@}
void SetCocoaServer(void *server); // Really a vtkCocoaServer*
void *GetCocoaServer();
private:
vtkCocoaRenderWindow(const vtkCocoaRenderWindow&) VTK_DELETE_FUNCTION;
void operator=(const vtkCocoaRenderWindow&) VTK_DELETE_FUNCTION;
private:
// Important: this class cannot contain Objective-C instance
// variables for 2 reasons:
// 1) C++ files include this header
// 2) because of garbage collection (the GC scanner does not scan objects create by C++'s new)
// Instead, use the CocoaManager dictionary to keep a collection
// of what would otherwise be Objective-C instance variables.
void *CocoaManager; // Really an NSMutableDictionary*
int WindowCreated;
int ViewCreated;
int CursorHidden;
int ForceMakeCurrent;
char *Capabilities;
};
#endif