gfx/skia/trunk/src/gpu/gl/mac/GrGLCreateNativeInterface_mac.cpp

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

michael@0 1
michael@0 2 /*
michael@0 3 * Copyright 2011 Google Inc.
michael@0 4 *
michael@0 5 * Use of this source code is governed by a BSD-style license that can be
michael@0 6 * found in the LICENSE file.
michael@0 7 */
michael@0 8
michael@0 9
michael@0 10 #include "gl/GrGLInterface.h"
michael@0 11 #include "../GrGLUtil.h"
michael@0 12
michael@0 13 #include <dlfcn.h>
michael@0 14
michael@0 15 // We get the proc addresss of all GL functions dynamically because we sometimes link against
michael@0 16 // alternative GL implementations (e.g. MESA) in addition to the native GL implementation.
michael@0 17 class GLLoader {
michael@0 18 public:
michael@0 19 GLLoader() {
michael@0 20 fLibrary = dlopen(
michael@0 21 "/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib",
michael@0 22 RTLD_LAZY);
michael@0 23 }
michael@0 24 ~GLLoader() {
michael@0 25 if (NULL != fLibrary) {
michael@0 26 dlclose(fLibrary);
michael@0 27 }
michael@0 28 }
michael@0 29 void* handle() {
michael@0 30 return NULL == fLibrary ? RTLD_DEFAULT : fLibrary;
michael@0 31 }
michael@0 32 private:
michael@0 33 void* fLibrary;
michael@0 34 };
michael@0 35
michael@0 36 static void* GetProcAddress(const char* name) {
michael@0 37 static GLLoader gLoader;
michael@0 38 return dlsym(gLoader.handle(), name);
michael@0 39 }
michael@0 40
michael@0 41 #define GET_PROC(name) (interface->fFunctions.f ## name = ((GrGL ## name ## Proc) GetProcAddress("gl" #name)))
michael@0 42 #define GET_PROC_SUFFIX(name, suffix) (interface->fFunctions.f ## name = ((GrGL ## name ## Proc) GetProcAddress("gl" #name #suffix)))
michael@0 43
michael@0 44 const GrGLInterface* GrGLCreateNativeInterface() {
michael@0 45
michael@0 46 GrGLGetStringProc glGetString = (GrGLGetStringProc) GetProcAddress("glGetString");
michael@0 47 GrGLGetStringiProc glGetStringi = (GrGLGetStringiProc) GetProcAddress("glGetStringi");
michael@0 48 GrGLGetIntegervProc glGetIntegerv = (GrGLGetIntegervProc) GetProcAddress("glGetIntegerv");
michael@0 49
michael@0 50 const char* verStr = (const char*) glGetString(GR_GL_VERSION);
michael@0 51 GrGLVersion ver = GrGLGetVersionFromString(verStr);
michael@0 52 GrGLExtensions extensions;
michael@0 53 if (!extensions.init(kGL_GrGLStandard, glGetString, glGetStringi, glGetIntegerv)) {
michael@0 54 return NULL;
michael@0 55 }
michael@0 56
michael@0 57 GrGLInterface* interface = SkNEW(GrGLInterface);
michael@0 58 interface->fStandard = kGL_GrGLStandard;
michael@0 59
michael@0 60 GET_PROC(ActiveTexture);
michael@0 61 GET_PROC(AttachShader);
michael@0 62 GET_PROC(BeginQuery);
michael@0 63 GET_PROC(BindAttribLocation);
michael@0 64 GET_PROC(BindBuffer);
michael@0 65 if (ver >= GR_GL_VER(3,0)) {
michael@0 66 GET_PROC(BindFragDataLocation);
michael@0 67 }
michael@0 68 GET_PROC(BindTexture);
michael@0 69 GET_PROC(BlendFunc);
michael@0 70
michael@0 71 if (ver >= GR_GL_VER(1,4) ||
michael@0 72 extensions.has("GL_ARB_imaging") ||
michael@0 73 extensions.has("GL_EXT_blend_color")) {
michael@0 74 GET_PROC(BlendColor);
michael@0 75 }
michael@0 76
michael@0 77 GET_PROC(BufferData);
michael@0 78 GET_PROC(BufferSubData);
michael@0 79 GET_PROC(Clear);
michael@0 80 GET_PROC(ClearColor);
michael@0 81 GET_PROC(ClearStencil);
michael@0 82 GET_PROC(ColorMask);
michael@0 83 GET_PROC(CompileShader);
michael@0 84 GET_PROC(CompressedTexImage2D);
michael@0 85 GET_PROC(CopyTexSubImage2D);
michael@0 86 GET_PROC(CreateProgram);
michael@0 87 GET_PROC(CreateShader);
michael@0 88 GET_PROC(CullFace);
michael@0 89 GET_PROC(DeleteBuffers);
michael@0 90 GET_PROC(DeleteProgram);
michael@0 91 GET_PROC(DeleteQueries);
michael@0 92 GET_PROC(DeleteShader);
michael@0 93 GET_PROC(DeleteTextures);
michael@0 94 GET_PROC(DepthMask);
michael@0 95 GET_PROC(Disable);
michael@0 96 GET_PROC(DisableVertexAttribArray);
michael@0 97 GET_PROC(DrawArrays);
michael@0 98 GET_PROC(DrawBuffer);
michael@0 99 GET_PROC(DrawBuffers);
michael@0 100 GET_PROC(DrawElements);
michael@0 101 GET_PROC(Enable);
michael@0 102 GET_PROC(EnableVertexAttribArray);
michael@0 103 GET_PROC(EndQuery);
michael@0 104 GET_PROC(Finish);
michael@0 105 GET_PROC(Flush);
michael@0 106 GET_PROC(FrontFace);
michael@0 107 GET_PROC(GenBuffers);
michael@0 108 GET_PROC(GenerateMipmap);
michael@0 109 GET_PROC(GenQueries);
michael@0 110 GET_PROC(GetBufferParameteriv);
michael@0 111 GET_PROC(GetError);
michael@0 112 GET_PROC(GetIntegerv);
michael@0 113 GET_PROC(GetProgramInfoLog);
michael@0 114 GET_PROC(GetProgramiv);
michael@0 115 GET_PROC(GetQueryiv);
michael@0 116 GET_PROC(GetQueryObjectiv);
michael@0 117 GET_PROC(GetQueryObjectuiv);
michael@0 118 GET_PROC(GetShaderInfoLog);
michael@0 119 GET_PROC(GetShaderiv);
michael@0 120 GET_PROC(GetString);
michael@0 121 GET_PROC(GetStringi);
michael@0 122 GET_PROC(GetTexLevelParameteriv);
michael@0 123 GET_PROC(GenTextures);
michael@0 124 GET_PROC(GetUniformLocation);
michael@0 125 GET_PROC(LineWidth);
michael@0 126 GET_PROC(LinkProgram);
michael@0 127 GET_PROC(LoadIdentity);
michael@0 128 GET_PROC(LoadMatrixf);
michael@0 129 GET_PROC(MapBuffer);
michael@0 130 GET_PROC(MatrixMode);
michael@0 131 GET_PROC(PixelStorei);
michael@0 132 GET_PROC(ReadBuffer);
michael@0 133 GET_PROC(ReadPixels);
michael@0 134 GET_PROC(Scissor);
michael@0 135 GET_PROC(ShaderSource);
michael@0 136 GET_PROC(StencilFunc);
michael@0 137 GET_PROC(StencilFuncSeparate);
michael@0 138 GET_PROC(StencilMask);
michael@0 139 GET_PROC(StencilMaskSeparate);
michael@0 140 GET_PROC(StencilOp);
michael@0 141 GET_PROC(StencilOpSeparate);
michael@0 142 GET_PROC(TexGenfv);
michael@0 143 GET_PROC(TexGeni);
michael@0 144 GET_PROC(TexImage2D);
michael@0 145 GET_PROC(TexParameteri);
michael@0 146 GET_PROC(TexParameteriv);
michael@0 147 if (ver >= GR_GL_VER(4,2) || extensions.has("GL_ARB_texture_storage")) {
michael@0 148 GET_PROC(TexStorage2D);
michael@0 149 } else if (extensions.has("GL_EXT_texture_storage")) {
michael@0 150 GET_PROC_SUFFIX(TexStorage2D, EXT);
michael@0 151 }
michael@0 152 GET_PROC(TexSubImage2D);
michael@0 153 GET_PROC(Uniform1f);
michael@0 154 GET_PROC(Uniform1i);
michael@0 155 GET_PROC(Uniform1fv);
michael@0 156 GET_PROC(Uniform1iv);
michael@0 157 GET_PROC(Uniform2f);
michael@0 158 GET_PROC(Uniform2i);
michael@0 159 GET_PROC(Uniform2fv);
michael@0 160 GET_PROC(Uniform2iv);
michael@0 161 GET_PROC(Uniform3f);
michael@0 162 GET_PROC(Uniform3i);
michael@0 163 GET_PROC(Uniform3fv);
michael@0 164 GET_PROC(Uniform3iv);
michael@0 165 GET_PROC(Uniform4f);
michael@0 166 GET_PROC(Uniform4i);
michael@0 167 GET_PROC(Uniform4fv);
michael@0 168 GET_PROC(Uniform4iv);
michael@0 169 GET_PROC(Uniform4fv);
michael@0 170 GET_PROC(UniformMatrix2fv);
michael@0 171 GET_PROC(UniformMatrix3fv);
michael@0 172 GET_PROC(UniformMatrix4fv);
michael@0 173 GET_PROC(UnmapBuffer);
michael@0 174 GET_PROC(UseProgram);
michael@0 175 GET_PROC(VertexAttrib4fv);
michael@0 176 GET_PROC(VertexAttribPointer);
michael@0 177 GET_PROC(Viewport);
michael@0 178
michael@0 179 if (ver >= GR_GL_VER(3,0) || extensions.has("GL_ARB_vertex_array_object")) {
michael@0 180 // no ARB suffix for GL_ARB_vertex_array_object
michael@0 181 GET_PROC(BindVertexArray);
michael@0 182 GET_PROC(DeleteVertexArrays);
michael@0 183 GET_PROC(GenVertexArrays);
michael@0 184 }
michael@0 185
michael@0 186 if (ver >= GR_GL_VER(3,3) || extensions.has("GL_ARB_timer_query")) {
michael@0 187 // ARB extension doesn't use the ARB suffix on the function name
michael@0 188 GET_PROC(QueryCounter);
michael@0 189 GET_PROC(GetQueryObjecti64v);
michael@0 190 GET_PROC(GetQueryObjectui64v);
michael@0 191 } else if (extensions.has("GL_EXT_timer_query")) {
michael@0 192 GET_PROC_SUFFIX(GetQueryObjecti64v, EXT);
michael@0 193 GET_PROC_SUFFIX(GetQueryObjectui64v, EXT);
michael@0 194 }
michael@0 195
michael@0 196 if (ver >= GR_GL_VER(3,0) || extensions.has("GL_ARB_framebuffer_object")) {
michael@0 197 // ARB extension doesn't use the ARB suffix on the function names
michael@0 198 GET_PROC(GenFramebuffers);
michael@0 199 GET_PROC(GetFramebufferAttachmentParameteriv);
michael@0 200 GET_PROC(GetRenderbufferParameteriv);
michael@0 201 GET_PROC(BindFramebuffer);
michael@0 202 GET_PROC(FramebufferTexture2D);
michael@0 203 GET_PROC(CheckFramebufferStatus);
michael@0 204 GET_PROC(DeleteFramebuffers);
michael@0 205 GET_PROC(RenderbufferStorage);
michael@0 206 GET_PROC(GenRenderbuffers);
michael@0 207 GET_PROC(DeleteRenderbuffers);
michael@0 208 GET_PROC(FramebufferRenderbuffer);
michael@0 209 GET_PROC(BindRenderbuffer);
michael@0 210 GET_PROC(RenderbufferStorageMultisample);
michael@0 211 GET_PROC(BlitFramebuffer);
michael@0 212 } else {
michael@0 213 if (extensions.has("GL_EXT_framebuffer_object")) {
michael@0 214 GET_PROC_SUFFIX(GenFramebuffers, EXT);
michael@0 215 GET_PROC_SUFFIX(GetFramebufferAttachmentParameteriv, EXT);
michael@0 216 GET_PROC_SUFFIX(GetRenderbufferParameteriv, EXT);
michael@0 217 GET_PROC_SUFFIX(BindFramebuffer, EXT);
michael@0 218 GET_PROC_SUFFIX(FramebufferTexture2D, EXT);
michael@0 219 GET_PROC_SUFFIX(CheckFramebufferStatus, EXT);
michael@0 220 GET_PROC_SUFFIX(DeleteFramebuffers, EXT);
michael@0 221 GET_PROC_SUFFIX(RenderbufferStorage, EXT);
michael@0 222 GET_PROC_SUFFIX(GenRenderbuffers, EXT);
michael@0 223 GET_PROC_SUFFIX(DeleteRenderbuffers, EXT);
michael@0 224 GET_PROC_SUFFIX(FramebufferRenderbuffer, EXT);
michael@0 225 GET_PROC_SUFFIX(BindRenderbuffer, EXT);
michael@0 226 }
michael@0 227 if (extensions.has("GL_EXT_framebuffer_multisample")) {
michael@0 228 GET_PROC_SUFFIX(RenderbufferStorageMultisample, EXT);
michael@0 229 }
michael@0 230 if (extensions.has("GL_EXT_framebuffer_blit")) {
michael@0 231 GET_PROC_SUFFIX(BlitFramebuffer, EXT);
michael@0 232 }
michael@0 233 }
michael@0 234 if (ver >= GR_GL_VER(3,3) || extensions.has("GL_ARB_blend_func_extended")) {
michael@0 235 // ARB extension doesn't use the ARB suffix on the function name
michael@0 236 GET_PROC(BindFragDataLocationIndexed);
michael@0 237 }
michael@0 238
michael@0 239 if (extensions.has("GL_EXT_debug_marker")) {
michael@0 240 GET_PROC_SUFFIX(InsertEventMarker, EXT);
michael@0 241 GET_PROC_SUFFIX(PushGroupMarker, EXT);
michael@0 242 GET_PROC_SUFFIX(PopGroupMarker, EXT);
michael@0 243 }
michael@0 244
michael@0 245 interface->fExtensions.swap(&extensions);
michael@0 246 return interface;
michael@0 247 }

mercurial