<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.webos-internals.org/index.php?action=history&amp;feed=atom&amp;title=GLES_1.1_3D_Cube_Demo</id>
	<title>GLES 1.1 3D Cube Demo - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.webos-internals.org/index.php?action=history&amp;feed=atom&amp;title=GLES_1.1_3D_Cube_Demo"/>
	<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=GLES_1.1_3D_Cube_Demo&amp;action=history"/>
	<updated>2026-05-24T14:06:05Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=GLES_1.1_3D_Cube_Demo&amp;diff=8234&amp;oldid=prev</id>
		<title>Egaudet: Create article moved to GLES 1.1 3D Cube Demo</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=GLES_1.1_3D_Cube_Demo&amp;diff=8234&amp;oldid=prev"/>
		<updated>2010-01-09T10:33:36Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/wiki/Create_article&quot; title=&quot;Create article&quot;&gt;Create article&lt;/a&gt; moved to &lt;a href=&quot;/wiki/GLES_1.1_3D_Cube_Demo&quot; title=&quot;GLES 1.1 3D Cube Demo&quot;&gt;GLES 1.1 3D Cube Demo&lt;/a&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 10:33, 9 January 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Egaudet</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=GLES_1.1_3D_Cube_Demo&amp;diff=8233&amp;oldid=prev</id>
		<title>Egaudet: GL port to GLES example</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=GLES_1.1_3D_Cube_Demo&amp;diff=8233&amp;oldid=prev"/>
		<updated>2010-01-09T10:31:45Z</updated>

		<summary type="html">&lt;p&gt;GL port to GLES example&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Category:SDL]]&lt;br /&gt;
&lt;br /&gt;
== testgl (ported to GLES 1.1) ==&lt;br /&gt;
&lt;br /&gt;
[[Image:3dcube.png|160px|left]]This is a test demo of a rotating 3d cube found in libsdl source code (test/testgl.c).  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Running===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@palm-webos-device:/# /var/testgl -h&lt;br /&gt;
Usage: /var/testgl [-twice] [-logo] [-logocursor] [-slow] [-bpp n] [-gamma n] [-noframe] [-fsaa] [-accel] [-sync] [-fullscreen]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@palm-webos-device:/# /var/testgl   &lt;br /&gt;
Screen BPP: 32&lt;br /&gt;
&lt;br /&gt;
Vendor     : Imagination Technologies&lt;br /&gt;
Renderer   : PowerVR SGX 530&lt;br /&gt;
Version    : OpenGL ES-CM 1.1&lt;br /&gt;
Extensions : GL_OES_byte_coordinates GL_OES_fixed_point GL_OES_single_precision GL_OES_matrix_get GL_OES_read_format GL_OES_compressed_paletted_texture GL_OES_point_sprite GL_OES_point_size_array GL_OES_matrix_palette GL_OES_draw_texture GL_OES_query_matrix GL_OES_texture_env_crossbar GL_OES_texture_mirrored_repeat GL_OES_texture_cube_map GL_OES_blend_subtract GL_OES_blend_func_separate GL_OES_blend_equation_separate GL_OES_stencil_wrap GL_OES_extended_matrix_palette GL_OES_framebuffer_object GL_OES_rgb8_rgba8 GL_OES_depth24 GL_OES_stencil8 GL_OES_compressed_ETC1_RGB8_texture GL_OES_mapbuffer GL_OES_EGL_image GL_EXT_multi_draw_arrays GL_OES_required_internalformat GL_IMG_read_format GL_IMG_texture_compression_pvrtc GL_IMG_texture_format_BGRA8888 GL_EXT_texture_format_BGRA8888 GL_IMG_texture_stream GL_IMG_vertex_program &lt;br /&gt;
&lt;br /&gt;
SDL_GL_RED_SIZE: requested 5, got 0&lt;br /&gt;
SDL_GL_GREEN_SIZE: requested 5, got 0&lt;br /&gt;
SDL_GL_BLUE_SIZE: requested 5, got 0&lt;br /&gt;
SDL_GL_DEPTH_SIZE: requested 16, got 0&lt;br /&gt;
SDL_GL_DOUBLEBUFFER: requested 1, got 0&lt;br /&gt;
testgl: SDL error 'GL_GetAttribute not supported'&lt;br /&gt;
key 'world 71' pressed&lt;br /&gt;
key 'world 71' pressed&lt;br /&gt;
app lost active focus&lt;br /&gt;
296.67 FPS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===GL -&amp;gt; GL|ES diff===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/test/testgl.c b/test/testgl.c&lt;br /&gt;
index dfee443..04f9c0d 100644&lt;br /&gt;
--- a/test/testgl.c&lt;br /&gt;
+++ b/test/testgl.c&lt;br /&gt;
@@ -11,7 +11,7 @@&lt;br /&gt;
 &lt;br /&gt;
 #ifdef HAVE_OPENGL&lt;br /&gt;
 &lt;br /&gt;
-#include &amp;quot;SDL_opengl.h&amp;quot;&lt;br /&gt;
+#include &amp;quot;SDL_opengles.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 /* Undefine this if you want a flat cube instead of a rainbow cube */&lt;br /&gt;
 #define SHADED_CUBE&lt;br /&gt;
@@ -122,7 +122,6 @@ void SDL_GL_Enter2DMode()&lt;br /&gt;
 	/* Note, there may be other things you need to change,&lt;br /&gt;
 	   depending on how you have your OpenGL state set up.&lt;br /&gt;
 	*/&lt;br /&gt;
-	glPushAttrib(GL_ENABLE_BIT);&lt;br /&gt;
 	glDisable(GL_DEPTH_TEST);&lt;br /&gt;
 	glDisable(GL_CULL_FACE);&lt;br /&gt;
 	glEnable(GL_TEXTURE_2D);&lt;br /&gt;
@@ -137,7 +136,7 @@ void SDL_GL_Enter2DMode()&lt;br /&gt;
 	glPushMatrix();&lt;br /&gt;
 	glLoadIdentity();&lt;br /&gt;
 &lt;br /&gt;
-	glOrtho(0.0, (GLdouble)screen-&amp;gt;w, (GLdouble)screen-&amp;gt;h, 0.0, 0.0, 1.0);&lt;br /&gt;
+	glOrthof(0.0, screen-&amp;gt;w, screen-&amp;gt;h, 0.0, 0.0, 1.0);&lt;br /&gt;
 &lt;br /&gt;
 	glMatrixMode(GL_MODELVIEW);&lt;br /&gt;
 	glPushMatrix();&lt;br /&gt;
@@ -153,8 +152,6 @@ void SDL_GL_Leave2DMode()&lt;br /&gt;
 &lt;br /&gt;
 	glMatrixMode(GL_PROJECTION);&lt;br /&gt;
 	glPopMatrix();&lt;br /&gt;
-&lt;br /&gt;
-	glPopAttrib();&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /* Quick utility function for texture creation */&lt;br /&gt;
@@ -287,12 +284,29 @@ void DrawLogoCursor(void)&lt;br /&gt;
 	/* Show the image on the screen */&lt;br /&gt;
 	SDL_GL_Enter2DMode();&lt;br /&gt;
 	glBindTexture(GL_TEXTURE_2D, cursor_texture);&lt;br /&gt;
-	glBegin(GL_TRIANGLE_STRIP);&lt;br /&gt;
-	glTexCoord2f(texMinX, texMinY); glVertex2i(x,   y  );&lt;br /&gt;
-	glTexCoord2f(texMaxX, texMinY); glVertex2i(x+w, y  );&lt;br /&gt;
-	glTexCoord2f(texMinX, texMaxY); glVertex2i(x,   y+h);&lt;br /&gt;
-	glTexCoord2f(texMaxX, texMaxY); glVertex2i(x+w, y+h);&lt;br /&gt;
-	glEnd();&lt;br /&gt;
+&lt;br /&gt;
+  float tex[8] = {&lt;br /&gt;
+    texMinX, texMinY,&lt;br /&gt;
+    texMaxX, texMinY,&lt;br /&gt;
+    texMinX, texMaxY,&lt;br /&gt;
+    texMaxX, texMaxY,&lt;br /&gt;
+  };&lt;br /&gt;
+&lt;br /&gt;
+  float ver[8] = {&lt;br /&gt;
+    x, y,&lt;br /&gt;
+    x+w, y,&lt;br /&gt;
+    x, y+h,&lt;br /&gt;
+    x+w, y+h&lt;br /&gt;
+  };&lt;br /&gt;
+&lt;br /&gt;
+  glEnableClientState(GL_VERTEX_ARRAY);&lt;br /&gt;
+  glEnableClientState(GL_TEXTURE_COORD_ARRAY);&lt;br /&gt;
+  glTexCoordPointer(2, GL_FLOAT, 0, tex);&lt;br /&gt;
+  glVertexPointer(2, GL_FLOAT, 0, ver);&lt;br /&gt;
+  glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);&lt;br /&gt;
+  glDisableClientState(GL_VERTEX_ARRAY);&lt;br /&gt;
+  glDisableClientState(GL_TEXTURE_COORD_ARRAY);&lt;br /&gt;
+&lt;br /&gt;
 	SDL_GL_Leave2DMode();&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
@@ -361,12 +375,29 @@ void DrawLogoTexture(void)&lt;br /&gt;
 	/* Show the image on the screen */&lt;br /&gt;
 	SDL_GL_Enter2DMode();&lt;br /&gt;
 	glBindTexture(GL_TEXTURE_2D, global_texture);&lt;br /&gt;
-	glBegin(GL_TRIANGLE_STRIP);&lt;br /&gt;
-	glTexCoord2f(texMinX, texMinY); glVertex2i(x,   y  );&lt;br /&gt;
-	glTexCoord2f(texMaxX, texMinY); glVertex2i(x+w, y  );&lt;br /&gt;
-	glTexCoord2f(texMinX, texMaxY); glVertex2i(x,   y+h);&lt;br /&gt;
-	glTexCoord2f(texMaxX, texMaxY); glVertex2i(x+w, y+h);&lt;br /&gt;
-	glEnd();&lt;br /&gt;
+&lt;br /&gt;
+  float tex[8] = {&lt;br /&gt;
+    texMinX, texMinY,&lt;br /&gt;
+    texMaxX, texMinY,&lt;br /&gt;
+    texMinX, texMaxY,&lt;br /&gt;
+    texMaxX, texMaxY,&lt;br /&gt;
+  };&lt;br /&gt;
+&lt;br /&gt;
+  float ver[8] = {&lt;br /&gt;
+    x, y,&lt;br /&gt;
+    x+w, y,&lt;br /&gt;
+    x, y+h,&lt;br /&gt;
+    x+w, y+h&lt;br /&gt;
+  };&lt;br /&gt;
+&lt;br /&gt;
+  glEnableClientState(GL_VERTEX_ARRAY);&lt;br /&gt;
+  glEnableClientState(GL_TEXTURE_COORD_ARRAY);&lt;br /&gt;
+  glTexCoordPointer(2, GL_FLOAT, 0, tex);&lt;br /&gt;
+  glVertexPointer(2, GL_FLOAT, 0, ver);&lt;br /&gt;
+  glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);&lt;br /&gt;
+  glDisableClientState(GL_VERTEX_ARRAY);&lt;br /&gt;
+  glDisableClientState(GL_TEXTURE_COORD_ARRAY);&lt;br /&gt;
+&lt;br /&gt;
 	SDL_GL_Leave2DMode();&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
@@ -458,22 +489,93 @@ int RunGLTest( int argc, char* argv[],&lt;br /&gt;
 	int done = 0;&lt;br /&gt;
 	int frames;&lt;br /&gt;
 	Uint32 start_time, this_time;&lt;br /&gt;
-        float color[8][3]= {{ 1.0,  1.0,  0.0}, &lt;br /&gt;
-			    { 1.0,  0.0,  0.0},&lt;br /&gt;
-			    { 0.0,  0.0,  0.0},&lt;br /&gt;
-			    { 0.0,  1.0,  0.0},&lt;br /&gt;
-			    { 0.0,  1.0,  1.0},&lt;br /&gt;
-			    { 1.0,  1.0,  1.0},&lt;br /&gt;
-			    { 1.0,  0.0,  1.0},&lt;br /&gt;
-			    { 0.0,  0.0,  1.0}};&lt;br /&gt;
-	float cube[8][3]= {{ 0.5,  0.5, -0.5}, &lt;br /&gt;
-			   { 0.5, -0.5, -0.5},&lt;br /&gt;
-			   {-0.5, -0.5, -0.5},&lt;br /&gt;
-			   {-0.5,  0.5, -0.5},&lt;br /&gt;
-			   {-0.5,  0.5,  0.5},&lt;br /&gt;
-			   { 0.5,  0.5,  0.5},&lt;br /&gt;
-			   { 0.5, -0.5,  0.5},&lt;br /&gt;
-			   {-0.5, -0.5,  0.5}};&lt;br /&gt;
+#if 0&lt;br /&gt;
+        float color[24]= {&lt;br /&gt;
+           1.0,  1.0,  0.0,  // 0&lt;br /&gt;
+			     1.0,  0.0,  0.0,  // 1&lt;br /&gt;
+			     0.0,  0.0,  0.0,  // 2&lt;br /&gt;
+			     0.0,  1.0,  0.0,  // 3&lt;br /&gt;
+			     0.0,  1.0,  1.0,  // 4&lt;br /&gt;
+			     1.0,  1.0,  1.0,  // 5&lt;br /&gt;
+			     1.0,  0.0,  1.0,  // 6&lt;br /&gt;
+			     0.0,  0.0,  1.0   // 7&lt;br /&gt;
+           };&lt;br /&gt;
+	float cube[24]= {&lt;br /&gt;
+          0.5,  0.5, -0.5,   // 0&lt;br /&gt;
+			    0.5, -0.5, -0.5,   // 1&lt;br /&gt;
+			   -0.5, -0.5, -0.5,   // 2&lt;br /&gt;
+			   -0.5,  0.5, -0.5,   // 3&lt;br /&gt;
+			   -0.5,  0.5,  0.5,   // 4&lt;br /&gt;
+			    0.5,  0.5,  0.5,   // 5&lt;br /&gt;
+			    0.5, -0.5,  0.5,   // 6&lt;br /&gt;
+			   -0.5, -0.5,  0.5    // 7&lt;br /&gt;
+         };&lt;br /&gt;
+#endif&lt;br /&gt;
+  GLfloat color[96] = {&lt;br /&gt;
+           1.0,  1.0,  0.0, 1.0,  // 0&lt;br /&gt;
+			     1.0,  0.0,  0.0,  1.0, // 1&lt;br /&gt;
+			     0.0,  1.0,  0.0, 1.0,  // 3&lt;br /&gt;
+			     0.0,  0.0,  0.0,  1.0, // 2&lt;br /&gt;
+&lt;br /&gt;
+			     0.0,  1.0,  0.0, 1.0,  // 3&lt;br /&gt;
+			     0.0,  1.0,  1.0,  1.0, // 4&lt;br /&gt;
+			     0.0,  0.0,  0.0, 1.0,  // 2&lt;br /&gt;
+			     0.0,  0.0,  1.0, 1.0,  // 7&lt;br /&gt;
+&lt;br /&gt;
+           1.0,  1.0,  0.0, 1.0,  // 0&lt;br /&gt;
+			     1.0,  1.0,  1.0, 1.0,  // 5&lt;br /&gt;
+			     1.0,  0.0,  0.0, 1.0,  // 1&lt;br /&gt;
+			     1.0,  0.0,  1.0, 1.0,  // 6&lt;br /&gt;
+&lt;br /&gt;
+			     1.0,  1.0,  1.0, 1.0,  // 5&lt;br /&gt;
+			     0.0,  1.0,  1.0, 1.0,  // 4&lt;br /&gt;
+			     1.0,  0.0,  1.0, 1.0,  // 6&lt;br /&gt;
+			     0.0,  0.0,  1.0, 1.0,  // 7&lt;br /&gt;
+&lt;br /&gt;
+			     1.0,  1.0,  1.0, 1.0,  // 5&lt;br /&gt;
+           1.0,  1.0,  0.0, 1.0,  // 0&lt;br /&gt;
+			     0.0,  1.0,  1.0, 1.0,  // 4&lt;br /&gt;
+			     0.0,  1.0,  0.0, 1.0,  // 3&lt;br /&gt;
+&lt;br /&gt;
+			     1.0,  0.0,  1.0, 1.0,  // 6&lt;br /&gt;
+			     1.0,  0.0,  0.0, 1.0,  // 1&lt;br /&gt;
+			     0.0,  0.0,  1.0, 1.0,  // 7&lt;br /&gt;
+			     0.0,  0.0,  0.0, 1.0,  // 2&lt;br /&gt;
+  };&lt;br /&gt;
+&lt;br /&gt;
+  GLfloat cube[72] = {&lt;br /&gt;
+    &lt;br /&gt;
+          0.5,  0.5, -0.5,   // 0&lt;br /&gt;
+			    0.5, -0.5, -0.5,   // 1&lt;br /&gt;
+			   -0.5,  0.5, -0.5,   // 3&lt;br /&gt;
+			   -0.5, -0.5, -0.5,   // 2&lt;br /&gt;
+    &lt;br /&gt;
+			   -0.5,  0.5, -0.5,   // 3&lt;br /&gt;
+			   -0.5,  0.5,  0.5,   // 4&lt;br /&gt;
+			   -0.5, -0.5, -0.5,   // 2&lt;br /&gt;
+			   -0.5, -0.5,  0.5,   // 7&lt;br /&gt;
+    &lt;br /&gt;
+          0.5,  0.5, -0.5,   // 0&lt;br /&gt;
+			    0.5,  0.5,  0.5,   // 5&lt;br /&gt;
+			    0.5, -0.5, -0.5,   // 1&lt;br /&gt;
+			    0.5, -0.5,  0.5,   // 6&lt;br /&gt;
+    &lt;br /&gt;
+			    0.5,  0.5,  0.5,   // 5&lt;br /&gt;
+			   -0.5,  0.5,  0.5,   // 4&lt;br /&gt;
+			    0.5, -0.5,  0.5,   // 6&lt;br /&gt;
+			   -0.5, -0.5,  0.5,   // 7&lt;br /&gt;
+    &lt;br /&gt;
+			    0.5,  0.5,  0.5,   // 5&lt;br /&gt;
+          0.5,  0.5, -0.5,   // 0&lt;br /&gt;
+			   -0.5,  0.5,  0.5,   // 4&lt;br /&gt;
+			   -0.5,  0.5, -0.5,   // 3&lt;br /&gt;
+    &lt;br /&gt;
+			    0.5, -0.5,  0.5,   // 6&lt;br /&gt;
+			    0.5, -0.5, -0.5,   // 1&lt;br /&gt;
+			   -0.5, -0.5,  0.5,   // 7&lt;br /&gt;
+			   -0.5, -0.5, -0.5,   // 2&lt;br /&gt;
+  };&lt;br /&gt;
+&lt;br /&gt;
 	Uint32 video_flags;&lt;br /&gt;
 	int value;&lt;br /&gt;
 &lt;br /&gt;
@@ -482,6 +584,9 @@ int RunGLTest( int argc, char* argv[],&lt;br /&gt;
 		exit( 1 );&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
+       SDL_GL_SetAttribute( SDL_GL_CONTEXT_MAJOR_VERSION, 1);&lt;br /&gt;
+       SDL_GL_SetAttribute( SDL_GL_CONTEXT_MINOR_VERSION, 1);&lt;br /&gt;
+&lt;br /&gt;
 	/* See if we should detect the display depth */&lt;br /&gt;
 	if ( bpp == 0 ) {&lt;br /&gt;
 		if ( SDL_GetVideoInfo()-&amp;gt;vfmt-&amp;gt;BitsPerPixel &amp;lt;= 8 ) {&lt;br /&gt;
@@ -594,7 +699,7 @@ int RunGLTest( int argc, char* argv[],&lt;br /&gt;
 	glMatrixMode( GL_PROJECTION );&lt;br /&gt;
 	glLoadIdentity( );&lt;br /&gt;
 &lt;br /&gt;
-	glOrtho( -2.0, 2.0, -2.0, 2.0, -20.0, 20.0 );&lt;br /&gt;
+	glOrthof( -2.0, 2.0, -2.0, 2.0, -20.0, 20.0 );&lt;br /&gt;
 &lt;br /&gt;
 	glMatrixMode( GL_MODELVIEW );&lt;br /&gt;
 	glLoadIdentity( );&lt;br /&gt;
@@ -617,63 +722,16 @@ int RunGLTest( int argc, char* argv[],&lt;br /&gt;
 		glClearColor( 0.0, 0.0, 0.0, 1.0 );&lt;br /&gt;
 		glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);&lt;br /&gt;
 &lt;br /&gt;
-		glBegin( GL_QUADS );&lt;br /&gt;
-&lt;br /&gt;
 #ifdef SHADED_CUBE&lt;br /&gt;
-			glColor3fv(color[0]);&lt;br /&gt;
-			glVertex3fv(cube[0]);&lt;br /&gt;
-			glColor3fv(color[1]);&lt;br /&gt;
-			glVertex3fv(cube[1]);&lt;br /&gt;
-			glColor3fv(color[2]);&lt;br /&gt;
-			glVertex3fv(cube[2]);&lt;br /&gt;
-			glColor3fv(color[3]);&lt;br /&gt;
-			glVertex3fv(cube[3]);&lt;br /&gt;
-			&lt;br /&gt;
-			glColor3fv(color[3]);&lt;br /&gt;
-			glVertex3fv(cube[3]);&lt;br /&gt;
-			glColor3fv(color[4]);&lt;br /&gt;
-			glVertex3fv(cube[4]);&lt;br /&gt;
-			glColor3fv(color[7]);&lt;br /&gt;
-			glVertex3fv(cube[7]);&lt;br /&gt;
-			glColor3fv(color[2]);&lt;br /&gt;
-			glVertex3fv(cube[2]);&lt;br /&gt;
-			&lt;br /&gt;
-			glColor3fv(color[0]);&lt;br /&gt;
-			glVertex3fv(cube[0]);&lt;br /&gt;
-			glColor3fv(color[5]);&lt;br /&gt;
-			glVertex3fv(cube[5]);&lt;br /&gt;
-			glColor3fv(color[6]);&lt;br /&gt;
-			glVertex3fv(cube[6]);&lt;br /&gt;
-			glColor3fv(color[1]);&lt;br /&gt;
-			glVertex3fv(cube[1]);&lt;br /&gt;
-			&lt;br /&gt;
-			glColor3fv(color[5]);&lt;br /&gt;
-			glVertex3fv(cube[5]);&lt;br /&gt;
-			glColor3fv(color[4]);&lt;br /&gt;
-			glVertex3fv(cube[4]);&lt;br /&gt;
-			glColor3fv(color[7]);&lt;br /&gt;
-			glVertex3fv(cube[7]);&lt;br /&gt;
-			glColor3fv(color[6]);&lt;br /&gt;
-			glVertex3fv(cube[6]);&lt;br /&gt;
-&lt;br /&gt;
-			glColor3fv(color[5]);&lt;br /&gt;
-			glVertex3fv(cube[5]);&lt;br /&gt;
-			glColor3fv(color[0]);&lt;br /&gt;
-			glVertex3fv(cube[0]);&lt;br /&gt;
-			glColor3fv(color[3]);&lt;br /&gt;
-			glVertex3fv(cube[3]);&lt;br /&gt;
-			glColor3fv(color[4]);&lt;br /&gt;
-			glVertex3fv(cube[4]);&lt;br /&gt;
-&lt;br /&gt;
-			glColor3fv(color[6]);&lt;br /&gt;
-			glVertex3fv(cube[6]);&lt;br /&gt;
-			glColor3fv(color[1]);&lt;br /&gt;
-			glVertex3fv(cube[1]);&lt;br /&gt;
-			glColor3fv(color[2]);&lt;br /&gt;
-			glVertex3fv(cube[2]);&lt;br /&gt;
-			glColor3fv(color[7]);&lt;br /&gt;
-			glVertex3fv(cube[7]);&lt;br /&gt;
+    glEnableClientState(GL_VERTEX_ARRAY);&lt;br /&gt;
+    glEnableClientState(GL_COLOR_ARRAY);&lt;br /&gt;
+    glColorPointer(4, GL_FLOAT, 0, color);&lt;br /&gt;
+    glVertexPointer(3, GL_FLOAT, 0, cube);&lt;br /&gt;
+    glDrawArrays(GL_TRIANGLE_STRIP, 0, 24);&lt;br /&gt;
+    glDisableClientState(GL_VERTEX_ARRAY);&lt;br /&gt;
+    glDisableClientState(GL_COLOR_ARRAY);&lt;br /&gt;
 #else /* flat cube */&lt;br /&gt;
+#error NOT PORTED&lt;br /&gt;
 			glColor3f(1.0, 0.0, 0.0);&lt;br /&gt;
 			glVertex3fv(cube[0]);&lt;br /&gt;
 			glVertex3fv(cube[1]);&lt;br /&gt;
@@ -711,8 +769,6 @@ int RunGLTest( int argc, char* argv[],&lt;br /&gt;
 			glVertex3fv(cube[7]);&lt;br /&gt;
 #endif /* SHADED_CUBE */&lt;br /&gt;
 &lt;br /&gt;
-		glEnd( );&lt;br /&gt;
-		&lt;br /&gt;
 		glMatrixMode(GL_MODELVIEW);&lt;br /&gt;
 		glRotatef(5.0, 1.0, 1.0, 1.0);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;testgl.c&amp;gt;===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;SDL.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#ifdef __MACOS__&lt;br /&gt;
#define HAVE_OPENGL&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
#ifdef HAVE_OPENGL&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;SDL_opengles.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
/* Undefine this if you want a flat cube instead of a rainbow cube */&lt;br /&gt;
#define SHADED_CUBE&lt;br /&gt;
&lt;br /&gt;
/* Define this to be the name of the logo image to use with -logo */&lt;br /&gt;
#define LOGO_FILE	&amp;quot;icon.bmp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
/* The SDL_OPENGLBLIT interface is deprecated.&lt;br /&gt;
   The code is still available for benchmark purposes though.&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
static SDL_bool USE_DEPRECATED_OPENGLBLIT = SDL_FALSE;&lt;br /&gt;
&lt;br /&gt;
static SDL_Surface *global_image = NULL;&lt;br /&gt;
static GLuint global_texture = 0;&lt;br /&gt;
static GLuint cursor_texture = 0;&lt;br /&gt;
&lt;br /&gt;
/**********************************************************************/&lt;br /&gt;
&lt;br /&gt;
void HotKey_ToggleFullScreen(void)&lt;br /&gt;
{&lt;br /&gt;
	SDL_Surface *screen;&lt;br /&gt;
&lt;br /&gt;
	screen = SDL_GetVideoSurface();&lt;br /&gt;
	if ( SDL_WM_ToggleFullScreen(screen) ) {&lt;br /&gt;
		printf(&amp;quot;Toggled fullscreen mode - now %s\n&amp;quot;,&lt;br /&gt;
		    (screen-&amp;gt;flags&amp;amp;SDL_FULLSCREEN) ? &amp;quot;fullscreen&amp;quot; : &amp;quot;windowed&amp;quot;);&lt;br /&gt;
	} else {&lt;br /&gt;
		printf(&amp;quot;Unable to toggle fullscreen mode\n&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void HotKey_ToggleGrab(void)&lt;br /&gt;
{&lt;br /&gt;
	SDL_GrabMode mode;&lt;br /&gt;
&lt;br /&gt;
	printf(&amp;quot;Ctrl-G: toggling input grab!\n&amp;quot;);&lt;br /&gt;
	mode = SDL_WM_GrabInput(SDL_GRAB_QUERY);&lt;br /&gt;
	if ( mode == SDL_GRAB_ON ) {&lt;br /&gt;
		printf(&amp;quot;Grab was on\n&amp;quot;);&lt;br /&gt;
	} else {&lt;br /&gt;
		printf(&amp;quot;Grab was off\n&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	mode = SDL_WM_GrabInput(!mode);&lt;br /&gt;
	if ( mode == SDL_GRAB_ON ) {&lt;br /&gt;
		printf(&amp;quot;Grab is now on\n&amp;quot;);&lt;br /&gt;
	} else {&lt;br /&gt;
		printf(&amp;quot;Grab is now off\n&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void HotKey_Iconify(void)&lt;br /&gt;
{&lt;br /&gt;
	printf(&amp;quot;Ctrl-Z: iconifying window!\n&amp;quot;);&lt;br /&gt;
	SDL_WM_IconifyWindow();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int HandleEvent(SDL_Event *event)&lt;br /&gt;
{&lt;br /&gt;
	int done;&lt;br /&gt;
&lt;br /&gt;
	done = 0;&lt;br /&gt;
	switch( event-&amp;gt;type ) {&lt;br /&gt;
	    case SDL_ACTIVEEVENT:&lt;br /&gt;
		/* See what happened */&lt;br /&gt;
		printf( &amp;quot;app %s &amp;quot;, event-&amp;gt;active.gain ? &amp;quot;gained&amp;quot; : &amp;quot;lost&amp;quot; );&lt;br /&gt;
		if ( event-&amp;gt;active.state &amp;amp; SDL_APPACTIVE ) {&lt;br /&gt;
			printf( &amp;quot;active &amp;quot; );&lt;br /&gt;
		} else if ( event-&amp;gt;active.state &amp;amp; SDL_APPMOUSEFOCUS ) {&lt;br /&gt;
			printf( &amp;quot;mouse &amp;quot; );&lt;br /&gt;
		} else if ( event-&amp;gt;active.state &amp;amp; SDL_APPINPUTFOCUS ) {&lt;br /&gt;
			printf( &amp;quot;input &amp;quot; );&lt;br /&gt;
		}&lt;br /&gt;
		printf( &amp;quot;focus\n&amp;quot; );&lt;br /&gt;
		break;&lt;br /&gt;
		&lt;br /&gt;
&lt;br /&gt;
	    case SDL_KEYDOWN:&lt;br /&gt;
		if ( event-&amp;gt;key.keysym.sym == SDLK_ESCAPE ) {&lt;br /&gt;
			done = 1;&lt;br /&gt;
		}&lt;br /&gt;
		if ( (event-&amp;gt;key.keysym.sym == SDLK_g) &amp;amp;&amp;amp;&lt;br /&gt;
		     (event-&amp;gt;key.keysym.mod &amp;amp; KMOD_CTRL) ) {&lt;br /&gt;
			HotKey_ToggleGrab();&lt;br /&gt;
		}&lt;br /&gt;
		if ( (event-&amp;gt;key.keysym.sym == SDLK_z) &amp;amp;&amp;amp;&lt;br /&gt;
		     (event-&amp;gt;key.keysym.mod &amp;amp; KMOD_CTRL) ) {&lt;br /&gt;
			HotKey_Iconify();&lt;br /&gt;
		}&lt;br /&gt;
		if ( (event-&amp;gt;key.keysym.sym == SDLK_RETURN) &amp;amp;&amp;amp;&lt;br /&gt;
		     (event-&amp;gt;key.keysym.mod &amp;amp; KMOD_ALT) ) {&lt;br /&gt;
			HotKey_ToggleFullScreen();&lt;br /&gt;
		}&lt;br /&gt;
		printf(&amp;quot;key '%s' pressed\n&amp;quot;, &lt;br /&gt;
			SDL_GetKeyName(event-&amp;gt;key.keysym.sym));&lt;br /&gt;
		break;&lt;br /&gt;
	    case SDL_QUIT:&lt;br /&gt;
		done = 1;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
	return(done);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void SDL_GL_Enter2DMode()&lt;br /&gt;
{&lt;br /&gt;
	SDL_Surface *screen = SDL_GetVideoSurface();&lt;br /&gt;
&lt;br /&gt;
	/* Note, there may be other things you need to change,&lt;br /&gt;
	   depending on how you have your OpenGL state set up.&lt;br /&gt;
	*/&lt;br /&gt;
	glDisable(GL_DEPTH_TEST);&lt;br /&gt;
	glDisable(GL_CULL_FACE);&lt;br /&gt;
	glEnable(GL_TEXTURE_2D);&lt;br /&gt;
&lt;br /&gt;
	/* This allows alpha blending of 2D textures with the scene */&lt;br /&gt;
	glEnable(GL_BLEND);&lt;br /&gt;
	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);&lt;br /&gt;
&lt;br /&gt;
	glViewport(0, 0, screen-&amp;gt;w, screen-&amp;gt;h);&lt;br /&gt;
&lt;br /&gt;
	glMatrixMode(GL_PROJECTION);&lt;br /&gt;
	glPushMatrix();&lt;br /&gt;
	glLoadIdentity();&lt;br /&gt;
&lt;br /&gt;
	glOrthof(0.0, screen-&amp;gt;w, screen-&amp;gt;h, 0.0, 0.0, 1.0);&lt;br /&gt;
&lt;br /&gt;
	glMatrixMode(GL_MODELVIEW);&lt;br /&gt;
	glPushMatrix();&lt;br /&gt;
	glLoadIdentity();&lt;br /&gt;
&lt;br /&gt;
	glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void SDL_GL_Leave2DMode()&lt;br /&gt;
{&lt;br /&gt;
	glMatrixMode(GL_MODELVIEW);&lt;br /&gt;
	glPopMatrix();&lt;br /&gt;
&lt;br /&gt;
	glMatrixMode(GL_PROJECTION);&lt;br /&gt;
	glPopMatrix();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Quick utility function for texture creation */&lt;br /&gt;
static int power_of_two(int input)&lt;br /&gt;
{&lt;br /&gt;
	int value = 1;&lt;br /&gt;
&lt;br /&gt;
	while ( value &amp;lt; input ) {&lt;br /&gt;
		value &amp;lt;&amp;lt;= 1;&lt;br /&gt;
	}&lt;br /&gt;
	return value;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
GLuint SDL_GL_LoadTexture(SDL_Surface *surface, GLfloat *texcoord)&lt;br /&gt;
{&lt;br /&gt;
	GLuint texture;&lt;br /&gt;
	int w, h;&lt;br /&gt;
	SDL_Surface *image;&lt;br /&gt;
	SDL_Rect area;&lt;br /&gt;
	Uint32 saved_flags;&lt;br /&gt;
	Uint8  saved_alpha;&lt;br /&gt;
&lt;br /&gt;
	/* Use the surface width and height expanded to powers of 2 */&lt;br /&gt;
	w = power_of_two(surface-&amp;gt;w);&lt;br /&gt;
	h = power_of_two(surface-&amp;gt;h);&lt;br /&gt;
	texcoord[0] = 0.0f;			/* Min X */&lt;br /&gt;
	texcoord[1] = 0.0f;			/* Min Y */&lt;br /&gt;
	texcoord[2] = (GLfloat)surface-&amp;gt;w / w;	/* Max X */&lt;br /&gt;
	texcoord[3] = (GLfloat)surface-&amp;gt;h / h;	/* Max Y */&lt;br /&gt;
&lt;br /&gt;
	image = SDL_CreateRGBSurface(&lt;br /&gt;
			SDL_SWSURFACE,&lt;br /&gt;
			w, h,&lt;br /&gt;
			32,&lt;br /&gt;
#if SDL_BYTEORDER == SDL_LIL_ENDIAN /* OpenGL RGBA masks */&lt;br /&gt;
			0x000000FF, &lt;br /&gt;
			0x0000FF00, &lt;br /&gt;
			0x00FF0000, &lt;br /&gt;
			0xFF000000&lt;br /&gt;
#else&lt;br /&gt;
			0xFF000000,&lt;br /&gt;
			0x00FF0000, &lt;br /&gt;
			0x0000FF00, &lt;br /&gt;
			0x000000FF&lt;br /&gt;
#endif&lt;br /&gt;
		       );&lt;br /&gt;
	if ( image == NULL ) {&lt;br /&gt;
		return 0;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/* Save the alpha blending attributes */&lt;br /&gt;
	saved_flags = surface-&amp;gt;flags&amp;amp;(SDL_SRCALPHA|SDL_RLEACCELOK);&lt;br /&gt;
	saved_alpha = surface-&amp;gt;format-&amp;gt;alpha;&lt;br /&gt;
	if ( (saved_flags &amp;amp; SDL_SRCALPHA) == SDL_SRCALPHA ) {&lt;br /&gt;
		SDL_SetAlpha(surface, 0, 0);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/* Copy the surface into the GL texture image */&lt;br /&gt;
	area.x = 0;&lt;br /&gt;
	area.y = 0;&lt;br /&gt;
	area.w = surface-&amp;gt;w;&lt;br /&gt;
	area.h = surface-&amp;gt;h;&lt;br /&gt;
	SDL_BlitSurface(surface, &amp;amp;area, image, &amp;amp;area);&lt;br /&gt;
&lt;br /&gt;
	/* Restore the alpha blending attributes */&lt;br /&gt;
	if ( (saved_flags &amp;amp; SDL_SRCALPHA) == SDL_SRCALPHA ) {&lt;br /&gt;
		SDL_SetAlpha(surface, saved_flags, saved_alpha);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/* Create an OpenGL texture for the image */&lt;br /&gt;
	glGenTextures(1, &amp;amp;texture);&lt;br /&gt;
	glBindTexture(GL_TEXTURE_2D, texture);&lt;br /&gt;
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);&lt;br /&gt;
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);&lt;br /&gt;
	glTexImage2D(GL_TEXTURE_2D,&lt;br /&gt;
		     0,&lt;br /&gt;
		     GL_RGBA,&lt;br /&gt;
		     w, h,&lt;br /&gt;
		     0,&lt;br /&gt;
		     GL_RGBA,&lt;br /&gt;
		     GL_UNSIGNED_BYTE,&lt;br /&gt;
		     image-&amp;gt;pixels);&lt;br /&gt;
	SDL_FreeSurface(image); /* No longer needed */&lt;br /&gt;
&lt;br /&gt;
	return texture;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void DrawLogoCursor(void)&lt;br /&gt;
{&lt;br /&gt;
	static GLfloat texMinX, texMinY;&lt;br /&gt;
	static GLfloat texMaxX, texMaxY;&lt;br /&gt;
	static int w, h;&lt;br /&gt;
	int x, y;&lt;br /&gt;
&lt;br /&gt;
	if ( ! cursor_texture ) {&lt;br /&gt;
		SDL_Surface *image;&lt;br /&gt;
		GLfloat texcoord[4];&lt;br /&gt;
&lt;br /&gt;
		/* Load the image (could use SDL_image library here) */&lt;br /&gt;
		image = SDL_LoadBMP(LOGO_FILE);&lt;br /&gt;
		if ( image == NULL ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		w = image-&amp;gt;w;&lt;br /&gt;
		h = image-&amp;gt;h;&lt;br /&gt;
&lt;br /&gt;
		/* Convert the image into an OpenGL texture */&lt;br /&gt;
		cursor_texture = SDL_GL_LoadTexture(image, texcoord);&lt;br /&gt;
&lt;br /&gt;
		/* Make texture coordinates easy to understand */&lt;br /&gt;
		texMinX = texcoord[0];&lt;br /&gt;
		texMinY = texcoord[1];&lt;br /&gt;
		texMaxX = texcoord[2];&lt;br /&gt;
		texMaxY = texcoord[3];&lt;br /&gt;
&lt;br /&gt;
		/* We don't need the original image anymore */&lt;br /&gt;
		SDL_FreeSurface(image);&lt;br /&gt;
&lt;br /&gt;
		/* Make sure that the texture conversion is okay */&lt;br /&gt;
		if ( ! cursor_texture ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/* Move the image around */&lt;br /&gt;
	SDL_GetMouseState(&amp;amp;x, &amp;amp;y);&lt;br /&gt;
	x -= w/2;&lt;br /&gt;
	y -= h/2;&lt;br /&gt;
&lt;br /&gt;
	/* Show the image on the screen */&lt;br /&gt;
	SDL_GL_Enter2DMode();&lt;br /&gt;
	glBindTexture(GL_TEXTURE_2D, cursor_texture);&lt;br /&gt;
&lt;br /&gt;
  float tex[8] = {&lt;br /&gt;
    texMinX, texMinY,&lt;br /&gt;
    texMaxX, texMinY,&lt;br /&gt;
    texMinX, texMaxY,&lt;br /&gt;
    texMaxX, texMaxY,&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  float ver[8] = {&lt;br /&gt;
    x, y,&lt;br /&gt;
    x+w, y,&lt;br /&gt;
    x, y+h,&lt;br /&gt;
    x+w, y+h&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  glEnableClientState(GL_VERTEX_ARRAY);&lt;br /&gt;
  glEnableClientState(GL_TEXTURE_COORD_ARRAY);&lt;br /&gt;
  glTexCoordPointer(2, GL_FLOAT, 0, tex);&lt;br /&gt;
  glVertexPointer(2, GL_FLOAT, 0, ver);&lt;br /&gt;
  glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);&lt;br /&gt;
  glDisableClientState(GL_VERTEX_ARRAY);&lt;br /&gt;
  glDisableClientState(GL_TEXTURE_COORD_ARRAY);&lt;br /&gt;
&lt;br /&gt;
	SDL_GL_Leave2DMode();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void DrawLogoTexture(void)&lt;br /&gt;
{&lt;br /&gt;
	static GLfloat texMinX, texMinY;&lt;br /&gt;
	static GLfloat texMaxX, texMaxY;&lt;br /&gt;
	static int x = 0;&lt;br /&gt;
	static int y = 0;&lt;br /&gt;
	static int w, h;&lt;br /&gt;
	static int delta_x = 1;&lt;br /&gt;
	static int delta_y = 1;&lt;br /&gt;
&lt;br /&gt;
	SDL_Surface *screen = SDL_GetVideoSurface();&lt;br /&gt;
&lt;br /&gt;
	if ( ! global_texture ) {&lt;br /&gt;
		SDL_Surface *image;&lt;br /&gt;
		GLfloat texcoord[4];&lt;br /&gt;
&lt;br /&gt;
		/* Load the image (could use SDL_image library here) */&lt;br /&gt;
		image = SDL_LoadBMP(LOGO_FILE);&lt;br /&gt;
		if ( image == NULL ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		w = image-&amp;gt;w;&lt;br /&gt;
		h = image-&amp;gt;h;&lt;br /&gt;
&lt;br /&gt;
		/* Convert the image into an OpenGL texture */&lt;br /&gt;
		global_texture = SDL_GL_LoadTexture(image, texcoord);&lt;br /&gt;
&lt;br /&gt;
		/* Make texture coordinates easy to understand */&lt;br /&gt;
		texMinX = texcoord[0];&lt;br /&gt;
		texMinY = texcoord[1];&lt;br /&gt;
		texMaxX = texcoord[2];&lt;br /&gt;
		texMaxY = texcoord[3];&lt;br /&gt;
&lt;br /&gt;
		/* We don't need the original image anymore */&lt;br /&gt;
		SDL_FreeSurface(image);&lt;br /&gt;
&lt;br /&gt;
		/* Make sure that the texture conversion is okay */&lt;br /&gt;
		if ( ! global_texture ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/* Move the image around */&lt;br /&gt;
	x += delta_x;&lt;br /&gt;
	if ( x &amp;lt; 0 ) {&lt;br /&gt;
		x = 0;&lt;br /&gt;
		delta_x = -delta_x;&lt;br /&gt;
	} else&lt;br /&gt;
	if ( (x+w) &amp;gt; screen-&amp;gt;w ) {&lt;br /&gt;
		x = screen-&amp;gt;w-w;&lt;br /&gt;
		delta_x = -delta_x;&lt;br /&gt;
	}&lt;br /&gt;
	y += delta_y;&lt;br /&gt;
	if ( y &amp;lt; 0 ) {&lt;br /&gt;
		y = 0;&lt;br /&gt;
		delta_y = -delta_y;&lt;br /&gt;
	} else&lt;br /&gt;
	if ( (y+h) &amp;gt; screen-&amp;gt;h ) {&lt;br /&gt;
		y = screen-&amp;gt;h-h;&lt;br /&gt;
		delta_y = -delta_y;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/* Show the image on the screen */&lt;br /&gt;
	SDL_GL_Enter2DMode();&lt;br /&gt;
	glBindTexture(GL_TEXTURE_2D, global_texture);&lt;br /&gt;
&lt;br /&gt;
  float tex[8] = {&lt;br /&gt;
    texMinX, texMinY,&lt;br /&gt;
    texMaxX, texMinY,&lt;br /&gt;
    texMinX, texMaxY,&lt;br /&gt;
    texMaxX, texMaxY,&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  float ver[8] = {&lt;br /&gt;
    x, y,&lt;br /&gt;
    x+w, y,&lt;br /&gt;
    x, y+h,&lt;br /&gt;
    x+w, y+h&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  glEnableClientState(GL_VERTEX_ARRAY);&lt;br /&gt;
  glEnableClientState(GL_TEXTURE_COORD_ARRAY);&lt;br /&gt;
  glTexCoordPointer(2, GL_FLOAT, 0, tex);&lt;br /&gt;
  glVertexPointer(2, GL_FLOAT, 0, ver);&lt;br /&gt;
  glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);&lt;br /&gt;
  glDisableClientState(GL_VERTEX_ARRAY);&lt;br /&gt;
  glDisableClientState(GL_TEXTURE_COORD_ARRAY);&lt;br /&gt;
&lt;br /&gt;
	SDL_GL_Leave2DMode();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* This code is deprecated, but available for speed comparisons */&lt;br /&gt;
void DrawLogoBlit(void)&lt;br /&gt;
{&lt;br /&gt;
	static int x = 0;&lt;br /&gt;
	static int y = 0;&lt;br /&gt;
	static int w, h;&lt;br /&gt;
	static int delta_x = 1;&lt;br /&gt;
	static int delta_y = 1;&lt;br /&gt;
&lt;br /&gt;
	SDL_Rect dst;&lt;br /&gt;
	SDL_Surface *screen = SDL_GetVideoSurface();&lt;br /&gt;
&lt;br /&gt;
	if ( global_image == NULL ) {&lt;br /&gt;
		SDL_Surface *temp;&lt;br /&gt;
&lt;br /&gt;
		/* Load the image (could use SDL_image library here) */&lt;br /&gt;
		temp = SDL_LoadBMP(LOGO_FILE);&lt;br /&gt;
		if ( temp == NULL ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		w = temp-&amp;gt;w;&lt;br /&gt;
		h = temp-&amp;gt;h;&lt;br /&gt;
&lt;br /&gt;
		/* Convert the image into the screen format */&lt;br /&gt;
		global_image = SDL_CreateRGBSurface(&lt;br /&gt;
				SDL_SWSURFACE,&lt;br /&gt;
				w, h,&lt;br /&gt;
				screen-&amp;gt;format-&amp;gt;BitsPerPixel,&lt;br /&gt;
				screen-&amp;gt;format-&amp;gt;Rmask,&lt;br /&gt;
				screen-&amp;gt;format-&amp;gt;Gmask,&lt;br /&gt;
				screen-&amp;gt;format-&amp;gt;Bmask,&lt;br /&gt;
				screen-&amp;gt;format-&amp;gt;Amask);&lt;br /&gt;
		if ( global_image ) {&lt;br /&gt;
			SDL_BlitSurface(temp, NULL, global_image, NULL);&lt;br /&gt;
		}&lt;br /&gt;
		SDL_FreeSurface(temp);&lt;br /&gt;
&lt;br /&gt;
		/* Make sure that the texture conversion is okay */&lt;br /&gt;
		if ( ! global_image ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/* Move the image around&lt;br /&gt;
           Note that we do not clear the old position.  This is because we&lt;br /&gt;
           perform a glClear() which clears the framebuffer and then only&lt;br /&gt;
           update the new area.&lt;br /&gt;
           Note that you can also achieve interesting effects by modifying&lt;br /&gt;
           the screen surface alpha channel.  It's set to 255 by default..&lt;br /&gt;
         */&lt;br /&gt;
	x += delta_x;&lt;br /&gt;
	if ( x &amp;lt; 0 ) {&lt;br /&gt;
		x = 0;&lt;br /&gt;
		delta_x = -delta_x;&lt;br /&gt;
	} else&lt;br /&gt;
	if ( (x+w) &amp;gt; screen-&amp;gt;w ) {&lt;br /&gt;
		x = screen-&amp;gt;w-w;&lt;br /&gt;
		delta_x = -delta_x;&lt;br /&gt;
	}&lt;br /&gt;
	y += delta_y;&lt;br /&gt;
	if ( y &amp;lt; 0 ) {&lt;br /&gt;
		y = 0;&lt;br /&gt;
		delta_y = -delta_y;&lt;br /&gt;
	} else&lt;br /&gt;
	if ( (y+h) &amp;gt; screen-&amp;gt;h ) {&lt;br /&gt;
		y = screen-&amp;gt;h-h;&lt;br /&gt;
		delta_y = -delta_y;&lt;br /&gt;
	}&lt;br /&gt;
	dst.x = x;&lt;br /&gt;
	dst.y = y;&lt;br /&gt;
	dst.w = w;&lt;br /&gt;
	dst.h = h;&lt;br /&gt;
	SDL_BlitSurface(global_image, NULL, screen, &amp;amp;dst);&lt;br /&gt;
&lt;br /&gt;
	/* Show the image on the screen */&lt;br /&gt;
	SDL_UpdateRects(screen, 1, &amp;amp;dst);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int RunGLTest( int argc, char* argv[],&lt;br /&gt;
               int logo, int logocursor, int slowly, int bpp, float gamma, int noframe, int fsaa, int sync, int accel )&lt;br /&gt;
{&lt;br /&gt;
	int i;&lt;br /&gt;
	int rgb_size[3];&lt;br /&gt;
	int w = 320;&lt;br /&gt;
	int h = 480;&lt;br /&gt;
	int done = 0;&lt;br /&gt;
	int frames;&lt;br /&gt;
	Uint32 start_time, this_time;&lt;br /&gt;
#if 0&lt;br /&gt;
        float color[24]= {&lt;br /&gt;
           1.0,  1.0,  0.0,  // 0&lt;br /&gt;
			     1.0,  0.0,  0.0,  // 1&lt;br /&gt;
			     0.0,  0.0,  0.0,  // 2&lt;br /&gt;
			     0.0,  1.0,  0.0,  // 3&lt;br /&gt;
			     0.0,  1.0,  1.0,  // 4&lt;br /&gt;
			     1.0,  1.0,  1.0,  // 5&lt;br /&gt;
			     1.0,  0.0,  1.0,  // 6&lt;br /&gt;
			     0.0,  0.0,  1.0   // 7&lt;br /&gt;
           };&lt;br /&gt;
	float cube[24]= {&lt;br /&gt;
          0.5,  0.5, -0.5,   // 0&lt;br /&gt;
			    0.5, -0.5, -0.5,   // 1&lt;br /&gt;
			   -0.5, -0.5, -0.5,   // 2&lt;br /&gt;
			   -0.5,  0.5, -0.5,   // 3&lt;br /&gt;
			   -0.5,  0.5,  0.5,   // 4&lt;br /&gt;
			    0.5,  0.5,  0.5,   // 5&lt;br /&gt;
			    0.5, -0.5,  0.5,   // 6&lt;br /&gt;
			   -0.5, -0.5,  0.5    // 7&lt;br /&gt;
         };&lt;br /&gt;
#endif&lt;br /&gt;
  GLfloat color[96] = {&lt;br /&gt;
           1.0,  1.0,  0.0, 1.0,  // 0&lt;br /&gt;
			     1.0,  0.0,  0.0,  1.0, // 1&lt;br /&gt;
			     0.0,  1.0,  0.0, 1.0,  // 3&lt;br /&gt;
			     0.0,  0.0,  0.0,  1.0, // 2&lt;br /&gt;
&lt;br /&gt;
			     0.0,  1.0,  0.0, 1.0,  // 3&lt;br /&gt;
			     0.0,  1.0,  1.0,  1.0, // 4&lt;br /&gt;
			     0.0,  0.0,  0.0, 1.0,  // 2&lt;br /&gt;
			     0.0,  0.0,  1.0, 1.0,  // 7&lt;br /&gt;
&lt;br /&gt;
           1.0,  1.0,  0.0, 1.0,  // 0&lt;br /&gt;
			     1.0,  1.0,  1.0, 1.0,  // 5&lt;br /&gt;
			     1.0,  0.0,  0.0, 1.0,  // 1&lt;br /&gt;
			     1.0,  0.0,  1.0, 1.0,  // 6&lt;br /&gt;
&lt;br /&gt;
			     1.0,  1.0,  1.0, 1.0,  // 5&lt;br /&gt;
			     0.0,  1.0,  1.0, 1.0,  // 4&lt;br /&gt;
			     1.0,  0.0,  1.0, 1.0,  // 6&lt;br /&gt;
			     0.0,  0.0,  1.0, 1.0,  // 7&lt;br /&gt;
&lt;br /&gt;
			     1.0,  1.0,  1.0, 1.0,  // 5&lt;br /&gt;
           1.0,  1.0,  0.0, 1.0,  // 0&lt;br /&gt;
			     0.0,  1.0,  1.0, 1.0,  // 4&lt;br /&gt;
			     0.0,  1.0,  0.0, 1.0,  // 3&lt;br /&gt;
&lt;br /&gt;
			     1.0,  0.0,  1.0, 1.0,  // 6&lt;br /&gt;
			     1.0,  0.0,  0.0, 1.0,  // 1&lt;br /&gt;
			     0.0,  0.0,  1.0, 1.0,  // 7&lt;br /&gt;
			     0.0,  0.0,  0.0, 1.0,  // 2&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  GLfloat cube[72] = {&lt;br /&gt;
    &lt;br /&gt;
          0.5,  0.5, -0.5,   // 0&lt;br /&gt;
			    0.5, -0.5, -0.5,   // 1&lt;br /&gt;
			   -0.5,  0.5, -0.5,   // 3&lt;br /&gt;
			   -0.5, -0.5, -0.5,   // 2&lt;br /&gt;
    &lt;br /&gt;
			   -0.5,  0.5, -0.5,   // 3&lt;br /&gt;
			   -0.5,  0.5,  0.5,   // 4&lt;br /&gt;
			   -0.5, -0.5, -0.5,   // 2&lt;br /&gt;
			   -0.5, -0.5,  0.5,   // 7&lt;br /&gt;
    &lt;br /&gt;
          0.5,  0.5, -0.5,   // 0&lt;br /&gt;
			    0.5,  0.5,  0.5,   // 5&lt;br /&gt;
			    0.5, -0.5, -0.5,   // 1&lt;br /&gt;
			    0.5, -0.5,  0.5,   // 6&lt;br /&gt;
    &lt;br /&gt;
			    0.5,  0.5,  0.5,   // 5&lt;br /&gt;
			   -0.5,  0.5,  0.5,   // 4&lt;br /&gt;
			    0.5, -0.5,  0.5,   // 6&lt;br /&gt;
			   -0.5, -0.5,  0.5,   // 7&lt;br /&gt;
    &lt;br /&gt;
			    0.5,  0.5,  0.5,   // 5&lt;br /&gt;
          0.5,  0.5, -0.5,   // 0&lt;br /&gt;
			   -0.5,  0.5,  0.5,   // 4&lt;br /&gt;
			   -0.5,  0.5, -0.5,   // 3&lt;br /&gt;
    &lt;br /&gt;
			    0.5, -0.5,  0.5,   // 6&lt;br /&gt;
			    0.5, -0.5, -0.5,   // 1&lt;br /&gt;
			   -0.5, -0.5,  0.5,   // 7&lt;br /&gt;
			   -0.5, -0.5, -0.5,   // 2&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
	Uint32 video_flags;&lt;br /&gt;
	int value;&lt;br /&gt;
&lt;br /&gt;
	if( SDL_Init( SDL_INIT_VIDEO ) &amp;lt; 0 ) {&lt;br /&gt;
		fprintf(stderr,&amp;quot;Couldn't initialize SDL: %s\n&amp;quot;,SDL_GetError());&lt;br /&gt;
		exit( 1 );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
       SDL_GL_SetAttribute( SDL_GL_CONTEXT_MAJOR_VERSION, 1);&lt;br /&gt;
       SDL_GL_SetAttribute( SDL_GL_CONTEXT_MINOR_VERSION, 1);&lt;br /&gt;
&lt;br /&gt;
	/* See if we should detect the display depth */&lt;br /&gt;
	if ( bpp == 0 ) {&lt;br /&gt;
		if ( SDL_GetVideoInfo()-&amp;gt;vfmt-&amp;gt;BitsPerPixel &amp;lt;= 8 ) {&lt;br /&gt;
			bpp = 8;&lt;br /&gt;
		} else {&lt;br /&gt;
			bpp = 16;  /* More doesn't seem to work */&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/* Set the flags we want to use for setting the video mode */&lt;br /&gt;
	if ( logo &amp;amp;&amp;amp; USE_DEPRECATED_OPENGLBLIT ) {&lt;br /&gt;
		video_flags = SDL_OPENGLBLIT;&lt;br /&gt;
	} else {&lt;br /&gt;
		video_flags = SDL_OPENGL;&lt;br /&gt;
	}&lt;br /&gt;
	for ( i=1; argv[i]; ++i ) {&lt;br /&gt;
		if ( strcmp(argv[i], &amp;quot;-fullscreen&amp;quot;) == 0 ) {&lt;br /&gt;
			video_flags |= SDL_FULLSCREEN;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
        if (noframe) {&lt;br /&gt;
           video_flags |= SDL_NOFRAME;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
	/* Initialize the display */&lt;br /&gt;
	switch (bpp) {&lt;br /&gt;
	    case 8:&lt;br /&gt;
		rgb_size[0] = 3;&lt;br /&gt;
		rgb_size[1] = 3;&lt;br /&gt;
		rgb_size[2] = 2;&lt;br /&gt;
		break;&lt;br /&gt;
	    case 15:&lt;br /&gt;
	    case 16:&lt;br /&gt;
		rgb_size[0] = 5;&lt;br /&gt;
		rgb_size[1] = 5;&lt;br /&gt;
		rgb_size[2] = 5;&lt;br /&gt;
		break;&lt;br /&gt;
            default:&lt;br /&gt;
		rgb_size[0] = 8;&lt;br /&gt;
		rgb_size[1] = 8;&lt;br /&gt;
		rgb_size[2] = 8;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
	SDL_GL_SetAttribute( SDL_GL_RED_SIZE, rgb_size[0] );&lt;br /&gt;
	SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, rgb_size[1] );&lt;br /&gt;
	SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, rgb_size[2] );&lt;br /&gt;
	SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 16 );&lt;br /&gt;
	SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );&lt;br /&gt;
	if ( fsaa ) {&lt;br /&gt;
		SDL_GL_SetAttribute( SDL_GL_MULTISAMPLEBUFFERS, 1 );&lt;br /&gt;
		SDL_GL_SetAttribute( SDL_GL_MULTISAMPLESAMPLES, fsaa );&lt;br /&gt;
	}&lt;br /&gt;
	if ( accel ) {&lt;br /&gt;
		SDL_GL_SetAttribute( SDL_GL_ACCELERATED_VISUAL, 1 );&lt;br /&gt;
	}&lt;br /&gt;
	if ( sync ) {&lt;br /&gt;
		SDL_GL_SetAttribute( SDL_GL_SWAP_CONTROL, 1 );&lt;br /&gt;
	} else {&lt;br /&gt;
		SDL_GL_SetAttribute( SDL_GL_SWAP_CONTROL, 0 );&lt;br /&gt;
	}&lt;br /&gt;
	if ( SDL_SetVideoMode( w, h, bpp, video_flags ) == NULL ) {&lt;br /&gt;
		fprintf(stderr, &amp;quot;Couldn't set GL mode: %s\n&amp;quot;, SDL_GetError());&lt;br /&gt;
		SDL_Quit();&lt;br /&gt;
		exit(1);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	printf(&amp;quot;Screen BPP: %d\n&amp;quot;, SDL_GetVideoSurface()-&amp;gt;format-&amp;gt;BitsPerPixel);&lt;br /&gt;
	printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
	printf( &amp;quot;Vendor     : %s\n&amp;quot;, glGetString( GL_VENDOR ) );&lt;br /&gt;
	printf( &amp;quot;Renderer   : %s\n&amp;quot;, glGetString( GL_RENDERER ) );&lt;br /&gt;
	printf( &amp;quot;Version    : %s\n&amp;quot;, glGetString( GL_VERSION ) );&lt;br /&gt;
	printf( &amp;quot;Extensions : %s\n&amp;quot;, glGetString( GL_EXTENSIONS ) );&lt;br /&gt;
	printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	SDL_GL_GetAttribute( SDL_GL_RED_SIZE, &amp;amp;value );&lt;br /&gt;
	printf( &amp;quot;SDL_GL_RED_SIZE: requested %d, got %d\n&amp;quot;, rgb_size[0],value);&lt;br /&gt;
	SDL_GL_GetAttribute( SDL_GL_GREEN_SIZE, &amp;amp;value );&lt;br /&gt;
	printf( &amp;quot;SDL_GL_GREEN_SIZE: requested %d, got %d\n&amp;quot;, rgb_size[1],value);&lt;br /&gt;
	SDL_GL_GetAttribute( SDL_GL_BLUE_SIZE, &amp;amp;value );&lt;br /&gt;
	printf( &amp;quot;SDL_GL_BLUE_SIZE: requested %d, got %d\n&amp;quot;, rgb_size[2],value);&lt;br /&gt;
	SDL_GL_GetAttribute( SDL_GL_DEPTH_SIZE, &amp;amp;value );&lt;br /&gt;
	printf( &amp;quot;SDL_GL_DEPTH_SIZE: requested %d, got %d\n&amp;quot;, bpp, value );&lt;br /&gt;
	SDL_GL_GetAttribute( SDL_GL_DOUBLEBUFFER, &amp;amp;value );&lt;br /&gt;
	printf( &amp;quot;SDL_GL_DOUBLEBUFFER: requested 1, got %d\n&amp;quot;, value );&lt;br /&gt;
	if ( fsaa ) {&lt;br /&gt;
		SDL_GL_GetAttribute( SDL_GL_MULTISAMPLEBUFFERS, &amp;amp;value );&lt;br /&gt;
		printf(&amp;quot;SDL_GL_MULTISAMPLEBUFFERS: requested 1, got %d\n&amp;quot;, value );&lt;br /&gt;
		SDL_GL_GetAttribute( SDL_GL_MULTISAMPLESAMPLES, &amp;amp;value );&lt;br /&gt;
		printf(&amp;quot;SDL_GL_MULTISAMPLESAMPLES: requested %d, got %d\n&amp;quot;, fsaa, value );&lt;br /&gt;
	}&lt;br /&gt;
	if ( accel ) {&lt;br /&gt;
		SDL_GL_GetAttribute( SDL_GL_ACCELERATED_VISUAL, &amp;amp;value );&lt;br /&gt;
		printf( &amp;quot;SDL_GL_ACCELERATED_VISUAL: requested 1, got %d\n&amp;quot;, value );&lt;br /&gt;
	}&lt;br /&gt;
	if ( sync ) {&lt;br /&gt;
		SDL_GL_GetAttribute( SDL_GL_SWAP_CONTROL, &amp;amp;value );&lt;br /&gt;
		printf( &amp;quot;SDL_GL_SWAP_CONTROL: requested 1, got %d\n&amp;quot;, value );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/* Set the window manager title bar */&lt;br /&gt;
	SDL_WM_SetCaption( &amp;quot;SDL GL test&amp;quot;, &amp;quot;testgl&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	/* Set the gamma for the window */&lt;br /&gt;
	if ( gamma != 0.0 ) {&lt;br /&gt;
		SDL_SetGamma(gamma, gamma, gamma);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	glViewport( 0, 0, w, h );&lt;br /&gt;
	glMatrixMode( GL_PROJECTION );&lt;br /&gt;
	glLoadIdentity( );&lt;br /&gt;
&lt;br /&gt;
	glOrthof( -2.0, 2.0, -2.0, 2.0, -20.0, 20.0 );&lt;br /&gt;
&lt;br /&gt;
	glMatrixMode( GL_MODELVIEW );&lt;br /&gt;
	glLoadIdentity( );&lt;br /&gt;
&lt;br /&gt;
	glEnable(GL_DEPTH_TEST);&lt;br /&gt;
&lt;br /&gt;
	glDepthFunc(GL_LESS);&lt;br /&gt;
&lt;br /&gt;
	glShadeModel(GL_SMOOTH);&lt;br /&gt;
&lt;br /&gt;
	/* Loop until done. */&lt;br /&gt;
	start_time = SDL_GetTicks();&lt;br /&gt;
	frames = 0;&lt;br /&gt;
	while( !done ) {&lt;br /&gt;
		GLenum gl_error;&lt;br /&gt;
		char* sdl_error;&lt;br /&gt;
		SDL_Event event;&lt;br /&gt;
&lt;br /&gt;
		/* Do our drawing, too. */&lt;br /&gt;
		glClearColor( 0.0, 0.0, 0.0, 1.0 );&lt;br /&gt;
		glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);&lt;br /&gt;
&lt;br /&gt;
#ifdef SHADED_CUBE&lt;br /&gt;
    glEnableClientState(GL_VERTEX_ARRAY);&lt;br /&gt;
    glEnableClientState(GL_COLOR_ARRAY);&lt;br /&gt;
    glColorPointer(4, GL_FLOAT, 0, color);&lt;br /&gt;
    glVertexPointer(3, GL_FLOAT, 0, cube);&lt;br /&gt;
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 24);&lt;br /&gt;
    glDisableClientState(GL_VERTEX_ARRAY);&lt;br /&gt;
    glDisableClientState(GL_COLOR_ARRAY);&lt;br /&gt;
#else /* flat cube */&lt;br /&gt;
#error NOT PORTED&lt;br /&gt;
			glColor3f(1.0, 0.0, 0.0);&lt;br /&gt;
			glVertex3fv(cube[0]);&lt;br /&gt;
			glVertex3fv(cube[1]);&lt;br /&gt;
			glVertex3fv(cube[2]);&lt;br /&gt;
			glVertex3fv(cube[3]);&lt;br /&gt;
			&lt;br /&gt;
			glColor3f(0.0, 1.0, 0.0);&lt;br /&gt;
			glVertex3fv(cube[3]);&lt;br /&gt;
			glVertex3fv(cube[4]);&lt;br /&gt;
			glVertex3fv(cube[7]);&lt;br /&gt;
			glVertex3fv(cube[2]);&lt;br /&gt;
			&lt;br /&gt;
			glColor3f(0.0, 0.0, 1.0);&lt;br /&gt;
			glVertex3fv(cube[0]);&lt;br /&gt;
			glVertex3fv(cube[5]);&lt;br /&gt;
			glVertex3fv(cube[6]);&lt;br /&gt;
			glVertex3fv(cube[1]);&lt;br /&gt;
			&lt;br /&gt;
			glColor3f(0.0, 1.0, 1.0);&lt;br /&gt;
			glVertex3fv(cube[5]);&lt;br /&gt;
			glVertex3fv(cube[4]);&lt;br /&gt;
			glVertex3fv(cube[7]);&lt;br /&gt;
			glVertex3fv(cube[6]);&lt;br /&gt;
&lt;br /&gt;
			glColor3f(1.0, 1.0, 0.0);&lt;br /&gt;
			glVertex3fv(cube[5]);&lt;br /&gt;
			glVertex3fv(cube[0]);&lt;br /&gt;
			glVertex3fv(cube[3]);&lt;br /&gt;
			glVertex3fv(cube[4]);&lt;br /&gt;
&lt;br /&gt;
			glColor3f(1.0, 0.0, 1.0);&lt;br /&gt;
			glVertex3fv(cube[6]);&lt;br /&gt;
			glVertex3fv(cube[1]);&lt;br /&gt;
			glVertex3fv(cube[2]);&lt;br /&gt;
			glVertex3fv(cube[7]);&lt;br /&gt;
#endif /* SHADED_CUBE */&lt;br /&gt;
&lt;br /&gt;
		glMatrixMode(GL_MODELVIEW);&lt;br /&gt;
		glRotatef(5.0, 1.0, 1.0, 1.0);&lt;br /&gt;
&lt;br /&gt;
		/* Draw 2D logo onto the 3D display */&lt;br /&gt;
		if ( logo ) {&lt;br /&gt;
			if ( USE_DEPRECATED_OPENGLBLIT ) {&lt;br /&gt;
				DrawLogoBlit();&lt;br /&gt;
			} else {&lt;br /&gt;
				DrawLogoTexture();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		if ( logocursor ) {&lt;br /&gt;
			DrawLogoCursor();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		SDL_GL_SwapBuffers( );&lt;br /&gt;
&lt;br /&gt;
		/* Check for error conditions. */&lt;br /&gt;
		gl_error = glGetError( );&lt;br /&gt;
&lt;br /&gt;
		if( gl_error != GL_NO_ERROR ) {&lt;br /&gt;
			fprintf( stderr, &amp;quot;testgl: OpenGL error: %d\n&amp;quot;, gl_error );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		sdl_error = SDL_GetError( );&lt;br /&gt;
&lt;br /&gt;
		if( sdl_error[0] != '\0' ) {&lt;br /&gt;
			fprintf(stderr, &amp;quot;testgl: SDL error '%s'\n&amp;quot;, sdl_error);&lt;br /&gt;
			SDL_ClearError();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		/* Allow the user to see what's happening */&lt;br /&gt;
		if ( slowly ) {&lt;br /&gt;
			SDL_Delay( 20 );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		/* Check if there's a pending event. */&lt;br /&gt;
		while( SDL_PollEvent( &amp;amp;event ) ) {&lt;br /&gt;
			done = HandleEvent(&amp;amp;event);&lt;br /&gt;
		}&lt;br /&gt;
		++frames;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/* Print out the frames per second */&lt;br /&gt;
	this_time = SDL_GetTicks();&lt;br /&gt;
	if ( this_time != start_time ) {&lt;br /&gt;
		printf(&amp;quot;%2.2f FPS\n&amp;quot;,&lt;br /&gt;
			((float)frames/(this_time-start_time))*1000.0);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( global_image ) {&lt;br /&gt;
	   	SDL_FreeSurface(global_image);&lt;br /&gt;
		global_image = NULL;&lt;br /&gt;
	}&lt;br /&gt;
	if ( global_texture ) {&lt;br /&gt;
		glDeleteTextures( 1, &amp;amp;global_texture );&lt;br /&gt;
		global_texture = 0;&lt;br /&gt;
	}&lt;br /&gt;
	if ( cursor_texture ) {&lt;br /&gt;
		glDeleteTextures( 1, &amp;amp;cursor_texture );&lt;br /&gt;
		cursor_texture = 0;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/* Destroy our GL context, etc. */&lt;br /&gt;
	SDL_Quit( );&lt;br /&gt;
	return(0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[])&lt;br /&gt;
{&lt;br /&gt;
	int i, logo, logocursor = 0;&lt;br /&gt;
	int numtests;&lt;br /&gt;
	int bpp = 0;&lt;br /&gt;
	int slowly;&lt;br /&gt;
	float gamma = 0.0;&lt;br /&gt;
	int noframe = 0;&lt;br /&gt;
	int fsaa = 0;&lt;br /&gt;
	int accel = 0;&lt;br /&gt;
	int sync = 0;&lt;br /&gt;
&lt;br /&gt;
	logo = 0;&lt;br /&gt;
	slowly = 0;&lt;br /&gt;
	numtests = 1;&lt;br /&gt;
	for ( i=1; argv[i]; ++i ) {&lt;br /&gt;
		if ( strcmp(argv[i], &amp;quot;-twice&amp;quot;) == 0 ) {&lt;br /&gt;
			++numtests;&lt;br /&gt;
		}&lt;br /&gt;
		if ( strcmp(argv[i], &amp;quot;-logo&amp;quot;) == 0 ) {&lt;br /&gt;
			logo = 1;&lt;br /&gt;
			USE_DEPRECATED_OPENGLBLIT = SDL_FALSE;&lt;br /&gt;
		}&lt;br /&gt;
		if ( strcmp(argv[i], &amp;quot;-logoblit&amp;quot;) == 0 ) {&lt;br /&gt;
			logo = 1;&lt;br /&gt;
			USE_DEPRECATED_OPENGLBLIT = SDL_TRUE;&lt;br /&gt;
		}&lt;br /&gt;
		if ( strcmp(argv[i], &amp;quot;-logocursor&amp;quot;) == 0 ) {&lt;br /&gt;
			logocursor = 1;&lt;br /&gt;
		}&lt;br /&gt;
		if ( strcmp(argv[i], &amp;quot;-slow&amp;quot;) == 0 ) {&lt;br /&gt;
			slowly = 1;&lt;br /&gt;
		}&lt;br /&gt;
		if ( strcmp(argv[i], &amp;quot;-bpp&amp;quot;) == 0 ) {&lt;br /&gt;
 		       bpp = atoi(argv[++i]);&lt;br /&gt;
		}&lt;br /&gt;
		if ( strcmp(argv[i], &amp;quot;-gamma&amp;quot;) == 0 ) {&lt;br /&gt;
 		       gamma = (float)atof(argv[++i]);&lt;br /&gt;
		}&lt;br /&gt;
		if ( strcmp(argv[i], &amp;quot;-noframe&amp;quot;) == 0 ) {&lt;br /&gt;
 		       noframe = 1;&lt;br /&gt;
		}&lt;br /&gt;
		if ( strcmp(argv[i], &amp;quot;-fsaa&amp;quot;) == 0 ) {&lt;br /&gt;
 		       ++fsaa;&lt;br /&gt;
		}&lt;br /&gt;
		if ( strcmp(argv[i], &amp;quot;-accel&amp;quot;) == 0 ) {&lt;br /&gt;
 		       ++accel;&lt;br /&gt;
		}&lt;br /&gt;
		if ( strcmp(argv[i], &amp;quot;-sync&amp;quot;) == 0 ) {&lt;br /&gt;
 		       ++sync;&lt;br /&gt;
		}&lt;br /&gt;
		if ( strncmp(argv[i], &amp;quot;-h&amp;quot;, 2) == 0 ) {&lt;br /&gt;
 		       printf(&lt;br /&gt;
&amp;quot;Usage: %s [-twice] [-logo] [-logocursor] [-slow] [-bpp n] [-gamma n] [-noframe] [-fsaa] [-accel] [-sync] [-fullscreen]\n&amp;quot;,&lt;br /&gt;
 			      argv[0]);&lt;br /&gt;
			exit(0);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	for ( i=0; i&amp;lt;numtests; ++i ) {&lt;br /&gt;
 		RunGLTest(argc, argv, logo, logocursor, slowly, bpp, gamma, noframe, fsaa, sync, accel);&lt;br /&gt;
	}&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#else /* HAVE_OPENGL */&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[])&lt;br /&gt;
{&lt;br /&gt;
	printf(&amp;quot;No OpenGL support on this system\n&amp;quot;);&lt;br /&gt;
	return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#endif /* HAVE_OPENGL */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Egaudet</name></author>
	</entry>
</feed>