From 7fcfcf0c8f7b3c9f86928e5fc6b6adf305dc8537 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 | 271 ++---------------- .../testproject/libs/armeabi/libsanangeles.so | Bin 14965 -> 0 bytes 2 files changed, 18 insertions(+), 253 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); -} - - -/************************************** - 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 @@ 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;triil!9bb!)4XA4ziVp#P0<{FS$mv@Icrofa)K5BnA8=qTU^VJR4qgLD**}K5 z0<|1{O0yiz;ASt@l@I_(Rkz6zJw{ z7Q#8WFY__3!4Mi0ddR`Q4E$wBNREFJ^k=adF8xM0IQ^eR6=$+sN`q5z?@0dw=quo~ zl#}?Hy!oGnGqyPLaQ~w1|7SqI6#IXd zqu*Anmy*_d4C8Lm(D*dy#^8S)XmkD^&`(PA<$3zvkZ1pkG0!jU*Umioa0tXv1Tj~> zTC9I7_K*6^6LZ8Gj6aR_HD~?Bw3kyB6M|6ozu$rWYmz}J0$e_y8}szN0rTba^E1d(C-I|s6|4s~7QgxEXa~O3 z!DnNBh2(Ev1baJ)N^qp6Fwlj^$2?U8V-yEWX=zP+cVBOK{!>5jFxgtta}z^Gwo_l`(& zbX$A$j&N5b(SCb06xrDmJ@2e7(XN(gceLA?V59G6MqRAyeXh{c{`n~Nb!6{|wL;bQ zuJdb`C#Pkz)|z;{rUPn<@Qt?Fwryz$Z-~O065b%;7+br(CO5n`)*0`JCZ^`sMTxH4 z)f|l{+GAaivUyh|ygl05-W6`{h(@}0#+|;zo$+Y6Gm>a-Lq}`ZPIu#?yQ0lI$x5NOV^`+MI~Cpm&B{UO97jwZqs^Wj);@x~siq7y2z2?ny+t={YurjhsGX3!Ea> z9Sv_=9}3rYL=$b@u{-jnTEn?Lr;CJQ z+(wB-L*(`u?d0~Ki~1ZEvZl>oo?Jg|)9q|eGxw-F+S-G@oJ#rX<^~*PrYL7n-X)%9 z)G6juJK+-ISZs~%N^FUC)J705r0%*%A~HjFeWa^(XQVaS0KabE(cVlldD<47m{?bX z`w zlnDB^_w=}3Q|)lr8NuVYY1_P4-(>%Tt}!u4nkaZ>j_bP zspY0Gb=aJnx;Irg`GmQP7u+A;Yj~dBXY6|Oano(brFNUtZj#!KQagmUqQy7FH=J1S zyWW4@7wW!RQQ5Y+_PUzNCiX4FI=q{(tv;H4^K@1{u0C3{v3z0Cb-U_{uI;NRZ)#{N zysmGwrlPMx99*){r)A%K;`g3W_4p(%>U>^4_FviTNp3M5MzpGAJoN26V z@?DQR%aSEc>hbS`whFXdO9X~ZAsR9w(64%hp1vr1Wg2gM89btkeSnJ4529~B-k&B) z#g+_c4~l^9RRVe$9EDVl9NcDr{=)nF<|~#|yDXnX52{_V^@Zu21ea zt4?h)NaG6(nclcCe1ZGNaNjc&>eHmB%acQ9i5N2Req8BY1wNz;=$VSZ^QJFw$h;7+ z0CFr@s;9G>$MCMUX*|7qQXYryLhX4oG(2K@#7&vi$q~OYe4)`881RT;y{s@WRu)AtkqvALhM@teXmkRXB&!MYtl zXOf3U^nmB^*dFvLXct1yg|H*+R=gDaj$Emyfzt=AHQsucdWA9z<3s+1pymD`92Mie zdV=k7hSF}`z5xH_DLtd{H=&d=zVaypzuzY^FB z-wH8CRC;wiT_|oz&xQ=Y&t|V?8{ZQuU47oQ_#85;0t4pK(11BB03F4ExklDmA2Hvs zY;z0GSx#rf{7PS7&{&1Jh&h>MfWAP#u@w6ju==Q9Lk4#Gfg<)8LK#dI=h^3N@TDwv z9MIEm0xtkByz5LT!>}XvQb}SieKR!paAEIYO6d24?=6`S&L-!o>X7k@M_79YJ3+*o zvDdnHHf+YdAkEX@I~Q$tUw-YZ%W+jZY^Ji=iK2iGo9XE)#JowIYldH*rFj@bY|4}Z zQqMVn<<*DHkGkhP2ww};7&xnz@A@E5JNR=CKo36yEAwvxf_#un;a`1ZseH*bK^l1e)U~E?d1Ac#?-?JFwmR%6XAm8`u z#lWMXz`&!}_aBUs7i0x)q91hxdt^UL@Ez#eOV;S=(ma|o`=6Y3RIEY0K50EG?C%Twro-6LX<*%&?;Q5p4GlGFW6VHUS(gdBw6XW0f?Iy#AXHTg(I!=5#d|&|dR@y~*%| zY#mDQ{5bgYbL${ddS)*87siK-1F<2a1kZtr(Gin+Z8U~pTRpvJ{vop->j`mVrbySl z#kyW*`JcYGEV=T~0>-yJD{%+Fep9!i<#?`Aw*TdGls>Dc3pB`+!Wo<#F@ua-Nj<%9 zCG1r=G+vBx1-kn{;|u8NkHIdq2hJsQzA*#mwa#yW!+RKf3q@n*m)UG_0U-DOVCj&t z5&K*e(qS|3#@SSUWuMOyHECAhez8V7Xa==@(+fU0-zL-ZDZ9VQY@f^#Xv1GvcgOk1u)=4qZGtjXBr`i(3LefN)$hyJk~I?UoTgS5c82T!4| z2zu?V?XMWG)3<44x|PADX~j zS-U3%o28HNK7(=iaha0Ty`}I|(WDed}15p#w%_t1bwkD@RY^l6z1=@Xd11(pl=KU$K3|+0XOpO>}B78MRN=90>!mB zOE$hOqsF68uEv?*{R7Vq+z-Sn_rwvi&>pPrPw|}7UnrAu;=rq(6aBCHv_8b?kn!hi z_VR-2Uf63}2C?rI73=v==!?`7`c<`84jJl+dgE@)-}l45lu)Pmc;W|N^~CqteALYr zAAz-S&%r&oA9ujU%xc(zzD3z@fb8q@^!b#f&$dhu>rx-$pP=1f+mF$nZF>3=RPL=m zaCeHnf&1HDK707=An!uhaI`u(wiR>tAU;yp&1l~ZSqC@YlUmI^Yl7T(e!^}z0|#IA ziosWvruDd|_Z!svE%=+Vs4ulg4AJMz0Os?a0XLqYPr!c<;?7%XJ@cG(RjeCWnH;MJ z?e^FZ?hAVQTC}+y*K+;aCk~W*mAfyn{2TIfEv~U0`r!lHmjV#?=S(Zl{owKO zRcaFB`^Q&{<*#K+hsQ{wbWYO%T1vLlPa`-8y|AYlS%H->wd8ms}t5IuE zH={;SZ$s@x-H-Yp>M_(GqP~EdMm;m>@JN9N>LS!?)Ed;ys1elLP9@AA@cb&ju0H)3|FQURv*YWzVBs62y7KIhzZ8aL-TsaRx+i$b1GevCXkk zXN>(R^z(c^0o{|TY9OXoGG2*Z>wbl}j`!bWp&|4k^D*j$JBSbO3qetichWYsFxf9k zl0*3Rp=TC@$7DblNt`Ll#q;-7$m*-Zb19fidy2MZ{sr-2Wbt8(-dBs~q2^0*4X$}T z_L|RW#Og{t#>EZo>}0QcW0hu&4MA!@HgJ{J59#20Gz=#MTvZ{v+gMANk^r zXvJU3{|)qi2mEyKLmaOZS_=0ok8$&2zQd`R>XJxQio@L+5!h3y&BCSfPM4otiQ{1NEj z4GK>|&^KSv20W$#+# zJ~#0b(BXTEMYq_o$uim`FyFWw{gfH^noJdF&q5CJrwvPkkWm{j$hUZDpXFcNdpPmL zNl7QX1D>WnllW$%YIuKvUYI}e3~2Bmv)1)FG_KB+&F`#t3hPn60%twwX|IKK{Q*5Q zikLxPyBzmE-tAPxvdMe!K9CiH=bC5Ki+;w667jt0K`iiTL%h$zXI@0y7%~bW6Tb79 zbMPH#K4fvfsWsHq3w(3Ok5AeipSZY1Yr}ttE#m7BBkGQR7mpVquDOKm@BrJdPh@wG zj*ceB9XRH|vkrX2f=7}TJfbA4PLuvfvJQ~ULJk~p;3Ez^>%fJt+jPquIGP8K0w=$x z3BOyI?3lFWks;S1{;h&z$@|aP^zQ&3z4+neo;lQO1tOi7k69a(wL~a#K6)&NpOC;d@@H64_!kGc@LnrQT7A?BOGJGG$ z85TGzR(=D{g7s}aftL%mO90`Yq74<_wgh}oxOqOf*Tu-|uPw|)a?3;DJ5%NF;z1~! zLZ#kf!`ii1YfCqL>c-2oRV!AlfSi9*PYn*Suzo@miiW2D!&}#hS-wK0NSW^|R~9H2 zcq^0(l}gV=9_ z?Sa&PU11&%_n!MoKVS_2AL!^1Ae&t0g-687uvdbe69IlJ1kJ&d3@*|(k4x~KqfQ~hv4nu;nfIi*_SiZ!rL3F@8Rv|x@ zR#fUhn_4+}RdzleaTd~1-#9AQXFt#7vWus3v(S~>x1DIabj*v`3Oamy$rX3qFQA8f z$*&1?O`vnfNbI(gXp^5?NVm~N0Nt^FKpVU$rd5uB?g|$Hbm<98Qc(B7g!o#OIyaTi+s431VQu;t6ceR+7{d2q_J zFmJpn4_}&x2PB;H8zr3bwMjU~2PB++#QkNzg1i?(HxEVtr;9h{jdP#vGFQNDt$nxW z&lOh!9|nKU^T12jJ2(J}jWbWkE(O+knFPKR9WFg_cbxN?x8~wEq0s^y_of^@ak~_V zC>q1Sd6ry$#O+cbZb#z?@O^;pIB~n!@-dH2#+er;<3S0(2LnyON8yYvKjJPu?ZV%d zU7Y$@-<_=vdp&-Owu_DP`?QNcfW}hbtFVzSf8y>q`PVI&!jGbPEAS3Lm!7y?Z2l)D z{7DQ9<6*l{;!j+rXI`0${}PRpz#9Qw{>1I#$e#;jHqN{=d7OE0GR{0f7pFe_?cT*{ zFMf-YaptMHxQRx~MbqUW?v8Ul^VVeiX$ij;1J41M{g1dy|37HF0h}?;)t9(kZ2g!A zC*#Zum2u_?x;XXId1$O+&woh5=VBk+JB;Evlf3{q<1`C#>ci)hU1nM5^$`i@_+t`I zx|eKX#5XWQ;WL=U3yoO#tYz`y9}AzUEMAMd{p_@Hzt!)q@3o#d=yJ}hn}^Hi9*ftq zn*D6EaYkAD8D`_WEl%m{wQdSi`g)xwjvJ4>%*#V@bLKwC0^qs)vJm4<^m-B!}fXntc0-X087OwYw z;Bp@D&w;yz`uqa8oCnOjRUzkz;=svyz?Hyd`pbX^5wA5&v-ANj=K*g4F7Myp1DErF zM}W(Dz~2Hc=K((r+$|a!zW~no$N0?kUIQ-Y0nfn^ll83vF55o+c2bmc?j%9k}d&j{ukRfS=>I6Aw8*1Dx@XA(^;$7UC1)LA`^Q z0hjZDS8yB)1)cF4;PUz023*$nGr(p2wgZ>*fIkmh&I7&&xSR+4@4)3e;GY4vPcQvT z6~6$^=Ye~kUkC2S8!HdEDj}*`M9)n~@QmGYQ+rFI%|$jw+gsZbqNgs}8EZ(y;_)a_ zJe{n^mS}UVB^pMGU28P4QdCXLzuT}SM~C!RU_H@}9eBSB$9C-Ki6)TI*%OU)H@Ah? zUAq-5ws$aLRZ7!~cZd1#9bY*yl zmC7lmbqb`wCfpR+?RO@k?(mIkYr{LbW1ZmEWxZ{N>u&y3&8BOSAi1IbhT59?@D1zN zH>}$l-da;zzmBm~*PAhp++GW{#Qn$OoR>t#tQ_Nk}rm}!%*kC4PyM*#G)3dH!iad97 zlb3VDZpN-8B($@R(F`fV?hul;b8dz{Bsk~L_av!18?!c-&2FW?+Rk>qT{`z)3``3K zQz`8;sNg1-)9>Ds6F=>YIT2>6Zz?%ma$t8jKLI-D2l;;zf%JDLvsaRCT5yp5OhC^0 zwyk>3v~ellzI%pDZD}z%tJ@JDC+8dq)#uHe&i(m9o}4*nadYZ-+7Z{zrglATn$lq> vD;ma`Zup$Ebva8~e@t;cN68Bk=l+8g{H1`MSnbLLL)0NVJC{N(CvN{A(c|ZU