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