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