author Sam Lantinga <>
Sun, 08 Jan 2012 02:23:37 -0500
changeset 6188 e82023802002
child 6190 519380462400
permissions -rw-r--r--
Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11

Scott Percival 2011-07-03 06:41:51 PDT

This submission is aimed at making life easier for OpenGL ES capable devices
running a X11 stack (e.g. Maemo, Meego, TrimSlice, other ARM SoC boards not
running Android). SDL's Pandora support already has the neccesary GLES-to-X11
glue code, however it's all ghetto'd off in Makefile.pandora and not very

The patch:
- adds an awesome --enable-video-opengles option to configure
- re-modifies the opengles and opengles2 SDL_renderers to use function pointers
- no idea why this was removed?
- for SDL_Renderers, links in libGLESv1_CM, libGLES_CM (for PowerVR fans) or
libGLESv2 at runtime
- links in at runtime - the old code made an assumption that
eglFunctions could be pulled from the active GLES library, PowerVR for one
doesn't let you do that with their libGLESv2
- allows you to pick which of GLES v1 or v2 to load via

So far I've tested this on a Nokia N900 (OMAP 3430/SGX 530 running Maemo 5) and
a Toshiba AC100 (Tegra 2 running Ubuntu 10.10). I haven't tested it on... well,
everything that isn't those two, such as a Pandora, iOS or Android device. The
Pandora specific code should be kept intact (fingers crossed), and nothing
painfully drastic has been added to the SDL_renderers. The library loading
sequence in SDL_x11opengles has been updated to accomodate both NVIDIA's
propensity to let developers get away with murder and PowerVR's alternative of
punishing every missed step.

The test apps work okay with GLES or GLES2 as the renderer. For some reason
alpha blending doesn't seem to work on the Tegra 2; last week NVIDIA pushed out
a new set of X11 GLES drivers, so I'll try and investigate once I upgrade
those. Also, this patch adds things to, include/
and test/ I didn't know what the policy was re. committing
generated spaghetti from autotools, so ./ has to be run again. Sorry.

I think that's about everything, let me know if there's anything I've
     1 SDL_PROC(void, glBindTexture, (GLenum, GLuint))
     2 SDL_PROC(void, glBlendFunc, (GLenum, GLenum))
     3 SDL_PROC(void, glClear, (GLbitfield))
     4 SDL_PROC(void, glClearColor, (GLclampf, GLclampf, GLclampf, GLclampf))
     5 SDL_PROC(void, glColor4f, (GLfloat, GLfloat, GLfloat, GLfloat))
     6 SDL_PROC(void, glDeleteTextures, (GLsizei, const GLuint *))
     7 SDL_PROC(void, glDisable, (GLenum))
     8 SDL_PROC(void, glDisableClientState, (GLenum array))
     9 SDL_PROC(void, glDrawArrays, (GLenum, GLint, GLsizei))
    10 SDL_PROC(void, glDrawTexiOES, (GLint, GLint, GLint, GLint, GLint))
    11 SDL_PROC(void, glEnable, (GLenum))
    12 SDL_PROC(void, glEnableClientState, (GLenum))
    13 SDL_PROC(void, glGenTextures, (GLsizei, GLuint *))
    14 SDL_PROC(GLenum, glGetError, (void))
    15 SDL_PROC(void, glGetIntegerv, (GLenum, GLint *))
    16 SDL_PROC(void, glLoadIdentity, (void))
    17 SDL_PROC(void, glMatrixMode, (GLenum))
    18 SDL_PROC(void, glOrthof, (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat))
    19 SDL_PROC(void, glPixelStorei, (GLenum, GLint))
    20 SDL_PROC(void, glReadPixels, (GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLvoid*))
    21 SDL_PROC(void, glTexCoordPointer, (GLint, GLenum, GLsizei, const GLvoid *))
    22 SDL_PROC(void, glTexEnvf, (GLenum, GLenum, GLfloat))
    23 SDL_PROC(void, glTexImage2D, (GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *))
    24 SDL_PROC(void, glTexParameteri, (GLenum, GLenum, GLint))
    25 SDL_PROC(void, glTexParameteriv, (GLenum, GLenum, const GLint *))
    26 SDL_PROC(void, glTexSubImage2D, (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *))
    27 SDL_PROC(void, glVertexPointer, (GLint, GLenum, GLsizei, const GLvoid *))
    28 SDL_PROC(void, glViewport, (GLint, GLint, GLsizei, GLsizei))
    30 /* vi: set ts=4 sw=4 expandtab: */