27 {
31
32
33 if (nullptr == GetString || nullptr == GetIntegerv) {
34 return nullptr;
35 }
36
37 const char* versionString = (
const char*) GetString(
GR_GL_VERSION);
39
41
42 return nullptr;
43 }
44
50 display)) {
51 return nullptr;
52 }
53
56
57
150
153
156 }
157
160 }
161
166 }
else if (
extensions.has(
"GL_ARB_vertex_array_object")) {
170 }
else if (
extensions.has(
"GL_APPLE_vertex_array_object")) {
174 }
175
178 }
else if (
extensions.has(
"GL_ARB_tessellation_shader")) {
180 }
181
184 }
185
187 GET_PROC(BindFragDataLocationIndexed);
188 }
else if (
extensions.has(
"GL_ARB_blend_func_extended")) {
189 GET_PROC(BindFragDataLocationIndexed);
190 }
191
192 if (
extensions.has(
"GL_KHR_blend_equation_advanced")) {
194 }
else if (
extensions.has(
"GL_NV_blend_equation_advanced")) {
196 }
197
201 }
else if (
extensions.has(
"GL_ARB_clear_texture")) {
204 }
205
209 }
else if (
extensions.has(
"GL_ARB_draw_instanced")) {
212 }
else if (
extensions.has(
"GL_EXT_draw_instanced")) {
215 }
216
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);
223 }
224
227
231 }
else if (
extensions.has(
"GL_ARB_draw_indirect")) {
234 }
235
237
240 }
else if (
extensions.has(
"GL_ARB_texture_multisample")) {
242 }
243
245
248 GET_PROC(MultiDrawElementsIndirect);
249 }
else if (
extensions.has(
"GL_ARB_multi_draw_indirect")) {
251 GET_PROC(MultiDrawElementsIndirect);
252 }
253
256 }
257
260 }
261
264 }
else if (
extensions.has(
"GL_ARB_texture_storage")) {
266 }
else if (
extensions.has(
"GL_EXT_texture_storage")) {
268 }
269
272 }
else if (
extensions.has(
"GL_ARB_texture_barrier")) {
274 }
else if (
extensions.has(
"GL_NV_texture_barrier")) {
276 }
277
280 }
else if (
extensions.has(
"GL_ARB_instanced_arrays")) {
282 }
283
286 }
287
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")) {
330 }
331
334 }
else if (
extensions.has(
"GL_ARB_framebuffer_object")) {
336 }
else if (
extensions.has(
"GL_EXT_framebuffer_blit")) {
338 }
339
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")) {
346 }
347
349
351
355 }
else if (
extensions.has(
"GL_ARB_map_buffer_range")) {
358 }
359
364 }
365
368 }
else if (
extensions.has(
"GL_ARB_copy_buffer")) {
370 }
371
388 }
389
390 if (
extensions.has(
"GL_EXT_window_rectangles")) {
392 }
393
406 }
407
410 }
else if (
extensions.has(
"GL_ARB_internalformat_query")) {
412 }
413
417 }
418
421 }
422
430 }
else if (
extensions.has(
"GL_ARB_sampler_objects")) {
437 }
438
440
441#if defined(GR_TEST_UTILS)
448#endif
449
453 }
else if (
extensions.has(
"GL_ARB_timer_query")) {
456 }
else if (
extensions.has(
"GL_EXT_timer_query")) {
459 }
460
463 }
else if (
extensions.has(
"GL_ARB_timer_query")) {
465 }
466
472 }
else if (
extensions.has(
"GL_ARB_invalidate_subdata")) {
477 }
478
482 }
else if (
extensions.has(
"GL_ARB_invalidate_subdata")) {
485 }
486
489 }
else if (
extensions.has(
"GL_ARB_ES2_compatibility")) {
491 }
492
499 }
500
501
502
505
506 return interface;
507}
#define GET_PROC_SUFFIX(F, S)
#define GET_PROC_LOCAL(F)
void GrGetEGLQueryAndDisplay(GrEGLQueryStringFn **queryString, GrEGLDisplay *display, void *ctx, GrGLGetProc get)
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)
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)