1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2014 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/gl/GrGLAssembleInterface.h" 8*c8dee2aaSAndroid Build Coastguard Worker 9*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/gl/GrGLFunctions.h" 10*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/gl/GrGLTypes.h" 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkTemplates.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/gl/GrGLDefines.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/gl/GrGLUtil.h" 14*c8dee2aaSAndroid Build Coastguard Worker 15*c8dee2aaSAndroid Build Coastguard Worker #define GET_PROC_LOCAL(F) GrGL##F##Fn* F = (GrGL##F##Fn*)get(ctx, "gl" #F) 16*c8dee2aaSAndroid Build Coastguard Worker GrGLMakeAssembledInterface(void * ctx,GrGLGetProc get)17*c8dee2aaSAndroid Build Coastguard Workersk_sp<const GrGLInterface> GrGLMakeAssembledInterface(void *ctx, GrGLGetProc get) { 18*c8dee2aaSAndroid Build Coastguard Worker GET_PROC_LOCAL(GetString); 19*c8dee2aaSAndroid Build Coastguard Worker if (nullptr == GetString) { 20*c8dee2aaSAndroid Build Coastguard Worker return nullptr; 21*c8dee2aaSAndroid Build Coastguard Worker } 22*c8dee2aaSAndroid Build Coastguard Worker 23*c8dee2aaSAndroid Build Coastguard Worker const char* verStr = reinterpret_cast<const char*>(GetString(GR_GL_VERSION)); 24*c8dee2aaSAndroid Build Coastguard Worker if (nullptr == verStr) { 25*c8dee2aaSAndroid Build Coastguard Worker return nullptr; 26*c8dee2aaSAndroid Build Coastguard Worker } 27*c8dee2aaSAndroid Build Coastguard Worker 28*c8dee2aaSAndroid Build Coastguard Worker GrGLStandard standard = GrGLGetStandardInUseFromString(verStr); 29*c8dee2aaSAndroid Build Coastguard Worker // standard can be unused (optimized away) if SK_ASSUME_GL_ES is set 30*c8dee2aaSAndroid Build Coastguard Worker sk_ignore_unused_variable(standard); 31*c8dee2aaSAndroid Build Coastguard Worker 32*c8dee2aaSAndroid Build Coastguard Worker if (GR_IS_GR_GL_ES(standard)) { 33*c8dee2aaSAndroid Build Coastguard Worker return GrGLMakeAssembledGLESInterface(ctx, get); 34*c8dee2aaSAndroid Build Coastguard Worker } else if (GR_IS_GR_GL(standard)) { 35*c8dee2aaSAndroid Build Coastguard Worker return GrGLMakeAssembledGLInterface(ctx, get); 36*c8dee2aaSAndroid Build Coastguard Worker } else if (GR_IS_GR_WEBGL(standard)) { 37*c8dee2aaSAndroid Build Coastguard Worker return GrGLMakeAssembledWebGLInterface(ctx, get); 38*c8dee2aaSAndroid Build Coastguard Worker } 39*c8dee2aaSAndroid Build Coastguard Worker return nullptr; 40*c8dee2aaSAndroid Build Coastguard Worker } 41*c8dee2aaSAndroid Build Coastguard Worker GrGLAssembleInterface(void * ctx,GrGLGetProc get)42*c8dee2aaSAndroid Build Coastguard Workerconst GrGLInterface* GrGLAssembleInterface(void *ctx, GrGLGetProc get) { 43*c8dee2aaSAndroid Build Coastguard Worker return GrGLMakeAssembledInterface(ctx, get).release(); 44*c8dee2aaSAndroid Build Coastguard Worker } 45