Flutter Impeller
formats_gles.h
Go to the documentation of this file.
1 // Copyright 2013 The Flutter Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef FLUTTER_IMPELLER_RENDERER_BACKEND_GLES_FORMATS_GLES_H_
6 #define FLUTTER_IMPELLER_RENDERER_BACKEND_GLES_FORMATS_GLES_H_
7 
8 #include <optional>
9 
10 #include "flutter/fml/logging.h"
11 #include "flutter/fml/macros.h"
12 #include "impeller/core/formats.h"
15 
16 namespace impeller {
17 
18 constexpr GLenum ToMode(PrimitiveType primitive_type) {
19  switch (primitive_type) {
21  return GL_TRIANGLES;
23  return GL_TRIANGLE_STRIP;
25  return GL_LINES;
27  return GL_LINE_STRIP;
29  return GL_POINTS;
30  }
31  FML_UNREACHABLE();
32 }
33 
34 constexpr GLenum ToIndexType(IndexType type) {
35  switch (type) {
37  case IndexType::kNone:
38  FML_UNREACHABLE();
39  case IndexType::k16bit:
40  return GL_UNSIGNED_SHORT;
41  case IndexType::k32bit:
42  return GL_UNSIGNED_INT;
43  }
44  FML_UNREACHABLE();
45 }
46 
47 constexpr GLenum ToStencilOp(StencilOperation op) {
48  switch (op) {
50  return GL_KEEP;
52  return GL_ZERO;
54  return GL_REPLACE;
56  return GL_INCR;
58  return GL_DECR;
60  return GL_INVERT;
62  return GL_INCR_WRAP;
64  return GL_DECR_WRAP;
65  }
66  FML_UNREACHABLE();
67 }
68 
69 constexpr GLenum ToCompareFunction(CompareFunction func) {
70  switch (func) {
72  return GL_NEVER;
74  return GL_ALWAYS;
76  return GL_LESS;
78  return GL_EQUAL;
80  return GL_LEQUAL;
82  return GL_GREATER;
84  return GL_NOTEQUAL;
86  return GL_GEQUAL;
87  }
88  FML_UNREACHABLE();
89 }
90 
91 constexpr GLenum ToBlendFactor(BlendFactor factor) {
92  switch (factor) {
93  case BlendFactor::kZero:
94  return GL_ZERO;
95  case BlendFactor::kOne:
96  return GL_ONE;
98  return GL_SRC_COLOR;
100  return GL_ONE_MINUS_SRC_COLOR;
102  return GL_SRC_ALPHA;
104  return GL_ONE_MINUS_SRC_ALPHA;
106  return GL_DST_COLOR;
108  return GL_ONE_MINUS_DST_COLOR;
110  return GL_DST_ALPHA;
112  return GL_ONE_MINUS_DST_ALPHA;
114  return GL_SRC_ALPHA_SATURATE;
116  return GL_CONSTANT_COLOR;
118  return GL_ONE_MINUS_CONSTANT_COLOR;
120  return GL_CONSTANT_ALPHA;
122  return GL_ONE_MINUS_CONSTANT_ALPHA;
123  }
124  FML_UNREACHABLE();
125 }
126 
127 constexpr GLenum ToBlendOperation(BlendOperation op) {
128  switch (op) {
130  return GL_FUNC_ADD;
132  return GL_FUNC_SUBTRACT;
134  return GL_FUNC_REVERSE_SUBTRACT;
135  }
136  FML_UNREACHABLE();
137 }
138 
139 constexpr std::optional<GLenum> ToVertexAttribType(ShaderType type) {
140  switch (type) {
142  return GL_BYTE;
144  return GL_UNSIGNED_BYTE;
146  return GL_SHORT;
148  return GL_UNSIGNED_SHORT;
149  case ShaderType::kFloat:
150  return GL_FLOAT;
152  case ShaderType::kVoid:
160  case ShaderType::kDouble:
161  case ShaderType::kStruct:
162  case ShaderType::kImage:
165  return std::nullopt;
166  }
167  FML_UNREACHABLE();
168 }
169 
170 constexpr GLenum ToTextureType(TextureType type) {
171  switch (type) {
173  return GL_TEXTURE_2D;
175  return GL_TEXTURE_2D_MULTISAMPLE;
177  return GL_TEXTURE_CUBE_MAP;
179  return GL_TEXTURE_EXTERNAL_OES;
180  }
181  FML_UNREACHABLE();
182 }
183 
184 constexpr std::optional<GLenum> ToTextureTarget(TextureType type) {
185  switch (type) {
187  return GL_TEXTURE_2D;
189  return GL_TEXTURE_2D;
191  return GL_TEXTURE_CUBE_MAP;
193  return GL_TEXTURE_EXTERNAL_OES;
194  }
195  FML_UNREACHABLE();
196 }
197 
198 std::string DebugToFramebufferError(int status);
199 
200 } // namespace impeller
201 
202 #endif // FLUTTER_IMPELLER_RENDERER_BACKEND_GLES_FORMATS_GLES_H_
impeller::TextureType::kTextureExternalOES
@ kTextureExternalOES
impeller::CompareFunction::kGreater
@ kGreater
Comparison test passes if new_value > current_value.
impeller::PrimitiveType::kLineStrip
@ kLineStrip
impeller::StencilOperation::kDecrementClamp
@ kDecrementClamp
Decrement the current stencil value by 1. Clamp it to zero.
impeller::ShaderType::kAtomicCounter
@ kAtomicCounter
impeller::IndexType::k16bit
@ k16bit
impeller::ShaderType::kDouble
@ kDouble
impeller::ShaderType
ShaderType
Definition: shader_types.h:41
impeller::BlendFactor::kSourceAlphaSaturated
@ kSourceAlphaSaturated
impeller::BlendFactor
BlendFactor
Definition: formats.h:179
impeller::CompareFunction::kEqual
@ kEqual
Comparison test passes if new_value == current_value.
impeller::BlendFactor::kOneMinusSourceAlpha
@ kOneMinusSourceAlpha
impeller::CompareFunction::kGreaterEqual
@ kGreaterEqual
Comparison test passes if new_value >= current_value.
impeller::ToBlendFactor
constexpr GLenum ToBlendFactor(BlendFactor factor)
Definition: formats_gles.h:91
impeller::StencilOperation::kKeep
@ kKeep
Don't modify the current stencil value.
impeller::TextureType
TextureType
Definition: formats.h:263
impeller::ShaderType::kSignedInt64
@ kSignedInt64
formats.h
impeller::StencilOperation::kIncrementClamp
@ kIncrementClamp
Increment the current stencil value by 1. Clamp it to the maximum.
impeller::ShaderType::kImage
@ kImage
impeller::ShaderType::kVoid
@ kVoid
impeller::StencilOperation::kInvert
@ kInvert
Perform a logical bitwise invert on the current stencil value.
impeller::BlendFactor::kDestinationAlpha
@ kDestinationAlpha
impeller::ShaderType::kSignedByte
@ kSignedByte
impeller::IndexType::k32bit
@ k32bit
impeller::ShaderType::kUnsignedShort
@ kUnsignedShort
impeller::StencilOperation
StencilOperation
Definition: formats.h:553
impeller::StencilOperation::kSetToReferenceValue
@ kSetToReferenceValue
Reset the stencil value to the reference value.
impeller::BlendFactor::kSourceColor
@ kSourceColor
impeller::ShaderType::kUnsignedInt64
@ kUnsignedInt64
impeller::PrimitiveType::kLine
@ kLine
impeller::BlendFactor::kDestinationColor
@ kDestinationColor
impeller::ShaderType::kUnsignedByte
@ kUnsignedByte
impeller::ShaderType::kFloat
@ kFloat
impeller::PrimitiveType::kTriangle
@ kTriangle
impeller::BlendFactor::kZero
@ kZero
impeller::TextureType::kTexture2DMultisample
@ kTexture2DMultisample
impeller::ToIndexType
constexpr GLenum ToIndexType(IndexType type)
Definition: formats_gles.h:34
impeller::StencilOperation::kDecrementWrap
@ kDecrementWrap
Decrement the current stencil value by 1. If at zero, set to maximum.
impeller::CompareFunction
CompareFunction
Definition: formats.h:534
impeller::BlendFactor::kOneMinusDestinationColor
@ kOneMinusDestinationColor
impeller::PrimitiveType::kTriangleStrip
@ kTriangleStrip
impeller::PrimitiveType
PrimitiveType
Decides how backend draws pixels based on input vertices.
Definition: formats.h:353
impeller::ToCompareFunction
constexpr GLenum ToCompareFunction(CompareFunction func)
Definition: formats_gles.h:69
impeller::BlendOperation::kReverseSubtract
@ kReverseSubtract
impeller::ShaderType::kBoolean
@ kBoolean
impeller::BlendFactor::kBlendAlpha
@ kBlendAlpha
impeller::PrimitiveType::kPoint
@ kPoint
Draws a point at each input vertex.
impeller::ToMode
constexpr GLenum ToMode(PrimitiveType primitive_type)
Definition: formats_gles.h:18
impeller::BlendOperation::kAdd
@ kAdd
impeller::ShaderType::kSampler
@ kSampler
impeller::BlendFactor::kBlendColor
@ kBlendColor
impeller::IndexType
IndexType
Definition: formats.h:344
impeller::BlendFactor::kOneMinusBlendColor
@ kOneMinusBlendColor
impeller::IndexType::kNone
@ kNone
Does not use the index buffer.
impeller::ShaderType::kSampledImage
@ kSampledImage
impeller::StencilOperation::kIncrementWrap
@ kIncrementWrap
Increment the current stencil value by 1. If at maximum, set to zero.
impeller::TextureType::kTextureCube
@ kTextureCube
impeller::ToTextureType
constexpr GLenum ToTextureType(TextureType type)
Definition: formats_gles.h:170
impeller::CompareFunction::kLessEqual
@ kLessEqual
Comparison test passes if new_value <= current_value.
impeller::BlendFactor::kOne
@ kOne
impeller::BlendFactor::kOneMinusBlendAlpha
@ kOneMinusBlendAlpha
impeller::CompareFunction::kAlways
@ kAlways
Comparison test passes always passes.
impeller::ToVertexAttribType
constexpr std::optional< GLenum > ToVertexAttribType(ShaderType type)
Definition: formats_gles.h:139
gles.h
impeller::TextureType::kTexture2D
@ kTexture2D
impeller::StencilOperation::kZero
@ kZero
Reset the stencil value to zero.
impeller::ShaderType::kUnsignedInt
@ kUnsignedInt
impeller::CompareFunction::kNever
@ kNever
Comparison test never passes.
impeller::ShaderType::kStruct
@ kStruct
impeller::BlendOperation
BlendOperation
Definition: formats.h:197
impeller::ShaderType::kSignedShort
@ kSignedShort
impeller::ShaderType::kHalfFloat
@ kHalfFloat
impeller::ShaderType::kSignedInt
@ kSignedInt
impeller::BlendFactor::kOneMinusSourceColor
@ kOneMinusSourceColor
impeller::ToBlendOperation
constexpr GLenum ToBlendOperation(BlendOperation op)
Definition: formats_gles.h:127
impeller::ToTextureTarget
constexpr std::optional< GLenum > ToTextureTarget(TextureType type)
Definition: formats_gles.h:184
impeller::ShaderType::kUnknown
@ kUnknown
impeller::CompareFunction::kNotEqual
@ kNotEqual
Comparison test passes if new_value != current_value.
impeller::BlendFactor::kSourceAlpha
@ kSourceAlpha
impeller::ToStencilOp
constexpr GLenum ToStencilOp(StencilOperation op)
Definition: formats_gles.h:47
shader_types.h
impeller::CompareFunction::kLess
@ kLess
Comparison test passes if new_value < current_value.
impeller
Definition: aiks_blur_unittests.cc:20
impeller::BlendOperation::kSubtract
@ kSubtract
impeller::IndexType::kUnknown
@ kUnknown
impeller::DebugToFramebufferError
std::string DebugToFramebufferError(int status)
Definition: formats_gles.cc:9
impeller::BlendFactor::kOneMinusDestinationAlpha
@ kOneMinusDestinationAlpha