| /* |
| * Copyright 2020 Google LLC |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| #include "include/gpu/gl/GrGLAssembleInterface.h" |
| #include "include/gpu/gl/GrGLInterface.h" |
| |
| #include <emscripten/html5.h> |
| #include <webgl/webgl1.h> |
| #include <webgl/webgl1_ext.h> |
| #include <webgl/webgl2.h> |
| #include <webgl/webgl2_ext.h> |
| |
| static GrGLFuncPtr webgl_get_gl_proc(void* ctx, const char name[]) { |
| |
| #define M(X) if (0 == strcmp(#X, name)) { return (GrGLFuncPtr) emscripten_##X; } |
| M(glGetString) |
| #undef M |
| |
| // We explicitly do not use GetProcAddress or something similar because |
| // its code size is quite large. We shouldn't need GetProcAddress |
| // because emscripten provides us all the valid function pointers |
| // for WebGL via the included headers. |
| // https://github.com/emscripten-core/emscripten/blob/7ba7700902c46734987585409502f3c63beb650f/system/include/emscripten/html5_webgl.h#L93 |
| SkASSERTF(false, "Can't lookup fn %s\n", name); |
| return nullptr; |
| } |
| |
| sk_sp<const GrGLInterface> GrGLMakeNativeInterface() { |
| return GrGLMakeAssembledInterface(nullptr, webgl_get_gl_proc); |
| } |
| |
| const GrGLInterface* GrGLCreateNativeInterface() { return GrGLMakeNativeInterface().release(); } |