Skip to content

Commit 093a5a4

Browse files
committed
Improve OpenGL 1.0 detection and compatibility
1 parent cd03adf commit 093a5a4

File tree

2 files changed

+56
-6
lines changed

2 files changed

+56
-6
lines changed

src/fg_font.c

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,19 @@ void FGAPIENTRY glutBitmapCharacter( void* fontID, int character )
114114
*/
115115
face = font->Characters[ character ];
116116

117+
#ifdef GL_VERSION_1_1
117118
glPushClientAttrib( GL_CLIENT_PIXEL_STORE_BIT );
119+
#else
120+
{
121+
GLint swbytes, lsbfirst, rowlen, skiprows, skippix, align;
122+
123+
glGetIntegerv(GL_UNPACK_SWAP_BYTES, &swbytes);
124+
glGetIntegerv(GL_UNPACK_LSB_FIRST, &lsbfirst);
125+
glGetIntegerv(GL_UNPACK_ROW_LENGTH, &rowlen);
126+
glGetIntegerv(GL_UNPACK_SKIP_ROWS, &skiprows);
127+
glGetIntegerv(GL_UNPACK_SKIP_PIXELS, &skippix);
128+
glGetIntegerv(GL_UNPACK_ALIGNMENT, &align);
129+
#endif
118130
glPixelStorei( GL_UNPACK_SWAP_BYTES, GL_FALSE );
119131
glPixelStorei( GL_UNPACK_LSB_FIRST, GL_FALSE );
120132
glPixelStorei( GL_UNPACK_ROW_LENGTH, 0 );
@@ -127,7 +139,17 @@ void FGAPIENTRY glutBitmapCharacter( void* fontID, int character )
127139
( float )( face[ 0 ] ), 0.0, /* The raster advance -- inc. x,y */
128140
( face + 1 ) /* The packed bitmap data... */
129141
);
130-
glPopClientAttrib( );
142+
#ifdef GL_VERSION_1_1
143+
glPopClientAttrib();
144+
#else
145+
glPixelStorei(GL_UNPACK_SWAP_BYTES, swbytes);
146+
glPixelStorei(GL_UNPACK_LSB_FIRST, lsbfirst);
147+
glPixelStorei(GL_UNPACK_ROW_LENGTH, rowlen);
148+
glPixelStorei(GL_UNPACK_SKIP_ROWS, skiprows);
149+
glPixelStorei(GL_UNPACK_SKIP_PIXELS, skippix);
150+
glPixelStorei(GL_UNPACK_ALIGNMENT, align);
151+
}
152+
#endif
131153
}
132154

133155
void FGAPIENTRY glutBitmapString( void* fontID, const unsigned char *string )
@@ -145,7 +167,19 @@ void FGAPIENTRY glutBitmapString( void* fontID, const unsigned char *string )
145167
if ( !string || ! *string )
146168
return;
147169

170+
#ifdef GL_VERSION_1_1
148171
glPushClientAttrib( GL_CLIENT_PIXEL_STORE_BIT );
172+
#else
173+
{
174+
GLint swbytes, lsbfirst, rowlen, skiprows, skippix, align;
175+
176+
glGetIntegerv(GL_UNPACK_SWAP_BYTES, &swbytes);
177+
glGetIntegerv(GL_UNPACK_LSB_FIRST, &lsbfirst);
178+
glGetIntegerv(GL_UNPACK_ROW_LENGTH, &rowlen);
179+
glGetIntegerv(GL_UNPACK_SKIP_ROWS, &skiprows);
180+
glGetIntegerv(GL_UNPACK_SKIP_PIXELS, &skippix);
181+
glGetIntegerv(GL_UNPACK_ALIGNMENT, &align);
182+
#endif
149183
glPixelStorei( GL_UNPACK_SWAP_BYTES, GL_FALSE );
150184
glPixelStorei( GL_UNPACK_LSB_FIRST, GL_FALSE );
151185
glPixelStorei( GL_UNPACK_ROW_LENGTH, 0 );
@@ -178,7 +212,17 @@ void FGAPIENTRY glutBitmapString( void* fontID, const unsigned char *string )
178212
x += ( float )( face[ 0 ] );
179213
}
180214

181-
glPopClientAttrib( );
215+
#ifdef GL_VERSION_1_1
216+
glPopClientAttrib();
217+
#else
218+
glPixelStorei(GL_UNPACK_SWAP_BYTES, swbytes);
219+
glPixelStorei(GL_UNPACK_LSB_FIRST, lsbfirst);
220+
glPixelStorei(GL_UNPACK_ROW_LENGTH, rowlen);
221+
glPixelStorei(GL_UNPACK_SKIP_ROWS, skiprows);
222+
glPixelStorei(GL_UNPACK_SKIP_PIXELS, skippix);
223+
glPixelStorei(GL_UNPACK_ALIGNMENT, align);
224+
}
225+
#endif
182226
}
183227

184228
/*

src/fg_geometry.c

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@ static void fghDrawGeometryWire11(GLfloat *vertices, GLfloat *normals,
331331
GLushort *vertIdxs2, GLsizei numParts2, GLsizei numVertPerPart2
332332
)
333333
{
334-
#ifdef GL_VERSION_1_1
334+
#if defined(GL_VERSION_1_1) || defined(GL_VERSION_ES_CM_1_0)
335335
int i;
336336

337337
glEnableClientState(GL_VERTEX_ARRAY);
@@ -365,7 +365,7 @@ static void fghDrawGeometryWire11(GLfloat *vertices, GLfloat *normals,
365365
static void fghDrawGeometrySolid11(GLfloat *vertices, GLfloat *normals, GLfloat *textcs, GLsizei numVertices,
366366
GLushort *vertIdxs, GLsizei numParts, GLsizei numVertIdxsPerPart)
367367
{
368-
#ifdef GL_VERSION_1_1
368+
#if defined(GL_VERSION_1_1) || defined(GL_VERSION_ES_CM_1_0)
369369
int i;
370370

371371
glEnableClientState(GL_VERTEX_ARRAY);
@@ -404,6 +404,7 @@ static void fghDrawGeometryWire20(GLfloat *vertices, GLfloat *normals, GLsizei n
404404
GLushort *vertIdxs2, GLsizei numParts2, GLsizei numVertPerPart2,
405405
GLint attribute_v_coord, GLint attribute_v_normal)
406406
{
407+
#if defined(GL_VERSION_1_1) || defined(GL_VERSION_ES_CM_1_0)
407408
GLuint vbo_coords = 0, vbo_normals = 0,
408409
ibo_elements = 0, ibo_elements2 = 0;
409410
GLsizei numVertIdxs = numParts * numVertPerPart;
@@ -505,6 +506,7 @@ static void fghDrawGeometryWire20(GLfloat *vertices, GLfloat *normals, GLsizei n
505506
fghDeleteBuffers(1, &ibo_elements);
506507
if (ibo_elements2 != 0)
507508
fghDeleteBuffers(1, &ibo_elements2);
509+
#endif /* GL version at least 1.1 */
508510
}
509511

510512

@@ -515,6 +517,7 @@ static void fghDrawGeometrySolid20(GLfloat *vertices, GLfloat *normals, GLfloat
515517
GLushort *vertIdxs, GLsizei numParts, GLsizei numVertIdxsPerPart,
516518
GLint attribute_v_coord, GLint attribute_v_normal, GLint attribute_v_texture)
517519
{
520+
#if defined(GL_VERSION_1_1) || defined(GL_VERSION_ES_CM_1_0)
518521
GLuint vbo_coords = 0, vbo_normals = 0, vbo_textcs = 0, ibo_elements = 0;
519522
GLsizei numVertIdxs = numParts * numVertIdxsPerPart;
520523
int i;
@@ -624,6 +627,7 @@ static void fghDrawGeometrySolid20(GLfloat *vertices, GLfloat *normals, GLfloat
624627
fghDeleteBuffers(1, &vbo_textcs);
625628
if (ibo_elements != 0)
626629
fghDeleteBuffers(1, &ibo_elements);
630+
#endif /* GL version at least 1.1 */
627631
}
628632

629633

@@ -653,7 +657,7 @@ static void fghGenerateNormalVisualization(GLfloat *vertices, GLfloat *normals,
653657
}
654658
}
655659

656-
#ifndef GL_VERSION_1_1
660+
#if !defined(GL_VERSION_1_1) && !defined(GL_VERSION_ES_CM_1_0)
657661
/* Version for OpenGL 1.0 */
658662
static void fghDrawNormalVisualization10(void)
659663
{
@@ -679,7 +683,7 @@ static void fghDrawNormalVisualization10(void)
679683
/* Version for OpenGL (ES) 1.1 */
680684
static void fghDrawNormalVisualization11(void)
681685
{
682-
#ifdef GL_VERSION_1_1
686+
#if defined(GL_VERSION_1_1) || defined(GL_VERSION_ES_CM_1_0)
683687
GLfloat currentColor[4];
684688
/* Setup draw color: (1,1,1)-shape's color */
685689
glGetFloatv(GL_CURRENT_COLOR,currentColor);
@@ -703,6 +707,7 @@ static void fghDrawNormalVisualization11(void)
703707
/* Version for OpenGL (ES) >= 2.0 */
704708
static void fghDrawNormalVisualization20(GLint attribute_v_coord)
705709
{
710+
#if defined(GL_VERSION_1_1) || defined(GL_VERSION_ES_CM_1_0)
706711
GLuint vbo_coords = 0;
707712

708713
if (attribute_v_coord != -1) {
@@ -737,6 +742,7 @@ static void fghDrawNormalVisualization20(GLint attribute_v_coord)
737742

738743
/* Done, free memory */
739744
free(verticesForNormalVisualization);
745+
#endif /* GL version at least 1.1 */
740746
}
741747

742748
/**

0 commit comments

Comments
 (0)