blob: 56ce729cc7cdddc412276dae01fa32ee6b20af08 [file] [log] [blame]
commit-bot@chromium.org9add5dc2014-04-29 20:06:22 +00001/*
2 * Copyright 2014 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8
Mike Kleinc0bd9f92019-04-23 12:05:21 -05009#include "include/gpu/gl/GrGLAssembleHelpers.h"
10#include "include/gpu/gl/GrGLAssembleInterface.h"
11#include "src/gpu/gl/GrGLUtil.h"
commit-bot@chromium.org9add5dc2014-04-29 20:06:22 +000012
Brian Salomon2424ec42018-08-24 10:26:42 -040013#define GET_PROC_LOCAL(F) GrGL##F##Fn* F = (GrGL##F##Fn*)get(ctx, "gl" #F)
commit-bot@chromium.org9add5dc2014-04-29 20:06:22 +000014
Brian Salomon94f509b2017-12-11 16:36:53 -050015sk_sp<const GrGLInterface> GrGLMakeAssembledInterface(void *ctx, GrGLGetProc get) {
bsalomona721c812014-08-26 11:35:23 -070016 GET_PROC_LOCAL(GetString);
halcanary96fcdcc2015-08-27 07:41:13 -070017 if (nullptr == GetString) {
18 return nullptr;
bsalomona721c812014-08-26 11:35:23 -070019 }
20
21 const char* verStr = reinterpret_cast<const char*>(GetString(GR_GL_VERSION));
halcanary96fcdcc2015-08-27 07:41:13 -070022 if (nullptr == verStr) {
23 return nullptr;
bsalomona721c812014-08-26 11:35:23 -070024 }
25
26 GrGLStandard standard = GrGLGetStandardInUseFromString(verStr);
Kevin Lubick27ba7032019-03-21 08:13:54 -040027 // standard can be unused (optimzed away) if SK_ASSUME_GL_ES is set
28 sk_ignore_unused_variable(standard);
bsalomona721c812014-08-26 11:35:23 -070029
Kevin Lubick8aa203c2019-03-19 13:23:10 -040030 if (GR_IS_GR_GL_ES(standard)) {
Brian Salomon94f509b2017-12-11 16:36:53 -050031 return GrGLMakeAssembledGLESInterface(ctx, get);
Kevin Lubick8aa203c2019-03-19 13:23:10 -040032 } else if (GR_IS_GR_GL(standard)) {
Brian Salomon94f509b2017-12-11 16:36:53 -050033 return GrGLMakeAssembledGLInterface(ctx, get);
Kevin Lubick39026282019-03-28 12:46:40 -040034 } else if (GR_IS_GR_WEBGL(standard)) {
35 return GrGLMakeAssembledWebGLInterface(ctx, get);
bsalomona721c812014-08-26 11:35:23 -070036 }
halcanary96fcdcc2015-08-27 07:41:13 -070037 return nullptr;
bsalomona721c812014-08-26 11:35:23 -070038}
39
Brian Salomon94f509b2017-12-11 16:36:53 -050040SK_API const GrGLInterface* GrGLAssembleInterface(void *ctx, GrGLGetProc get) {
41 return GrGLMakeAssembledInterface(ctx, get).release();
42}