1 2 /* 3 * Copyright 2011 Google Inc. 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 #include "gl/GrGLInterface.h" 10 11 #import <OpenGLES/ES2/gl.h> 12 #import <OpenGLES/ES2/glext.h> 13 GrGLCreateNativeInterface()14const GrGLInterface* GrGLCreateNativeInterface() { 15 GrGLInterface* interface = SkNEW(GrGLInterface); 16 17 GrGLInterface::Functions* functions = &interface->fFunctions; 18 19 functions->fActiveTexture = glActiveTexture; 20 functions->fAttachShader = glAttachShader; 21 functions->fBindAttribLocation = glBindAttribLocation; 22 functions->fBindBuffer = glBindBuffer; 23 functions->fBindTexture = glBindTexture; 24 functions->fBlendColor = glBlendColor; 25 functions->fBlendFunc = glBlendFunc; 26 functions->fBufferData = (GrGLBufferDataProc)glBufferData; 27 functions->fBufferSubData = (GrGLBufferSubDataProc)glBufferSubData; 28 functions->fClear = glClear; 29 functions->fClearColor = glClearColor; 30 functions->fClearStencil = glClearStencil; 31 functions->fColorMask = glColorMask; 32 functions->fCompileShader = glCompileShader; 33 functions->fCompressedTexImage2D = glCompressedTexImage2D; 34 functions->fCompressedTexSubImage2D = glCompressedTexSubImage2D; 35 functions->fCopyTexSubImage2D = glCopyTexSubImage2D; 36 functions->fCreateProgram = glCreateProgram; 37 functions->fCreateShader = glCreateShader; 38 functions->fCullFace = glCullFace; 39 functions->fDeleteBuffers = glDeleteBuffers; 40 functions->fDeleteProgram = glDeleteProgram; 41 functions->fDeleteShader = glDeleteShader; 42 functions->fDeleteTextures = glDeleteTextures; 43 functions->fDepthMask = glDepthMask; 44 functions->fDisable = glDisable; 45 functions->fDisableVertexAttribArray = glDisableVertexAttribArray; 46 functions->fDrawArrays = glDrawArrays; 47 functions->fDrawBuffer = NULL; 48 functions->fDrawBuffers = NULL; 49 functions->fDrawElements = glDrawElements; 50 functions->fEnable = glEnable; 51 functions->fEnableVertexAttribArray = glEnableVertexAttribArray; 52 functions->fFinish = glFinish; 53 functions->fFlush = glFlush; 54 functions->fFrontFace = glFrontFace; 55 functions->fGenBuffers = glGenBuffers; 56 functions->fGenerateMipmap = glGenerateMipmap; 57 functions->fGetBufferParameteriv = glGetBufferParameteriv; 58 functions->fGetError = glGetError; 59 functions->fGetIntegerv = glGetIntegerv; 60 functions->fGetProgramInfoLog = glGetProgramInfoLog; 61 functions->fGetProgramiv = glGetProgramiv; 62 functions->fGetShaderInfoLog = glGetShaderInfoLog; 63 functions->fGetShaderiv = glGetShaderiv; 64 functions->fGetString = glGetString; 65 functions->fGenTextures = glGenTextures; 66 functions->fGetUniformLocation = glGetUniformLocation; 67 functions->fLineWidth = glLineWidth; 68 functions->fLinkProgram = glLinkProgram; 69 functions->fPixelStorei = glPixelStorei; 70 functions->fReadBuffer = NULL; 71 functions->fReadPixels = glReadPixels; 72 functions->fScissor = glScissor; 73 functions->fShaderSource = (GrGLShaderSourceProc) glShaderSource; 74 functions->fStencilFunc = glStencilFunc; 75 functions->fStencilFuncSeparate = glStencilFuncSeparate; 76 functions->fStencilMask = glStencilMask; 77 functions->fStencilMaskSeparate = glStencilMaskSeparate; 78 functions->fStencilOp = glStencilOp; 79 functions->fStencilOpSeparate = glStencilOpSeparate; 80 // mac uses GLenum for internalFormat param (non-standard) 81 // amounts to int vs. uint. 82 functions->fTexImage2D = (GrGLTexImage2DProc)glTexImage2D; 83 #if GL_ARB_texture_storage 84 functions->fTexStorage2D = glTexStorage2D; 85 #elif GL_EXT_texture_storage 86 functions->fTexStorage2D = glTexStorage2DEXT; 87 #endif 88 #if GL_EXT_discard_framebuffer 89 functions->fDiscardFramebuffer = glDiscardFramebufferEXT; 90 #endif 91 functions->fTexParameteri = glTexParameteri; 92 functions->fTexParameteriv = glTexParameteriv; 93 functions->fTexSubImage2D = glTexSubImage2D; 94 functions->fUniform1f = glUniform1f; 95 functions->fUniform1i = glUniform1i; 96 functions->fUniform1fv = glUniform1fv; 97 functions->fUniform1iv = glUniform1iv; 98 functions->fUniform2f = glUniform2f; 99 functions->fUniform2i = glUniform2i; 100 functions->fUniform2fv = glUniform2fv; 101 functions->fUniform2iv = glUniform2iv; 102 functions->fUniform3f = glUniform3f; 103 functions->fUniform3i = glUniform3i; 104 functions->fUniform3fv = glUniform3fv; 105 functions->fUniform3iv = glUniform3iv; 106 functions->fUniform4f = glUniform4f; 107 functions->fUniform4i = glUniform4i; 108 functions->fUniform4fv = glUniform4fv; 109 functions->fUniform4iv = glUniform4iv; 110 functions->fUniform4fv = glUniform4fv; 111 functions->fUniformMatrix2fv = glUniformMatrix2fv; 112 functions->fUniformMatrix3fv = glUniformMatrix3fv; 113 functions->fUniformMatrix4fv = glUniformMatrix4fv; 114 functions->fUseProgram = glUseProgram; 115 functions->fVertexAttrib4fv = glVertexAttrib4fv; 116 functions->fVertexAttribPointer = glVertexAttribPointer; 117 functions->fViewport = glViewport; 118 functions->fGenFramebuffers = glGenFramebuffers; 119 functions->fGetFramebufferAttachmentParameteriv = glGetFramebufferAttachmentParameteriv; 120 functions->fGetRenderbufferParameteriv = glGetRenderbufferParameteriv; 121 functions->fBindFramebuffer = glBindFramebuffer; 122 functions->fFramebufferTexture2D = glFramebufferTexture2D; 123 functions->fCheckFramebufferStatus = glCheckFramebufferStatus; 124 functions->fDeleteFramebuffers = glDeleteFramebuffers; 125 functions->fRenderbufferStorage = glRenderbufferStorage; 126 functions->fGenRenderbuffers = glGenRenderbuffers; 127 functions->fDeleteRenderbuffers = glDeleteRenderbuffers; 128 functions->fFramebufferRenderbuffer = glFramebufferRenderbuffer; 129 functions->fBindRenderbuffer = glBindRenderbuffer; 130 131 #if GL_OES_mapbuffer 132 functions->fMapBuffer = glMapBufferOES; 133 functions->fUnmapBuffer = glUnmapBufferOES; 134 #endif 135 136 #if GL_EXT_map_buffer_range || GL_ES_VERSION_3_0 137 functions->fMapBufferRange = glMapBufferRangeEXT; 138 functions->fFlushMappedBufferRange = glFlushMappedBufferRangeEXT; 139 #endif 140 141 #if GL_APPLE_framebuffer_multisample 142 functions->fRenderbufferStorageMultisampleES2APPLE = glRenderbufferStorageMultisampleAPPLE; 143 functions->fResolveMultisampleFramebuffer = glResolveMultisampleFramebufferAPPLE; 144 #endif 145 146 #if GL_OES_vertex_array_object 147 functions->fBindVertexArray = glBindVertexArrayOES; 148 functions->fDeleteVertexArrays = glDeleteVertexArraysOES; 149 functions->fGenVertexArrays = glGenVertexArraysOES; 150 #endif 151 152 #if GL_EXT_debug_marker 153 functions->fInsertEventMarker = glInsertEventMarkerEXT; 154 functions->fPushGroupMarker = glPushGroupMarkerEXT; 155 functions->fPopGroupMarker = glPopGroupMarkerEXT; 156 #endif 157 158 #if GL_ES_VERSION_3_0 || GL_ARB_invalidate_subdata 159 functions->fInvalidateFramebuffer = glInvalidateFramebuffer; 160 functions->fInvalidateSubFramebuffer = glInvalidateSubFramebuffer; 161 #endif 162 163 #if GL_ARB_invalidate_subdata 164 functions->fInvalidateBufferData = glInvalidateBufferData; 165 functions->fInvalidateBufferSubData = glInvalidateBufferSubData; 166 functions->fInvalidateTexImage = glInvalidateTexImage; 167 functions->fInvalidateTexSubImage = glInvalidateTexSubImage; 168 #endif 169 170 interface->fStandard = kGLES_GrGLStandard; 171 interface->fExtensions.init(kGLES_GrGLStandard, glGetString, NULL, glGetIntegerv); 172 173 return interface; 174 } 175