1 /* xscreensaver, Copyright (c) 2012-2019 Jamie Zawinski <jwz@jwz.org> 2 * 3 * Permission to use, copy, modify, distribute, and sell this software and its 4 * documentation for any purpose is hereby granted without fee, provided that 5 * the above copyright notice appear in all copies and that both that 6 * copyright notice and this permission notice appear in supporting 7 * documentation. No representations are made about the suitability of this 8 * software for any purpose. It is provided "as is" without express or 9 * implied warranty. 10 */ 11 12 /* A compatibility shim to allow OpenGL 1.3 source code to work in an 13 OpenGLES environment, where almost every OpenGL 1.3 function has 14 been "deprecated". See jwzgles.c for details. 15 */ 16 17 #ifndef __JWZGLES_I_H__ 18 #define __JWZGLES_I_H__ 19 20 #ifdef GL_VERSION_ES_CM_1_0 /* compiling against OpenGLES 1.x */ 21 22 /* These OpenGL 1.3 constants are not present in OpenGLES 1. 23 Fortunately, it looks like they didn't re-use any of the numbers, 24 so we can just keep using the OpenGL 1.3 values. I'm actually 25 kind of shocked that the GLES folks passed up that opportunity 26 for further clusterfuckery. 27 */ 28 # define GLdouble double 29 30 # define GL_ACCUM_BUFFER_BIT 0x00000200 31 # define GL_ALL_ATTRIB_BITS 0x000FFFFF 32 # define GL_AUTO_NORMAL 0x0D80 33 # define GL_BLEND_SRC_ALPHA 0x80CB 34 # define GL_C3F_V3F 0x2A24 35 # define GL_C4F_N3F_V3F 0x2A26 36 # define GL_C4UB_V2F 0x2A22 37 # define GL_C4UB_V3F 0x2A23 38 # define GL_CLAMP 0x2900 39 # define GL_COLOR_BUFFER_BIT 0x00004000 40 # define GL_COLOR_MATERIAL_FACE 0x0B55 41 # define GL_COLOR_MATERIAL_PARAMETER 0x0B56 42 # define GL_COMPILE 0x1300 43 # define GL_CURRENT_BIT 0x00000001 44 # define GL_DEPTH_BUFFER_BIT 0x00000100 45 # define GL_DOUBLEBUFFER 0x0C32 46 # define GL_ENABLE_BIT 0x00002000 47 # define GL_EVAL_BIT 0x00010000 48 # define GL_EYE_LINEAR 0x2400 49 # define GL_EYE_PLANE 0x2502 50 # define GL_FEEDBACK 0x1C01 51 # define GL_FILL 0x1B02 52 # define GL_FOG_BIT 0x00000080 53 # define GL_HINT_BIT 0x00008000 54 # define GL_INTENSITY 0x8049 55 # define GL_LIGHTING_BIT 0x00000040 56 # define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 57 # define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 58 # define GL_LINE 0x1B01 59 # define GL_LINE_BIT 0x00000004 60 # define GL_LIST_BIT 0x00020000 61 # define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF 62 # define GL_N3F_V3F 0x2A25 63 # define GL_OBJECT_LINEAR 0x2401 64 # define GL_OBJECT_PLANE 0x2501 65 # define GL_PIXEL_MODE_BIT 0x00000020 66 # define GL_POINT_BIT 0x00000002 67 # define GL_POLYGON 0x0009 68 # define GL_POLYGON_BIT 0x00000008 69 # define GL_POLYGON_MODE 0x0B40 70 # define GL_POLYGON_SMOOTH 0x0B41 71 # define GL_POLYGON_STIPPLE 0x0B42 72 # define GL_POLYGON_STIPPLE_BIT 0x00000010 73 # define GL_Q 0x2003 74 # define GL_QUADS 0x0007 75 # define GL_QUAD_STRIP 0x0008 76 # define GL_R 0x2002 77 # define GL_RENDER 0x1C00 78 # define GL_RGBA_MODE 0x0C31 79 # define GL_S 0x2000 80 # define GL_SCISSOR_BIT 0x00080000 81 # define GL_SELECT 0x1C02 82 # define GL_SEPARATE_SPECULAR_COLOR 0x81FA 83 # define GL_SINGLE_COLOR 0x81F9 84 # define GL_SPHERE_MAP 0x2402 85 # define GL_STENCIL_BUFFER_BIT 0x00000400 86 # define GL_T 0x2001 87 # define GL_T2F_C3F_V3F 0x2A2A 88 # define GL_T2F_C4F_N3F_V3F 0x2A2C 89 # define GL_T2F_C4UB_V3F 0x2A29 90 # define GL_T2F_N3F_V3F 0x2A2B 91 # define GL_T2F_V3F 0x2A27 92 # define GL_T4F_C4F_N3F_V4F 0x2A2D 93 # define GL_T4F_V4F 0x2A28 94 # define GL_TEXTURE_1D 0x0DE0 95 # define GL_TEXTURE_ALPHA_SIZE 0x805F 96 # define GL_TEXTURE_BIT 0x00040000 97 # define GL_TEXTURE_BLUE_SIZE 0x805E 98 # define GL_TEXTURE_BORDER 0x1005 99 # define GL_TEXTURE_BORDER_COLOR 0x1004 100 # define GL_TEXTURE_COMPONENTS 0x1003 101 # define GL_TEXTURE_GEN_MODE 0x2500 102 # define GL_TEXTURE_GEN_Q 0x0C63 103 # define GL_TEXTURE_GEN_R 0x0C62 104 # define GL_TEXTURE_GEN_S 0x0C60 105 # define GL_TEXTURE_GEN_T 0x0C61 106 # define GL_TEXTURE_GREEN_SIZE 0x805D 107 # define GL_TEXTURE_HEIGHT 0x1001 108 # define GL_TEXTURE_INTENSITY_SIZE 0x8061 109 # define GL_TEXTURE_LUMINANCE_SIZE 0x8060 110 # define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE 111 # define GL_TEXTURE_RED_SIZE 0x805C 112 # define GL_TEXTURE_WIDTH 0x1000 113 # define GL_TRANSFORM_BIT 0x00001000 114 # define GL_UNPACK_ROW_LENGTH 0x0CF2 115 # define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 116 # define GL_V2F 0x2A20 117 # define GL_V3F 0x2A21 118 # define GL_VIEWPORT_BIT 0x00000800 119 # define GL_INT 0x1404 120 # define GL_DOUBLE 0x140A 121 # define GL_CONSTANT_ALPHA 0x8003 122 123 #endif 124 125 126 typedef struct jwzgles_state jwzgles_state; 127 128 extern jwzgles_state *jwzgles_make_state (void); 129 extern void jwzgles_free_state (void); 130 extern void jwzgles_make_current (jwzgles_state *); 131 132 133 /* Prototypes for the things re-implemented in jwzgles.c 134 */ 135 136 extern int jwzgles_glGenLists (int n); 137 extern void jwzgles_glNewList (int id, int mode); 138 extern void jwzgles_glEndList (void); 139 extern void jwzgles_glDeleteLists (int list, int range); 140 extern void jwzgles_glBegin (int mode); 141 extern void jwzgles_glNormal3fv (const GLfloat *); 142 extern void jwzgles_glNormal3f (GLfloat x, GLfloat y, GLfloat z); 143 extern void jwzgles_glTexCoord1f (GLfloat s); 144 extern void jwzgles_glTexCoord2fv (const GLfloat *); 145 extern void jwzgles_glTexCoord2f (GLfloat s, GLfloat t); 146 extern void jwzgles_glTexCoord3fv (const GLfloat *); 147 extern void jwzgles_glTexCoord3f (GLfloat s, GLfloat t, GLfloat r); 148 extern void jwzgles_glTexCoord4fv (const GLfloat *); 149 extern void jwzgles_glTexCoord4f (GLfloat s, GLfloat t, GLfloat r, GLfloat q); 150 extern void jwzgles_glVertex2f (GLfloat x, GLfloat y); 151 extern void jwzgles_glVertex2dv (const GLdouble *); 152 extern void jwzgles_glVertex2fv (const GLfloat *); 153 extern void jwzgles_glVertex2i (GLint x, GLint y); 154 extern void jwzgles_glVertex3f (GLfloat x, GLfloat y, GLfloat z); 155 extern void jwzgles_glVertex3dv (const GLdouble *); 156 extern void jwzgles_glVertex3fv (const GLfloat *); 157 extern void jwzgles_glVertex3i (GLint x, GLint y, GLint z); 158 extern void jwzgles_glVertex4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w); 159 extern void jwzgles_glVertex4fv (const GLfloat *); 160 extern void jwzgles_glVertex4i (GLint x, GLint y, GLint z, GLint w); 161 extern void jwzgles_glEnd (void); 162 extern void jwzgles_glCallList (int id); 163 extern void jwzgles_glClearIndex(GLfloat c); 164 extern void jwzgles_glBitmap (GLsizei, GLsizei, GLfloat, GLfloat, GLfloat, 165 GLfloat, const GLubyte *); 166 extern void jwzgles_glPushAttrib(int); 167 extern void jwzgles_glPopAttrib(void); 168 169 170 /* These functions are present in both OpenGL 1.3 and in OpenGLES 1, 171 but are allowed within glNewList/glEndList, so we must wrap them 172 to allow them to be recorded. 173 */ 174 extern void jwzgles_glActiveTexture (GLuint); 175 extern void jwzgles_glBindTexture (GLuint, GLuint); 176 extern void jwzgles_glBlendFunc (GLuint, GLuint); 177 extern void jwzgles_glBlendColor (GLfloat, GLfloat, GLfloat, GLfloat); 178 extern void jwzgles_glClear (GLuint); 179 extern void jwzgles_glClearColor (GLclampf, GLclampf, GLclampf, GLclampf); 180 extern void jwzgles_glClearStencil (GLuint); 181 extern void jwzgles_glColorMask (GLuint, GLuint, GLuint, GLuint); 182 extern void jwzgles_glCullFace (GLuint); 183 extern void jwzgles_glDepthFunc (GLuint); 184 extern void jwzgles_glDepthMask (GLuint); 185 extern void jwzgles_glDisable (GLuint); 186 extern void jwzgles_glDrawArrays (GLuint, GLuint, GLuint); 187 extern GLboolean jwzgles_glIsEnabled (GLuint); 188 extern void jwzgles_glEnable (GLuint); 189 extern void jwzgles_glFrontFace (GLuint); 190 extern void jwzgles_glHint (GLuint, GLuint); 191 extern void jwzgles_glLineWidth (GLfloat); 192 extern void jwzgles_glLoadIdentity (void); 193 extern void jwzgles_glLogicOp (GLuint); 194 extern void jwzgles_glMatrixMode (GLuint); 195 extern void jwzgles_glMultMatrixf (const GLfloat *); 196 extern void jwzgles_glPointSize (GLfloat); 197 extern void jwzgles_glPolygonOffset (GLfloat, GLfloat); 198 extern void jwzgles_glPopMatrix (void); 199 extern void jwzgles_glPushMatrix (void); 200 extern void jwzgles_glScissor (GLuint, GLuint, GLuint, GLuint); 201 extern void jwzgles_glShadeModel (GLuint); 202 extern void jwzgles_glStencilFunc (GLuint, GLuint, GLuint); 203 extern void jwzgles_glStencilMask (GLuint); 204 extern void jwzgles_glStencilOp (GLuint, GLuint, GLuint); 205 extern void jwzgles_glViewport (GLuint, GLuint, GLuint, GLuint); 206 extern void jwzgles_glTranslatef (GLfloat, GLfloat, GLfloat); 207 extern void jwzgles_glRotatef (GLfloat, GLfloat, GLfloat, GLfloat); 208 extern void jwzgles_glRotated (GLdouble, GLdouble x, GLdouble y, GLdouble z); 209 extern void jwzgles_glReadBuffer (GLuint); 210 extern void jwzgles_glScalef (GLfloat, GLfloat, GLfloat); 211 extern void jwzgles_glColor3f (GLfloat, GLfloat, GLfloat); 212 extern void jwzgles_glColor4f (GLfloat, GLfloat, GLfloat, GLfloat); 213 extern void jwzgles_glColor3fv (const GLfloat *); 214 extern void jwzgles_glColor4fv (const GLfloat *); 215 extern void jwzgles_glColor3s (GLshort, GLshort, GLshort); 216 extern void jwzgles_glColor4s (GLshort, GLshort, GLshort, GLshort); 217 extern void jwzgles_glColor3sv (const GLshort *); 218 extern void jwzgles_glColor4sv (const GLshort *); 219 extern void jwzgles_glColor3us (GLushort, GLushort, GLushort); 220 extern void jwzgles_glColor4us (GLushort, GLushort, GLushort, GLushort); 221 extern void jwzgles_glColor3usv (const GLushort *); 222 extern void jwzgles_glColor4usv (const GLushort *); 223 extern void jwzgles_glColor3d (GLdouble, GLdouble, GLdouble); 224 extern void jwzgles_glColor4d (GLdouble, GLdouble, GLdouble, GLdouble); 225 extern void jwzgles_glColor3dv (const GLdouble *); 226 extern void jwzgles_glColor4dv (const GLdouble *); 227 extern void jwzgles_glColor4i (GLint, GLint, GLint, GLint); 228 extern void jwzgles_glColor3i (GLint, GLint, GLint); 229 extern void jwzgles_glColor3iv (const GLint *); 230 extern void jwzgles_glColor4iv (const GLint *); 231 extern void jwzgles_glColor4ui (GLuint, GLuint, GLuint, GLuint); 232 extern void jwzgles_glColor3ui (GLuint, GLuint, GLuint); 233 extern void jwzgles_glColor3uiv (const GLuint *); 234 extern void jwzgles_glColor4uiv (const GLuint *); 235 extern void jwzgles_glColor4b (GLbyte, GLbyte, GLbyte, GLbyte); 236 extern void jwzgles_glColor3b (GLbyte, GLbyte, GLbyte); 237 extern void jwzgles_glColor4bv (const GLbyte *); 238 extern void jwzgles_glColor3bv (const GLbyte *); 239 extern void jwzgles_glColor4ub (GLubyte, GLubyte, GLubyte, GLubyte); 240 extern void jwzgles_glColor3ub (GLubyte, GLubyte, GLubyte); 241 extern void jwzgles_glColor4ubv (const GLubyte *); 242 extern void jwzgles_glColor3ubv (const GLubyte *); 243 extern void jwzgles_glMaterialf (GLuint, GLuint, GLfloat); 244 extern void jwzgles_glMateriali (GLuint, GLuint, GLuint); 245 extern void jwzgles_glMaterialfv (GLuint, GLuint, const GLfloat *); 246 extern void jwzgles_glMaterialiv (GLuint, GLuint, const GLint *); 247 extern void jwzgles_glFinish (void); 248 extern void jwzgles_glFlush (void); 249 extern void jwzgles_glPixelStorei (GLuint, GLuint); 250 extern void jwzgles_glEnableClientState (GLuint); 251 extern void jwzgles_glDisableClientState (GLuint); 252 253 extern void jwzgles_glInitNames (void); 254 extern void jwzgles_glPushName (GLuint); 255 extern GLuint jwzgles_glPopName (void); 256 extern GLuint jwzgles_glRenderMode (GLuint); 257 extern void jwzgles_glSelectBuffer (GLsizei, GLuint *); 258 extern void jwzgles_glLightf (GLenum, GLenum, GLfloat); 259 extern void jwzgles_glLighti (GLenum, GLenum, GLint); 260 extern void jwzgles_glLightfv (GLenum, GLenum, const GLfloat *); 261 extern void jwzgles_glLightiv (GLenum, GLenum, const GLint *); 262 extern void jwzgles_glLightModelf (GLenum, GLfloat); 263 extern void jwzgles_glLightModeli (GLenum, GLint); 264 extern void jwzgles_glLightModelfv (GLenum, const GLfloat *); 265 extern void jwzgles_glLightModeliv (GLenum, const GLint *); 266 extern void jwzgles_glGenTextures (GLuint, GLuint *); 267 extern void jwzgles_glFrustum (GLfloat, GLfloat, GLfloat, GLfloat, 268 GLfloat, GLfloat); 269 extern void jwzgles_glOrtho (GLfloat, GLfloat, GLfloat, GLfloat, 270 GLfloat, GLfloat); 271 extern void jwzgles_glTexImage1D (GLenum target, GLint level, 272 GLint internalFormat, 273 GLsizei width, GLint border, 274 GLenum format, GLenum type, 275 const GLvoid *pixels); 276 extern void jwzgles_glTexImage2D (GLenum target, 277 GLint level, 278 GLint internalFormat, 279 GLsizei width, 280 GLsizei height, 281 GLint border, 282 GLenum format, 283 GLenum type, 284 const GLvoid *data); 285 extern void jwzgles_glTexSubImage2D (GLenum target, GLint level, 286 GLint xoffset, GLint yoffset, 287 GLsizei width, GLsizei height, 288 GLenum format, GLenum type, 289 const GLvoid *pixels); 290 extern void jwzgles_glCopyTexImage2D (GLenum target, GLint level, 291 GLenum internalformat, 292 GLint x, GLint y, 293 GLsizei width, GLsizei height, 294 GLint border); 295 extern void jwzgles_glCopyTexSubImage2D (GLenum target, GLint level, 296 GLint xoff, GLint yoff, 297 GLint x, GLint y, 298 GLsizei width, GLsizei height); 299 extern void jwzgles_glInterleavedArrays (GLenum, GLsizei, const GLvoid *); 300 extern void jwzgles_glTexEnvf (GLuint, GLuint, GLfloat); 301 extern void jwzgles_glTexEnvi (GLuint, GLuint, GLuint); 302 extern void jwzgles_glTexParameterf (GLuint, GLuint, GLfloat); 303 extern void jwzgles_glTexParameteri (GLuint, GLuint, GLuint); 304 extern void jwzgles_glTexGeni (GLenum, GLenum, GLint); 305 extern void jwzgles_glTexGenfv (GLenum, GLenum, const GLfloat *); 306 extern void jwzgles_glGetTexGenfv (GLenum, GLenum, GLfloat *); 307 extern void jwzgles_glRectf (GLfloat, GLfloat, GLfloat, GLfloat); 308 extern void jwzgles_glRecti (GLint, GLint, GLint, GLint); 309 extern void jwzgles_glLightModelfv (GLenum, const GLfloat *); 310 extern void jwzgles_glClearDepth (GLfloat); 311 extern GLboolean jwzgles_glIsList (GLuint); 312 extern void jwzgles_glColorMaterial (GLenum, GLenum); 313 extern void jwzgles_glPolygonMode (GLenum, GLenum); 314 extern void jwzgles_glFogf (GLenum, GLfloat); 315 extern void jwzgles_glFogi (GLenum, GLint); 316 extern void jwzgles_glFogfv (GLenum, const GLfloat *); 317 extern void jwzgles_glFogiv (GLenum, const GLint *); 318 extern void jwzgles_glAlphaFunc (GLenum, GLfloat); 319 extern void jwzgles_glClipPlane (GLenum, const GLdouble *); 320 extern void jwzgles_glDrawBuffer (GLenum); 321 extern void jwzgles_glDeleteTextures (GLuint, const GLuint *); 322 323 extern void jwzgles_gluPerspective (GLdouble fovy, GLdouble aspect, 324 GLdouble near, GLdouble far); 325 extern void jwzgles_gluLookAt (GLfloat eyex, GLfloat eyey, GLfloat eyez, 326 GLfloat centerx, GLfloat centery, 327 GLfloat centerz, 328 GLfloat upx, GLfloat upy, GLfloat upz); 329 extern GLint jwzgles_gluProject (GLdouble objx, GLdouble objy, GLdouble objz, 330 const GLdouble modelMatrix[16], 331 const GLdouble projMatrix[16], 332 const GLint viewport[4], 333 GLdouble *winx, GLdouble *winy, 334 GLdouble *winz); 335 extern int jwzgles_gluBuild2DMipmaps (GLenum target, 336 GLint internalFormat, 337 GLsizei width, 338 GLsizei height, 339 GLenum format, 340 GLenum type, 341 const GLvoid *data); 342 extern GLboolean jwzgles_gluCheckExtension (const GLubyte *ext_name, 343 const GLubyte *ext_string); 344 extern void jwzgles_glGetFloatv (GLenum pname, GLfloat *params); 345 extern void jwzgles_glGetPointerv (GLenum pname, GLvoid **params); 346 extern void jwzgles_glGetDoublev (GLenum pname, GLdouble *params); 347 extern void jwzgles_glGetIntegerv (GLenum pname, GLint *params); 348 extern void jwzgles_glGetBooleanv (GLenum pname, GLboolean *params); 349 extern void jwzgles_glVertexPointer (GLuint, GLuint, GLuint, const void *); 350 extern void jwzgles_glNormalPointer (GLenum, GLuint, const void *); 351 extern void jwzgles_glColorPointer (GLuint, GLuint, GLuint, const void *); 352 extern void jwzgles_glTexCoordPointer (GLuint, GLuint, GLuint, const void *); 353 extern void jwzgles_glBindBuffer (GLuint, GLuint); 354 extern void jwzgles_glBufferData (GLenum, GLsizeiptr, const void *, GLenum); 355 extern const char *jwzgles_gluErrorString (GLenum error); 356 357 #endif /* __JWZGLES_I_H__ */ 358