From 2adfec26abd0b5018d60b8c96b9d43064ac7c6a1 Mon Sep 17 00:00:00 2001 From: Paul Hunkin Date: Fri, 18 Jun 2010 00:02:13 +1200 Subject: [PATCH] Testing out pthread support in android. Appears to work. --- android/testproject/jni/app-android.c | 275 ++---------------- .../testproject/libs/armeabi/libsanangeles.so | Bin 14965 -> 0 bytes 2 files changed, 20 insertions(+), 255 deletions(-) delete mode 100755 android/testproject/libs/armeabi/libsanangeles.so diff --git a/android/testproject/jni/app-android.c b/android/testproject/jni/app-android.c index ae39f3e36..4312242d1 100644 --- a/android/testproject/jni/app-android.c +++ b/android/testproject/jni/app-android.c @@ -11,6 +11,8 @@ #include #include +#include + #include "importgl.h" /******************************************************************************* @@ -28,106 +30,18 @@ static long _getTime(void){ 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); + + +/******************************************************************************* + SDL thread +*******************************************************************************/ +pthread_t mSDLThread = 0; + +void* sdlThreadProc(void* args){ + __android_log_print(ANDROID_LOG_INFO, "SDL", "Thread Entry"); + return 0; } - - -/************************************** - 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); - -} - - - + /******************************************************************************* Initialize the graphics state *******************************************************************************/ @@ -140,25 +54,14 @@ void Java_org_libsdl_android_TestRenderer_nativeInit( JNIEnv* env ) __android_log_print(ANDROID_LOG_INFO, "SDL", "Entry point"); + //Spin up the SDL thread + int r = pthread_create(&mSDLThread, NULL, sdlThreadProc, NULL); - /* 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 ); - - /* 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 @@ void Java_org_libsdl_android_TestRenderer_nativeResize( JNIEnv* env, 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 @@ void Java_org_libsdl_android_TestGLSurfaceView_nativePause( JNIEnv* env ) 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#(%&gzzs=AEP+7S5%Gcm%TDsG7HKS$NZPfu z*tkg#3tGk0_0|I9FZt3Co?Ewvwr(n%xb?{~KEybwlg26elAPqYUz?p7rWU)~FQRcj zlYp7;+&6Ee*|o5fp1yPDyt(h*x$oWk?z`{J>~9Zl>DVes68xfI6*yH3tOqc#5|DxL zdT0n^6&f&~_=$#PfPb|};8zIX*Q_?L>{*L0u4>#eo>&UF>qg6ZUs;-8kdRs z4gj|USP5XUXj=y_Mpp^?1ERh~)bm9>Pt;U?&kI4^7HFHZ&_n=G#7K6LLpfc8t`M+z zi8n6`P!3H2v_{}rK6mB#k^=l(43hXC4*{1yI4i$R_Trn0ic2nar8R)h9m)SF1T@~n zmkOshmOTI2FwiT;L(e}P0$Kv&c{Z>BDTb~oz)Oq0xF!96qX3r!kTL`=+ zo3@szhw$H0lp|i^kB`V+uA)NzS`Y#z1M|@o2xPM7 z_7L!s0RK6%mll&4Ut9*x2gbL$ME*(2hbp-5$==UPz(&=}T}1bn%pc|1%33e3iT^zb zSalQd1!3PV8OR3ud$DA`KBWK`8i4^Zz9TX)9guG*vG=|b|5F|e2j**k$@plYKX>Eo z_%=zvr|yUtF zYiHx@A7tQ2;Q6T#@a$4AHL;ZqIFdc6LVFjbsts8KB#Z$*LbN3xOBm6?Sh8myqS3yg{r(?_6B`(a?jJG^B#fS<(L47nubsQOStu5!ZKbd<4)pgPK-8MGkL`8bhR? zh9aKWX^bS}!$x$^)=0GNx~%ImqHWRU--{;W(RC#w@%7%neS6n+^b%`xvF1&&p3fzR zV?722jlrJ8W5wL9@!=k$*Bdxud*j@$pe?cfk)nAC@{E!FgGMwy9NlRo_YKD%EmrNZ zXXczjBoe1-45;XgJu;`C{PycfU&llIu{qo`(@wq_7Sq#1b2M!9jUXDGnYvPQXBgbp zpyV9J`@%&|omD}$_40dBk0fI~pW_3F4aJ7~i~(bW zGy~YS5d5s(A?k>zcZs@7)B}q=xrC^bqCOz%FNivFmnT=<0LUuPwh)l-0yf+Q+)x8- zq`Dqxp}GlZqgn&DQGGkmK{f5O+0{-cd(x@RK9#MQe%U!d2i)&IWy#-v(mL?=OOAh^ z2;A=r+;<1=y8`!-w_kE3EzzE6Kf5*biSWIjZ~K$RrhPj$-P_vKO>K*B@y^$DufE{E zop;qU>I;?I8WvaHd!ViIp2Lj|-JRVP_a2^XZ9LqFNsomAo9s0zDMl4&_t)BV2mEPHy&Oy+}9iY>OKB_8U z<`VZ#6WC!ZKvf7kYzgf668FxdRY0x|J8huzICQ2+I;#%@O|q2ALObDv)Nu#uVaL}Y zgW06(rk2$gC5@R-nO%K0V@WzQaW>;PuA8sM38&$F#zN}M)PJQ^7liZA>y#!kCqk(pd?py5PEbNpG>{ z;Q>M{QYs zkiLf-j$m-J5GR9ebg`NpN2UL9>$dNv>MW*pgemVU7B{y%Xps=^7;I* z#^%?lto|5KH7xYp0D7&C*tgKS(4Tflhl~+Blp4Qqgkl3Dc7=YzS*&NsZ&j;YH-G9* zW-iuw4DvpHeU0pj*ozaH@M8T0Uw8FD)jA+Y{;5%!t)(WMW?_Fd(6maQa1`t|D}g5J zbEoU($yd;rNzZI{-8|JHvBtInxr)@7wVlSDdfFi$$cJ9Dmx=Lj0;;M--#}M=XmU(0 zXH2RAsy<533L7q8bMt)c8nZ)_e?;qu+wj^oisL6NvO}TRVa%++gXTOi^Ovss5xTz> zX!7m3#`TCD!Ub~XlWW)sd^+&2%>I-9ZiMxZIAk6G*Wv;&>lcj##+ zq>oywQfWu$ZDe1kT@8Fo!VwG7ShlLfKUc1K{_*kvGvB`E=F4?vF9vebIJ2QY?MSI3 z-dc%_JzsHXEDQE!2YAqqxGuLtRWsHbGWgupa6dj^SLjTc2UO8qkgcy?bMv)XRPU`DCYsRmgc)|PSTlO=ejwvv&MCE4b3N=5Bcky)@-EJ zDig6AQZrV+h$ZM02WV;rau@WI&IRox&xf+!lRekWOj`e8jhP|!g!4UmCK9pKNIG1p zGvzj*>g8*0ejCWIPdgId2biMj>2O#dm6!6*W}S8jW0beQ(Sh^}5k38a0(@(dbm`2F z=xL_|bWJ$^UNRr}t7RLRS*O=qUE0a8s-?qqe2sM49s0>I?JblGptE|4p^f@UM-_7% z26A*?sgKfUiroJc{isNDyFSkM3h(;@ebc1xIP`8v-y^7h%8e50ZSoo4pHOdaL&~BY z{45V;>wtxq^1)Y}r!bRKEzC!(!Fw0)p9ZT(oZsi?Qr)S1R*wP{OjIWzT33AyRk z)fYGF$DC01u+^d;c93AE)XmH~ygc<6zu0bt&StDSJU2yjas9Qa%Fht*$*Gza=Is@F z#%WPc@SH+E5OXZ_(jH=KIH8eq3j`x{I%d;wp((hTGuadN^TyS7;whjQwX1t**ip38RIm5eD>jMek_V^7ql z)}B~M`R&Ns6HbGkcF4BM)yyuZvAsk4D8(!@%Qa?_UF!6N(?WSG#mpzyW}KFa%v6<1 zdo1nm6z9zRFh9FQ?0I~R?zXE$9x4~Q$KN5_yX>F2ZdEzD_}m|_%UIhaKabrhAEln+n4ZZ1JC<%L9XB6B+FB_gKixucb=09bY0(ckq@VhsI6C@% zaW&}06`em?)~@97L~)fDxq@<+A2-3VQ0)H7b*m`0R`dPjep?p%4b8zh*UeXg*+(g6 zQfH>BH99lWSrASC+jVmrwWCgpcE};$e3o*TKJL)itMze*`-#?i3p1q%?U|^OG-h|Z zZoU@C(K(U&pqTgPxf~Jdzl!`sYgnQ)1jej?1@aVEWW(27H^1~9H$T0_JEQge!i!yg zX1#RsOFsm1M-~A;SOlaN0WW?4Xj@Fbg)sa3d{6JRzeDHOE@p1f#+?;i%#>7S&sP>^ z6)Bw!ojukd>7!QYY-*v3PW!U!Hpx{Btqoc_{4JpBMIaYeJ1t3N^^`Zm=&V0Y`VLS` zcG|ZbVCK>;W~yL{238-|9?t?h%~N!qA%CP;y_8}~9d_I3X2+#&Hd=ujOvYn(k6qr) z=2LD`vC~$&HysAsV@ZtqYBIk>YaP4oTHpz26OM!h6!TSKo~!Ac`-;6yPhFtgD(j;* z^tAI8AW!*J(O$8krJZA-T)2nw#v6Vve&wKi?mk1eKAV!Q=aa%OEx;RO578gv=krec z!{pC>%v`z8o7=Gd#Vp0fI+_Q4obMexZuN8aWOM4mE+Bs-k+I0u9YFqzDl^A+Jf7V^ zbJk6{pUwlc29Cd}VC+q)d#gp~8?yV?uG=Ktd^mdq8Hzba2lzSf1GGPi_ppT&E41gK zp7*Qj=WKm#>Ou#Q-y6?ZbS}9E$WwpRmml9D9BWXdFW$)G8=br_>SJ$R#@YbnX}!_9 zFI*}?dgL2qv?Wd zP8Z}$(?UnKAkWVhqTeAguN46lxvIY6!Y(YMhEyzc+1^Jn5K|Y-=$luNu zGb4PvOzk;u1ZJQRp}XaRXWXh8?vh}x;L%9 zNdBwF>Wg&tdit81Z^@o;ww=#d^xRxBXMPKr=iX07&sd*%KN&4!{qsA;T_4z{Po`L|L>LJcY8X^{K|E6^xPHK&3EYIPPz7DM{XX?R$$bk z_g3P)<$>?#+B;jAIiKfC{+?I=I?z8;Ti&%f0E=U3eP*IhTq&}o;G-?Xe*uF2K|OX(d>wcRzc zCEa?so^0s?a+Bz^Hvmni`FpWvPamCew21XEP&KVCp!`@h1mvDa#9l-?Rc8BrQvcMi z+`{bsE8cq;<@?6;Xtum1ZIRzP={t}(*QL}(p0f_7Dy;u>-KIl#k6I)fw1b}cN7v1L zBQT~-^le3DcAXB3a@w>8s{zPe)nR=Towm{fxx6K`K+@8(q@@?gDpRCe4lA^G%eNe^ z{~(Y%i%weyn!bw&_YLLFJ6t!fl<1XLj#A9!{(+ynJ)bNUKDmQ@qA##+n>{<(%Yocw z9Tw^5XY>|Wl9skeZ`G>9Jich|n}FPF0h?;*JywS`4Ops{;&zn*x$hxjFA)8Pgp6-9 zjg8))sK4{*v@3w7a?ziBi|9*bc35Zjxh%zu2+9{t#gUTxpUR&e~t zpFS@gnwdBJ&xq_$fRjU8CA~i7WjVD-BKScj!`RUY`FM0A;FS!Sw zTk(AArT=gbE_dC7=YQq(bKzIS|Etvcx7>q&tv;VR|CZN2^_JJ(@t^KNxbDHO-+1k( z=BQ8Aold>?A5BM8%4cJ)XiaVs6{&L z;T@t z_^-9J5@3b@Pz;GM9pSrnZ9!S6LaLM&gc_uU(v3=^v`A`_m&jN%^4MT9wijzglEYrT z&%fIj8`+07y^jrzJT~an$ziM+HU_B8yGaZru_kF8NMg-!od3YGrgi7`HO2w1%DbiC zBI$|PV1EzR^u?1{<4Nuv8Nr&K_~4*1l=Pm9C6mMbd-o@e5#M$1TL{NPKdBRpfZ~8I zUG``yKF*9VTr__qNAW>dB1D)S?;<&h6T%Zw8_7{T(M56O7d}q{^F{bDlB2kxi{gf8 zDx{C%hcI8h9K{)36n`Y=W6(&BaAl;M+WdI=w9w`2Bb|g-^X2$rs0A)iFpEMmRPGUS zgcrN8)VqQ>Dv~2TJ48+6xw_Q5O691~SP08^SbV=CJRilbkG=By?GrYT4>=}pxrfK| zVKXF0_9jHX)K2U2juqZ-Kz<=Py7mX;2v@ahg@?`ai{J0(g=*0mIlb2H~JWQEi{5YT-;@d{$$18yUU~xb{(LSH#30LOR zKcnYw1iAwLBiiSaJmD;ZG~v#IG~wWaG~on&n(U$9?tPl{(YLrDO*l25b|@Z}6px2! zpHI)fR6-N(%jZ-4{a}fg1ATuH?eqU1fVTur%;yvB^GQG9;DR*aLW4Bn1bv$9V;pct zMXZMaT`PI{n~Ee~a&MHpJnhreAMI0KDdYOS8K8;(Vt}SXdovY9WHH)-s#cahV1vR@LiLq0m1ha(Y{AT;X97Ew|TUO?4~`;qdkPRe`Zqz3YhjK zk56duSzMkXkj;MnQDze_FG>-jnfh0;S}Mi?w@Jk~;BKiH2mFXsi~}C0`4Hf4!lizd zo)6%Fzd^X#01o*3CC~qxRE%T1M7Yxc4p<3nPIP9xQ7*<|-Yys8fICX$_sYdM;A3(z z4)~dXJmF?f5iT--1Ab91#sTN#VjS>dr5Fc%n^KGeZY{w9KM>eNslUMz9Pl3~#W>&z zrPv>*lwut4-zmj7;D0L7|5K$H2TZutAP!gx72|-LN^rop5)L_l18xl!)aaIwA1OK`DzxEKd~cL@%-JzR_f zj)jYHz@G~j4{=OM5#sU9;_yOE3{n!%30V`$2IN&}@-rQsgz3FQ#ZSwMalnPL z*?hxsz{`_Z-iwj@`-ghtkKW(ko80FU+l>CceMyY88H4f8WIT}|2&q7K_8L9$UL%@} z4fh$zwOC$+ziZz)BiCsVHDU}rG;9n+;}1PFVkFl!W5kFJ_w0*qxo1~28QVKRkiq~= zFEJdY*SGi(`ix}M=ubwCq2%ym^!w}- zme04p1l$+^bG{2a8Q{$VI%h$$?*fko@w9WIvi*nKjS{4z&zJ+1N$5m@JrrFBaF}z# zjD2SZ0itu5QjF6jymBe(_`Oi$CAeyi=Jp3D(9%9$R}7l~w1lbt9kl-LsPdgYN_+;? z$-$ce^Ml?CH2V|G5zp_2mQ|m>aVJx_M+qv_?tjbW{x!)WC!r}zs*7vh<7pk>jSFa6FEKe_l4j< zg2Ccr>Wk3Sey2r7`>5!5{VQMwgWfjdN&aVw_X?DfBys&etTaOatNk&RLdb)_?f(za C