• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
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 
9 #include "include/gpu/gl/GrGLAssembleHelpers.h"
10 #include "include/gpu/gl/GrGLAssembleInterface.h"
11 #include "src/gpu/gl/GrGLUtil.h"
12 
13 #define GET_PROC_LOCAL(F) GrGL##F##Fn* F = (GrGL##F##Fn*)get(ctx, "gl" #F)
14 
GrGLMakeAssembledInterface(void * ctx,GrGLGetProc get)15 sk_sp<const GrGLInterface> GrGLMakeAssembledInterface(void *ctx, GrGLGetProc get) {
16     GET_PROC_LOCAL(GetString);
17     if (nullptr == GetString) {
18         return nullptr;
19     }
20 
21     const char* verStr = reinterpret_cast<const char*>(GetString(GR_GL_VERSION));
22     if (nullptr == verStr) {
23         return nullptr;
24     }
25 
26     GrGLStandard standard = GrGLGetStandardInUseFromString(verStr);
27     // standard can be unused (optimzed away) if SK_ASSUME_GL_ES is set
28     sk_ignore_unused_variable(standard);
29 
30     if (GR_IS_GR_GL_ES(standard)) {
31         return GrGLMakeAssembledGLESInterface(ctx, get);
32     } else if (GR_IS_GR_GL(standard)) {
33         return GrGLMakeAssembledGLInterface(ctx, get);
34     } else if (GR_IS_GR_WEBGL(standard)) {
35         return GrGLMakeAssembledWebGLInterface(ctx, get);
36     }
37     return nullptr;
38 }
39 
GrGLAssembleInterface(void * ctx,GrGLGetProc get)40 SK_API const GrGLInterface* GrGLAssembleInterface(void *ctx, GrGLGetProc get) {
41     return GrGLMakeAssembledInterface(ctx, get).release();
42 }
43