16#define GET_PROC(F) functions->f##F = (GrGL##F##Fn*)get(ctx, "gl" #F)
17#define GET_PROC_SUFFIX(F, S) functions->f##F = (GrGL##F##Fn*)get(ctx, "gl" #F #S)
18#define GET_PROC_LOCAL(F) GrGL##F##Fn* F = (GrGL##F##Fn*)get(ctx, "gl" #F)
20#define GET_EGL_PROC_SUFFIX(F, S) functions->fEGL##F = (GrEGL##F##Fn*)get(ctx, "egl" #F #S)
22#if SK_DISABLE_GL_INTERFACE
33 if (
nullptr == GetString ||
nullptr == GetIntegerv) {
37 const char* versionString = (
const char*) GetString(
GR_GL_VERSION);
166 }
else if (
extensions.has(
"GL_ARB_vertex_array_object")) {
170 }
else if (
extensions.has(
"GL_APPLE_vertex_array_object")) {
178 }
else if (
extensions.has(
"GL_ARB_tessellation_shader")) {
187 GET_PROC(BindFragDataLocationIndexed);
188 }
else if (
extensions.has(
"GL_ARB_blend_func_extended")) {
189 GET_PROC(BindFragDataLocationIndexed);
192 if (
extensions.has(
"GL_KHR_blend_equation_advanced")) {
194 }
else if (
extensions.has(
"GL_NV_blend_equation_advanced")) {
201 }
else if (
extensions.has(
"GL_ARB_clear_texture")) {
209 }
else if (
extensions.has(
"GL_ARB_draw_instanced")) {
212 }
else if (
extensions.has(
"GL_EXT_draw_instanced")) {
218 GET_PROC(DrawArraysInstancedBaseInstance);
219 GET_PROC(DrawElementsInstancedBaseVertexBaseInstance);
220 }
else if (
extensions.has(
"GL_ARB_base_instance")) {
221 GET_PROC(DrawArraysInstancedBaseInstance);
222 GET_PROC(DrawElementsInstancedBaseVertexBaseInstance);
231 }
else if (
extensions.has(
"GL_ARB_draw_indirect")) {
240 }
else if (
extensions.has(
"GL_ARB_texture_multisample")) {
248 GET_PROC(MultiDrawElementsIndirect);
249 }
else if (
extensions.has(
"GL_ARB_multi_draw_indirect")) {
251 GET_PROC(MultiDrawElementsIndirect);
264 }
else if (
extensions.has(
"GL_ARB_texture_storage")) {
266 }
else if (
extensions.has(
"GL_EXT_texture_storage")) {
272 }
else if (
extensions.has(
"GL_ARB_texture_barrier")) {
274 }
else if (
extensions.has(
"GL_NV_texture_barrier")) {
280 }
else if (
extensions.has(
"GL_ARB_instanced_arrays")) {
299 GET_PROC(GetFramebufferAttachmentParameteriv);
300 GET_PROC(GetRenderbufferParameteriv);
302 }
else if (
extensions.has(
"GL_ARB_framebuffer_object")) {
313 GET_PROC(GetFramebufferAttachmentParameteriv);
314 GET_PROC(GetRenderbufferParameteriv);
316 }
else if (
extensions.has(
"GL_EXT_framebuffer_object")) {
334 }
else if (
extensions.has(
"GL_ARB_framebuffer_object")) {
336 }
else if (
extensions.has(
"GL_EXT_framebuffer_blit")) {
341 GET_PROC(RenderbufferStorageMultisample);
342 }
else if (
extensions.has(
"GL_ARB_framebuffer_object")) {
343 GET_PROC(RenderbufferStorageMultisample);
344 }
else if (
extensions.has(
"GL_EXT_framebuffer_multisample")) {
355 }
else if (
extensions.has(
"GL_ARB_map_buffer_range")) {
368 }
else if (
extensions.has(
"GL_ARB_copy_buffer")) {
390 if (
extensions.has(
"GL_EXT_window_rectangles")) {
410 }
else if (
extensions.has(
"GL_ARB_internalformat_query")) {
430 }
else if (
extensions.has(
"GL_ARB_sampler_objects")) {
441#if defined(GR_TEST_UTILS)
453 }
else if (
extensions.has(
"GL_ARB_timer_query")) {
456 }
else if (
extensions.has(
"GL_EXT_timer_query")) {
463 }
else if (
extensions.has(
"GL_ARB_timer_query")) {
472 }
else if (
extensions.has(
"GL_ARB_invalidate_subdata")) {
482 }
else if (
extensions.has(
"GL_ARB_invalidate_subdata")) {
489 }
else if (
extensions.has(
"GL_ARB_ES2_compatibility")) {
#define GET_PROC_SUFFIX(F, S)
sk_sp< const GrGLInterface > GrGLMakeAssembledGLInterface(void *ctx, GrGLGetProc get)
#define GET_PROC_LOCAL(F)
void GrGetEGLQueryAndDisplay(GrEGLQueryStringFn **queryString, GrEGLDisplay *display, void *ctx, GrGLGetProc get)
GrGLFuncPtr(* GrGLGetProc)(void *ctx, const char name[])
const char *GR_GL_FUNCTION_TYPE(GrEGLDisplay dpy, GrEGLint name) GrEGLQueryStringFn
GrGLVersion GrGLGetVersionFromString(const char *versionString)
#define GR_GL_INVALID_VER
#define GR_GL_VER(major, minor)
void swap(sk_sp< T > &that)
static void Finish(Thread *thread)
static std::string GetShaderInfoLog(const ProcTableGLES &gl, GLuint shader)
static bool LinkProgram(const ReactorGLES &reactor, const std::shared_ptr< PipelineGLES > &pipeline, const std::shared_ptr< const ShaderFunction > &vert_function, const std::shared_ptr< const ShaderFunction > &frag_function)
const myers::Point & get(const myers::Segment &)
void Flush(SkSurface *surface)