File: otbGlVersionChecker.h

package info (click to toggle)
otb 8.1.1%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,030,436 kB
  • sloc: xml: 231,007; cpp: 224,490; ansic: 4,592; sh: 1,790; python: 1,131; perl: 92; makefile: 72
file content (131 lines) | stat: -rw-r--r-- 4,220 bytes parent folder | download
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/*
 * Copyright (C) 2005-2022 Centre National d'Etudes Spatiales (CNES)
 *
 * This file is part of Orfeo Toolbox
 *
 *     https://www.orfeo-toolbox.org/
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef otb_GlVersionChecker_h
#define otb_GlVersionChecker_h

#include "OTBIceExport.h"

namespace otb
{

class OTBIce_EXPORT GlVersionChecker
{
public:

  /**
   * Constant containing required OpenGL version for
   * client-application feedback messages.
   */
  static const char * REQUIRED_GL_VERSION;

  /**
   * Constant containing required shading-language version for
   * client-application feedback messages.
   */
  static const char * REQUIRED_GLSL_VERSION;

  /**
   * \return The OpenGL version used at runtime. The call to this
   * method requires a valid OpenGL rendering context. An
   * std::runtime_error() is thrown when glGetError() is different
   * than GL_NO_ERROR.
   */
  static const char * GLVersion();

  /**
   * \return The OpenGL Shading-Language version used at runtime. The
   * call to this method requires a valid OpenGL rendering context. An
   * std::runtime_error() is thrown when glGetError() is different
   * than GL_NO_ERROR. This method uses GL_SHADING_LANGUAGE_VERSION
   * which is available only if the OpenGL version is greater than
   * 2.0. (@see
   * http://www.opengl.org/sdk/docs/man2/xhtml/glGetString.xml).
   */
  static const char * GLSLVersion();

  /**
   * \brief Check that OpenGL required capabilities have been reached.
   *
   * \return true if OpengGL capabilities of running platform meets
   * the needs of the library.
   */
  static bool CheckGLCapabilities();

  /**
   * \brief Check that OpenGL required capabilities have been reached.
   *
   * \param glVersion The returned OpenGL version or <code>NULL</code>
   * if its query has failed.
   *
   * \param glslVersion The returned OpenGL Shading-Language version
   * or <code>NULL</code> if its query has failed.
   *
   * \return true if OpengGL capabilities of running platform meets
   * the needs of the library.
   */
  static bool CheckGLCapabilities( const char * & glVersion,
                                   const char * & glslVersion );

  /**
   * \brief Compares to version-strings on the model of strcmp().
   *
   * \param Left hand-side version string (runtime). If
   * <code>NULL</code>, version-string is considered 0.0.0. (\see
   * GlVersionChecker::SplitVersion()).
   *
   * \param Right hande-side version string (required). If
   * <code>NULL</code>, version-string is considered 0.0.0. (\see
   * GlVersionChecker::SplitVersion()).
   *
   * \return <code>-1</code> if version<required; <code>0</code> if
   * version==required; <code>+1</code> if version>=required.
   */
  static int VerCmp( const char * version, const char * required );

  /**
   * \brief Split version string into Major.minor.release triplet.
   *
   * \param version String to split into triplet. If <code>NULL</code>
   * or empty, triplet is 0.0.0.
   * \param major Major number of resulting version triplet.
   * \param minor Minor number of resulting version triplet.
   * \param release Release number of resulting version triplet.
   *
   * \return <code>true</code> if operation has succeeded,
   * <code>false</code> otherwise.
   */
  static bool SplitVersion( const char * version,
                            int& major,
                            int& minor,
                            int& release ) noexcept;

private:
  // Prevent instantiation
  GlVersionChecker() = delete;
  ~GlVersionChecker() = delete;
  GlVersionChecker( const GlVersionChecker & ) = delete;
  void operator = ( const GlVersionChecker & ) = delete;
};

} // End namespace otb


#endif