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_ES_INTERFACE
29 if (
nullptr == GetString) {
33 const char* verStr =
reinterpret_cast<const char*
>(GetString(
GR_GL_VERSION));
160 }
else if (
extensions.has(
"GL_OES_vertex_array_object")) {
168 }
else if (
extensions.has(
"GL_OES_tessellation_shader")) {
180 if (
extensions.has(
"GL_KHR_blend_equation_advanced")) {
182 }
else if (
extensions.has(
"GL_NV_blend_equation_advanced")) {
194 }
else if (
extensions.has(
"GL_EXT_draw_instanced")) {
197 }
else if (
extensions.has(
"GL_ANGLE_instanced_arrays")) {
205 }
else if (
extensions.has(
"GL_ANGLE_base_vertex_base_instance")) {
220 if (
extensions.has(
"GL_ANGLE_base_vertex_base_instance")) {
222 GET_PROC_SUFFIX(MultiDrawElementsInstancedBaseVertexBaseInstance, ANGLE);
237 if (
extensions.has(
"GL_EXT_multi_draw_indirect")) {
244 }
else if (
extensions.has(
"GL_OES_texture_buffer")) {
246 }
else if (
extensions.has(
"GL_EXT_texture_buffer")) {
252 }
else if (
extensions.has(
"GL_OES_texture_buffer")) {
254 }
else if (
extensions.has(
"GL_EXT_texture_buffer")) {
260 }
else if (
extensions.has(
"GL_EXT_texture_storage")) {
264 if (
extensions.has(
"GL_NV_texture_barrier")) {
268 if (
extensions.has(
"GL_EXT_discard_framebuffer")) {
272 if (
extensions.has(
"GL_QCOM_tiled_rendering")) {
279 }
else if (
extensions.has(
"GL_EXT_instanced_arrays")) {
281 }
else if (
extensions.has(
"GL_ANGLE_instanced_arrays")) {
299 GET_PROC(GetFramebufferAttachmentParameteriv);
300 GET_PROC(GetRenderbufferParameteriv);
305 }
else if (
extensions.has(
"GL_NV_framebuffer_blit")) {
307 }
else if (
extensions.has(
"GL_CHROMIUM_framebuffer_multisample")) {
309 }
else if (
extensions.has(
"GL_ANGLE_framebuffer_blit")) {
314 GET_PROC(RenderbufferStorageMultisample);
315 }
else if (
extensions.has(
"GL_CHROMIUM_framebuffer_multisample")) {
317 }
else if (
extensions.has(
"GL_ANGLE_framebuffer_multisample")) {
328 if (
extensions.has(
"GL_EXT_multisampled_render_to_texture")) {
330 }
else if (
extensions.has(
"GL_IMG_multisampled_render_to_texture")) {
334 if (
extensions.has(
"GL_EXT_multisampled_render_to_texture")) {
338 if (
extensions.has(
"GL_IMG_multisampled_render_to_texture")) {
342 if (
extensions.has(
"GL_APPLE_framebuffer_multisample")) {
353 }
else if (
extensions.has(
"GL_OES_mapbuffer")) {
360 }
else if (
extensions.has(
"GL_EXT_map_buffer_range")) {
373 }
else if (
extensions.has(
"GL_NV_copy_buffer")) {
387 if (
extensions.has(
"GL_CHROMIUM_bind_uniform_location")) {
391 if (
extensions.has(
"GL_EXT_window_rectangles")) {
416 }
else if (
extensions.has(
"GL_OES_get_program_binary")) {
435#if defined(GR_TEST_UTILS)
443 }
else if (
extensions.has(
"GL_EXT_occlusion_query_boolean")) {
444#if defined(GR_TEST_UTILS)
454 if (
extensions.has(
"GL_ARB_invalidate_subdata")) {
464 }
else if (
extensions.has(
"GL_ARB_invalidate_subdata")) {
490 if (!interface->fFunctions.fDebugMessageControl) {
sk_sp< const GrGLInterface > GrGLMakeAssembledGLESInterface(void *ctx, GrGLGetProc get)
#define GET_PROC_SUFFIX(F, S)
#define GET_PROC_LOCAL(F)
void GrGetEGLQueryAndDisplay(GrEGLQueryStringFn **queryString, GrEGLDisplay *display, void *ctx, GrGLGetProc get)
GrGLFuncPtr(* GrGLGetProc)(void *ctx, const char name[])
GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLsizei samples, GrGLenum internalformat, GrGLsizei width, GrGLsizei height) GrGLRenderbufferStorageMultisampleFn
const char *GR_GL_FUNCTION_TYPE(GrEGLDisplay dpy, GrEGLint name) GrEGLQueryStringFn
GrGLVersion GrGLGetVersionFromString(const char *versionString)
#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)
GrGLFunction< GrGLRenderbufferStorageMultisampleFn > fRenderbufferStorageMultisampleES2EXT
GrGLFunction< GrGLRenderbufferStorageMultisampleFn > fRenderbufferStorageMultisampleES2APPLE