189 #endif |
189 #endif |
190 |
190 |
191 |
191 |
192 bool qt_resolve_buffer_extensions(QGLContext *ctx) |
192 bool qt_resolve_buffer_extensions(QGLContext *ctx) |
193 { |
193 { |
194 if (glMapBufferARB && glUnmapBufferARB |
194 #if defined(QGL_RESOLVE_BUFFER_FUNCS) |
195 #if !defined(QT_OPENGL_ES_2) |
195 if (glBindBuffer && glDeleteBuffers && glGenBuffers && glBufferData |
196 && glBindBuffer && glDeleteBuffers && glGenBuffers && glBufferData |
196 && glBufferSubData && glGetBufferParameteriv) |
197 #endif |
197 return true; |
198 ) |
198 #endif |
199 return true; |
199 |
200 |
200 #if defined(QGL_RESOLVE_BUFFER_FUNCS) |
201 #if !defined(QT_OPENGL_ES_2) |
|
202 glBindBuffer = (_glBindBuffer) qt_gl_getProcAddressARB(ctx, "glBindBuffer"); |
201 glBindBuffer = (_glBindBuffer) qt_gl_getProcAddressARB(ctx, "glBindBuffer"); |
203 glDeleteBuffers = (_glDeleteBuffers) qt_gl_getProcAddressARB(ctx, "glDeleteBuffers"); |
202 glDeleteBuffers = (_glDeleteBuffers) qt_gl_getProcAddressARB(ctx, "glDeleteBuffers"); |
204 glGenBuffers = (_glGenBuffers) qt_gl_getProcAddressARB(ctx, "glGenBuffers"); |
203 glGenBuffers = (_glGenBuffers) qt_gl_getProcAddressARB(ctx, "glGenBuffers"); |
205 glBufferData = (_glBufferData) qt_gl_getProcAddressARB(ctx, "glBufferData"); |
204 glBufferData = (_glBufferData) qt_gl_getProcAddressARB(ctx, "glBufferData"); |
|
205 glBufferSubData = (_glBufferSubData) qt_gl_getProcAddressARB(ctx, "glBufferSubData"); |
|
206 glGetBufferSubData = (_glGetBufferSubData) qt_gl_getProcAddressARB(ctx, "glGetBufferSubData"); |
|
207 glGetBufferParameteriv = (_glGetBufferParameteriv) qt_gl_getProcAddressARB(ctx, "glGetBufferParameteriv"); |
206 #endif |
208 #endif |
207 glMapBufferARB = (_glMapBufferARB) qt_gl_getProcAddressARB(ctx, "glMapBuffer"); |
209 glMapBufferARB = (_glMapBufferARB) qt_gl_getProcAddressARB(ctx, "glMapBuffer"); |
208 glUnmapBufferARB = (_glUnmapBufferARB) qt_gl_getProcAddressARB(ctx, "glUnmapBuffer"); |
210 glUnmapBufferARB = (_glUnmapBufferARB) qt_gl_getProcAddressARB(ctx, "glUnmapBuffer"); |
209 |
211 |
210 return glMapBufferARB |
212 #if defined(QGL_RESOLVE_BUFFER_FUNCS) |
211 && glUnmapBufferARB |
213 return glBindBuffer |
212 #if !defined(QT_OPENGL_ES_2) |
|
213 && glBindBuffer |
|
214 && glDeleteBuffers |
214 && glDeleteBuffers |
215 && glGenBuffers |
215 && glGenBuffers |
216 && glBufferData |
216 && glBufferData |
217 #endif |
217 && glBufferSubData |
218 ; |
218 && glGetBufferParameteriv; |
219 } |
219 // glGetBufferSubData() is optional |
|
220 #else |
|
221 return true; |
|
222 #endif |
|
223 } |
|
224 |
|
225 #ifndef QT_NO_EGL |
|
226 bool qt_resolve_eglimage_gl_extensions(QGLContext *ctx) |
|
227 { |
|
228 if (glEGLImageTargetTexture2DOES || glEGLImageTargetRenderbufferStorageOES) |
|
229 return true; |
|
230 glEGLImageTargetTexture2DOES = (_glEGLImageTargetTexture2DOES) ctx->getProcAddress(QLatin1String("glEGLImageTargetTexture2DOES")); |
|
231 glEGLImageTargetRenderbufferStorageOES = (_glEGLImageTargetRenderbufferStorageOES) ctx->getProcAddress(QLatin1String("glEGLImageTargetRenderbufferStorageOES")); |
|
232 return glEGLImageTargetTexture2DOES && glEGLImageTargetRenderbufferStorageOES; |
|
233 } |
|
234 #endif |
220 |
235 |
221 bool qt_resolve_glsl_extensions(QGLContext *ctx) |
236 bool qt_resolve_glsl_extensions(QGLContext *ctx) |
222 { |
237 { |
|
238 |
223 #if defined(QT_OPENGL_ES_2) |
239 #if defined(QT_OPENGL_ES_2) |
224 // The GLSL shader functions are always present in OpenGL/ES 2.0. |
240 // The GLSL shader functions are always present in OpenGL/ES 2.0. |
225 // The only exceptions are glGetProgramBinaryOES and glProgramBinaryOES. |
241 // The only exceptions are glGetProgramBinaryOES and glProgramBinaryOES. |
226 if (!QGLContextPrivate::extensionFuncs(ctx).qt_glslResolved) { |
242 if (!QGLContextPrivate::extensionFuncs(ctx).qt_glslResolved) { |
227 glGetProgramBinaryOES = (_glGetProgramBinaryOES) ctx->getProcAddress(QLatin1String("glGetProgramBinaryOES")); |
243 glGetProgramBinaryOES = (_glGetProgramBinaryOES) ctx->getProcAddress(QLatin1String("glGetProgramBinaryOES")); |
230 } |
246 } |
231 return true; |
247 return true; |
232 #else |
248 #else |
233 if (glCreateShader) |
249 if (glCreateShader) |
234 return true; |
250 return true; |
|
251 |
|
252 // Geometry shaders are optional... |
|
253 glProgramParameteriEXT = (_glProgramParameteriEXT) ctx->getProcAddress(QLatin1String("glProgramParameteriEXT")); |
|
254 glFramebufferTextureEXT = (_glFramebufferTextureEXT) ctx->getProcAddress(QLatin1String("glFramebufferTextureEXT")); |
|
255 glFramebufferTextureLayerEXT = (_glFramebufferTextureLayerEXT) ctx->getProcAddress(QLatin1String("glFramebufferTextureLayerEXT")); |
|
256 glFramebufferTextureFaceEXT = (_glFramebufferTextureFaceEXT) ctx->getProcAddress(QLatin1String("glFramebufferTextureFaceEXT")); |
235 |
257 |
236 glCreateShader = (_glCreateShader) ctx->getProcAddress(QLatin1String("glCreateShader")); |
258 glCreateShader = (_glCreateShader) ctx->getProcAddress(QLatin1String("glCreateShader")); |
237 if (glCreateShader) { |
259 if (glCreateShader) { |
238 glShaderSource = (_glShaderSource) ctx->getProcAddress(QLatin1String("glShaderSource")); |
260 glShaderSource = (_glShaderSource) ctx->getProcAddress(QLatin1String("glShaderSource")); |
239 glShaderBinary = (_glShaderBinary) ctx->getProcAddress(QLatin1String("glShaderBinary")); |
261 glShaderBinary = (_glShaderBinary) ctx->getProcAddress(QLatin1String("glShaderBinary")); |