You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
269 lines
8.4 KiB
269 lines
8.4 KiB
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: $RCSfile: vtkWin32OpenGLRenderWindow.h,v $
|
|
|
|
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.
|
|
|
|
=========================================================================*/
|
|
// .NAME vtkWin32OpenGLRenderWindow - OpenGL rendering window
|
|
// .SECTION Description
|
|
// vtkWin32OpenGLRenderWindow is a concrete implementation of the abstract
|
|
// class vtkRenderWindow. vtkWin32OpenGLRenderer interfaces to the standard
|
|
// OpenGL graphics library in the Windows/NT environment..
|
|
|
|
#ifndef __vtkWin32OpenGLRenderWindow_h
|
|
#define __vtkWin32OpenGLRenderWindow_h
|
|
|
|
#include "vtkOpenGLRenderWindow.h"
|
|
|
|
class vtkIdList;
|
|
|
|
class VTK_RENDERING_EXPORT vtkWin32OpenGLRenderWindow : public vtkOpenGLRenderWindow
|
|
{
|
|
public:
|
|
static vtkWin32OpenGLRenderWindow *New();
|
|
vtkTypeRevisionMacro(vtkWin32OpenGLRenderWindow,vtkOpenGLRenderWindow);
|
|
void PrintSelf(ostream& os, vtkIndent indent);
|
|
|
|
// Description:
|
|
// Begin the rendering process.
|
|
virtual void Start(void);
|
|
|
|
// Description:
|
|
// End the rendering process and display the image.
|
|
void Frame(void);
|
|
|
|
// Description:
|
|
// Create the window
|
|
virtual void WindowInitialize(void);
|
|
|
|
// Description:
|
|
// Initialize the rendering window. This will setup all system-specific
|
|
// resources. This method and Finalize() must be symmetric and it
|
|
// should be possible to call them multiple times, even changing WindowId
|
|
// in-between. This is what WindowRemap does.
|
|
virtual void Initialize(void);
|
|
|
|
// Description:
|
|
// Finalize the rendering window. This will shutdown all system-specific
|
|
// resources. After having called this, it should be possible to destroy
|
|
// a window that was used for a SetWindowId() call without any ill effects.
|
|
virtual void Finalize(void);
|
|
|
|
// Description:
|
|
// Change the window to fill the entire screen.
|
|
virtual void SetFullScreen(int);
|
|
|
|
// Description:
|
|
// Remap the window.
|
|
virtual void WindowRemap(void);
|
|
|
|
// Description:
|
|
// Set the preferred window size to full screen.
|
|
virtual void PrefFullScreen(void);
|
|
|
|
// Description:
|
|
// Set the size of the window.
|
|
virtual void SetSize(int,int);
|
|
virtual void SetSize(int a[2]) {vtkOpenGLRenderWindow::SetSize(a);};
|
|
|
|
// Description:
|
|
// Get the current size of the window.
|
|
virtual int *GetSize();
|
|
|
|
// Description:
|
|
// Set the position of the window.
|
|
virtual void SetPosition(int,int);
|
|
virtual void SetPosition(int a[2]) {vtkOpenGLRenderWindow::SetPosition(a);};
|
|
|
|
// Description:
|
|
// Return the screen size.
|
|
virtual int *GetScreenSize();
|
|
|
|
// Description:
|
|
// Get the position in screen coordinates of the window.
|
|
virtual int *GetPosition();
|
|
|
|
// Description:
|
|
// Set the name of the window. This appears at the top of the window
|
|
// normally.
|
|
virtual void SetWindowName(const char *);
|
|
|
|
// Description:
|
|
// Set this RenderWindow's window id to a pre-existing window.
|
|
void SetWindowInfo(char *);
|
|
|
|
// Description:
|
|
// Sets the WindowInfo that will be used after a WindowRemap.
|
|
void SetNextWindowInfo(char *);
|
|
|
|
// Description:
|
|
// Sets the HWND id of the window that WILL BE created.
|
|
void SetParentInfo(char *);
|
|
|
|
//BTX
|
|
virtual void *GetGenericDisplayId() {return (void *)this->ContextId;};
|
|
virtual void *GetGenericWindowId() {return (void *)this->WindowId;};
|
|
virtual void *GetGenericParentId() {return (void *)this->ParentId;};
|
|
virtual void *GetGenericContext() {return (void *)this->DeviceContext;};
|
|
virtual void *GetGenericDrawable() {return (void *)this->WindowId;};
|
|
virtual void SetDisplayId(void *);
|
|
|
|
// Description:
|
|
// Get the window id.
|
|
virtual HWND GetWindowId();
|
|
void SetWindowId(void *foo) {this->SetWindowId((HWND)foo);};
|
|
|
|
// Description:
|
|
// Set the window id to a pre-existing window.
|
|
virtual void SetWindowId(HWND);
|
|
|
|
// Description:
|
|
// Set the window's parent id to a pre-existing window.
|
|
virtual void SetParentId(HWND);
|
|
void SetParentId(void *foo) {this->SetParentId((HWND)foo);};
|
|
|
|
void SetContextId(HGLRC); // hsr
|
|
void SetDeviceContext(HDC); // hsr
|
|
|
|
// Description:
|
|
// Set the window id of the new window once a WindowRemap is done.
|
|
virtual void SetNextWindowId(HWND);
|
|
|
|
// Description:
|
|
// Set the window id of the new window once a WindowRemap is done.
|
|
// This is the generic prototype as required by the vtkRenderWindow
|
|
// parent.
|
|
virtual void SetNextWindowId(void *arg);
|
|
|
|
//ETX
|
|
|
|
// Description:
|
|
// Prescribe that the window be created in a stereo-capable mode. This
|
|
// method must be called before the window is realized. This method
|
|
// overrides the superclass method since this class can actually check
|
|
// whether the window has been realized yet.
|
|
virtual void SetStereoCapableWindow(int capable);
|
|
|
|
// Description:
|
|
// Make this windows OpenGL context the current context.
|
|
void MakeCurrent();
|
|
|
|
// Description:
|
|
// Get report of capabilities for the render window
|
|
const char *ReportCapabilities();
|
|
|
|
// Description:
|
|
// Does this render window support OpenGL? 0-false, 1-true
|
|
int SupportsOpenGL();
|
|
|
|
// Description:
|
|
// Is this render window using hardware acceleration? 0-false, 1-true
|
|
int IsDirect();
|
|
|
|
// Description:
|
|
// Check to see if a mouse button has been pressed.
|
|
// All other events are ignored by this method.
|
|
// This is a useful check to abort a long render.
|
|
virtual int GetEventPending();
|
|
|
|
// Description:
|
|
// These methods can be used by MFC applications
|
|
// to support print preview and printing, or more
|
|
// general rendering into memory.
|
|
void SetupMemoryRendering(int x, int y, HDC prn);
|
|
void SetupMemoryRendering(HBITMAP hbmp);
|
|
void ResumeScreenRendering(void);
|
|
HDC GetMemoryDC();
|
|
unsigned char *GetMemoryData(){return this->MemoryData;};
|
|
|
|
// Description:
|
|
// Initialize OpenGL for this window.
|
|
virtual void SetupPalette(HDC hDC);
|
|
virtual void SetupPixelFormat(HDC hDC, DWORD dwFlags, int debug,
|
|
int bpp=16, int zbpp=16);
|
|
|
|
// Description:
|
|
// Clean up device contexts, rendering contexts, etc.
|
|
void Clean();
|
|
|
|
// Description:
|
|
// 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).
|
|
void HideCursor();
|
|
void ShowCursor();
|
|
void SetCursorPosition(int x, int y);
|
|
|
|
// Description:
|
|
// Change the shape of the cursor
|
|
virtual void SetCurrentCursor(int);
|
|
|
|
// Description:
|
|
// Override the default implementation so that we can actively switch between
|
|
// on and off screen rendering.
|
|
virtual void SetOffScreenRendering(int offscreen);
|
|
|
|
protected:
|
|
vtkWin32OpenGLRenderWindow();
|
|
~vtkWin32OpenGLRenderWindow();
|
|
|
|
HINSTANCE ApplicationInstance;
|
|
HPALETTE Palette;
|
|
HPALETTE OldPalette;
|
|
HGLRC ContextId;
|
|
HDC DeviceContext;
|
|
BOOL MFChandledWindow;
|
|
HWND WindowId;
|
|
HWND ParentId;
|
|
HWND NextWindowId;
|
|
int OwnWindow;
|
|
int ScreenSize[2];
|
|
|
|
// the following is used to support rendering into memory
|
|
BITMAPINFO MemoryDataHeader;
|
|
HBITMAP MemoryBuffer;
|
|
unsigned char *MemoryData; // the data in the DIBSection
|
|
HDC MemoryHdc;
|
|
|
|
int ScreenMapped;
|
|
int ScreenWindowSize[2];
|
|
HDC ScreenDeviceContext;
|
|
int ScreenDoubleBuffer;
|
|
HGLRC ScreenContextId;
|
|
|
|
//BTX
|
|
// message handler
|
|
virtual LRESULT MessageProc(HWND hWnd, UINT message,
|
|
WPARAM wParam, LPARAM lParam);
|
|
|
|
static LRESULT APIENTRY WndProc(HWND hWnd, UINT message,
|
|
WPARAM wParam, LPARAM lParam);
|
|
//ETX
|
|
int CursorHidden;
|
|
int ForceMakeCurrent;
|
|
|
|
char *Capabilities;
|
|
|
|
void ResizeWhileOffscreen(int xsize, int ysize);
|
|
void CreateAWindow(int x, int y, int width, int height);
|
|
void InitializeApplication();
|
|
void CleanUpOffScreenRendering(void);
|
|
void CreateOffScreenDC(int xsize, int ysize, HDC aHdc);
|
|
void CreateOffScreenDC(HBITMAP hbmp, HDC aHdc);
|
|
private:
|
|
vtkWin32OpenGLRenderWindow(const vtkWin32OpenGLRenderWindow&); // Not implemented.
|
|
void operator=(const vtkWin32OpenGLRenderWindow&); // Not implemented.
|
|
};
|
|
|
|
|
|
#endif
|
|
|
|
|