0024023: Revamp the OCCT Handle -- automatic
[occt.git] / src / OpenGl / OpenGl_TextureBufferArb.hxx
CommitLineData
5e27df78 1// Created by: Kirill GAVRILOV
d5f74e42 2// Copyright (c) 2013-2014 OPEN CASCADE SAS
5e27df78 3//
973c2be1 4// This file is part of Open CASCADE Technology software library.
5e27df78 5//
d5f74e42 6// This library is free software; you can redistribute it and/or modify it under
7// the terms of the GNU Lesser General Public License version 2.1 as published
973c2be1 8// by the Free Software Foundation, with special exception defined in the file
9// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
10// distribution for complete text of the license and disclaimer of any warranty.
5e27df78 11//
973c2be1 12// Alternatively, this file may be used under the terms of Open CASCADE
13// commercial license or contractual agreement.
5e27df78 14
15#ifndef _OpenGl_TextureBufferArb_H__
16#define _OpenGl_TextureBufferArb_H__
17
18#include <OpenGl_VertexBuffer.hxx>
19#include <OpenGl_ArbTBO.hxx>
20
21//! Texture Buffer Object.
22//! This is a special 1D texture that VBO-style initialized.
23//! The main differences from general 1D texture:
24//! - no interpolation between field;
25//! - greater sizes;
26//! - special sampler object in GLSL shader to access data by index.
27//!
28//! Notice that though TBO is inherited from VBO this is to unify design
29//! user shouldn't cast it to base class and all really useful methods
30//! are declared in this class.
31class OpenGl_TextureBufferArb : public OpenGl_VertexBuffer
32{
33
34public:
35
36 //! Helpful constants
37 static const GLuint NO_TEXTURE = 0;
38
39public:
40
41 //! Create uninitialized TBO.
42 Standard_EXPORT OpenGl_TextureBufferArb();
43
44 //! Destroy object, will throw exception if GPU memory not released with Release() before.
45 Standard_EXPORT virtual ~OpenGl_TextureBufferArb();
46
47 //! Override VBO target
48 Standard_EXPORT virtual GLenum GetTarget() const;
49
50 //! Returns true if TBO is valid.
51 //! Notice that no any real GL call is performed!
52 bool IsValid() const
53 {
54 return OpenGl_VertexBuffer::IsValid()
55 && myTextureId != NO_TEXTURE;
56 }
57
58 //! Destroy object - will release GPU memory if any.
10b9c7df 59 Standard_EXPORT virtual void Release (OpenGl_Context* theGlCtx);
5e27df78 60
61 //! Creates VBO and Texture names (ids) if not yet generated.
62 //! Data should be initialized by another method.
63 Standard_EXPORT bool Create (const Handle(OpenGl_Context)& theGlCtx);
64
65 //! Perform TBO initialization with specified data.
66 //! Existing data will be deleted.
67 Standard_EXPORT bool Init (const Handle(OpenGl_Context)& theGlCtx,
68 const GLuint theComponentsNb,
69 const GLsizei theElemsNb,
70 const GLfloat* theData);
71
fc73a202 72 //! Perform TBO initialization with specified data.
73 //! Existing data will be deleted.
74 Standard_EXPORT bool Init (const Handle(OpenGl_Context)& theGlCtx,
75 const GLuint theComponentsNb,
76 const GLsizei theElemsNb,
77 const GLuint* theData);
78
5e27df78 79 //! Bind TBO to specified Texture Unit.
80 Standard_EXPORT void BindTexture (const Handle(OpenGl_Context)& theGlCtx,
81 const GLenum theTextureUnit = GL_TEXTURE0) const;
82
83 //! Unbind TBO.
84 Standard_EXPORT void UnbindTexture (const Handle(OpenGl_Context)& theGlCtx,
85 const GLenum theTextureUnit = GL_TEXTURE0) const;
86
87protected:
88
89 GLuint myTextureId; //!< texture id
90 GLenum myTexFormat; //!< internal texture format
91
92public:
93
ec357c5c 94 DEFINE_STANDARD_RTTI(OpenGl_TextureBufferArb, OpenGl_VertexBuffer) // Type definition
5e27df78 95
96};
97
98DEFINE_STANDARD_HANDLE(OpenGl_TextureBufferArb, OpenGl_VertexBuffer)
99
100#endif // _OpenGl_TextureBufferArb_H__