Testing out pthread support in android. Appears to work.
authorPaul Hunkin <paul@bieh.net>
Fri, 18 Jun 2010 00:02:13 +1200
changeset 4706 12c9d4532b49
parent 4705 190f043af37d
child 4707 8b109f0dcd2f
Testing out pthread support in android. Appears to work.
android/testproject/jni/app-android.c
android/testproject/libs/armeabi/libsanangeles.so
--- a/android/testproject/jni/app-android.c	Thu Jun 17 23:04:16 2010 +1200
+++ b/android/testproject/jni/app-android.c	Fri Jun 18 00:02:13 2010 +1200
@@ -11,6 +11,8 @@
 #include <stdlib.h>
 #include <math.h>
 
+#include <pthread.h>
+
 #include "importgl.h"
 
 /*******************************************************************************
@@ -28,106 +30,18 @@
 	return (long)(now.tv_sec*1000 + now.tv_usec/1000);
 }
 
-/**************************************
-	gluperspective implementation
-**************************************/
-void gluPerspective(double fovy, double aspect, double zNear, double zFar){
-	glMatrixMode(GL_PROJECTION);
-	glLoadIdentity();
-	double xmin, xmax, ymin, ymax;
-	ymax = zNear * tan(fovy * M_PI / 360.0);
-	ymin = -ymax;
-	xmin = ymin * aspect;
-	xmax = ymax * aspect;
-	glFrustumf(xmin, xmax, ymin, ymax, zNear, zFar);
-}
 
 
-/**************************************
-	  glulookat implementation
-**************************************/
-void gluLookAt(GLfloat eyex, GLfloat eyey, GLfloat eyez,
-          GLfloat centerx, GLfloat centery, GLfloat centerz,
-          GLfloat upx, GLfloat upy, GLfloat upz)
-{
-    GLfloat m[16];
-    GLfloat x[3], y[3], z[3];
-    GLfloat mag;
-    
-    /* Make rotation matrix */
-    
-    /* Z vector */
-    z[0] = eyex - centerx;
-    z[1] = eyey - centery;
-    z[2] = eyez - centerz;
-    mag = sqrt(z[0] * z[0] + z[1] * z[1] + z[2] * z[2]);
-    if (mag) {          /* mpichler, 19950515 */
-        z[0] /= mag;
-        z[1] /= mag;
-        z[2] /= mag;
-    }
-    
-    /* Y vector */
-    y[0] = upx;
-    y[1] = upy;
-    y[2] = upz;
-    
-    /* X vector = Y cross Z */
-    x[0] = y[1] * z[2] - y[2] * z[1];
-    x[1] = -y[0] * z[2] + y[2] * z[0];
-    x[2] = y[0] * z[1] - y[1] * z[0];
-    
-    /* Recompute Y = Z cross X */
-    y[0] = z[1] * x[2] - z[2] * x[1];
-    y[1] = -z[0] * x[2] + z[2] * x[0];
-    y[2] = z[0] * x[1] - z[1] * x[0];
-    
-    /* mpichler, 19950515 */
-    /* cross product gives area of parallelogram, which is < 1.0 for
-     * non-perpendicular unit-length vectors; so normalize x, y here
-     */
-    
-    mag = sqrt(x[0] * x[0] + x[1] * x[1] + x[2] * x[2]);
-    if (mag) {
-        x[0] /= mag;
-        x[1] /= mag;
-        x[2] /= mag;
-    }
-    
-    mag = sqrt(y[0] * y[0] + y[1] * y[1] + y[2] * y[2]);
-    if (mag) {
-        y[0] /= mag;
-        y[1] /= mag;
-        y[2] /= mag;
-    }
-    
-#define M(row,col)  m[col*4+row]
-    M(0, 0) = x[0];
-    M(0, 1) = x[1];
-    M(0, 2) = x[2];
-    M(0, 3) = 0.0;
-    M(1, 0) = y[0];
-    M(1, 1) = y[1];
-    M(1, 2) = y[2];
-    M(1, 3) = 0.0;
-    M(2, 0) = z[0];
-    M(2, 1) = z[1];
-    M(2, 2) = z[2];
-    M(2, 3) = 0.0;
-    M(3, 0) = 0.0;
-    M(3, 1) = 0.0;
-    M(3, 2) = 0.0;
-    M(3, 3) = 1.0;
-#undef M
-    glMultMatrixf(m);
-    
-    /* Translate Eye to Origin */
-    glTranslatef(-eyex, -eyey, -eyez);
-    
+/*******************************************************************************
+                      SDL thread
+*******************************************************************************/
+pthread_t mSDLThread = 0;
+
+void* sdlThreadProc(void* args){
+	__android_log_print(ANDROID_LOG_INFO, "SDL", "Thread Entry");
+	return 0;
 }
-
-
-
+   
 /*******************************************************************************
                       Initialize the graphics state
 *******************************************************************************/
@@ -140,25 +54,14 @@
 
 	__android_log_print(ANDROID_LOG_INFO, "SDL", "Entry point");
 
-
-	 /* Enable smooth shading */
-    glShadeModel( GL_SMOOTH );
-
-    /* Set the background black */
-    glClearColor( 1.0f, 0.0f, 0.0f, 0.0f );
-
-    /* Depth buffer setup */
-    //glClearDepth( 1.0f );
+	//Spin up the SDL thread
+	int r = pthread_create(&mSDLThread, NULL, sdlThreadProc, NULL);
 
-    /* Enables Depth Testing */
-    glEnable( GL_DEPTH_TEST );
-
-    /* The Type Of Depth Test To Do */
-    glDepthFunc( GL_LEQUAL );
-
-    /* Really Nice Perspective Calculations */
-    glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );
-
+	if(r != 0){
+		__android_log_print(ANDROID_LOG_INFO, "SDL", "Couldn't spawn thread: %d", r);
+	}else{		
+		__android_log_print(ANDROID_LOG_INFO, "SDL", "Started SDL thread");
+	}
 
 }
 
@@ -174,34 +77,6 @@
 	sWindowHeight = h;
 	__android_log_print(ANDROID_LOG_INFO, "SDL", "resize w=%d h=%d", w, h);
 
-
-
-	 /* Height / width ration */
-    GLfloat ratio;
- 
-    /* Protect against a divide by zero */
-   if ( h == 0 )
-	h = 1;
-
-    ratio = ( GLfloat )w / ( GLfloat )h;
-
-    /* Setup our viewport. */
-    glViewport( 0, 0, ( GLsizei )w, ( GLsizei )h );
-
-    /* change to the projection matrix and set our viewing volume. */
-    glMatrixMode( GL_PROJECTION );
-    glLoadIdentity( );
-
-    /* Set our perspective */
-    gluPerspective( 45.0f, ratio, 0.1f, 100.0f );
-
-    /* Make sure we're chaning the model view and not the projection */
-    glMatrixMode( GL_MODELVIEW );
-
-    /* Reset The View */
-    glLoadIdentity( );
-
-
 }
 
 /*******************************************************************************
@@ -236,118 +111,8 @@
                      Render the next frame
 *******************************************************************************/
 
-const GLbyte vertex []=
-{
-	0,1,0,
-	-1,0,0,
-	1,0,0
-};
-
-const GLubyte color []=
-{
-	255,0,0,
-	0,255,0,
-	0,0,255
-};
-
-int iRot = 0;
-int Frames = 0;
-
-
-static void prepareFrame(int width, int height)
-{
-    glViewport(0, 0, width, height);
-
-    glClearColorx(0,0,0,255);
-    glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
-
-    glMatrixMode(GL_PROJECTION);
-    glLoadIdentity();
-    gluPerspective(45, (float)width / height, 0.5f, 150);
-
-    glMatrixMode(GL_MODELVIEW);
-
-    glLoadIdentity();
-}
-
 void Java_org_libsdl_android_TestRenderer_nativeRender( JNIEnv*  env )
 {    
 	//TODO: Render here
 
-	prepareFrame(sWindowWidth, sWindowHeight);
-	
-	//Camera
-	gluLookAt(0,0,5, 0,0,0, 0,1,0);
-			
-	//Draw a triangle
-	//glRotatef(iRot, 0, 1, 0);
-
-	glRotatef( Frames % 360, 0.0f, 1.0f, 0.0f );
-
-
-	glEnableClientState (GL_VERTEX_ARRAY);
-	glEnableClientState (GL_COLOR_ARRAY);
-	
-	/* Rotate The Triangle On The Y axis ( NEW ) */
-    glRotatef( Frames % 360, 0.0f, 1.0f, 0.0f );
-
-    /* GLES variant of drawing a triangle */
-    const GLfloat triVertices[][9] = {
-      {     /* Front Triangle */
-	 0.0f,  1.0f,  0.0f,               /* Top Of Triangle               */
-	-1.0f, -1.0f,  1.0f,               /* Left Of Triangle              */
-	 1.0f, -1.0f,  1.0f                /* Right Of Triangle             */
-      }, {  /* Right Triangle */
-	 0.0f,  1.0f,  0.0f,               /* Top Of Triangle               */
-	 1.0f, -1.0f,  1.0f,               /* Left Of Triangle              */
-	 1.0f, -1.0f, -1.0f                /* Right Of Triangle             */
-      }, {  /* Back Triangle */
-	 0.0f,  1.0f,  0.0f,               /* Top Of Triangle               */
-	 1.0f, -1.0f, -1.0f,               /* Left Of Triangle              */
-	-1.0f, -1.0f, -1.0f                /* Right Of Triangle             */
-      }, {  /* Left Triangle */
-	 0.0f,  1.0f,  0.0f,               /* Top Of Triangle               */
-	-1.0f, -1.0f, -1.0f,               /* Left Of Triangle              */
-	-1.0f, -1.0f,  1.0f                /* Right Of Triangle             */
-      }
-    };
-
-    /* unlike GL, GLES does not support RGB. We have to use RGBA instead */
-    const GLfloat triColors[][12] = {
-      {     /* Front triangle */
-        1.0f, 0.0f, 0.0f, 1.0f,            /* Red                           */
-	0.0f, 1.0f, 0.0f, 1.0f,            /* Green                         */
-	0.0f, 0.0f, 1.0f, 1.0f             /* Blue                          */
-      }, {  /* Right triangle */
-        1.0f, 0.0f, 0.0f, 1.0f,            /* Red                           */
-	0.0f, 0.0f, 1.0f, 1.0f,            /* Blue                          */
-	0.0f, 1.0f, 0.0f, 1.0f             /* Green                         */
-      }, {  /* Back triangle */
-        1.0f, 0.0f, 0.0f, 1.0f,            /* Red                           */
-	0.0f, 1.0f, 0.0f, 1.0f,            /* Green                         */
-	0.0f, 0.0f, 1.0f, 1.0f             /* Blue                          */
-      }, {  /* Left triangle */
-        1.0f, 0.0f, 0.0f, 1.0f,            /* Red                           */
-	0.0f, 0.0f, 1.0f, 1.0f,            /* Blue                          */
-	0.0f, 1.0f, 0.0f, 1.0f             /* Green                         */
-      }
-    };
-
-    glEnableClientState(GL_COLOR_ARRAY);
-
-    int tri=0;
-
-    /* Loop through all Triangles */
-    for(tri=0;tri<sizeof(triVertices)/(9*sizeof(GLfloat));tri++) 
-    {
-      glVertexPointer(3, GL_FLOAT, 0, triVertices[tri]);
-      glColorPointer(4, GL_FLOAT, 0, triColors[tri]);
-      
-      glDrawArrays(GL_TRIANGLE_STRIP, 0, 3);
-    }
-		
-    //__android_log_print(ANDROID_LOG_INFO, "SDL", "render %d", Frames++);
-
-    Frames++;
-
 }
Binary file android/testproject/libs/armeabi/libsanangeles.so has changed