|  |  | 
|  | /* | 
|  | * Copyright 2011 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" | 
|  |  | 
|  | #import <OpenGLES/ES2/gl.h> | 
|  | #import <OpenGLES/ES2/glext.h> | 
|  |  | 
|  | const GrGLInterface* GrGLCreateNativeInterface() { | 
|  | GrGLInterface* interface = SkNEW(GrGLInterface); | 
|  |  | 
|  | GrGLInterface::Functions* functions = &interface->fFunctions; | 
|  |  | 
|  | functions->fActiveTexture = glActiveTexture; | 
|  | functions->fAttachShader = glAttachShader; | 
|  | functions->fBindAttribLocation = glBindAttribLocation; | 
|  | functions->fBindBuffer = glBindBuffer; | 
|  | functions->fBindTexture = glBindTexture; | 
|  | functions->fBlendColor = glBlendColor; | 
|  | functions->fBlendFunc = glBlendFunc; | 
|  | functions->fBufferData = (GrGLBufferDataProc)glBufferData; | 
|  | functions->fBufferSubData = (GrGLBufferSubDataProc)glBufferSubData; | 
|  | functions->fClear = glClear; | 
|  | functions->fClearColor = glClearColor; | 
|  | functions->fClearStencil = glClearStencil; | 
|  | functions->fColorMask = glColorMask; | 
|  | functions->fCompileShader = glCompileShader; | 
|  | functions->fCompressedTexImage2D = glCompressedTexImage2D; | 
|  | functions->fCompressedTexSubImage2D = glCompressedTexSubImage2D; | 
|  | functions->fCopyTexSubImage2D = glCopyTexSubImage2D; | 
|  | functions->fCreateProgram = glCreateProgram; | 
|  | functions->fCreateShader = glCreateShader; | 
|  | functions->fCullFace = glCullFace; | 
|  | functions->fDeleteBuffers = glDeleteBuffers; | 
|  | functions->fDeleteProgram = glDeleteProgram; | 
|  | functions->fDeleteShader = glDeleteShader; | 
|  | functions->fDeleteTextures = glDeleteTextures; | 
|  | functions->fDepthMask = glDepthMask; | 
|  | functions->fDisable = glDisable; | 
|  | functions->fDisableVertexAttribArray = glDisableVertexAttribArray; | 
|  | functions->fDrawArrays = glDrawArrays; | 
|  | functions->fDrawBuffer = NULL; | 
|  | functions->fDrawBuffers = NULL; | 
|  | functions->fDrawElements = glDrawElements; | 
|  | functions->fEnable = glEnable; | 
|  | functions->fEnableVertexAttribArray = glEnableVertexAttribArray; | 
|  | functions->fFinish = glFinish; | 
|  | functions->fFlush = glFlush; | 
|  | functions->fFrontFace = glFrontFace; | 
|  | functions->fGenBuffers = glGenBuffers; | 
|  | functions->fGenerateMipmap = glGenerateMipmap; | 
|  | functions->fGetBufferParameteriv = glGetBufferParameteriv; | 
|  | functions->fGetError = glGetError; | 
|  | functions->fGetIntegerv = glGetIntegerv; | 
|  | functions->fGetProgramInfoLog = glGetProgramInfoLog; | 
|  | functions->fGetProgramiv = glGetProgramiv; | 
|  | functions->fGetShaderInfoLog = glGetShaderInfoLog; | 
|  | functions->fGetShaderiv = glGetShaderiv; | 
|  | functions->fGetString = glGetString; | 
|  | functions->fGenTextures = glGenTextures; | 
|  | functions->fGetUniformLocation = glGetUniformLocation; | 
|  | functions->fLineWidth = glLineWidth; | 
|  | functions->fLinkProgram = glLinkProgram; | 
|  | functions->fPixelStorei = glPixelStorei; | 
|  | functions->fReadBuffer = NULL; | 
|  | functions->fReadPixels = glReadPixels; | 
|  | functions->fScissor = glScissor; | 
|  | functions->fShaderSource = (GrGLShaderSourceProc) glShaderSource; | 
|  | functions->fStencilFunc = glStencilFunc; | 
|  | functions->fStencilFuncSeparate = glStencilFuncSeparate; | 
|  | functions->fStencilMask = glStencilMask; | 
|  | functions->fStencilMaskSeparate = glStencilMaskSeparate; | 
|  | functions->fStencilOp = glStencilOp; | 
|  | functions->fStencilOpSeparate = glStencilOpSeparate; | 
|  | // mac uses GLenum for internalFormat param (non-standard) | 
|  | // amounts to int vs. uint. | 
|  | functions->fTexImage2D = (GrGLTexImage2DProc)glTexImage2D; | 
|  | #if GL_ARB_texture_storage | 
|  | functions->fTexStorage2D = glTexStorage2D; | 
|  | #elif GL_EXT_texture_storage | 
|  | functions->fTexStorage2D = glTexStorage2DEXT; | 
|  | #endif | 
|  | #if GL_EXT_discard_framebuffer | 
|  | functions->fDiscardFramebuffer = glDiscardFramebufferEXT; | 
|  | #endif | 
|  | functions->fTexParameteri = glTexParameteri; | 
|  | functions->fTexParameteriv = glTexParameteriv; | 
|  | functions->fTexSubImage2D = glTexSubImage2D; | 
|  | functions->fUniform1f = glUniform1f; | 
|  | functions->fUniform1i = glUniform1i; | 
|  | functions->fUniform1fv = glUniform1fv; | 
|  | functions->fUniform1iv = glUniform1iv; | 
|  | functions->fUniform2f = glUniform2f; | 
|  | functions->fUniform2i = glUniform2i; | 
|  | functions->fUniform2fv = glUniform2fv; | 
|  | functions->fUniform2iv = glUniform2iv; | 
|  | functions->fUniform3f = glUniform3f; | 
|  | functions->fUniform3i = glUniform3i; | 
|  | functions->fUniform3fv = glUniform3fv; | 
|  | functions->fUniform3iv = glUniform3iv; | 
|  | functions->fUniform4f = glUniform4f; | 
|  | functions->fUniform4i = glUniform4i; | 
|  | functions->fUniform4fv = glUniform4fv; | 
|  | functions->fUniform4iv = glUniform4iv; | 
|  | functions->fUniform4fv = glUniform4fv; | 
|  | functions->fUniformMatrix2fv = glUniformMatrix2fv; | 
|  | functions->fUniformMatrix3fv = glUniformMatrix3fv; | 
|  | functions->fUniformMatrix4fv = glUniformMatrix4fv; | 
|  | functions->fUseProgram = glUseProgram; | 
|  | functions->fVertexAttrib4fv = glVertexAttrib4fv; | 
|  | functions->fVertexAttribPointer = glVertexAttribPointer; | 
|  | functions->fViewport = glViewport; | 
|  | functions->fGenFramebuffers = glGenFramebuffers; | 
|  | functions->fGetFramebufferAttachmentParameteriv = glGetFramebufferAttachmentParameteriv; | 
|  | functions->fGetRenderbufferParameteriv = glGetRenderbufferParameteriv; | 
|  | functions->fBindFramebuffer = glBindFramebuffer; | 
|  | functions->fFramebufferTexture2D = glFramebufferTexture2D; | 
|  | functions->fCheckFramebufferStatus = glCheckFramebufferStatus; | 
|  | functions->fDeleteFramebuffers = glDeleteFramebuffers; | 
|  | functions->fRenderbufferStorage = glRenderbufferStorage; | 
|  | functions->fGenRenderbuffers = glGenRenderbuffers; | 
|  | functions->fDeleteRenderbuffers = glDeleteRenderbuffers; | 
|  | functions->fFramebufferRenderbuffer = glFramebufferRenderbuffer; | 
|  | functions->fBindRenderbuffer = glBindRenderbuffer; | 
|  |  | 
|  | #if GL_OES_mapbuffer | 
|  | functions->fMapBuffer = glMapBufferOES; | 
|  | functions->fUnmapBuffer = glUnmapBufferOES; | 
|  | #endif | 
|  |  | 
|  | #if GL_EXT_map_buffer_range || GL_ES_VERSION_3_0 | 
|  | functions->fMapBufferRange = glMapBufferRangeEXT; | 
|  | functions->fFlushMappedBufferRange = glFlushMappedBufferRangeEXT; | 
|  | #endif | 
|  |  | 
|  | #if GL_APPLE_framebuffer_multisample | 
|  | functions->fRenderbufferStorageMultisampleES2APPLE = glRenderbufferStorageMultisampleAPPLE; | 
|  | functions->fResolveMultisampleFramebuffer = glResolveMultisampleFramebufferAPPLE; | 
|  | #endif | 
|  |  | 
|  | #if GL_OES_vertex_array_object | 
|  | functions->fBindVertexArray = glBindVertexArrayOES; | 
|  | functions->fDeleteVertexArrays = glDeleteVertexArraysOES; | 
|  | functions->fGenVertexArrays = glGenVertexArraysOES; | 
|  | #endif | 
|  |  | 
|  | #if GL_EXT_debug_marker | 
|  | functions->fInsertEventMarker = glInsertEventMarkerEXT; | 
|  | functions->fPushGroupMarker = glPushGroupMarkerEXT; | 
|  | functions->fPopGroupMarker = glPopGroupMarkerEXT; | 
|  | #endif | 
|  |  | 
|  | #if GL_ES_VERSION_3_0 || GL_ARB_invalidate_subdata | 
|  | functions->fInvalidateFramebuffer = glInvalidateFramebuffer; | 
|  | functions->fInvalidateSubFramebuffer = glInvalidateSubFramebuffer; | 
|  | #endif | 
|  |  | 
|  | #if GL_ARB_invalidate_subdata | 
|  | functions->fInvalidateBufferData = glInvalidateBufferData; | 
|  | functions->fInvalidateBufferSubData = glInvalidateBufferSubData; | 
|  | functions->fInvalidateTexImage = glInvalidateTexImage; | 
|  | functions->fInvalidateTexSubImage = glInvalidateTexSubImage; | 
|  | #endif | 
|  |  | 
|  | interface->fStandard = kGLES_GrGLStandard; | 
|  | interface->fExtensions.init(kGLES_GrGLStandard, glGetString, NULL, glGetIntegerv); | 
|  |  | 
|  | return interface; | 
|  | } |