Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: src/gpu/gl/mac/GrGLCreateNativeInterface_mac.cpp

Issue 137753005: Make GrGLInterface be context-specific on all platforms (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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"
(...skipping 25 matching lines...) Expand all
36 36
37 static void* GetProcAddress(const char* name) { 37 static void* GetProcAddress(const char* name) {
38 static GLLoader gLoader; 38 static GLLoader gLoader;
39 return dlsym(gLoader.handle(), name); 39 return dlsym(gLoader.handle(), name);
40 } 40 }
41 41
42 #define GET_PROC(name) (interface->f ## name = ((GrGL ## name ## Proc) GetProcAd dress("gl" #name))) 42 #define GET_PROC(name) (interface->f ## name = ((GrGL ## name ## Proc) GetProcAd dress("gl" #name)))
43 #define GET_PROC_SUFFIX(name, suffix) (interface->f ## name = ((GrGL ## name ## Proc) GetProcAddress("gl" #name #suffix))) 43 #define GET_PROC_SUFFIX(name, suffix) (interface->f ## name = ((GrGL ## name ## Proc) GetProcAddress("gl" #name #suffix)))
44 44
45 const GrGLInterface* GrGLCreateNativeInterface() { 45 const GrGLInterface* GrGLCreateNativeInterface() {
46 // The gl functions are not context-specific so we create one global interfa ce 46
47 static SkAutoTUnref<GrGLInterface> glInterface; 47 GrGLGetStringProc glGetString = (GrGLGetStringProc) GetProcAddress("glGetStr ing");
48 if (!glInterface.get()) { 48 GrGLGetStringiProc glGetStringi = (GrGLGetStringiProc) GetProcAddress("glGet Stringi");
49 GrGLInterface* interface = new GrGLInterface; 49 GrGLGetIntegervProc glGetIntegerv = (GrGLGetIntegervProc) GetProcAddress("gl GetIntegerv");
50 50
51 GrGLGetStringProc glGetString = (GrGLGetStringProc) GetProcAddress("glGe tString"); 51 const char* verStr = (const char*) glGetString(GR_GL_VERSION);
52 GrGLGetStringiProc glGetStringi = (GrGLGetStringiProc) GetProcAddress("g lGetStringi"); 52 GrGLVersion ver = GrGLGetVersionFromString(verStr);
53 GrGLGetIntegervProc glGetIntegerv = (GrGLGetIntegervProc) GetProcAddress ("glGetIntegerv"); 53 GrGLExtensions extensions;
54 54 if (!extensions.init(kDesktop_GrGLBinding, glGetString, glGetStringi, glGetI ntegerv)) {
55 glInterface.reset(interface); 55 return NULL;
56 const char* verStr = (const char*) glGetString(GR_GL_VERSION); 56 }
57 GrGLVersion ver = GrGLGetVersionFromString(verStr); 57
58 GrGLExtensions extensions; 58 GrGLInterface* interface = SkNEW(GrGLInterface);
59 if (!extensions.init(kDesktop_GrGLBinding, glGetString, glGetStringi, gl GetIntegerv)) { 59 interface->fBindingsExported = kDesktop_GrGLBinding;
60 glInterface.reset(NULL); 60
61 return NULL; 61 GET_PROC(ActiveTexture);
62 GET_PROC(AttachShader);
63 GET_PROC(BeginQuery);
64 GET_PROC(BindAttribLocation);
65 GET_PROC(BindBuffer);
66 if (ver >= GR_GL_VER(3,0)) {
67 GET_PROC(BindFragDataLocation);
68 }
69 GET_PROC(BindTexture);
70 GET_PROC(BlendFunc);
71
72 if (ver >= GR_GL_VER(1,4) ||
73 extensions.has("GL_ARB_imaging") ||
74 extensions.has("GL_EXT_blend_color")) {
75 GET_PROC(BlendColor);
76 }
77
78 GET_PROC(BufferData);
79 GET_PROC(BufferSubData);
80 GET_PROC(Clear);
81 GET_PROC(ClearColor);
82 GET_PROC(ClearStencil);
83 GET_PROC(ClientActiveTexture);
84 GET_PROC(ColorMask);
85 GET_PROC(CompileShader);
86 GET_PROC(CompressedTexImage2D);
87 GET_PROC(CopyTexSubImage2D);
88 GET_PROC(CreateProgram);
89 GET_PROC(CreateShader);
90 GET_PROC(CullFace);
91 GET_PROC(DeleteBuffers);
92 GET_PROC(DeleteProgram);
93 GET_PROC(DeleteQueries);
94 GET_PROC(DeleteShader);
95 GET_PROC(DeleteTextures);
96 GET_PROC(DepthMask);
97 GET_PROC(Disable);
98 GET_PROC(DisableClientState);
99 GET_PROC(DisableVertexAttribArray);
100 GET_PROC(DrawArrays);
101 GET_PROC(DrawBuffer);
102 GET_PROC(DrawBuffers);
103 GET_PROC(DrawElements);
104 GET_PROC(Enable);
105 GET_PROC(EnableClientState);
106 GET_PROC(EnableVertexAttribArray);
107 GET_PROC(EndQuery);
108 GET_PROC(Finish);
109 GET_PROC(Flush);
110 GET_PROC(FrontFace);
111 GET_PROC(GenBuffers);
112 GET_PROC(GenerateMipmap);
113 GET_PROC(GenQueries);
114 GET_PROC(GetBufferParameteriv);
115 GET_PROC(GetError);
116 GET_PROC(GetIntegerv);
117 GET_PROC(GetProgramInfoLog);
118 GET_PROC(GetProgramiv);
119 GET_PROC(GetQueryiv);
120 GET_PROC(GetQueryObjectiv);
121 GET_PROC(GetQueryObjectuiv);
122 GET_PROC(GetShaderInfoLog);
123 GET_PROC(GetShaderiv);
124 GET_PROC(GetString);
125 GET_PROC(GetStringi);
126 GET_PROC(GetTexLevelParameteriv);
127 GET_PROC(GenTextures);
128 GET_PROC(GetUniformLocation);
129 GET_PROC(LineWidth);
130 GET_PROC(LinkProgram);
131 GET_PROC(LoadIdentity);
132 GET_PROC(LoadMatrixf);
133 GET_PROC(MapBuffer);
134 GET_PROC(MatrixMode);
135 GET_PROC(PixelStorei);
136 GET_PROC(ReadBuffer);
137 GET_PROC(ReadPixels);
138 GET_PROC(Scissor);
139 GET_PROC(ShaderSource);
140 GET_PROC(StencilFunc);
141 GET_PROC(StencilFuncSeparate);
142 GET_PROC(StencilMask);
143 GET_PROC(StencilMaskSeparate);
144 GET_PROC(StencilOp);
145 GET_PROC(StencilOpSeparate);
146 GET_PROC(TexGenf);
147 GET_PROC(TexGenfv);
148 GET_PROC(TexGeni);
149 GET_PROC(TexImage2D);
150 GET_PROC(TexParameteri);
151 GET_PROC(TexParameteriv);
152 if (ver >= GR_GL_VER(4,2) || extensions.has("GL_ARB_texture_storage")) {
153 GET_PROC(TexStorage2D);
154 } else if (extensions.has("GL_EXT_texture_storage")) {
155 GET_PROC_SUFFIX(TexStorage2D, EXT);
156 }
157 GET_PROC(TexSubImage2D);
158 GET_PROC(Uniform1f);
159 GET_PROC(Uniform1i);
160 GET_PROC(Uniform1fv);
161 GET_PROC(Uniform1iv);
162 GET_PROC(Uniform2f);
163 GET_PROC(Uniform2i);
164 GET_PROC(Uniform2fv);
165 GET_PROC(Uniform2iv);
166 GET_PROC(Uniform3f);
167 GET_PROC(Uniform3i);
168 GET_PROC(Uniform3fv);
169 GET_PROC(Uniform3iv);
170 GET_PROC(Uniform4f);
171 GET_PROC(Uniform4i);
172 GET_PROC(Uniform4fv);
173 GET_PROC(Uniform4iv);
174 GET_PROC(Uniform4fv);
175 GET_PROC(UniformMatrix2fv);
176 GET_PROC(UniformMatrix3fv);
177 GET_PROC(UniformMatrix4fv);
178 GET_PROC(UnmapBuffer);
179 GET_PROC(UseProgram);
180 GET_PROC(VertexAttrib4fv);
181 GET_PROC(VertexAttribPointer);
182 GET_PROC(VertexPointer);
183 GET_PROC(Viewport);
184
185 if (ver >= GR_GL_VER(3,0) || extensions.has("GL_ARB_vertex_array_object")) {
186 // no ARB suffix for GL_ARB_vertex_array_object
187 GET_PROC(BindVertexArray);
188 GET_PROC(DeleteVertexArrays);
189 GET_PROC(GenVertexArrays);
190 }
191
192 if (ver >= GR_GL_VER(3,3) || extensions.has("GL_ARB_timer_query")) {
193 // ARB extension doesn't use the ARB suffix on the function name
194 GET_PROC(QueryCounter);
195 GET_PROC(GetQueryObjecti64v);
196 GET_PROC(GetQueryObjectui64v);
197 } else if (extensions.has("GL_EXT_timer_query")) {
198 GET_PROC_SUFFIX(GetQueryObjecti64v, EXT);
199 GET_PROC_SUFFIX(GetQueryObjectui64v, EXT);
200 }
201
202 if (ver >= GR_GL_VER(3,0) || extensions.has("GL_ARB_framebuffer_object")) {
203 // ARB extension doesn't use the ARB suffix on the function names
204 GET_PROC(GenFramebuffers);
205 GET_PROC(GetFramebufferAttachmentParameteriv);
206 GET_PROC(GetRenderbufferParameteriv);
207 GET_PROC(BindFramebuffer);
208 GET_PROC(FramebufferTexture2D);
209 GET_PROC(CheckFramebufferStatus);
210 GET_PROC(DeleteFramebuffers);
211 GET_PROC(RenderbufferStorage);
212 GET_PROC(GenRenderbuffers);
213 GET_PROC(DeleteRenderbuffers);
214 GET_PROC(FramebufferRenderbuffer);
215 GET_PROC(BindRenderbuffer);
216 GET_PROC(RenderbufferStorageMultisample);
217 GET_PROC(BlitFramebuffer);
218 } else {
219 if (extensions.has("GL_EXT_framebuffer_object")) {
220 GET_PROC_SUFFIX(GenFramebuffers, EXT);
221 GET_PROC_SUFFIX(GetFramebufferAttachmentParameteriv, EXT);
222 GET_PROC_SUFFIX(GetRenderbufferParameteriv, EXT);
223 GET_PROC_SUFFIX(BindFramebuffer, EXT);
224 GET_PROC_SUFFIX(FramebufferTexture2D, EXT);
225 GET_PROC_SUFFIX(CheckFramebufferStatus, EXT);
226 GET_PROC_SUFFIX(DeleteFramebuffers, EXT);
227 GET_PROC_SUFFIX(RenderbufferStorage, EXT);
228 GET_PROC_SUFFIX(GenRenderbuffers, EXT);
229 GET_PROC_SUFFIX(DeleteRenderbuffers, EXT);
230 GET_PROC_SUFFIX(FramebufferRenderbuffer, EXT);
231 GET_PROC_SUFFIX(BindRenderbuffer, EXT);
62 } 232 }
63 interface->fBindingsExported = kDesktop_GrGLBinding; 233 if (extensions.has("GL_EXT_framebuffer_multisample")) {
64 234 GET_PROC_SUFFIX(RenderbufferStorageMultisample, EXT);
65 GET_PROC(ActiveTexture);
66 GET_PROC(AttachShader);
67 GET_PROC(BeginQuery);
68 GET_PROC(BindAttribLocation);
69 GET_PROC(BindBuffer);
70 if (ver >= GR_GL_VER(3,0)) {
71 GET_PROC(BindFragDataLocation);
72 } 235 }
73 GET_PROC(BindTexture); 236 if (extensions.has("GL_EXT_framebuffer_blit")) {
74 GET_PROC(BlendFunc); 237 GET_PROC_SUFFIX(BlitFramebuffer, EXT);
75
76 if (ver >= GR_GL_VER(1,4) ||
77 extensions.has("GL_ARB_imaging") ||
78 extensions.has("GL_EXT_blend_color")) {
79 GET_PROC(BlendColor);
80 } 238 }
81 239 }
82 GET_PROC(BufferData); 240 if (ver >= GR_GL_VER(3,3) || extensions.has("GL_ARB_blend_func_extended")) {
83 GET_PROC(BufferSubData); 241 // ARB extension doesn't use the ARB suffix on the function name
84 GET_PROC(Clear); 242 GET_PROC(BindFragDataLocationIndexed);
85 GET_PROC(ClearColor); 243 }
86 GET_PROC(ClearStencil); 244 return interface;
87 GET_PROC(ClientActiveTexture);
88 GET_PROC(ColorMask);
89 GET_PROC(CompileShader);
90 GET_PROC(CompressedTexImage2D);
91 GET_PROC(CopyTexSubImage2D);
92 GET_PROC(CreateProgram);
93 GET_PROC(CreateShader);
94 GET_PROC(CullFace);
95 GET_PROC(DeleteBuffers);
96 GET_PROC(DeleteProgram);
97 GET_PROC(DeleteQueries);
98 GET_PROC(DeleteShader);
99 GET_PROC(DeleteTextures);
100 GET_PROC(DepthMask);
101 GET_PROC(Disable);
102 GET_PROC(DisableClientState);
103 GET_PROC(DisableVertexAttribArray);
104 GET_PROC(DrawArrays);
105 GET_PROC(DrawBuffer);
106 GET_PROC(DrawBuffers);
107 GET_PROC(DrawElements);
108 GET_PROC(Enable);
109 GET_PROC(EnableClientState);
110 GET_PROC(EnableVertexAttribArray);
111 GET_PROC(EndQuery);
112 GET_PROC(Finish);
113 GET_PROC(Flush);
114 GET_PROC(FrontFace);
115 GET_PROC(GenBuffers);
116 GET_PROC(GenerateMipmap);
117 GET_PROC(GenQueries);
118 GET_PROC(GetBufferParameteriv);
119 GET_PROC(GetError);
120 GET_PROC(GetIntegerv);
121 GET_PROC(GetProgramInfoLog);
122 GET_PROC(GetProgramiv);
123 GET_PROC(GetQueryiv);
124 GET_PROC(GetQueryObjectiv);
125 GET_PROC(GetQueryObjectuiv);
126 GET_PROC(GetShaderInfoLog);
127 GET_PROC(GetShaderiv);
128 GET_PROC(GetString);
129 GET_PROC(GetStringi);
130 GET_PROC(GetTexLevelParameteriv);
131 GET_PROC(GenTextures);
132 GET_PROC(GetUniformLocation);
133 GET_PROC(LineWidth);
134 GET_PROC(LinkProgram);
135 GET_PROC(LoadIdentity);
136 GET_PROC(LoadMatrixf);
137 GET_PROC(MapBuffer);
138 GET_PROC(MatrixMode);
139 GET_PROC(PixelStorei);
140 GET_PROC(ReadBuffer);
141 GET_PROC(ReadPixels);
142 GET_PROC(Scissor);
143 GET_PROC(ShaderSource);
144 GET_PROC(StencilFunc);
145 GET_PROC(StencilFuncSeparate);
146 GET_PROC(StencilMask);
147 GET_PROC(StencilMaskSeparate);
148 GET_PROC(StencilOp);
149 GET_PROC(StencilOpSeparate);
150 GET_PROC(TexGenf);
151 GET_PROC(TexGenfv);
152 GET_PROC(TexGeni);
153 GET_PROC(TexImage2D);
154 GET_PROC(TexParameteri);
155 GET_PROC(TexParameteriv);
156 if (ver >= GR_GL_VER(4,2) || extensions.has("GL_ARB_texture_storage")) {
157 GET_PROC(TexStorage2D);
158 } else if (extensions.has("GL_EXT_texture_storage")) {
159 GET_PROC_SUFFIX(TexStorage2D, EXT);
160 }
161 GET_PROC(TexSubImage2D);
162 GET_PROC(Uniform1f);
163 GET_PROC(Uniform1i);
164 GET_PROC(Uniform1fv);
165 GET_PROC(Uniform1iv);
166 GET_PROC(Uniform2f);
167 GET_PROC(Uniform2i);
168 GET_PROC(Uniform2fv);
169 GET_PROC(Uniform2iv);
170 GET_PROC(Uniform3f);
171 GET_PROC(Uniform3i);
172 GET_PROC(Uniform3fv);
173 GET_PROC(Uniform3iv);
174 GET_PROC(Uniform4f);
175 GET_PROC(Uniform4i);
176 GET_PROC(Uniform4fv);
177 GET_PROC(Uniform4iv);
178 GET_PROC(Uniform4fv);
179 GET_PROC(UniformMatrix2fv);
180 GET_PROC(UniformMatrix3fv);
181 GET_PROC(UniformMatrix4fv);
182 GET_PROC(UnmapBuffer);
183 GET_PROC(UseProgram);
184 GET_PROC(VertexAttrib4fv);
185 GET_PROC(VertexAttribPointer);
186 GET_PROC(VertexPointer);
187 GET_PROC(Viewport);
188
189 if (ver >= GR_GL_VER(3,0) || extensions.has("GL_ARB_vertex_array_object" )) {
190 // no ARB suffix for GL_ARB_vertex_array_object
191 GET_PROC(BindVertexArray);
192 GET_PROC(DeleteVertexArrays);
193 GET_PROC(GenVertexArrays);
194 }
195
196 if (ver >= GR_GL_VER(3,3) || extensions.has("GL_ARB_timer_query")) {
197 // ARB extension doesn't use the ARB suffix on the function name
198 GET_PROC(QueryCounter);
199 GET_PROC(GetQueryObjecti64v);
200 GET_PROC(GetQueryObjectui64v);
201 } else if (extensions.has("GL_EXT_timer_query")) {
202 GET_PROC_SUFFIX(GetQueryObjecti64v, EXT);
203 GET_PROC_SUFFIX(GetQueryObjectui64v, EXT);
204 }
205
206 if (ver >= GR_GL_VER(3,0) || extensions.has("GL_ARB_framebuffer_object") ) {
207 // ARB extension doesn't use the ARB suffix on the function names
208 GET_PROC(GenFramebuffers);
209 GET_PROC(GetFramebufferAttachmentParameteriv);
210 GET_PROC(GetRenderbufferParameteriv);
211 GET_PROC(BindFramebuffer);
212 GET_PROC(FramebufferTexture2D);
213 GET_PROC(CheckFramebufferStatus);
214 GET_PROC(DeleteFramebuffers);
215 GET_PROC(RenderbufferStorage);
216 GET_PROC(GenRenderbuffers);
217 GET_PROC(DeleteRenderbuffers);
218 GET_PROC(FramebufferRenderbuffer);
219 GET_PROC(BindRenderbuffer);
220 GET_PROC(RenderbufferStorageMultisample);
221 GET_PROC(BlitFramebuffer);
222 } else {
223 if (extensions.has("GL_EXT_framebuffer_object")) {
224 GET_PROC_SUFFIX(GenFramebuffers, EXT);
225 GET_PROC_SUFFIX(GetFramebufferAttachmentParameteriv, EXT);
226 GET_PROC_SUFFIX(GetRenderbufferParameteriv, EXT);
227 GET_PROC_SUFFIX(BindFramebuffer, EXT);
228 GET_PROC_SUFFIX(FramebufferTexture2D, EXT);
229 GET_PROC_SUFFIX(CheckFramebufferStatus, EXT);
230 GET_PROC_SUFFIX(DeleteFramebuffers, EXT);
231 GET_PROC_SUFFIX(RenderbufferStorage, EXT);
232 GET_PROC_SUFFIX(GenRenderbuffers, EXT);
233 GET_PROC_SUFFIX(DeleteRenderbuffers, EXT);
234 GET_PROC_SUFFIX(FramebufferRenderbuffer, EXT);
235 GET_PROC_SUFFIX(BindRenderbuffer, EXT);
236 }
237 if (extensions.has("GL_EXT_framebuffer_multisample")) {
238 GET_PROC_SUFFIX(RenderbufferStorageMultisample, EXT);
239 }
240 if (extensions.has("GL_EXT_framebuffer_blit")) {
241 GET_PROC_SUFFIX(BlitFramebuffer, EXT);
242 }
243 }
244 if (ver >= GR_GL_VER(3,3) || extensions.has("GL_ARB_blend_func_extended" )) {
245 // ARB extension doesn't use the ARB suffix on the function name
246 GET_PROC(BindFragDataLocationIndexed);
247 }
248 }
249 glInterface.get()->ref();
250 return glInterface.get();
251 } 245 }
OLDNEW
« no previous file with comments | « src/gpu/gl/iOS/GrGLCreateNativeInterface_iOS.cpp ('k') | src/gpu/gl/mesa/GrGLCreateMesaInterface.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698