VTK  9.7.1
vtkOpenGLShaderDeclaration.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2 // SPDX-License-Identifier: BSD-3-Clause
9 #ifndef vtkOpenGLShaderDeclaration_h
10 #define vtkOpenGLShaderDeclaration_h
11 
12 #include "vtkRenderingOpenGL2Module.h"
13 #include "vtkStringToken.h"
14 
15 VTK_ABI_NAMESPACE_BEGIN
16 class VTKRENDERINGOPENGL2_EXPORT vtkOpenGLShaderDeclaration
17 {
18 public:
19  enum class GLSLAttributeType
20  {
21  Mat3,
22  Mat4,
23  SamplerBuffer,
24  SamplerCube,
25  Sampler2D,
26  Sampler1D,
27  Scalar,
28  Vec2,
29  Vec3,
30  Vec4,
31  };
32 
33  enum class GLSLDataType
34  {
35  Unsigned,
36  Integer,
37  Float,
38  };
39 
40  enum class GLSLPrecisionType
41  {
42  Low,
43  Medium,
44  High,
45  None,
46  };
47 
48  enum class GLSLQualifierType
49  {
50  Uniform,
51  In,
52  Out
53  };
59  vtkOpenGLShaderDeclaration() = default;
61  GLSLAttributeType attr, vtkStringToken varName)
62  : QualifierType(qual)
63  , PrecisionType(prec)
64  , DataType(dtype)
65  , AttributeType(attr)
66  , VariableName(varName)
67  {
68  }
69 
70  friend std::ostream& operator<<(std::ostream& os, const vtkOpenGLShaderDeclaration& decl)
71  {
72  const std::string space = " ";
73  switch (decl.QualifierType)
74  {
75  case GLSLQualifierType::Uniform:
76  os << "uniform";
77  break;
78  case GLSLQualifierType::In:
79  os << "in";
80  break;
81  case GLSLQualifierType::Out:
82  default:
83  os << "out";
84  break;
85  }
86 
87  switch (decl.PrecisionType)
88  {
89  case GLSLPrecisionType::Low:
90  os << space;
91  os << "lowp";
92  break;
93  case GLSLPrecisionType::Medium:
94  os << space;
95  os << "mediump";
96  break;
97  case GLSLPrecisionType::High:
98  os << space;
99  os << "highp";
100  break;
102  default:
103  break;
104  }
105 
106  if (decl.AttributeType != GLSLAttributeType::Scalar)
107  {
108  switch (decl.DataType)
109  {
110  case GLSLDataType::Unsigned:
111  os << space;
112  os << "u";
113  break;
114  case GLSLDataType::Integer:
115  os << space;
116  os << "i";
117  break;
118  case GLSLDataType::Float:
119  default:
120  os << space;
121  break;
122  }
123  }
124 
125  switch (decl.AttributeType)
126  {
127  case GLSLAttributeType::Mat3:
128  os << "mat3";
129  break;
130  case GLSLAttributeType::Mat4:
131  os << "mat4";
132  break;
133  case GLSLAttributeType::SamplerBuffer:
134  os << "samplerBuffer";
135  break;
136  case GLSLAttributeType::SamplerCube:
137  os << "samplerCube";
138  break;
139  case GLSLAttributeType::Sampler2D:
140  os << "sampler2D";
141  break;
142  case GLSLAttributeType::Sampler1D:
143  os << "sampler1D";
144  break;
145  case GLSLAttributeType::Scalar:
146  switch (decl.DataType)
147  {
148  case GLSLDataType::Unsigned:
149  os << space;
150  os << "uint";
151  break;
152  case GLSLDataType::Integer:
153  os << space;
154  os << "int";
155  break;
156  case GLSLDataType::Float:
157  default:
158  os << space;
159  os << "float";
160  break;
161  }
162  break;
163  case GLSLAttributeType::Vec2:
164  os << "vec2";
165  break;
166  case GLSLAttributeType::Vec3:
167  os << "vec3";
168  break;
169  case GLSLAttributeType::Vec4:
170  default:
171  os << "vec4";
172  break;
173  }
174  os << space << decl.VariableName.Data() << ";";
175  return os;
176  }
177 };
178 
179 VTK_ABI_NAMESPACE_END
180 #endif // vtkOpenGLShaderDeclaration_h
friend std::ostream & operator<<(std::ostream &os, const vtkOpenGLShaderDeclaration &decl)
!< For HCURL
vtkOpenGLShaderDeclaration(GLSLQualifierType qual, GLSLPrecisionType prec, GLSLDataType dtype, GLSLAttributeType attr, vtkStringToken varName)
Represent a string by its integer hash.
const std::string & Data() const
Return the string corresponding to the token.