123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- /*
- * SDL_opengl.h
- * doom
- *
- * Created by John Carmack on 4/13/09.
- * Copyright 2009 idSoftware. All rights reserved.
- *
- * iPhone glue to get the prBoom code compiling
- * Replaces SDL_opengl.h
- */
- #ifndef __SDL_OPENGL_H__
- #define __SDL_OPENGL_H__
- #include <OpenGLES/ES1/gl.h>
- #include <OpenGLES/ES1/glext.h>
- #ifdef __cplusplus
- extern "C" {
- #endif
- #define GLAPIENTRY
- // no colorTable in ES
- typedef void (* PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);
- static inline GLubyte *gluErrorString( int err ) { (void)err; return (GLubyte *)"GLU error"; }
- static inline void *SDL_GL_GetProcAddress( const char * proc ) { (void)proc; return 0; }
- static inline void SDL_GL_SwapBuffers() {}
- // we need to emulate immediate mode gl for ES
- void glBegin( GLenum prim );
- void glVertex3f( GLfloat x, GLfloat y, GLfloat z );
- void glVertex3fv( GLfloat *xyz );
- void glVertex2f( GLfloat x, GLfloat y );
- void glVertex2i( GLint x, GLint y );
- void glTexCoord2i( GLint s, GLint t );
- void glTexCoord2f( GLfloat s, GLfloat t );
- void glTexCoord2fv( GLfloat *st );
- void glEnd();
- // Doom just uses state color for all draw calls, setting it once
- // before a glBegin, rather than setting it each vertex, so we
- // don't need to emulate the color functions.
- //#defne VERTEX_COLOR
- #ifdef VERTEX_COLOR
- void glColor4ub( GLubyte r, GLubyte g, GLubyte b, GLubyte a );
- void glColor4f( GLfloat r, GLfloat g, GLfloat b, GLfloat a );
- void glColor4fv( GLfloat *rgba );
- void glColor3f( GLfloat r, GLfloat g, GLfloat b );
- #endif
- // GLES only defines glColor4ub and glColor4f, so define the others in terms of that
- #define glColor4fv(x) glColor4f(x[0],x[1],x[2],x[3])
- #define glColor4ubv(x) glColor4ub(x[0],x[1],x[2],x[3])
- #define glColor3f(r,g,b) glColor4f(r,g,b,1)
- // The width and height need to be flipped for iPhone landscape mode,
- // so redefine these functions to something that can do the work behind
- // the scenes.
- void landscapeViewport( GLint x, GLint y, GLsizei width, GLsizei height );
- void landscapeScissor( GLint x, GLint y, GLsizei width, GLsizei height );
- #define glViewport landscapeViewport
- #define glScissor landscapeScissor
- // ES made matching fixed and floating versions of some functions
- #define glClearDepth glClearDepthf
- #define glOrtho glOrthof
- #define glFogi glFogx
- // no GLdouble in ES, but needed for glu tesselator
- typedef double GLdouble;
- // ES doesn't have the messy clamp-to-half-border mode
- #define GL_CLAMP GL_CLAMP_TO_EDGE
- // this is the internal format used by the prBoom gl code
- // ES doesn't allow format conversions between external and internal,
- // so we need to manually convert to 5551 before doing glTexSubImage
- #define GL_RGBA8 GL_RGBA
- #define GL_RGBA2 GL_RGBA
- // not available in ES, so prBoom's skies must be implemeted differently
- static inline void glTexGenfv( int a, int b, void * c ) { (void)a; (void)b; (void)c; }
- static inline void glTexGenf( int a, int b, int c ) { (void)a; (void)b; (void)c; }
- // texGen enums not present in ES
- #define GL_S 0x2000
- #define GL_T 0x2001
- #define GL_R 0x2002
- #define GL_Q 0x2003
- #define GL_OBJECT_LINEAR 0x2401
- #define GL_OBJECT_PLANE 0x2501
- #define GL_EYE_LINEAR 0x2400
- #define GL_EYE_PLANE 0x2502
- #define GL_TEXTURE_GEN_MODE 0x2500
- #define GL_TEXTURE_GEN_S 0x0C60
- #define GL_TEXTURE_GEN_T 0x0C61
- #define GL_TEXTURE_GEN_R 0x0C62
- #define GL_TEXTURE_GEN_Q 0x0C63
- // other extensions not present in ES
- // Whlle the iPhone exports the extension for paletted
- // textures, it isn't actually supported in hardware, so
- // they are expanded internally on glTexImage2D, making their
- // use completely counterproductive.
- #define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB
- #define GL_COLOR_INDEX 0x1900
- #define GL_COLOR_INDEX8_EXT 0x80E5
- //===========================
- // all this for the glu tesselator, used by prBoom to make drawable sector geometry
- //===========================
- #include "../libtess/tess.h"
- /* TessCallback */
- #define GLU_TESS_BEGIN 100100
- #define GLU_BEGIN 100100
- #define GLU_TESS_VERTEX 100101
- #define GLU_VERTEX 100101
- #define GLU_TESS_END 100102
- #define GLU_END 100102
- #define GLU_TESS_ERROR 100103
- #define GLU_TESS_EDGE_FLAG 100104
- #define GLU_EDGE_FLAG 100104
- #define GLU_TESS_COMBINE 100105
- #define GLU_TESS_BEGIN_DATA 100106
- #define GLU_TESS_VERTEX_DATA 100107
- #define GLU_TESS_END_DATA 100108
- #define GLU_TESS_ERROR_DATA 100109
- #define GLU_TESS_EDGE_FLAG_DATA 100110
- #define GLU_TESS_COMBINE_DATA 100111
- /* TessContour */
- #define GLU_CW 100120
- #define GLU_CCW 100121
- #define GLU_INTERIOR 100122
- #define GLU_EXTERIOR 100123
- #define GLU_UNKNOWN 100124
- /* TessProperty */
- #define GLU_TESS_WINDING_RULE 100140
- #define GLU_TESS_BOUNDARY_ONLY 100141
- #define GLU_TESS_TOLERANCE 100142
- /* TessError */
- #define GLU_TESS_ERROR1 100151
- #define GLU_TESS_ERROR2 100152
- #define GLU_TESS_ERROR3 100153
- #define GLU_TESS_ERROR4 100154
- #define GLU_TESS_ERROR5 100155
- #define GLU_TESS_ERROR6 100156
- #define GLU_TESS_ERROR7 100157
- #define GLU_TESS_ERROR8 100158
- #define GLU_TESS_MISSING_BEGIN_POLYGON 100151
- #define GLU_TESS_MISSING_BEGIN_CONTOUR 100152
- #define GLU_TESS_MISSING_END_POLYGON 100153
- #define GLU_TESS_MISSING_END_CONTOUR 100154
- #define GLU_TESS_COORD_TOO_LARGE 100155
- #define GLU_TESS_NEED_COMBINE_CALLBACK 100156
- /* TessWinding */
- #define GLU_TESS_WINDING_ODD 100130
- #define GLU_TESS_WINDING_NONZERO 100131
- #define GLU_TESS_WINDING_POSITIVE 100132
- #define GLU_TESS_WINDING_NEGATIVE 100133
- #define GLU_TESS_WINDING_ABS_GEQ_TWO 100134
- /* ErrorCode */
- #define GLU_INVALID_ENUM 100900
- #define GLU_INVALID_VALUE 100901
- #define GLU_OUT_OF_MEMORY 100902
- #define GLU_INCOMPATIBLE_GL_VERSION 100903
- #define GLU_INVALID_OPERATION 100904
- #define GLAPI
- #define GLAPIENTRYP
- typedef struct GLUtesselator GLUtesselator;
- typedef GLUtesselator GLUtesselatorObj;
- typedef GLUtesselator GLUtriangulatorObj;
- #define GLU_TESS_MAX_COORD 1.0e150
- /* Internal convenience typedefs */
- typedef void (GLAPIENTRYP _GLUfuncptr)();
- GLAPI void GLAPIENTRY gluTessBeginContour (GLUtesselator* tess);
- GLAPI void GLAPIENTRY gluTessBeginPolygon (GLUtesselator* tess, GLvoid* data);
- GLAPI void GLAPIENTRY gluTessCallback (GLUtesselator* tess, GLenum which, _GLUfuncptr CallBackFunc);
- GLAPI void GLAPIENTRY gluTessEndContour (GLUtesselator* tess);
- GLAPI void GLAPIENTRY gluTessEndPolygon (GLUtesselator* tess);
- GLAPI void GLAPIENTRY gluTessNormal (GLUtesselator* tess, GLdouble valueX, GLdouble valueY, GLdouble valueZ);
- GLAPI void GLAPIENTRY gluTessProperty (GLUtesselator* tess, GLenum which, GLdouble data);
- GLAPI void GLAPIENTRY gluTessVertex (GLUtesselator* tess, GLdouble *location, GLvoid* data);
- GLUtesselator * GLAPIENTRY gluNewTess( void );
- void GLAPIENTRY gluDeleteTess( GLUtesselator *tess );
- #ifdef __cplusplus
- }
- #endif
- #endif
|