vtkTextureUnitManager.h 3.12 KB
Newer Older
Francois Bertel's avatar
Francois Bertel committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/*=========================================================================

  Program:   Visualization Toolkit
  Module:    vtkTextureUnitManager.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.

=========================================================================*/
// .NAME vtkTextureUnitManager - allocate/free texture units.
// .SECTION Description
17
//
Francois Bertel's avatar
Francois Bertel committed
18 19 20 21 22 23 24 25 26
// vtkTextureUnitManager is a central place used by shaders to reserve a
// texture unit ( Allocate() ) or release it ( Free() ).
//
// Don't create a vtkTextureUnitManager, query it from the
// vtkOpenGLRenderWindow
//
// .SECTION See Also
// vtkOpenGLRenderWindow

27 28
#ifndef vtkTextureUnitManager_h
#define vtkTextureUnitManager_h
Francois Bertel's avatar
Francois Bertel committed
29

30
#include "vtkRenderingOpenGLModule.h" // For export macro
Francois Bertel's avatar
Francois Bertel committed
31 32 33 34
#include "vtkObject.h"

class vtkOpenGLRenderWindow;

35
class VTKRENDERINGOPENGL_EXPORT vtkTextureUnitManager : public vtkObject
Francois Bertel's avatar
Francois Bertel committed
36 37
{
public:
38
  vtkTypeMacro(vtkTextureUnitManager,vtkObject);
Francois Bertel's avatar
Francois Bertel committed
39 40

  void PrintSelf(ostream& os, vtkIndent indent);
41

Francois Bertel's avatar
Francois Bertel committed
42
  static vtkTextureUnitManager *New();
43

Francois Bertel's avatar
Francois Bertel committed
44
  // Description:
45
  // Get/Set the context. This does not increase the reference count of the
Francois Bertel's avatar
Francois Bertel committed
46 47 48 49 50
  // context to avoid reference loops.
  // SetContext() may raise an error is the OpenGL context does not support the
  // required OpenGL extensions.
  void SetContext(vtkOpenGLRenderWindow *context);
  vtkGetObjectMacro(Context,vtkOpenGLRenderWindow);
51

Francois Bertel's avatar
Francois Bertel committed
52 53 54
  // Description:
  // Number of texture units supported by the OpenGL context.
  int GetNumberOfTextureUnits();
55 56

  // Description:
Francois Bertel's avatar
Francois Bertel committed
57 58 59 60 61 62
  // Reserve a texture unit. It returns its number.
  // It returns -1 if the allocation failed (because there is no more
  // texture unit left).
  // \post valid_result: result==-1 || result>=0 && result<this->GetNumberOfTextureUnits())
  // \post allocated: result==-1 || this->IsAllocated(result)
  virtual int Allocate();
63

Francois Bertel's avatar
Francois Bertel committed
64
  // Description:
65 66 67
  // Tell if texture unit `textureUnitId' is already allocated.
  // \pre valid_textureUnitId_range : textureUnitId>=0 && textureUnitId<this->GetNumberOfTextureUnits()
  bool IsAllocated(int textureUnitId);
68

Francois Bertel's avatar
Francois Bertel committed
69 70
  // Description:
  // Release a texture unit.
71
  // \pre valid_textureUnitId: textureUnitId>=0 && textureUnitId<this->GetNumberOfTextureUnits()
72 73
  // \pre allocated_textureUnitId: this->IsAllocated(textureUnitId)
  virtual void Free(int textureUnitId);
74

Francois Bertel's avatar
Francois Bertel committed
75 76 77 78
protected:
  // Description:
  // Default constructor.
  vtkTextureUnitManager();
79

Francois Bertel's avatar
Francois Bertel committed
80 81 82
  // Description:
  // Destructor.
  ~vtkTextureUnitManager();
83

Francois Bertel's avatar
Francois Bertel committed
84 85 86 87 88 89
  // Description:
  // Delete the allocation table and check if it is not called before
  // all the texture units have been released.
  void DeleteTable();

  vtkOpenGLRenderWindow *Context;
90

Francois Bertel's avatar
Francois Bertel committed
91 92 93 94 95 96 97 98 99
  int NumberOfTextureUnits;
  bool *TextureUnits;

private:
  vtkTextureUnitManager(const vtkTextureUnitManager&);  // Not implemented.
  void operator=(const vtkTextureUnitManager&);  // Not implemented.
};

#endif