File: vtkOpenGLResourceFreeCallback.h

package info (click to toggle)
vtk7 7.1.1%2Bdfsg1-12
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 125,776 kB
  • sloc: cpp: 1,539,582; ansic: 106,521; python: 78,038; tcl: 47,013; xml: 8,142; yacc: 5,040; java: 4,439; perl: 3,132; lex: 1,926; sh: 1,500; makefile: 122; objc: 83
file content (92 lines) | stat: -rw-r--r-- 2,452 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/*=========================================================================

  Program:   Visualization Toolkit

  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.

=========================================================================*/

#ifndef vtkOpenGLResourceFreeCallback_h
#define vtkOpenGLResourceFreeCallback_h

// Description:
// Provide a mechanism for making sure graphics resources are
// freed properly.

class vtkOpenGLRenderWindow;
class vtkWindow;

class vtkGenericOpenGLResourceFreeCallback
{
  public:
    vtkGenericOpenGLResourceFreeCallback() {
        this->VTKWindow = NULL; this->Releasing = false; }
    virtual ~vtkGenericOpenGLResourceFreeCallback() { }

    // Called when the event is invoked
    virtual void Release() = 0;

    virtual void RegisterGraphicsResources(vtkOpenGLRenderWindow *rw) =  0;

    bool IsReleasing() {
      return this->Releasing; }

  protected:
    vtkOpenGLRenderWindow *VTKWindow;
    bool Releasing;
};

// Description:
// Templated member callback.
template <class T>
class vtkOpenGLResourceFreeCallback : public vtkGenericOpenGLResourceFreeCallback
{
public:
  vtkOpenGLResourceFreeCallback(T* handler, void (T::*method)(vtkWindow *))
  {
    this->Handler = handler;
    this->Method = method;
  }

  virtual ~vtkOpenGLResourceFreeCallback() { }

  virtual void RegisterGraphicsResources(vtkOpenGLRenderWindow *rw) {
    if (this->VTKWindow == rw)
    {
      return;
    }
    if (this->VTKWindow)
    {
      this->Release();
    }
    this->VTKWindow = rw;
    this->VTKWindow->RegisterGraphicsResources(this);
  }

  // Called when the event is invoked
  virtual void Release()
  {
    if (this->VTKWindow && this->Handler && !this->Releasing)
    {
      this->Releasing = true;
      this->VTKWindow->PushContext();
      (this->Handler->*this->Method)(this->VTKWindow);
      this->VTKWindow->UnregisterGraphicsResources(this);
      this->VTKWindow->PopContext();
      this->VTKWindow = NULL;
      this->Releasing = false;
    }
  }
protected:
  T* Handler;
  void (T::*Method)(vtkWindow *);
};

#endif
// VTK-HeaderTest-Exclude: vtkOpenGLResourceFreeCallback.h