blob: e72d60e74679431f34ea9aafa66d1d92e129c00c [file] [log] [blame]
/*
* 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/ganesh/gl/GrGLMakeWebGLInterface.h"
#include "include/gpu/ganesh/gl/GrGLAssembleInterface.h"
#include "include/gpu/ganesh/gl/GrGLInterface.h"
#include <GLES3/gl32.h>
static GrGLFuncPtr webgl_get_gl_proc(void* ctx, const char name[]) {
#define M(X) if (0 == strcmp(#X, name)) { return (GrGLFuncPtr) 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;
}
namespace GrGLInterfaces {
sk_sp<const GrGLInterface> MakeWebGL() {
return GrGLMakeAssembledWebGLInterface(nullptr, webgl_get_gl_proc);
}
} // namespace GrGLInterfaces
#if !defined(SK_DISABLE_LEGACY_GL_MAKE_NATIVE_INTERFACE)
sk_sp<const GrGLInterface> GrGLMakeNativeInterface() {
return GrGLInterfaces::MakeWebGL();
}
#endif