OLD | NEW |
---|---|
1 // Modified from chromium/src/webkit/glue/gl_bindings_skia_cmd_buffer.cc | 1 // Modified from chromium/src/webkit/glue/gl_bindings_skia_cmd_buffer.cc |
2 | 2 |
3 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 3 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
4 // Use of this source code is governed by a BSD-style license that can be | 4 // Use of this source code is governed by a BSD-style license that can be |
5 // found in the LICENSE file. | 5 // found in the LICENSE file. |
6 | 6 |
7 #include "gl/GrGLExtensions.h" | 7 #include "gl/GrGLExtensions.h" |
8 #include "gl/GrGLInterface.h" | 8 #include "gl/GrGLInterface.h" |
9 #include "gl/GrGLUtil.h" | 9 #include "gl/GrGLUtil.h" |
10 | 10 |
11 #ifndef GL_GLEXT_PROTOTYPES | 11 #ifndef GL_GLEXT_PROTOTYPES |
12 #define GL_GLEXT_PROTOTYPES | 12 #define GL_GLEXT_PROTOTYPES |
13 #endif | 13 #endif |
14 | 14 |
15 #include <GLES2/gl2.h> | 15 #include <GLES2/gl2.h> |
16 #include <GLES2/gl2ext.h> | 16 #include <GLES2/gl2ext.h> |
17 | 17 |
18 #include <EGL/egl.h> | 18 #include <EGL/egl.h> |
19 | 19 |
robertphillips
2013/08/31 14:10:29
overlength
| |
20 static const GrGLInterface* create_es_interface(GrGLVersion version, const GrGLE xtensions& extensions) { | |
21 if (version < GR_GL_VER(2,0)) { | |
22 return NULL; | |
23 } | |
24 | |
25 GrGLInterface* interface = SkNEW(GrGLInterface); | |
26 interface->fBindingsExported = kES_GrGLBinding; | |
27 | |
28 interface->fActiveTexture = glActiveTexture; | |
29 interface->fAttachShader = glAttachShader; | |
30 interface->fBindAttribLocation = glBindAttribLocation; | |
31 interface->fBindBuffer = glBindBuffer; | |
32 interface->fBindTexture = glBindTexture; | |
33 interface->fBindVertexArray = glBindVertexArrayOES; | |
34 interface->fBlendColor = glBlendColor; | |
35 interface->fBlendFunc = glBlendFunc; | |
36 interface->fBufferData = glBufferData; | |
37 interface->fBufferSubData = glBufferSubData; | |
38 interface->fClear = glClear; | |
39 interface->fClearColor = glClearColor; | |
40 interface->fClearStencil = glClearStencil; | |
41 interface->fColorMask = glColorMask; | |
42 interface->fCompileShader = glCompileShader; | |
43 interface->fCompressedTexImage2D = glCompressedTexImage2D; | |
44 interface->fCopyTexSubImage2D = glCopyTexSubImage2D; | |
45 interface->fCreateProgram = glCreateProgram; | |
46 interface->fCreateShader = glCreateShader; | |
47 interface->fCullFace = glCullFace; | |
48 interface->fDeleteBuffers = glDeleteBuffers; | |
49 interface->fDeleteProgram = glDeleteProgram; | |
50 interface->fDeleteShader = glDeleteShader; | |
51 interface->fDeleteTextures = glDeleteTextures; | |
52 interface->fDeleteVertexArrays = glDeleteVertexArraysOES; | |
53 interface->fDepthMask = glDepthMask; | |
54 interface->fDisable = glDisable; | |
55 interface->fDisableVertexAttribArray = glDisableVertexAttribArray; | |
56 interface->fDrawArrays = glDrawArrays; | |
57 interface->fDrawElements = glDrawElements; | |
58 interface->fEnable = glEnable; | |
59 interface->fEnableVertexAttribArray = glEnableVertexAttribArray; | |
60 interface->fFinish = glFinish; | |
61 interface->fFlush = glFlush; | |
62 interface->fFrontFace = glFrontFace; | |
63 interface->fGenBuffers = glGenBuffers; | |
64 interface->fGenerateMipmap = glGenerateMipmap; | |
65 interface->fGenTextures = glGenTextures; | |
66 interface->fGenVertexArrays = glGenVertexArraysOES; | |
67 interface->fGetBufferParameteriv = glGetBufferParameteriv; | |
68 interface->fGetError = glGetError; | |
69 interface->fGetIntegerv = glGetIntegerv; | |
70 interface->fGetProgramInfoLog = glGetProgramInfoLog; | |
71 interface->fGetProgramiv = glGetProgramiv; | |
72 interface->fGetShaderInfoLog = glGetShaderInfoLog; | |
73 interface->fGetShaderiv = glGetShaderiv; | |
74 interface->fGetString = glGetString; | |
75 #if GL_ES_VERSION_30 | |
76 interface->fGetStringi = glGetStringi; | |
77 #else | |
78 interface->fGetStringi = (GrGLGetStringiProc) eglGetProcAddress("glGetString i"); | |
79 #endif | |
80 interface->fGetUniformLocation = glGetUniformLocation; | |
81 interface->fLineWidth = glLineWidth; | |
82 interface->fLinkProgram = glLinkProgram; | |
83 interface->fPixelStorei = glPixelStorei; | |
84 interface->fReadPixels = glReadPixels; | |
85 interface->fScissor = glScissor; | |
86 #if GR_GL_USE_NEW_SHADER_SOURCE_SIGNATURE | |
87 interface->fShaderSource = (GrGLShaderSourceProc) glShaderSource; | |
88 #else | |
89 interface->fShaderSource = glShaderSource; | |
90 #endif | |
91 interface->fStencilFunc = glStencilFunc; | |
92 interface->fStencilFuncSeparate = glStencilFuncSeparate; | |
93 interface->fStencilMask = glStencilMask; | |
94 interface->fStencilMaskSeparate = glStencilMaskSeparate; | |
95 interface->fStencilOp = glStencilOp; | |
96 interface->fStencilOpSeparate = glStencilOpSeparate; | |
97 interface->fTexImage2D = glTexImage2D; | |
98 interface->fTexParameteri = glTexParameteri; | |
99 interface->fTexParameteriv = glTexParameteriv; | |
100 interface->fTexSubImage2D = glTexSubImage2D; | |
101 | |
102 if (version >= GR_GL_VER(3,0)) { | |
103 #if GL_ES_VERSION_3_0 | |
104 interface->fTexStorage2D = glTexStorage2D; | |
105 #else | |
106 interface->fTexStorage2D = (GrGLTexStorage2DProc) eglGetProcAddress("glT exStorage2D"); | |
107 #endif | |
108 } else { | |
109 #if GL_EXT_texture_storage | |
110 interface->fTexStorage2D = glTexStorage2DEXT; | |
111 #else | |
112 interface->fTexStorage2D = (GrGLTexStorage2DProc) eglGetProcAddress("glT exStorage2DEXT"); | |
113 #endif | |
114 } | |
115 | |
116 #if GL_EXT_discard_framebuffer | |
117 interface->fDiscardFramebuffer = glDiscardFramebufferEXT; | |
118 #endif | |
119 interface->fUniform1f = glUniform1f; | |
120 interface->fUniform1i = glUniform1i; | |
121 interface->fUniform1fv = glUniform1fv; | |
122 interface->fUniform1iv = glUniform1iv; | |
123 interface->fUniform2f = glUniform2f; | |
124 interface->fUniform2i = glUniform2i; | |
125 interface->fUniform2fv = glUniform2fv; | |
126 interface->fUniform2iv = glUniform2iv; | |
127 interface->fUniform3f = glUniform3f; | |
128 interface->fUniform3i = glUniform3i; | |
129 interface->fUniform3fv = glUniform3fv; | |
130 interface->fUniform3iv = glUniform3iv; | |
131 interface->fUniform4f = glUniform4f; | |
132 interface->fUniform4i = glUniform4i; | |
133 interface->fUniform4fv = glUniform4fv; | |
134 interface->fUniform4iv = glUniform4iv; | |
135 interface->fUniformMatrix2fv = glUniformMatrix2fv; | |
136 interface->fUniformMatrix3fv = glUniformMatrix3fv; | |
137 interface->fUniformMatrix4fv = glUniformMatrix4fv; | |
138 interface->fUseProgram = glUseProgram; | |
139 interface->fVertexAttrib4fv = glVertexAttrib4fv; | |
140 interface->fVertexAttribPointer = glVertexAttribPointer; | |
141 interface->fViewport = glViewport; | |
142 interface->fBindFramebuffer = glBindFramebuffer; | |
143 interface->fBindRenderbuffer = glBindRenderbuffer; | |
144 interface->fCheckFramebufferStatus = glCheckFramebufferStatus; | |
145 interface->fDeleteFramebuffers = glDeleteFramebuffers; | |
146 interface->fDeleteRenderbuffers = glDeleteRenderbuffers; | |
147 interface->fFramebufferRenderbuffer = glFramebufferRenderbuffer; | |
148 interface->fFramebufferTexture2D = glFramebufferTexture2D; | |
149 if (extensions.has("GL_EXT_multisampled_render_to_texture")) { | |
150 #if GL_EXT_multisampled_render_to_texture | |
151 interface->fFramebufferTexture2DMultisample = glFramebufferTexture2DMult isampleEXT; | |
152 interface->fRenderbufferStorageMultisample = glRenderbufferStorageMultis ampleEXT; | |
153 #else | |
154 interface->fFramebufferTexture2DMultisample = (GrGLFramebufferTexture2DM ultisampleProc) eglGetProcAddress("glFramebufferTexture2DMultisampleEXT"); | |
155 interface->fRenderbufferStorageMultisample = (GrGLRenderbufferStorageMul tisampleProc) eglGetProcAddress("glRenderbufferStorageMultisampleEXT"); | |
156 #endif | |
157 } else if (extensions.has("GL_IMG_multisampled_render_to_texture")) { | |
158 #if GL_IMG_multisampled_render_to_texture | |
159 interface->fFramebufferTexture2DMultisample = glFramebufferTexture2DMult isampleIMG; | |
160 interface->fRenderbufferStorageMultisample = glRenderbufferStorageMultis ampleIMG; | |
161 #else | |
162 interface->fFramebufferTexture2DMultisample = (GrGLFramebufferTexture2DM ultisampleProc) eglGetProcAddress("glFramebufferTexture2DMultisampleIMG"); | |
163 interface->fRenderbufferStorageMultisample = (GrGLRenderbufferStorageMul tisampleProc) eglGetProcAddress("glRenderbufferStorageMultisampleIMG"); | |
164 #endif | |
165 } | |
166 interface->fGenFramebuffers = glGenFramebuffers; | |
167 interface->fGenRenderbuffers = glGenRenderbuffers; | |
168 interface->fGetFramebufferAttachmentParameteriv = glGetFramebufferAttachment Parameteriv; | |
169 interface->fGetRenderbufferParameteriv = glGetRenderbufferParameteriv; | |
170 interface->fRenderbufferStorage = glRenderbufferStorage; | |
171 #if GL_OES_mapbuffer | |
172 interface->fMapBuffer = glMapBufferOES; | |
173 interface->fUnmapBuffer = glUnmapBufferOES; | |
174 #else | |
175 interface->fMapBuffer = (GrGLMapBufferProc) eglGetProcAddress("glMapBufferOE S"); | |
176 interface->fUnmapBuffer = (GrGLUnmapBufferProc) eglGetProcAddress("glUnmapBu fferOES"); | |
177 #endif | |
178 | |
179 return interface; | |
180 } | |
181 | |
robertphillips
2013/08/31 14:10:29
overlength
| |
182 static const GrGLInterface* create_desktop_interface(GrGLVersion version, const GrGLExtensions& extensions) { | |
robertphillips
2013/08/31 14:10:29
Maybe something like: // this is okay b.c. the onl
| |
183 // Currently this assumes a 4.4 context or later. | |
184 if (version < GR_GL_VER(4,4)) { | |
185 return NULL; | |
186 } | |
187 | |
188 GrGLInterface* interface = SkNEW(GrGLInterface); | |
189 interface->fBindingsExported = kDesktop_GrGLBinding; | |
190 | |
191 interface->fActiveTexture = (GrGLActiveTextureProc) eglGetProcAddress("glAct iveTexture"); | |
192 interface->fAttachShader = (GrGLAttachShaderProc) eglGetProcAddress("glAttac hShader"); | |
193 interface->fBeginQuery = (GrGLBeginQueryProc) eglGetProcAddress("glBeginQuer y"); | |
194 interface->fBindAttribLocation = (GrGLBindAttribLocationProc) eglGetProcAddr ess("glBindAttribLocation"); | |
195 interface->fBindBuffer = (GrGLBindBufferProc) eglGetProcAddress("glBindBuffe r"); | |
196 interface->fBindFragDataLocation = (GrGLBindFragDataLocationProc) eglGetProc Address("glBindFragDataLocation"); | |
197 interface->fBindFragDataLocationIndexed = (GrGLBindFragDataLocationIndexedPr oc) eglGetProcAddress("glBindFragDataLocationIndexed"); | |
198 interface->fBindFramebuffer = (GrGLBindFramebufferProc) eglGetProcAddress("g lBindFramebuffer"); | |
199 interface->fBindRenderbuffer = (GrGLBindRenderbufferProc) eglGetProcAddress( "glBindRenderbuffer"); | |
200 interface->fBindTexture = (GrGLBindTextureProc) eglGetProcAddress("glBindTex ture"); | |
201 interface->fBindVertexArray = (GrGLBindVertexArrayProc) eglGetProcAddress("g lBindVertexArray"); | |
202 interface->fBlendColor = (GrGLBlendColorProc) eglGetProcAddress("glBlendColo r"); | |
203 interface->fBlendFunc = (GrGLBlendFuncProc) eglGetProcAddress("glBlendFunc") ; | |
204 interface->fBlitFramebuffer = (GrGLBlitFramebufferProc) eglGetProcAddress("g lBlitFramebuffer"); | |
205 interface->fBufferData = (GrGLBufferDataProc) eglGetProcAddress("glBufferDat a"); | |
206 interface->fBufferSubData = (GrGLBufferSubDataProc) eglGetProcAddress("glBuf ferSubData"); | |
207 interface->fCheckFramebufferStatus = (GrGLCheckFramebufferStatusProc) eglGet ProcAddress("glCheckFramebufferStatus"); | |
208 interface->fClear = (GrGLClearProc) eglGetProcAddress("glClear"); | |
209 interface->fClearColor = (GrGLClearColorProc) eglGetProcAddress("glClearColo r"); | |
210 interface->fClearStencil = (GrGLClearStencilProc) eglGetProcAddress("glClear Stencil"); | |
211 interface->fColorMask = (GrGLColorMaskProc) eglGetProcAddress("glColorMask") ; | |
212 interface->fCompileShader = (GrGLCompileShaderProc) eglGetProcAddress("glCom pileShader"); | |
213 interface->fCompressedTexImage2D = (GrGLCompressedTexImage2DProc) eglGetProc Address("glCompressedTexImage2D"); | |
214 interface->fCopyTexSubImage2D = (GrGLCopyTexSubImage2DProc) eglGetProcAddres s("glCopyTexSubImage2D"); | |
215 interface->fCreateProgram = (GrGLCreateProgramProc) eglGetProcAddress("glCre ateProgram"); | |
216 interface->fCreateShader = (GrGLCreateShaderProc) eglGetProcAddress("glCreat eShader"); | |
217 interface->fCullFace = (GrGLCullFaceProc) eglGetProcAddress("glCullFace"); | |
218 interface->fDeleteBuffers = (GrGLDeleteBuffersProc) eglGetProcAddress("glDel eteBuffers"); | |
219 interface->fDeleteFramebuffers = (GrGLDeleteFramebuffersProc) eglGetProcAddr ess("glDeleteFramebuffers"); | |
220 interface->fDeleteProgram = (GrGLDeleteProgramProc) eglGetProcAddress("glDel eteProgram"); | |
221 interface->fDeleteQueries = (GrGLDeleteQueriesProc) eglGetProcAddress("glDel eteQueries"); | |
222 interface->fDeleteRenderbuffers = (GrGLDeleteRenderbuffersProc) eglGetProcAd dress("glDeleteRenderbuffers"); | |
223 interface->fDeleteShader = (GrGLDeleteShaderProc) eglGetProcAddress("glDelet eShader"); | |
224 interface->fDeleteTextures = (GrGLDeleteTexturesProc) eglGetProcAddress("glD eleteTextures"); | |
225 interface->fDeleteVertexArrays = (GrGLDeleteVertexArraysProc) eglGetProcAddr ess("glDeleteVertexArrays"); | |
226 interface->fDepthMask = (GrGLDepthMaskProc) eglGetProcAddress("glDepthMask") ; | |
227 interface->fDisable = (GrGLDisableProc) eglGetProcAddress("glDisable"); | |
228 interface->fDisableVertexAttribArray = (GrGLDisableVertexAttribArrayProc) eg lGetProcAddress("glDisableVertexAttribArray"); | |
229 interface->fDrawArrays = (GrGLDrawArraysProc) eglGetProcAddress("glDrawArray s"); | |
230 interface->fDrawBuffer = (GrGLDrawBufferProc) eglGetProcAddress("glDrawBuffe r"); | |
231 interface->fDrawBuffers = (GrGLDrawBuffersProc) eglGetProcAddress("glDrawBuf fers"); | |
232 interface->fDrawElements = (GrGLDrawElementsProc) eglGetProcAddress("glDrawE lements"); | |
233 interface->fEnable = (GrGLEnableProc) eglGetProcAddress("glEnable"); | |
234 interface->fEnableVertexAttribArray = (GrGLEnableVertexAttribArrayProc) eglG etProcAddress("glEnableVertexAttribArray"); | |
235 interface->fEndQuery = (GrGLEndQueryProc) eglGetProcAddress("glEndQuery"); | |
236 interface->fFinish = (GrGLFinishProc) eglGetProcAddress("glFinish"); | |
237 interface->fFlush = (GrGLFlushProc) eglGetProcAddress("glFlush"); | |
238 interface->fFramebufferRenderbuffer = (GrGLFramebufferRenderbufferProc) eglG etProcAddress("glFramebufferRenderbuffer"); | |
239 interface->fFramebufferTexture2D = (GrGLFramebufferTexture2DProc) eglGetProc Address("glFramebufferTexture2D"); | |
240 interface->fFrontFace = (GrGLFrontFaceProc) eglGetProcAddress("glFrontFace") ; | |
241 interface->fGenBuffers = (GrGLGenBuffersProc) eglGetProcAddress("glGenBuffer s"); | |
242 interface->fGenFramebuffers = (GrGLGenFramebuffersProc) eglGetProcAddress("g lGenFramebuffers"); | |
243 interface->fGenerateMipmap = (GrGLGenerateMipmapProc) eglGetProcAddress("glG enerateMipmap"); | |
244 interface->fGenQueries = (GrGLGenQueriesProc) eglGetProcAddress("glGenQuerie s"); | |
245 interface->fGenRenderbuffers = (GrGLGenRenderbuffersProc) eglGetProcAddress( "glGenRenderbuffers"); | |
246 interface->fGenTextures = (GrGLGenTexturesProc) eglGetProcAddress("glGenText ures"); | |
247 interface->fGenVertexArrays = (GrGLGenVertexArraysProc) eglGetProcAddress("g lGenVertexArrays"); | |
248 interface->fGetBufferParameteriv = (GrGLGetBufferParameterivProc) eglGetProc Address("glGetBufferParameteriv"); | |
249 interface->fGetError = (GrGLGetErrorProc) eglGetProcAddress("glGetError"); | |
250 interface->fGetFramebufferAttachmentParameteriv = (GrGLGetFramebufferAttachm entParameterivProc) eglGetProcAddress("glGetFramebufferAttachmentParameteriv"); | |
251 interface->fGetIntegerv = (GrGLGetIntegervProc) eglGetProcAddress("glGetInte gerv"); | |
252 interface->fGetQueryObjecti64v = (GrGLGetQueryObjecti64vProc) eglGetProcAddr ess("glGetQueryObjecti64v"); | |
253 interface->fGetQueryObjectiv = (GrGLGetQueryObjectivProc) eglGetProcAddress( "glGetQueryObjectiv"); | |
254 interface->fGetQueryObjectui64v = (GrGLGetQueryObjectui64vProc) eglGetProcAd dress("glGetQueryObjectui64v"); | |
255 interface->fGetQueryObjectuiv = (GrGLGetQueryObjectuivProc) eglGetProcAddres s("glGetQueryObjectuiv"); | |
256 interface->fGetQueryiv = (GrGLGetQueryivProc) eglGetProcAddress("glGetQueryi v"); | |
257 interface->fGetProgramInfoLog = (GrGLGetProgramInfoLogProc) eglGetProcAddres s("glGetProgramInfoLog"); | |
258 interface->fGetProgramiv = (GrGLGetProgramivProc) eglGetProcAddress("glGetPr ogramiv"); | |
259 interface->fGetRenderbufferParameteriv = (GrGLGetRenderbufferParameterivProc ) eglGetProcAddress("glGetRenderbufferParameteriv"); | |
260 interface->fGetShaderInfoLog = (GrGLGetShaderInfoLogProc) eglGetProcAddress( "glGetShaderInfoLog"); | |
261 interface->fGetShaderiv = (GrGLGetShaderivProc) eglGetProcAddress("glGetShad eriv"); | |
262 interface->fGetString = (GrGLGetStringProc) eglGetProcAddress("glGetString") ; | |
263 interface->fGetStringi = (GrGLGetStringiProc) eglGetProcAddress("glGetString i"); | |
264 interface->fGetTexLevelParameteriv = (GrGLGetTexLevelParameterivProc) eglGet ProcAddress("glGetTexLevelParameteriv"); | |
265 interface->fGetUniformLocation = (GrGLGetUniformLocationProc) eglGetProcAddr ess("glGetUniformLocation"); | |
266 interface->fLineWidth = (GrGLLineWidthProc) eglGetProcAddress("glLineWidth") ; | |
267 interface->fLinkProgram = (GrGLLinkProgramProc) eglGetProcAddress("glLinkPro gram"); | |
268 interface->fLoadIdentity = (GrGLLoadIdentityProc) eglGetProcAddress("glLoadI dentity"); | |
269 interface->fLoadMatrixf = (GrGLLoadMatrixfProc) eglGetProcAddress("glLoadMat rixf"); | |
270 interface->fMapBuffer = (GrGLMapBufferProc) eglGetProcAddress("glMapBuffer") ; | |
271 interface->fMatrixMode = (GrGLMatrixModeProc) eglGetProcAddress("glMatrixMod e"); | |
272 interface->fPixelStorei = (GrGLPixelStoreiProc) eglGetProcAddress("glPixelSt orei"); | |
273 interface->fQueryCounter = (GrGLQueryCounterProc) eglGetProcAddress("glQuery Counter"); | |
274 interface->fReadBuffer = (GrGLReadBufferProc) eglGetProcAddress("glReadBuffe r"); | |
275 interface->fReadPixels = (GrGLReadPixelsProc) eglGetProcAddress("glReadPixel s"); | |
276 interface->fRenderbufferStorage = (GrGLRenderbufferStorageProc) eglGetProcAd dress("glRenderbufferStorage"); | |
277 interface->fRenderbufferStorageMultisample = (GrGLRenderbufferStorageMultisa mpleProc) eglGetProcAddress("glRenderbufferStorageMultisample"); | |
278 interface->fRenderbufferStorageMultisampleCoverage = (GrGLRenderbufferStorag eMultisampleCoverageProc) eglGetProcAddress("glRenderbufferStorageMultisampleCov erage"); | |
279 interface->fScissor = (GrGLScissorProc) eglGetProcAddress("glScissor"); | |
280 interface->fShaderSource = (GrGLShaderSourceProc) eglGetProcAddress("glShade rSource"); | |
281 interface->fStencilFunc = (GrGLStencilFuncProc) eglGetProcAddress("glStencil Func"); | |
282 interface->fStencilFuncSeparate = (GrGLStencilFuncSeparateProc) eglGetProcAd dress("glStencilFuncSeparate"); | |
283 interface->fStencilMask = (GrGLStencilMaskProc) eglGetProcAddress("glStencil Mask"); | |
284 interface->fStencilMaskSeparate = (GrGLStencilMaskSeparateProc) eglGetProcAd dress("glStencilMaskSeparate"); | |
285 interface->fStencilOp = (GrGLStencilOpProc) eglGetProcAddress("glStencilOp") ; | |
286 interface->fStencilOpSeparate = (GrGLStencilOpSeparateProc) eglGetProcAddres s("glStencilOpSeparate"); | |
287 interface->fTexImage2D = (GrGLTexImage2DProc) eglGetProcAddress("glTexImage2 D"); | |
288 interface->fTexParameteri = (GrGLTexParameteriProc) eglGetProcAddress("glTex Parameteri"); | |
289 interface->fTexParameteriv = (GrGLTexParameterivProc) eglGetProcAddress("glT exParameteriv"); | |
290 interface->fTexSubImage2D = (GrGLTexSubImage2DProc) eglGetProcAddress("glTex SubImage2D"); | |
291 interface->fTexStorage2D = (GrGLTexStorage2DProc) eglGetProcAddress("glTexSt orage2D"); | |
292 interface->fUniform1f = (GrGLUniform1fProc) eglGetProcAddress("glUniform1f") ; | |
293 interface->fUniform1i = (GrGLUniform1iProc) eglGetProcAddress("glUniform1i") ; | |
294 interface->fUniform1fv = (GrGLUniform1fvProc) eglGetProcAddress("glUniform1f v"); | |
295 interface->fUniform1iv = (GrGLUniform1ivProc) eglGetProcAddress("glUniform1i v"); | |
296 interface->fUniform2f = (GrGLUniform2fProc) eglGetProcAddress("glUniform2f") ; | |
297 interface->fUniform2i = (GrGLUniform2iProc) eglGetProcAddress("glUniform2i") ; | |
298 interface->fUniform2fv = (GrGLUniform2fvProc) eglGetProcAddress("glUniform2f v"); | |
299 interface->fUniform2iv = (GrGLUniform2ivProc) eglGetProcAddress("glUniform2i v"); | |
300 interface->fUniform3f = (GrGLUniform3fProc) eglGetProcAddress("glUniform3f") ; | |
301 interface->fUniform3i = (GrGLUniform3iProc) eglGetProcAddress("glUniform3i") ; | |
302 interface->fUniform3fv = (GrGLUniform3fvProc) eglGetProcAddress("glUniform3f v"); | |
303 interface->fUniform3iv = (GrGLUniform3ivProc) eglGetProcAddress("glUniform3i v"); | |
304 interface->fUniform4f = (GrGLUniform4fProc) eglGetProcAddress("glUniform4f") ; | |
305 interface->fUniform4i = (GrGLUniform4iProc) eglGetProcAddress("glUniform4i") ; | |
306 interface->fUniform4fv = (GrGLUniform4fvProc) eglGetProcAddress("glUniform4f v"); | |
307 interface->fUniform4iv = (GrGLUniform4ivProc) eglGetProcAddress("glUniform4i v"); | |
308 interface->fUniformMatrix2fv = (GrGLUniformMatrix2fvProc) eglGetProcAddress( "glUniformMatrix2fv"); | |
309 interface->fUniformMatrix3fv = (GrGLUniformMatrix3fvProc) eglGetProcAddress( "glUniformMatrix3fv"); | |
310 interface->fUniformMatrix4fv = (GrGLUniformMatrix4fvProc) eglGetProcAddress( "glUniformMatrix4fv"); | |
311 interface->fUnmapBuffer = (GrGLUnmapBufferProc) eglGetProcAddress("glUnmapBu ffer"); | |
312 interface->fUseProgram = (GrGLUseProgramProc) eglGetProcAddress("glUseProgra m"); | |
313 interface->fVertexAttrib4fv = (GrGLVertexAttrib4fvProc) eglGetProcAddress("g lVertexAttrib4fv"); | |
314 interface->fVertexAttribPointer = (GrGLVertexAttribPointerProc) eglGetProcAd dress("glVertexAttribPointer"); | |
315 interface->fViewport = (GrGLViewportProc) eglGetProcAddress("glViewport"); | |
316 | |
317 if (extensions.has("GL_NV_path_rendering")) { | |
318 interface->fPathCommands = (GrGLPathCommandsProc) eglGetProcAddress("glP athCommandsNV"); | |
319 interface->fPathCoords = (GrGLPathCoordsProc) eglGetProcAddress("glPathC oordsNV"); | |
320 interface->fPathSubCommands = (GrGLPathSubCommandsProc) eglGetProcAddres s("glPathSubCommandsNV"); | |
321 interface->fPathSubCoords = (GrGLPathSubCoordsProc) eglGetProcAddress("g lPathSubCoordsNV"); | |
322 interface->fPathString = (GrGLPathStringProc) eglGetProcAddress("glPathS tringNV"); | |
323 interface->fPathGlyphs = (GrGLPathGlyphsProc) eglGetProcAddress("glPathG lyphsNV"); | |
324 interface->fPathGlyphRange = (GrGLPathGlyphRangeProc) eglGetProcAddress( "glPathGlyphRangeNV"); | |
325 interface->fWeightPaths = (GrGLWeightPathsProc) eglGetProcAddress("glWei ghtPathsNV"); | |
326 interface->fCopyPath = (GrGLCopyPathProc) eglGetProcAddress("glCopyPathN V"); | |
327 interface->fInterpolatePaths = (GrGLInterpolatePathsProc) eglGetProcAddr ess("glInterpolatePathsNV"); | |
328 interface->fTransformPath = (GrGLTransformPathProc) eglGetProcAddress("g lTransformPathNV"); | |
329 interface->fPathParameteriv = (GrGLPathParameterivProc) eglGetProcAddres s("glPathParameterivNV"); | |
330 interface->fPathParameteri = (GrGLPathParameteriProc) eglGetProcAddress( "glPathParameteriNV"); | |
331 interface->fPathParameterfv = (GrGLPathParameterfvProc) eglGetProcAddres s("glPathParameterfvNV"); | |
332 interface->fPathParameterf = (GrGLPathParameterfProc) eglGetProcAddress( "glPathParameterfNV"); | |
333 interface->fPathDashArray = (GrGLPathDashArrayProc) eglGetProcAddress("g lPathDashArrayNV"); | |
334 interface->fGenPaths = (GrGLGenPathsProc) eglGetProcAddress("glGenPathsN V"); | |
335 interface->fDeletePaths = (GrGLDeletePathsProc) eglGetProcAddress("glDel etePathsNV"); | |
336 interface->fIsPath = (GrGLIsPathProc) eglGetProcAddress("glIsPathNV"); | |
337 interface->fPathStencilFunc = (GrGLPathStencilFuncProc) eglGetProcAddres s("glPathStencilFuncNV"); | |
338 interface->fPathStencilDepthOffset = (GrGLPathStencilDepthOffsetProc) eg lGetProcAddress("glPathStencilDepthOffsetNV"); | |
339 interface->fStencilFillPath = (GrGLStencilFillPathProc) eglGetProcAddres s("glStencilFillPathNV"); | |
340 interface->fStencilStrokePath = (GrGLStencilStrokePathProc) eglGetProcAd dress("glStencilStrokePathNV"); | |
341 interface->fStencilFillPathInstanced = (GrGLStencilFillPathInstancedProc ) eglGetProcAddress("glStencilFillPathInstancedNV"); | |
342 interface->fStencilStrokePathInstanced = (GrGLStencilStrokePathInstanced Proc) eglGetProcAddress("glStencilStrokePathInstancedNV"); | |
343 interface->fPathCoverDepthFunc = (GrGLPathCoverDepthFuncProc) eglGetProc Address("glPathCoverDepthFuncNV"); | |
344 interface->fPathColorGen = (GrGLPathColorGenProc) eglGetProcAddress("glP athColorGenNV"); | |
345 interface->fPathTexGen = (GrGLPathTexGenProc) eglGetProcAddress("glPathT exGenNV"); | |
346 interface->fPathFogGen = (GrGLPathFogGenProc) eglGetProcAddress("glPathF ogGenNV"); | |
347 interface->fCoverFillPath = (GrGLCoverFillPathProc) eglGetProcAddress("g lCoverFillPathNV"); | |
348 interface->fCoverStrokePath = (GrGLCoverStrokePathProc) eglGetProcAddres s("glCoverStrokePathNV"); | |
349 interface->fCoverFillPathInstanced = (GrGLCoverFillPathInstancedProc) eg lGetProcAddress("glCoverFillPathInstancedNV"); | |
350 interface->fCoverStrokePathInstanced = (GrGLCoverStrokePathInstancedProc ) eglGetProcAddress("glCoverStrokePathInstancedNV"); | |
351 interface->fGetPathParameteriv = (GrGLGetPathParameterivProc) eglGetProc Address("glGetPathParameterivNV"); | |
352 interface->fGetPathParameterfv = (GrGLGetPathParameterfvProc) eglGetProc Address("glGetPathParameterfvNV"); | |
353 interface->fGetPathCommands = (GrGLGetPathCommandsProc) eglGetProcAddres s("glGetPathCommandsNV"); | |
354 interface->fGetPathCoords = (GrGLGetPathCoordsProc) eglGetProcAddress("g lGetPathCoordsNV"); | |
355 interface->fGetPathDashArray = (GrGLGetPathDashArrayProc) eglGetProcAddr ess("glGetPathDashArrayNV"); | |
356 interface->fGetPathMetrics = (GrGLGetPathMetricsProc) eglGetProcAddress( "glGetPathMetricsNV"); | |
357 interface->fGetPathMetricRange = (GrGLGetPathMetricRangeProc) eglGetProc Address("glGetPathMetricRangeNV"); | |
358 interface->fGetPathSpacing = (GrGLGetPathSpacingProc) eglGetProcAddress( "glGetPathSpacingNV"); | |
359 interface->fGetPathColorGeniv = (GrGLGetPathColorGenivProc) eglGetProcAd dress("glGetPathColorGenivNV"); | |
360 interface->fGetPathColorGenfv = (GrGLGetPathColorGenfvProc) eglGetProcAd dress("glGetPathColorGenfvNV"); | |
361 interface->fGetPathTexGeniv = (GrGLGetPathTexGenivProc) eglGetProcAddres s("glGetPathTexGenivNV"); | |
362 interface->fGetPathTexGenfv = (GrGLGetPathTexGenfvProc) eglGetProcAddres s("glGetPathTexGenfvNV"); | |
363 interface->fIsPointInFillPath = (GrGLIsPointInFillPathProc) eglGetProcAd dress("glIsPointInFillPathNV"); | |
364 interface->fIsPointInStrokePath = (GrGLIsPointInStrokePathProc) eglGetPr ocAddress("glIsPointInStrokePathNV"); | |
365 interface->fGetPathLength = (GrGLGetPathLengthProc) eglGetProcAddress("g lGetPathLengthNV"); | |
366 interface->fPointAlongPath = (GrGLPointAlongPathProc) eglGetProcAddress( "glPointAlongPathNV"); | |
367 } | |
368 | |
369 return interface; | |
370 } | |
371 | |
20 const GrGLInterface* GrGLCreateNativeInterface() { | 372 const GrGLInterface* GrGLCreateNativeInterface() { |
21 static SkAutoTUnref<GrGLInterface> glInterface; | 373 |
22 if (!glInterface.get()) { | 374 GrGLGetStringiProc getStringi = (GrGLGetStringiProc) eglGetProcAddress("glGe tStringi"); |
23 GrGLExtensions extensions; | 375 |
24 GrGLGetStringiProc getStringi; | 376 const char* verStr = reinterpret_cast<const char*>(glGetString(GR_GL_VERSION )); |
25 #if GL_ES_VERSION_3_0 | 377 GrGLVersion version = GrGLGetVersionFromString(verStr); |
26 getStringi = glGetStringi; | 378 GrGLBinding binding = GrGLGetBindingInUseFromString(verStr); |
27 #else | 379 |
28 getStringi = (GrGLGetStringiProc) eglGetProcAddress("glGetStringi"); | 380 GrGLExtensions extensions; |
29 #endif | 381 if (!extensions.init(binding, glGetString, getStringi, glGetIntegerv)) { |
30 | 382 return NULL; |
31 if (!extensions.init(kES_GrGLBinding, glGetString, getStringi, glGetInte gerv)) { | 383 } |
32 return NULL; | 384 |
33 } | 385 if (kES_GrGLBinding == binding) { |
34 const char* verStr = reinterpret_cast<const char*>(glGetString(GR_GL_VER SION)); | 386 return create_es_interface(version, extensions); |
35 GrGLVersion version = GrGLGetVersionFromString(verStr); | 387 } else if (kDesktop_GrGLBinding == binding) { |
36 if (version < GR_GL_VER(2,0)) { | 388 return create_desktop_interface(version, extensions); |
37 return NULL; | 389 } else { |
38 } | 390 return NULL; |
39 | 391 } |
40 GrGLInterface* interface = new GrGLInterface; | |
41 glInterface.reset(interface); | |
42 interface->fBindingsExported = kES_GrGLBinding; | |
43 interface->fActiveTexture = glActiveTexture; | |
44 interface->fAttachShader = glAttachShader; | |
45 interface->fBindAttribLocation = glBindAttribLocation; | |
46 interface->fBindBuffer = glBindBuffer; | |
47 interface->fBindTexture = glBindTexture; | |
48 interface->fBindVertexArray = glBindVertexArrayOES; | |
49 interface->fBlendColor = glBlendColor; | |
50 interface->fBlendFunc = glBlendFunc; | |
51 interface->fBufferData = glBufferData; | |
52 interface->fBufferSubData = glBufferSubData; | |
53 interface->fClear = glClear; | |
54 interface->fClearColor = glClearColor; | |
55 interface->fClearStencil = glClearStencil; | |
56 interface->fColorMask = glColorMask; | |
57 interface->fCompileShader = glCompileShader; | |
58 interface->fCompressedTexImage2D = glCompressedTexImage2D; | |
59 interface->fCopyTexSubImage2D = glCopyTexSubImage2D; | |
60 interface->fCreateProgram = glCreateProgram; | |
61 interface->fCreateShader = glCreateShader; | |
62 interface->fCullFace = glCullFace; | |
63 interface->fDeleteBuffers = glDeleteBuffers; | |
64 interface->fDeleteProgram = glDeleteProgram; | |
65 interface->fDeleteShader = glDeleteShader; | |
66 interface->fDeleteTextures = glDeleteTextures; | |
67 interface->fDeleteVertexArrays = glDeleteVertexArraysOES; | |
68 interface->fDepthMask = glDepthMask; | |
69 interface->fDisable = glDisable; | |
70 interface->fDisableVertexAttribArray = glDisableVertexAttribArray; | |
71 interface->fDrawArrays = glDrawArrays; | |
72 interface->fDrawElements = glDrawElements; | |
73 interface->fEnable = glEnable; | |
74 interface->fEnableVertexAttribArray = glEnableVertexAttribArray; | |
75 interface->fFinish = glFinish; | |
76 interface->fFlush = glFlush; | |
77 interface->fFrontFace = glFrontFace; | |
78 interface->fGenBuffers = glGenBuffers; | |
79 interface->fGenerateMipmap = glGenerateMipmap; | |
80 interface->fGenTextures = glGenTextures; | |
81 interface->fGenVertexArrays = glGenVertexArraysOES; | |
82 interface->fGetBufferParameteriv = glGetBufferParameteriv; | |
83 interface->fGetError = glGetError; | |
84 interface->fGetIntegerv = glGetIntegerv; | |
85 interface->fGetProgramInfoLog = glGetProgramInfoLog; | |
86 interface->fGetProgramiv = glGetProgramiv; | |
87 interface->fGetShaderInfoLog = glGetShaderInfoLog; | |
88 interface->fGetShaderiv = glGetShaderiv; | |
89 interface->fGetString = glGetString; | |
90 interface->fGetStringi = getStringi; // located above | |
91 interface->fGetUniformLocation = glGetUniformLocation; | |
92 interface->fLineWidth = glLineWidth; | |
93 interface->fLinkProgram = glLinkProgram; | |
94 interface->fPixelStorei = glPixelStorei; | |
95 interface->fReadPixels = glReadPixels; | |
96 interface->fScissor = glScissor; | |
97 #if GR_GL_USE_NEW_SHADER_SOURCE_SIGNATURE | |
98 interface->fShaderSource = (GrGLShaderSourceProc) glShaderSource; | |
99 #else | |
100 interface->fShaderSource = glShaderSource; | |
101 #endif | |
102 interface->fStencilFunc = glStencilFunc; | |
103 interface->fStencilFuncSeparate = glStencilFuncSeparate; | |
104 interface->fStencilMask = glStencilMask; | |
105 interface->fStencilMaskSeparate = glStencilMaskSeparate; | |
106 interface->fStencilOp = glStencilOp; | |
107 interface->fStencilOpSeparate = glStencilOpSeparate; | |
108 interface->fTexImage2D = glTexImage2D; | |
109 interface->fTexParameteri = glTexParameteri; | |
110 interface->fTexParameteriv = glTexParameteriv; | |
111 interface->fTexSubImage2D = glTexSubImage2D; | |
112 | |
113 if (version >= GR_GL_VER(3,0)) { | |
114 #if GL_ES_VERSION_3_0 | |
115 interface->fTexStorage2D = glTexStorage2D; | |
116 #else | |
117 interface->fTexStorage2D = (GrGLTexStorage2DProc) eglGetProcAddress( "glTexStorage2D"); | |
118 #endif | |
119 } else { | |
120 #if GL_EXT_texture_storage | |
121 interface->fTexStorage2D = glTexStorage2DEXT; | |
122 #else | |
123 interface->fTexStorage2D = (GrGLTexStorage2DProc) eglGetProcAddress( "glTexStorage2DEXT"); | |
124 #endif | |
125 } | |
126 | |
127 #if GL_EXT_discard_framebuffer | |
128 interface->fDiscardFramebuffer = glDiscardFramebufferEXT; | |
129 #endif | |
130 interface->fUniform1f = glUniform1f; | |
131 interface->fUniform1i = glUniform1i; | |
132 interface->fUniform1fv = glUniform1fv; | |
133 interface->fUniform1iv = glUniform1iv; | |
134 interface->fUniform2f = glUniform2f; | |
135 interface->fUniform2i = glUniform2i; | |
136 interface->fUniform2fv = glUniform2fv; | |
137 interface->fUniform2iv = glUniform2iv; | |
138 interface->fUniform3f = glUniform3f; | |
139 interface->fUniform3i = glUniform3i; | |
140 interface->fUniform3fv = glUniform3fv; | |
141 interface->fUniform3iv = glUniform3iv; | |
142 interface->fUniform4f = glUniform4f; | |
143 interface->fUniform4i = glUniform4i; | |
144 interface->fUniform4fv = glUniform4fv; | |
145 interface->fUniform4iv = glUniform4iv; | |
146 interface->fUniformMatrix2fv = glUniformMatrix2fv; | |
147 interface->fUniformMatrix3fv = glUniformMatrix3fv; | |
148 interface->fUniformMatrix4fv = glUniformMatrix4fv; | |
149 interface->fUseProgram = glUseProgram; | |
150 interface->fVertexAttrib4fv = glVertexAttrib4fv; | |
151 interface->fVertexAttribPointer = glVertexAttribPointer; | |
152 interface->fViewport = glViewport; | |
153 interface->fBindFramebuffer = glBindFramebuffer; | |
154 interface->fBindRenderbuffer = glBindRenderbuffer; | |
155 interface->fCheckFramebufferStatus = glCheckFramebufferStatus; | |
156 interface->fDeleteFramebuffers = glDeleteFramebuffers; | |
157 interface->fDeleteRenderbuffers = glDeleteRenderbuffers; | |
158 interface->fFramebufferRenderbuffer = glFramebufferRenderbuffer; | |
159 interface->fFramebufferTexture2D = glFramebufferTexture2D; | |
160 if (extensions.has("GL_EXT_multisampled_render_to_texture")) { | |
161 #if GL_EXT_multisampled_render_to_texture | |
162 interface->fFramebufferTexture2DMultisample = glFramebufferTexture2D MultisampleEXT; | |
163 interface->fRenderbufferStorageMultisample = glRenderbufferStorageMu ltisampleEXT; | |
164 #else | |
165 interface->fFramebufferTexture2DMultisample = (GrGLFramebufferTextur e2DMultisampleProc) eglGetProcAddress("glFramebufferTexture2DMultisampleEXT"); | |
166 interface->fRenderbufferStorageMultisample = (GrGLRenderbufferStorag eMultisampleProc) eglGetProcAddress("glRenderbufferStorageMultisampleEXT"); | |
167 #endif | |
168 } else if (extensions.has("GL_IMG_multisampled_render_to_texture")) { | |
169 #if GL_IMG_multisampled_render_to_texture | |
170 interface->fFramebufferTexture2DMultisample = glFramebufferTexture2D MultisampleIMG; | |
171 interface->fRenderbufferStorageMultisample = glRenderbufferStorageMu ltisampleIMG; | |
172 #else | |
173 interface->fFramebufferTexture2DMultisample = (GrGLFramebufferTextur e2DMultisampleProc) eglGetProcAddress("glFramebufferTexture2DMultisampleIMG"); | |
174 interface->fRenderbufferStorageMultisample = (GrGLRenderbufferStorag eMultisampleProc) eglGetProcAddress("glRenderbufferStorageMultisampleIMG"); | |
175 #endif | |
176 } | |
177 interface->fGenFramebuffers = glGenFramebuffers; | |
178 interface->fGenRenderbuffers = glGenRenderbuffers; | |
179 interface->fGetFramebufferAttachmentParameteriv = glGetFramebufferAttach mentParameteriv; | |
180 interface->fGetRenderbufferParameteriv = glGetRenderbufferParameteriv; | |
181 interface->fRenderbufferStorage = glRenderbufferStorage; | |
182 #if GL_OES_mapbuffer | |
183 interface->fMapBuffer = glMapBufferOES; | |
184 interface->fUnmapBuffer = glUnmapBufferOES; | |
185 #else | |
186 interface->fMapBuffer = (GrGLMapBufferProc) eglGetProcAddress("glMapBuff erOES"); | |
187 interface->fUnmapBuffer = (GrGLUnmapBufferProc) eglGetProcAddress("glUnm apBufferOES"); | |
188 #endif | |
189 } | |
190 glInterface.get()->ref(); | |
191 return glInterface.get(); | |
192 } | 392 } |
OLD | NEW |