VTK  9.4.20250325
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
15VTK_ABI_NAMESPACE_BEGIN
16class VTKRENDERINGOPENGL2_EXPORT vtkOpenGLShaderDeclaration
17{
18public:
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
41 {
42 Low,
43 Medium,
44 High,
45 None,
46 };
47
49 {
50 Uniform,
51 In,
52 Out
53 };
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;
101 case GLSLPrecisionType::None:
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
179VTK_ABI_NAMESPACE_END
180#endif // vtkOpenGLShaderDeclaration_h
vtkOpenGLShaderDeclaration()=default
friend std::ostream & operator<<(std::ostream &os, const vtkOpenGLShaderDeclaration &decl)
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.
@ None
!< For HCURL