1 /*------------------------------------------------------------------------- 2 * drawElements Quality Program OpenGL Utilities 3 * --------------------------------------------- 4 * 5 * Copyright 2014 The Android Open Source Project 6 * 7 * Licensed under the Apache License, Version 2.0 (the "License"); 8 * you may not use this file except in compliance with the License. 9 * You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 * 19 *//*! 20 * \file 21 * \brief Function table initialization. 22 *//*--------------------------------------------------------------------*/ 23 24 #include "glwInitFunctions.hpp" 25 #include "deSTLUtil.hpp" 26 27 #include <string> 28 #include <set> 29 30 namespace glw 31 { 32 33 // \todo [2014-03-19 pyry] Replace this with more generic system based on upstream XML spec desc. 34 35 void initES20 (Functions* gl, const FunctionLoader* loader) 36 { 37 #include "glwInitES20.inl" 38 } 39 40 void initES30 (Functions* gl, const FunctionLoader* loader) 41 { 42 #include "glwInitES30.inl" 43 } 44 45 void initES31 (Functions* gl, const FunctionLoader* loader) 46 { 47 #include "glwInitES31.inl" 48 } 49 50 void initGL30Core (Functions* gl, const FunctionLoader* loader) 51 { 52 #include "glwInitGL30.inl" 53 } 54 55 void initGL31Core (Functions* gl, const FunctionLoader* loader) 56 { 57 #include "glwInitGL31.inl" 58 } 59 60 void initGL32Core (Functions* gl, const FunctionLoader* loader) 61 { 62 #include "glwInitGL32.inl" 63 } 64 65 void initGL33Core (Functions* gl, const FunctionLoader* loader) 66 { 67 #include "glwInitGL33.inl" 68 } 69 70 void initGL40Core (Functions* gl, const FunctionLoader* loader) 71 { 72 #include "glwInitGL40.inl" 73 } 74 75 void initGL41Core (Functions* gl, const FunctionLoader* loader) 76 { 77 #include "glwInitGL41.inl" 78 } 79 80 void initGL42Core (Functions* gl, const FunctionLoader* loader) 81 { 82 #include "glwInitGL42.inl" 83 } 84 85 void initGL43Core (Functions* gl, const FunctionLoader* loader) 86 { 87 #include "glwInitGL43.inl" 88 } 89 90 void initGL44Core (Functions* gl, const FunctionLoader* loader) 91 { 92 #include "glwInitGL44.inl" 93 } 94 95 void initExtensionsShared (Functions* gl, const FunctionLoader* loader, const std::set<std::string>& extensions) 96 { 97 if (de::contains(extensions, "GL_KHR_blend_equation_advanced")) 98 { 99 gl->blendBarrierKHR = (glBlendBarrierKHRFunc) loader->get("glBlendBarrierKHR"); 100 } 101 } 102 103 void initExtensionsGL (Functions* gl, const FunctionLoader* loader, int numExtensions, const char* const* extensions) 104 { 105 using std::string; 106 using std::set; 107 108 const set<string> extSet(extensions, extensions+numExtensions); 109 110 initExtensionsShared(gl, loader, extSet); 111 112 if (de::contains(extSet, "GL_KHR_debug")) 113 { 114 /* 115 From the spec: 116 NOTE: when implemented in an OpenGL ES context, all entry points defined 117 by this extension must have a "KHR" suffix. When implemented in an 118 OpenGL context, all entry points must have NO suffix, as shown below. 119 */ 120 gl->debugMessageControl = (glDebugMessageControlFunc) loader->get("glDebugMessageControl"); 121 gl->debugMessageInsert = (glDebugMessageInsertFunc) loader->get("glDebugMessageInsert"); 122 gl->debugMessageCallback= (glDebugMessageCallbackFunc) loader->get("glDebugMessageCallback"); 123 gl->getDebugMessageLog = (glGetDebugMessageLogFunc) loader->get("glGetDebugMessageLog"); 124 gl->getPointerv = (glGetPointervFunc) loader->get("glGetPointerv"); 125 gl->pushDebugGroup = (glPushDebugGroupFunc) loader->get("glPushDebugGroup"); 126 gl->popDebugGroup = (glPopDebugGroupFunc) loader->get("glPopDebugGroup"); 127 gl->objectLabel = (glObjectLabelFunc) loader->get("glObjectLabel"); 128 gl->getObjectLabel = (glGetObjectLabelFunc) loader->get("glGetObjectLabel"); 129 gl->objectPtrLabel = (glObjectPtrLabelFunc) loader->get("glObjectPtrLabel"); 130 gl->getObjectPtrLabel = (glGetObjectPtrLabelFunc) loader->get("glGetObjectPtrLabel"); 131 } 132 } 133 134 void initExtensionsES (Functions* gl, const FunctionLoader* loader, int numExtensions, const char* const* extensions) 135 { 136 using std::string; 137 using std::set; 138 139 const set<string> extSet(extensions, extensions+numExtensions); 140 141 initExtensionsShared(gl, loader, extSet); 142 143 if (de::contains(extSet, "GL_OES_sample_shading")) 144 { 145 gl->minSampleShading = (glMinSampleShadingFunc) loader->get("glMinSampleShadingOES"); 146 } 147 148 if (de::contains(extSet, "GL_OES_texture_storage_multisample_2d_array")) 149 { 150 gl->texStorage3DMultisample = (glTexStorage3DMultisampleFunc) loader->get("glTexStorage3DMultisampleOES"); 151 } 152 153 if (de::contains(extSet, "GL_KHR_debug")) 154 { 155 /* 156 From the spec: 157 NOTE: when implemented in an OpenGL ES context, all entry points defined 158 by this extension must have a "KHR" suffix. When implemented in an 159 OpenGL context, all entry points must have NO suffix, as shown below. 160 */ 161 gl->debugMessageControl = (glDebugMessageControlFunc) loader->get("glDebugMessageControlKHR"); 162 gl->debugMessageInsert = (glDebugMessageInsertFunc) loader->get("glDebugMessageInsertKHR"); 163 gl->debugMessageCallback = (glDebugMessageCallbackFunc) loader->get("glDebugMessageCallbackKHR"); 164 gl->getDebugMessageLog = (glGetDebugMessageLogFunc) loader->get("glGetDebugMessageLogKHR"); 165 gl->getPointerv = (glGetPointervFunc) loader->get("glGetPointervKHR"); 166 gl->pushDebugGroup = (glPushDebugGroupFunc) loader->get("glPushDebugGroupKHR"); 167 gl->popDebugGroup = (glPopDebugGroupFunc) loader->get("glPopDebugGroupKHR"); 168 gl->objectLabel = (glObjectLabelFunc) loader->get("glObjectLabelKHR"); 169 gl->getObjectLabel = (glGetObjectLabelFunc) loader->get("glGetObjectLabelKHR"); 170 gl->objectPtrLabel = (glObjectPtrLabelFunc) loader->get("glObjectPtrLabelKHR"); 171 gl->getObjectPtrLabel = (glGetObjectPtrLabelFunc) loader->get("glGetObjectPtrLabelKHR"); 172 } 173 174 if (de::contains(extSet, "GL_EXT_tessellation_shader")) 175 { 176 gl->patchParameteri = (glPatchParameteriFunc) loader->get("glPatchParameteriEXT"); 177 } 178 179 if (de::contains(extSet, "GL_EXT_geometry_shader")) 180 { 181 gl->framebufferTexture = (glFramebufferTextureFunc) loader->get("glFramebufferTextureEXT"); 182 } 183 184 if (de::contains(extSet, "GL_EXT_texture_buffer")) 185 { 186 gl->texBuffer = (glTexBufferFunc) loader->get("glTexBufferEXT"); 187 gl->texBufferRange = (glTexBufferRangeFunc) loader->get("glTexBufferRangeEXT"); 188 } 189 } 190 191 } // glw 192