25ef750e |
1 | // Created on: 2014-10-08 |
2 | // Created by: Denis BOGOLEPOV |
3 | // Copyright (c) 2014 OPEN CASCADE SAS |
4 | // |
5 | // This file is part of Open CASCADE Technology software library. |
6 | // |
7 | // This library is free software; you can redistribute it and/or modify it under |
8 | // the terms of the GNU Lesser General Public License version 2.1 as published |
9 | // by the Free Software Foundation, with special exception defined in the file |
10 | // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT |
11 | // distribution for complete text of the license and disclaimer of any warranty. |
12 | // |
13 | // Alternatively, this file may be used under the terms of Open CASCADE |
14 | // commercial license or contractual agreement. |
15 | |
16 | #include <OpenGl_Sampler.hxx> |
17 | #include <OpenGl_GlCore33.hxx> |
18 | #include <Standard_Assert.hxx> |
19 | |
20 | IMPLEMENT_STANDARD_HANDLE (OpenGl_Sampler, OpenGl_Resource) |
21 | IMPLEMENT_STANDARD_RTTIEXT(OpenGl_Sampler, OpenGl_Resource) |
22 | |
23 | // ======================================================================= |
24 | // function : OpenGl_Sampler |
25 | // purpose : |
26 | // ======================================================================= |
27 | OpenGl_Sampler::OpenGl_Sampler() |
28 | : mySamplerID (NO_SAMPLER) |
29 | { |
30 | // |
31 | } |
32 | |
33 | // ======================================================================= |
34 | // function : ~OpenGl_Sampler |
35 | // purpose : |
36 | // ======================================================================= |
37 | OpenGl_Sampler::~OpenGl_Sampler() |
38 | { |
39 | Release (NULL); |
40 | } |
41 | |
42 | // ======================================================================= |
43 | // function : Release |
44 | // purpose : |
45 | // ======================================================================= |
46 | void OpenGl_Sampler::Release (OpenGl_Context* theContext) |
47 | { |
48 | if (isValidSampler()) |
49 | { |
50 | // application can not handle this case by exception - this is bug in code |
51 | Standard_ASSERT_RETURN (theContext != NULL, |
52 | "OpenGl_Sampler destroyed without GL context! Possible GPU memory leakage...",); |
53 | |
54 | if (theContext->IsValid()) |
55 | { |
56 | #if !defined(GL_ES_VERSION_2_0) || defined(GL_ES_VERSION_3_0) |
57 | theContext->core33->glDeleteSamplers (1, &mySamplerID); |
58 | #endif |
59 | } |
60 | |
61 | mySamplerID = NO_SAMPLER; |
62 | } |
63 | } |
64 | |
65 | // ======================================================================= |
66 | // function : Init |
67 | // purpose : Initializes sampler object |
68 | // ======================================================================= |
69 | Standard_Boolean OpenGl_Sampler::Init (OpenGl_Context& theContext) |
70 | { |
71 | if (theContext.core33 == NULL) |
72 | { |
73 | return Standard_False; |
74 | } |
75 | |
76 | if (isValidSampler()) |
77 | { |
78 | Release (&theContext); |
79 | } |
80 | |
81 | #if !defined(GL_ES_VERSION_2_0) || defined(GL_ES_VERSION_3_0) |
82 | theContext.core33->glGenSamplers (1, &mySamplerID); |
83 | return Standard_True; |
84 | #else |
85 | return Standard_False; |
86 | #endif |
87 | } |
88 | |
89 | // ======================================================================= |
90 | // function : Bind |
91 | // purpose : Binds sampler object to the given texture unit |
92 | // ======================================================================= |
93 | void OpenGl_Sampler::Bind (OpenGl_Context& theContext, |
94 | const GLuint theUnit) |
95 | { |
96 | if (isValidSampler()) |
97 | { |
98 | #if !defined(GL_ES_VERSION_2_0) || defined(GL_ES_VERSION_3_0) |
99 | theContext.core33->glBindSampler (theUnit, mySamplerID); |
100 | #endif |
101 | } |
102 | } |
103 | |
104 | // ======================================================================= |
105 | // function : Unbind |
106 | // purpose : Unbinds sampler object from the given texture unit |
107 | // ======================================================================= |
108 | void OpenGl_Sampler::Unbind (OpenGl_Context& theContext, |
109 | const GLuint theUnit) |
110 | { |
111 | if (isValidSampler()) |
112 | { |
113 | #if !defined(GL_ES_VERSION_2_0) || defined(GL_ES_VERSION_3_0) |
114 | theContext.core33->glBindSampler (theUnit, NO_SAMPLER); |
115 | #endif |
116 | } |
117 | } |
118 | |
119 | // ======================================================================= |
120 | // function : SetParameter |
121 | // purpose : Sets sampler parameters |
122 | // ======================================================================= |
123 | void OpenGl_Sampler::SetParameter (OpenGl_Context& theContext, |
124 | const GLenum theParam, |
125 | const GLint theValue) |
126 | { |
127 | if (isValidSampler()) |
128 | { |
129 | #if !defined(GL_ES_VERSION_2_0) || defined(GL_ES_VERSION_3_0) |
130 | theContext.core33->glSamplerParameteri (mySamplerID, theParam, theValue); |
131 | #endif |
132 | } |
133 | } |