5#ifndef FLUTTER_IMPELLER_RENDERER_BACKEND_GLES_PROC_TABLE_GLES_H_
6#define FLUTTER_IMPELLER_RENDERER_BACKEND_GLES_PROC_TABLE_GLES_H_
20#define IP_ENABLE_GLES_LABELING false
40 if (
error == GL_NO_ERROR) {
45 <<
error <<
")" <<
" encountered on call to " <<
name;
48 <<
")" <<
" encountered on call to " <<
name;
54template <
typename Type>
56 static void log(std::stringstream& stream, Type arg) { stream << arg; }
59template <
typename R,
typename... Args>
61 static void log(std::stringstream& stream, R (*val)(Args...)) {
62 stream << reinterpret_cast<void*>(val);
73template <
class Type,
class... Rest>
82template <
class... Type>
84 std::stringstream stream;
98 std::string_view
name = {};
125 template <
class...
Args>
127#if defined(IMPELLER_DEBUG) && !defined(NDEBUG)
133 <<
"This is likely due to a missing extension.";
149#define FOR_EACH_IMPELLER_PROC(PROC) \
150 PROC(ActiveTexture); \
151 PROC(AttachShader); \
152 PROC(BindAttribLocation); \
154 PROC(BindFramebuffer); \
155 PROC(BindRenderbuffer); \
157 PROC(BindVertexArray); \
158 PROC(BlendEquationSeparate); \
159 PROC(BlendFuncSeparate); \
161 PROC(BufferSubData); \
162 PROC(CheckFramebufferStatus); \
165 PROC(ClearStencil); \
167 PROC(CompileShader); \
168 PROC(CreateProgram); \
169 PROC(CreateShader); \
171 PROC(DeleteBuffers); \
172 PROC(DeleteFramebuffers); \
173 PROC(DeleteProgram); \
174 PROC(DeleteRenderbuffers); \
175 PROC(DeleteShader); \
176 PROC(DeleteTextures); \
177 PROC(DeleteVertexArrays); \
180 PROC(DetachShader); \
182 PROC(DisableVertexAttribArray); \
184 PROC(DrawElements); \
186 PROC(EnableVertexAttribArray); \
189 PROC(FramebufferRenderbuffer); \
190 PROC(FramebufferTexture2D); \
193 PROC(GenerateMipmap); \
194 PROC(GenFramebuffers); \
195 PROC(GenRenderbuffers); \
197 PROC(GenVertexArrays); \
198 PROC(GetActiveUniform); \
201 PROC(GetFramebufferAttachmentParameteriv); \
203 PROC(GetProgramInfoLog); \
204 PROC(GetProgramiv); \
205 PROC(GetShaderInfoLog); \
209 PROC(GetUniformLocation); \
211 PROC(IsFramebuffer); \
213 PROC(IsRenderbuffer); \
218 PROC(RenderbufferStorage); \
220 PROC(ShaderBinary); \
221 PROC(ShaderSource); \
222 PROC(StencilFuncSeparate); \
223 PROC(StencilMaskSeparate); \
224 PROC(StencilOpSeparate); \
226 PROC(TexSubImage2D); \
227 PROC(TexParameteri); \
228 PROC(TexParameterfv); \
234 PROC(UniformMatrix4fv); \
236 PROC(VertexAttribPointer); \
238 PROC(GetShaderSource); \
245#define FOR_EACH_IMPELLER_ES_ONLY_PROC(PROC) \
253#define FOR_EACH_IMPELLER_DESKTOP_ONLY_PROC(PROC) \
257#define FOR_EACH_IMPELLER_GLES3_PROC(PROC) \
260 PROC(GetActiveUniformBlockiv); \
261 PROC(GetActiveUniformBlockName); \
262 PROC(GetUniformBlockIndex); \
263 PROC(UniformBlockBinding); \
264 PROC(BindBufferRange); \
266 PROC(RenderbufferStorageMultisample) \
267 PROC(BlitFramebuffer);
269#define FOR_EACH_IMPELLER_EXT_PROC(PROC) \
270 PROC(DebugMessageControlKHR); \
271 PROC(DebugMessageCallbackKHR); \
272 PROC(DiscardFramebufferEXT); \
273 PROC(FramebufferTexture2DMultisampleEXT); \
274 PROC(PushDebugGroupKHR); \
275 PROC(PopDebugGroupKHR); \
276 PROC(ObjectLabelKHR); \
277 PROC(RenderbufferStorageMultisampleEXT); \
278 PROC(GenQueriesEXT); \
279 PROC(DeleteQueriesEXT); \
280 PROC(GetQueryObjectui64vEXT); \
281 PROC(BeginQueryEXT); \
283 PROC(GetQueryObjectuivEXT); \
284 PROC(BlitFramebufferANGLE);
298 using Resolver = std::function<
void*(
const char* function_name)>;
304#define IMPELLER_PROC(name) \
305 GLProc<decltype(gl##name)> name = {"gl" #name, nullptr};
324 const std::vector<Scalar>& defines = {})
const;
328 const std::shared_ptr<const CapabilitiesGLES>&
GetCapabilities()
const;
345 std::string_view label)
const;
354 const std::vector<Scalar>& defines)
const;
357 bool is_valid_ =
false;
358 std::unique_ptr<DescriptionGLES> description_;
359 std::shared_ptr<const CapabilitiesGLES> capabilities_;
360 GLint debug_label_max_length_ = 0;
FOR_EACH_IMPELLER_ES_ONLY_PROC(IMPELLER_PROC)
ProcTableGLES(ProcTableGLES &&other)=default
std::optional< std::string > ComputeShaderWithDefines(const fml::Mapping &mapping, const std::vector< Scalar > &defines) const
void PopDebugGroup() const
bool SetDebugLabel(DebugResourceType type, GLint name, std::string_view label) const
FOR_EACH_IMPELLER_GLES3_PROC(IMPELLER_PROC)
std::function< void *(const char *function_name)> Resolver
void ShaderSourceMapping(GLuint shader, const fml::Mapping &mapping, const std::vector< Scalar > &defines={}) const
Set the source for the attached [shader].
FOR_EACH_IMPELLER_DESKTOP_ONLY_PROC(IMPELLER_PROC)
std::string GetProgramInfoLogString(GLuint program) const
GLenum CheckFramebufferStatusDebug(GLenum target) const
bool SupportsDebugLabels() const
std::string DescribeCurrentFramebuffer() const
const std::shared_ptr< const CapabilitiesGLES > & GetCapabilities() const
bool IsCurrentFramebufferComplete() const
FOR_EACH_IMPELLER_PROC(IMPELLER_PROC)
FOR_EACH_IMPELLER_EXT_PROC(IMPELLER_PROC)
void PushDebugGroup(const std::string &string) const
const DescriptionGLES * GetDescription() const
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args
const uint8_t uint32_t uint32_t GError ** error
#define FML_LOG(severity)
#define FML_CHECK(condition)
void() glClearDepth(GLdouble depth)
std::string_view GLErrorToString(GLenum value)
bool GLErrorIsFatal(GLenum value)
void() glDepthRangef(GLfloat n, GLfloat f)
void BuildGLArgumentsStream(std::stringstream &stream, Type arg)
void() glDepthRange(GLdouble n, GLdouble f)
void() glClearDepthf(GLfloat depth)
std::string BuildGLArguments(Type... args)
#define IMPELLER_PROC(proc_ivar)
static void log(std::stringstream &stream, R(*val)(Args...))
static void log(std::stringstream &stream, Type arg)
AutoErrorCheck(PFNGLGETERRORPROC error, std::string_view name)
const PFNGLGETERRORPROC error_fn
auto operator()(Args &&... args) const
Call the GL function with the appropriate parameters. Lookup the documentation for the GL function be...
constexpr bool IsAvailable() const
GLFunctionType * function
PFNGLGETERRORPROC error_fn