blob: de1b1bb1e96f5aaa46c35c3b127cd98f8874b070 [file] [log] [blame]
/*
* Copyright 2014 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "gl/GrGLInterface.h"
#include "gl/GrGLAssembleInterface.h"
#include "gl/GrGLUtil.h"
#include <EGL/egl.h>
#ifndef GL_GLEXT_PROTOTYPES
#define GL_GLEXT_PROTOTYPES
#endif
#include <GLES2/gl2.h>
static GrGLFuncPtr egl_get_gl_proc(void* ctx, const char name[]) {
SkASSERT(nullptr == ctx);
// https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_get_all_proc_addresses.txt
// eglGetProcAddress() is not guaranteed to support the querying of non-extension EGL functions.
#define M(X) if (0 == strcmp(#X, name)) { return (GrGLFuncPtr) X; }
M(eglGetCurrentDisplay);
M(eglQueryString);
M(glActiveTexture);
M(glAttachShader);
M(glBindAttribLocation);
M(glBindBuffer);
M(glBindFramebuffer);
M(glBindRenderbuffer);
M(glBindTexture);
M(glBlendColor);
M(glBlendEquation);
M(glBlendFunc);
M(glBufferData);
M(glBufferSubData);
M(glCheckFramebufferStatus);
M(glClear);
M(glClearColor);
M(glClearStencil);
M(glColorMask);
M(glCompileShader);
M(glCompressedTexImage2D);
M(glCompressedTexSubImage2D);
M(glCopyTexSubImage2D);
M(glCreateProgram);
M(glCreateShader);
M(glCullFace);
M(glDeleteBuffers);
M(glDeleteFramebuffers);
M(glDeleteProgram);
M(glDeleteRenderbuffers);
M(glDeleteShader);
M(glDeleteTextures);
M(glDepthMask);
M(glDisable);
M(glDisableVertexAttribArray);
M(glDrawArrays);
M(glDrawElements);
M(glEnable);
M(glEnableVertexAttribArray);
M(glFinish);
M(glFlush);
M(glFramebufferRenderbuffer);
M(glFramebufferTexture2D);
M(glFrontFace);
M(glGenBuffers);
M(glGenFramebuffers);
M(glGenRenderbuffers);
M(glGenTextures);
M(glGenerateMipmap);
M(glGetBufferParameteriv);
M(glGetError);
M(glGetFramebufferAttachmentParameteriv);
M(glGetIntegerv);
M(glGetProgramInfoLog);
M(glGetProgramiv);
M(glGetRenderbufferParameteriv);
M(glGetShaderInfoLog);
M(glGetShaderPrecisionFormat);
M(glGetShaderiv);
M(glGetString);
M(glGetUniformLocation);
M(glIsTexture);
M(glLineWidth);
M(glLinkProgram);
M(glPixelStorei);
M(glReadPixels);
M(glRenderbufferStorage);
M(glScissor);
M(glShaderSource);
M(glStencilFunc);
M(glStencilFuncSeparate);
M(glStencilMask);
M(glStencilMaskSeparate);
M(glStencilOp);
M(glStencilOpSeparate);
M(glTexImage2D);
M(glTexParameteri);
M(glTexParameteriv);
M(glTexSubImage2D);
M(glUniform1f);
M(glUniform1fv);
M(glUniform1i);
M(glUniform1iv);
M(glUniform2f);
M(glUniform2fv);
M(glUniform2i);
M(glUniform2iv);
M(glUniform3f);
M(glUniform3fv);
M(glUniform3i);
M(glUniform3iv);
M(glUniform4f);
M(glUniform4fv);
M(glUniform4i);
M(glUniform4iv);
M(glUniformMatrix2fv);
M(glUniformMatrix3fv);
M(glUniformMatrix4fv);
M(glUseProgram);
M(glVertexAttrib1f);
M(glVertexAttrib2fv);
M(glVertexAttrib3fv);
M(glVertexAttrib4fv);
M(glVertexAttribPointer);
M(glViewport);
#undef M
return eglGetProcAddress(name);
}
sk_sp<const GrGLInterface> GrGLMakeNativeInterface() {
return GrGLMakeAssembledInterface(nullptr, egl_get_gl_proc);
}
const GrGLInterface* GrGLCreateNativeInterface() { return GrGLMakeNativeInterface().release(); }