27 {
29 if (nullptr == GetString) {
30 return nullptr;
31 }
32
33 const char* verStr =
reinterpret_cast<const char*
>(GetString(
GR_GL_VERSION));
35
37 return nullptr;
38 }
39
47 display)) {
48 return nullptr;
49 }
50
53
54
147
150 }
151
154 }
155
160 }
else if (
extensions.has(
"GL_OES_vertex_array_object")) {
164 }
165
168 }
else if (
extensions.has(
"GL_OES_tessellation_shader")) {
170 }
171
174 }
175
178 }
179
180 if (
extensions.has(
"GL_KHR_blend_equation_advanced")) {
182 }
else if (
extensions.has(
"GL_NV_blend_equation_advanced")) {
184 }
185
189 }
190
194 }
else if (
extensions.has(
"GL_EXT_draw_instanced")) {
197 }
else if (
extensions.has(
"GL_ANGLE_instanced_arrays")) {
200 }
201
205 }
else if (
extensions.has(
"GL_ANGLE_base_vertex_base_instance")) {
208 }
209
213 }
214
218 }
219
220 if (
extensions.has(
"GL_ANGLE_base_vertex_base_instance")) {
222 GET_PROC_SUFFIX(MultiDrawElementsInstancedBaseVertexBaseInstance, ANGLE);
223 }
224
227 }
228
231 }
232
235 }
236
237 if (
extensions.has(
"GL_EXT_multi_draw_indirect")) {
240 }
241
244 }
else if (
extensions.has(
"GL_OES_texture_buffer")) {
246 }
else if (
extensions.has(
"GL_EXT_texture_buffer")) {
248 }
249
252 }
else if (
extensions.has(
"GL_OES_texture_buffer")) {
254 }
else if (
extensions.has(
"GL_EXT_texture_buffer")) {
256 }
257
260 }
else if (
extensions.has(
"GL_EXT_texture_storage")) {
262 }
263
264 if (
extensions.has(
"GL_NV_texture_barrier")) {
266 }
267
268 if (
extensions.has(
"GL_EXT_discard_framebuffer")) {
270 }
271
272 if (
extensions.has(
"GL_QCOM_tiled_rendering")) {
275 }
276
279 }
else if (
extensions.has(
"GL_EXT_instanced_arrays")) {
281 }
else if (
extensions.has(
"GL_ANGLE_instanced_arrays")) {
283 }
284
287 }
288
299 GET_PROC(GetFramebufferAttachmentParameteriv);
300 GET_PROC(GetRenderbufferParameteriv);
302
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")) {
311 }
312
314 GET_PROC(RenderbufferStorageMultisample);
315 }
else if (
extensions.has(
"GL_CHROMIUM_framebuffer_multisample")) {
317 }
else if (
extensions.has(
"GL_ANGLE_framebuffer_multisample")) {
319 }
320
326 }
327
328 if (
extensions.has(
"GL_EXT_multisampled_render_to_texture")) {
330 }
else if (
extensions.has(
"GL_IMG_multisampled_render_to_texture")) {
332 }
333
334 if (
extensions.has(
"GL_EXT_multisampled_render_to_texture")) {
336 }
337
338 if (
extensions.has(
"GL_IMG_multisampled_render_to_texture")) {
340 }
341
342 if (
extensions.has(
"GL_APPLE_framebuffer_multisample")) {
345 }
346
349 }
350
353 }
else if (
extensions.has(
"GL_OES_mapbuffer")) {
355 }
356
360 }
else if (
extensions.has(
"GL_EXT_map_buffer_range")) {
363 }
364
369 }
370
373 }
else if (
extensions.has(
"GL_NV_copy_buffer")) {
375 }
376
385 }
386
387 if (
extensions.has(
"GL_CHROMIUM_bind_uniform_location")) {
389 }
390
391 if (
extensions.has(
"GL_EXT_window_rectangles")) {
393 }
394
407 }
408
411 }
412
416 }
else if (
extensions.has(
"GL_OES_get_program_binary")) {
419 }
420
423 }
424
432 }
433
435#if defined(GR_TEST_UTILS)
442#endif
443 }
else if (
extensions.has(
"GL_EXT_occlusion_query_boolean")) {
444#if defined(GR_TEST_UTILS)
451#endif
452 }
453
454 if (
extensions.has(
"GL_ARB_invalidate_subdata")) {
459 }
460
464 }
else if (
extensions.has(
"GL_ARB_invalidate_subdata")) {
467 }
468
470
477 }
478
479
480
481
482
483
485
486
487
488
489
490 if (!interface->fFunctions.fDebugMessageControl) {
492 }
493 }
496
497 return interface;
498}
#define GET_PROC_SUFFIX(F, S)
#define GET_PROC_LOCAL(F)
void GrGetEGLQueryAndDisplay(GrEGLQueryStringFn **queryString, GrEGLDisplay *display, void *ctx, GrGLGetProc get)
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)
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