PageRenderTime 400ms CodeModel.GetById 37ms RepoModel.GetById 9ms app.codeStats 0ms

/lib/SRC/Gl/gsub.c

https://bitbucket.org/pathpot/pocket-fighter
C | 1714 lines | 1551 code | 155 blank | 8 comment | 381 complexity | 7b269ec3a4d67c10553f7fb1bf1b680a MD5 | raw file

Large files files are truncated, but you can click here to view the full file

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #if defined(_WIN32)
  4. #include <windows.h>
  5. #include <string.h>
  6. #endif
  7. #ifndef __APPLE__
  8. # include <GL/glut.h>
  9. # ifdef GL_VERSION_1_2
  10. # include <GL/glext.h>
  11. # endif
  12. #else
  13. # include <GLUT/glut.h>
  14. # include <OpenGL/glext.h>
  15. #endif
  16. #include <AR/config.h>
  17. #include <AR/param.h>
  18. #include <AR/ar.h>
  19. #include <AR/gsub.h>
  20. #ifndef GL_ABGR
  21. # define GL_ABGR GL_ABGR_EXT
  22. #endif
  23. #ifndef GL_BGRA
  24. # define GL_BGRA GL_BGRA_EXT
  25. #endif
  26. #ifndef GL_BGR
  27. # define GL_BGR GL_BGR_EXT
  28. #endif
  29. #ifndef GL_RGBA
  30. # define GL_RGBA GL_RGBA_EXT
  31. #endif
  32. #ifndef GL_RGB
  33. # define GL_RGB GL_RGB_EXT
  34. #endif
  35. #ifdef AR_OPENGL_TEXTURE_RECTANGLE
  36. # if defined(GL_TEXTURE_RECTANGLE_EXT)
  37. # define AR_TEXTURE_RECTANGLE GL_TEXTURE_RECTANGLE_EXT
  38. # elif defined(GL_TEXTURE_RECTANGLE_NV)
  39. # define AR_TEXTURE_RECTANGLE GL_TEXTURE_RECTANGLE_NV
  40. # else
  41. # undef AR_OPENGL_TEXTURE_RECTANGLE
  42. # endif
  43. #endif
  44. #define MINIWIN_MAX 8
  45. #define REVERSE_LR 1
  46. #define LEFTEYE 1
  47. #define RIGHTEYE 2
  48. #define GMINI 2
  49. int argDrawMode = DEFAULT_DRAW_MODE;
  50. int argTexmapMode = DEFAULT_DRAW_TEXTURE_IMAGE;
  51. static ARParam gCparam;
  52. static ARSParam gsCparam;
  53. static double gl_cpara[16];
  54. //static double gl_cparaL[16];
  55. //static double gl_cparaR[16];
  56. static double gl_lpara[16];
  57. static double gl_rpara[16];
  58. static int gl_hmd_flag = 0;
  59. static int gl_hmd_para_flag = 0;
  60. static int gl_stereo_flag = 0;
  61. //static int gl_twin_flag = 0;
  62. static double gZoom;
  63. static int gXsize, gYsize;
  64. static int gMiniXnum, gMiniYnum;
  65. static int gMiniXsize, gMiniYsize;
  66. static int gWinXsize, gWinYsize;
  67. static int gImXsize, gImYsize;
  68. static int win;
  69. static GLuint glid[4];
  70. static void (*gMouseFunc)(int button, int state, int x, int y);
  71. static void (*gKeyFunc)(unsigned char key, int x, int y);
  72. static void (*gMainFunc)(void);
  73. static void argInit2( int fullFlag );
  74. static void argInitLoop(void);
  75. static void argInitStencil(void);
  76. static void argSetStencil( int flag );
  77. static void argConvGLcpara2( double cparam[3][4], int width, int height, double gnear, double gfar, double m[16] );
  78. static int useTextureRectangle = 0;
  79. static GLint maxRectangleTextureSize = 0;
  80. static int tex1Xsize1 = 1;
  81. static int tex1Xsize2 = 1;
  82. static int tex1Ysize = 1;
  83. static int tex2Xsize = 1;
  84. static int tex2Ysize = 1;
  85. #ifdef AR_OPENGL_TEXTURE_RECTANGLE
  86. static void argDispImageTexRectangle( ARUint8 *image, int xwin, int ywin, int mode );
  87. #endif
  88. static void argDispImageTex3( ARUint8 *image, int xwin, int ywin, int mode );
  89. static void argDispImageTex4( ARUint8 *image, int xwin, int ywin, int mode );
  90. static void argDispHalfImageTex( ARUint8 *image, int xwin, int ywin, int mode );
  91. static void argDispImageDrawPixels( ARUint8 *image, int xwin, int ywin );
  92. static void argDispHalfImageDrawPixels( ARUint8 *image, int xwin, int ywin );
  93. void argInqSetting( int *hmdMode,
  94. int *gMiniXnum2, int *gMiniYnum2,
  95. void (**mouseFunc)(int button, int state, int x, int y),
  96. void (**keyFunc)(unsigned char key, int x, int y),
  97. void (**mainFunc)(void) )
  98. {
  99. *hmdMode = gl_hmd_flag;
  100. *gMiniXnum2 = gMiniXnum;
  101. *gMiniYnum2 = gMiniYnum;
  102. *mouseFunc = gMouseFunc;
  103. *keyFunc = gKeyFunc;
  104. *mainFunc = gMainFunc;
  105. }
  106. void argInit( ARParam *cparam, double zoom, int fullFlag, int xwin, int ywin, int hmd_flag )
  107. {
  108. int i;
  109. gl_hmd_flag = hmd_flag;
  110. gZoom = zoom;
  111. gImXsize = cparam->xsize;
  112. gImYsize = cparam->ysize;
  113. if( gl_hmd_flag == 0 ) {
  114. gXsize = (double)cparam->xsize * gZoom;
  115. gYsize = (double)cparam->ysize * gZoom;
  116. }
  117. else {
  118. gXsize = AR_HMD_XSIZE;
  119. gYsize = AR_HMD_YSIZE;
  120. }
  121. gMiniXsize = (double)cparam->xsize * gZoom / GMINI;
  122. gMiniYsize = (double)cparam->ysize * gZoom / GMINI;
  123. if( xwin * ywin > MINIWIN_MAX ) {
  124. if( xwin > MINIWIN_MAX ) xwin = MINIWIN_MAX;
  125. ywin = MINIWIN_MAX / xwin;
  126. }
  127. gMiniXnum = xwin;
  128. gMiniYnum = ywin;
  129. gWinXsize = (gMiniXsize*gMiniXnum > gXsize)?
  130. gMiniXsize*gMiniXnum: gXsize;
  131. gWinYsize = gYsize + gMiniYsize*gMiniYnum;
  132. gCparam = *cparam;
  133. for( i = 0; i < 4; i++ ) {
  134. gCparam.mat[1][i] = (gCparam.ysize-1)*(gCparam.mat[2][i]) - gCparam.mat[1][i];
  135. }
  136. argConvGLcpara( &gCparam, AR_GL_CLIP_NEAR, AR_GL_CLIP_FAR, gl_cpara );
  137. argInit2( fullFlag );
  138. }
  139. static void argInit2( int fullFlag )
  140. {
  141. glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);
  142. glutInitWindowPosition(0, 0);
  143. glutInitWindowSize(gWinXsize, gWinYsize);
  144. win = glutCreateWindow("");
  145. if( fullFlag ) {
  146. glutFullScreen();
  147. gWinXsize = glutGet(GLUT_SCREEN_WIDTH);
  148. gWinYsize = glutGet(GLUT_SCREEN_HEIGHT);
  149. }
  150. #ifdef AR_OPENGL_TEXTURE_RECTANGLE
  151. #if defined(GL_TEXTURE_RECTANGLE_EXT)
  152. if( glutExtensionSupported("GL_EXT_texture_rectangle") ) {
  153. useTextureRectangle = 1;
  154. glGetIntegerv(GL_MAX_RECTANGLE_TEXTURE_SIZE_EXT, &maxRectangleTextureSize);
  155. }
  156. #elif defined(GL_TEXTURE_RECTANGLE_NV)
  157. if( glutExtensionSupported("GL_NV_texture_rectangle") ) {
  158. useTextureRectangle = 1;
  159. glGetIntegerv(GL_MAX_RECTANGLE_TEXTURE_SIZE_NV, &maxRectangleTextureSize);
  160. }
  161. #endif
  162. #endif
  163. gMouseFunc = NULL;
  164. gKeyFunc = NULL;
  165. gMainFunc = NULL;
  166. glGenTextures(4, glid);
  167. glBindTexture( GL_TEXTURE_2D, glid[0] );
  168. glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );
  169. glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP );
  170. glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP );
  171. glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
  172. glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
  173. glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL );
  174. glBindTexture( GL_TEXTURE_2D, glid[1] );
  175. glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );
  176. glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP );
  177. glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP );
  178. glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
  179. glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
  180. glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL );
  181. glBindTexture( GL_TEXTURE_2D, glid[2] );
  182. glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );
  183. glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP );
  184. glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP );
  185. glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
  186. glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
  187. glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL );
  188. if( gImXsize > 512 ) {
  189. tex1Xsize1 = 512;
  190. tex1Xsize2 = 1;
  191. while( tex1Xsize2 < gImXsize - tex1Xsize1 ) tex1Xsize2 *= 2;
  192. }
  193. else {
  194. tex1Xsize1 = 1;
  195. while( tex1Xsize1 < gImXsize ) tex1Xsize1 *= 2;
  196. }
  197. tex1Ysize = 1;
  198. while( tex1Ysize < gImYsize ) tex1Ysize *= 2;
  199. tex2Xsize = 1;
  200. while( tex2Xsize < gImXsize/2 ) tex2Xsize *= 2;
  201. tex2Ysize = 1;
  202. while( tex2Ysize < gImYsize/2 ) tex2Ysize *= 2;
  203. }
  204. void argCleanup( void )
  205. {
  206. /*
  207. glutDestroyWindow( win );
  208. */
  209. }
  210. void argSwapBuffers( void )
  211. {
  212. glutSwapBuffers();
  213. }
  214. void argMainLoop( void (*mouseFunc)(int button, int state, int x, int y),
  215. void (*keyFunc)(unsigned char key, int x, int y),
  216. void (*mainFunc)(void) )
  217. {
  218. gMouseFunc = mouseFunc;
  219. gKeyFunc = keyFunc;
  220. gMainFunc = mainFunc;
  221. glutDisplayFunc( argInitLoop );
  222. glutMainLoop();
  223. }
  224. static void argInitLoop(void)
  225. {
  226. arUtilSleep( 500 );
  227. argDrawMode2D();
  228. if( gl_hmd_flag || gl_stereo_flag ) {
  229. glClearColor( 0.0, 0.0, 0.0, 0.0 );
  230. glClear(GL_COLOR_BUFFER_BIT);
  231. argInitStencil();
  232. argSwapBuffers();
  233. }
  234. glClearColor( 0.0, 0.0, 0.0, 0.0 );
  235. glClear(GL_COLOR_BUFFER_BIT);
  236. argSwapBuffers();
  237. glClear(GL_COLOR_BUFFER_BIT);
  238. argSwapBuffers();
  239. glutKeyboardFunc( gKeyFunc );
  240. glutMouseFunc( gMouseFunc );
  241. glutDisplayFunc( gMainFunc );
  242. glutIdleFunc( gMainFunc );
  243. }
  244. void argDrawMode2D( void )
  245. {
  246. glMatrixMode(GL_MODELVIEW);
  247. glLoadIdentity();
  248. glMatrixMode(GL_PROJECTION);
  249. glLoadIdentity();
  250. glOrtho(0, gWinXsize, 0, gWinYsize, -1.0, 1.0);
  251. glViewport(0, 0, gWinXsize, gWinYsize);
  252. argSetStencil( 0 );
  253. }
  254. void argDraw2dLeft( void )
  255. {
  256. if( gl_hmd_flag == 0 && gl_stereo_flag == 0 ) return;
  257. argSetStencil( LEFTEYE );
  258. }
  259. void argDraw2dRight( void )
  260. {
  261. if( gl_hmd_flag == 0 && gl_stereo_flag == 0 ) return;
  262. argSetStencil( RIGHTEYE );
  263. }
  264. void argDrawMode3D( void )
  265. {
  266. glMatrixMode(GL_MODELVIEW);
  267. glLoadIdentity();
  268. }
  269. void argDraw3dLeft( void )
  270. {
  271. if( gl_hmd_flag == 0 || gl_hmd_para_flag == 0 ) return;
  272. glViewport(0, gWinYsize-AR_HMD_YSIZE, AR_HMD_XSIZE, AR_HMD_YSIZE);
  273. argSetStencil( LEFTEYE );
  274. glMatrixMode(GL_PROJECTION);
  275. glLoadMatrixd( gl_lpara );
  276. }
  277. void argDraw3dRight( void )
  278. {
  279. if( gl_hmd_flag == 0 || gl_hmd_para_flag == 0 ) return;
  280. glViewport(0, gWinYsize-AR_HMD_YSIZE, AR_HMD_XSIZE, AR_HMD_YSIZE);
  281. argSetStencil( RIGHTEYE );
  282. glMatrixMode(GL_PROJECTION);
  283. glLoadMatrixd( gl_rpara );
  284. }
  285. void argDraw3dCamera( int xwin, int ywin )
  286. {
  287. if( xwin == 0 && ywin == 0 ) {
  288. glViewport(0, gWinYsize-(int)(gZoom*gImYsize),
  289. (int)(gZoom*gImXsize), (int)(gZoom*gImYsize));
  290. }
  291. else {
  292. glViewport((xwin-1)*gMiniXsize, gWinYsize-gYsize-ywin*gMiniYsize,
  293. gMiniXsize, gMiniYsize);
  294. }
  295. argSetStencil( 0 );
  296. glMatrixMode(GL_PROJECTION);
  297. glLoadMatrixd( gl_cpara );
  298. }
  299. void argConvGlpara( double para[3][4], double gl_para[16] )
  300. {
  301. int i, j;
  302. for( j = 0; j < 3; j++ ) {
  303. for( i = 0; i < 4; i++ ) {
  304. gl_para[i*4+j] = para[j][i];
  305. }
  306. }
  307. gl_para[0*4+3] = gl_para[1*4+3] = gl_para[2*4+3] = 0.0;
  308. gl_para[3*4+3] = 1.0;
  309. }
  310. void argDispImage( ARUint8 *image, int xwin, int ywin )
  311. {
  312. if( argDrawMode == AR_DRAW_BY_GL_DRAW_PIXELS ) {
  313. argDispImageDrawPixels( image, xwin, ywin );
  314. }
  315. else {
  316. if( xwin == 0 && ywin == 0 ) {
  317. glScissor(0, gWinYsize-(int)(gZoom*gImYsize),
  318. (int)(gZoom*gImXsize), (int)(gZoom*gImYsize));
  319. }
  320. else {
  321. glScissor((xwin-1)*gMiniXsize, gWinYsize-gYsize-ywin*gMiniYsize,
  322. gMiniXsize, gMiniYsize);
  323. }
  324. glEnable( GL_SCISSOR_TEST );
  325. /* glDisable( GL_DEPTH_TEST ); */
  326. if( useTextureRectangle
  327. && gImXsize < maxRectangleTextureSize
  328. && gImYsize < maxRectangleTextureSize ) {
  329. #ifdef AR_OPENGL_TEXTURE_RECTANGLE
  330. argDispImageTexRectangle( image, xwin, ywin, 0 );
  331. #endif
  332. }
  333. else {
  334. if( gImXsize > tex1Xsize1 )
  335. argDispImageTex3( image, xwin, ywin, 0 );
  336. else
  337. argDispImageTex4( image, xwin, ywin, 0 );
  338. }
  339. glDisable( GL_SCISSOR_TEST );
  340. }
  341. }
  342. static void argDispImageDrawPixels( ARUint8 *image, int xwin, int ywin )
  343. {
  344. float sx, sy;
  345. GLfloat zoom;
  346. if( xwin == 0 && ywin == 0 ) {
  347. zoom = gZoom;
  348. sx = 0;
  349. sy = gWinYsize - 0.5;
  350. }
  351. else if( xwin == 1 && ywin == 0 ) {
  352. zoom = gZoom;
  353. sx = gXsize;
  354. sy = gWinYsize - 0.5;
  355. }
  356. else {
  357. zoom = gZoom / (double)GMINI;
  358. sx = (xwin-1)*gMiniXsize;
  359. sy = gWinYsize - gYsize - (ywin-1)*gMiniYsize - 0.5;
  360. }
  361. glDisable(GL_TEXTURE_2D);
  362. glPixelZoom( zoom, -zoom);
  363. glRasterPos3f( sx, sy, -1.0 );
  364. #if (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ARGB)
  365. # ifdef AR_BIG_ENDIAN
  366. glDrawPixels( gImXsize, gImYsize, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, image );
  367. # else
  368. glDrawPixels( gImXsize, gImYsize, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, image );
  369. # endif
  370. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ABGR)
  371. glDrawPixels( gImXsize, gImYsize, GL_ABGR, GL_UNSIGNED_BYTE, image );
  372. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGRA)
  373. glDrawPixels( gImXsize, gImYsize, GL_BGRA, GL_UNSIGNED_BYTE, image );
  374. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGR)
  375. glDrawPixels( gImXsize, gImYsize, GL_BGR, GL_UNSIGNED_BYTE, image );
  376. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGBA)
  377. glDrawPixels( gImXsize, gImYsize, GL_RGBA, GL_UNSIGNED_BYTE, image );
  378. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGB)
  379. glDrawPixels( gImXsize, gImYsize, GL_RGB, GL_UNSIGNED_BYTE, image );
  380. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_MONO)
  381. glDrawPixels( gImXsize, gImYsize, GL_LUMINANCE, GL_UNSIGNED_BYTE, image );
  382. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_2vuy)
  383. # ifdef AR_BIG_ENDIAN
  384. glDrawPixels( gImXsize, gImYsize, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_REV_APPLE, image );
  385. # else
  386. glDrawPixels( gImXsize, gImYsize, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, image );
  387. # endif
  388. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_yuvs)
  389. # ifdef AR_BIG_ENDIAN
  390. glDrawPixels( gImXsize, gImYsize, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, image );
  391. # else
  392. glDrawPixels( gImXsize, gImYsize, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_REV_APPLE, image );
  393. # endif
  394. #else
  395. # error Unknown default pixel format defined in config.h
  396. #endif
  397. }
  398. #ifdef AR_OPENGL_TEXTURE_RECTANGLE
  399. static void argDispImageTexRectangle( ARUint8 *image, int xwin, int ywin, int mode )
  400. {
  401. static int initf = 1;
  402. static int flag[3][MINIWIN_MAX+2][2];
  403. static int listIndex[3][MINIWIN_MAX+2][2];
  404. static int old_size_adjust_factor = -1;
  405. double *dist_factor;
  406. double px, py, qy, z;
  407. double x1, x2;
  408. double y1, y2;
  409. double xx1, xx2;
  410. double yy1, yy2;
  411. int size_adjust_factor;
  412. int list, win;
  413. int i, j;
  414. switch( mode ) {
  415. case 0: dist_factor = &(gCparam.dist_factor[0]); break;
  416. case 1: dist_factor = &(gsCparam.dist_factorL[0]); break;
  417. case 2: dist_factor = &(gsCparam.dist_factorR[0]); break;
  418. default: return;
  419. }
  420. if( initf ) {
  421. for(j=0;j<3;j++) {
  422. for(i=0;i<MINIWIN_MAX+2;i++) flag[j][i][0] = flag[j][i][1] = 1;
  423. }
  424. initf = 0;
  425. }
  426. if( argTexmapMode == AR_DRAW_TEXTURE_HALF_IMAGE ) {
  427. size_adjust_factor = 2;
  428. list = 1;
  429. }
  430. else {
  431. size_adjust_factor = 1;
  432. list = 0;
  433. }
  434. if( xwin == 0 && ywin == 0 ) win = 0;
  435. else if( xwin == 1 && ywin == 0 ) win = 1;
  436. else win = gMiniXnum * (ywin-1) + xwin + 1;
  437. glEnable( AR_TEXTURE_RECTANGLE );
  438. glMatrixMode(GL_TEXTURE);
  439. glLoadIdentity();
  440. glMatrixMode(GL_MODELVIEW);
  441. glBindTexture( AR_TEXTURE_RECTANGLE, glid[3] );
  442. #ifdef APPLE_TEXTURE_FAST_TRANSFER
  443. glTexParameterf(AR_TEXTURE_RECTANGLE, GL_TEXTURE_PRIORITY, 0.0);
  444. glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, 1);
  445. #endif
  446. glPixelStorei( GL_UNPACK_ROW_LENGTH, gImXsize*size_adjust_factor );
  447. if( size_adjust_factor == old_size_adjust_factor ) {
  448. #if (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ARGB)
  449. # ifdef AR_BIG_ENDIAN
  450. glTexSubImage2D( AR_TEXTURE_RECTANGLE, 0, 0, 0, gImXsize, gImYsize/size_adjust_factor, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, image );
  451. # else
  452. glTexSubImage2D( AR_TEXTURE_RECTANGLE, 0, 0, 0, gImXsize, gImYsize/size_adjust_factor, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, image );
  453. # endif
  454. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ABGR)
  455. glTexSubImage2D( AR_TEXTURE_RECTANGLE, 0, 0, 0, gImXsize, gImYsize/size_adjust_factor, GL_ABGR, GL_UNSIGNED_BYTE, image );
  456. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGRA)
  457. glTexSubImage2D( AR_TEXTURE_RECTANGLE, 0, 0, 0, gImXsize, gImYsize/size_adjust_factor, GL_BGRA, GL_UNSIGNED_BYTE, image );
  458. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGR)
  459. glTexSubImage2D( AR_TEXTURE_RECTANGLE, 0, 0, 0, gImXsize, gImYsize/size_adjust_factor, GL_BGR, GL_UNSIGNED_BYTE, image );
  460. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGBA)
  461. glTexSubImage2D( AR_TEXTURE_RECTANGLE, 0, 0, 0, gImXsize, gImYsize/size_adjust_factor, GL_RGBA, GL_UNSIGNED_BYTE, image );
  462. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGB)
  463. glTexSubImage2D( AR_TEXTURE_RECTANGLE, 0, 0, 0, gImXsize, gImYsize/size_adjust_factor, GL_RGB, GL_UNSIGNED_BYTE, image );
  464. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_MONO)
  465. glTexSubImage2D( AR_TEXTURE_RECTANGLE, 0, 0, 0, gImXsize, gImYsize/size_adjust_factor, GL_LUMINANCE, GL_UNSIGNED_BYTE, image );
  466. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_2vuy)
  467. # ifdef AR_BIG_ENDIAN
  468. glTexSubImage2D( AR_TEXTURE_RECTANGLE, 0, 0, 0, gImXsize, gImYsize/size_adjust_factor, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_REV_APPLE, image );
  469. # else
  470. glTexSubImage2D( AR_TEXTURE_RECTANGLE, 0, 0, 0, gImXsize, gImYsize/size_adjust_factor, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, image );
  471. # endif
  472. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_yuvs)
  473. # ifdef AR_BIG_ENDIAN
  474. glTexSubImage2D( AR_TEXTURE_RECTANGLE, 0, 0, 0, gImXsize, gImYsize/size_adjust_factor, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, image );
  475. # else
  476. glTexSubImage2D( AR_TEXTURE_RECTANGLE, 0, 0, 0, gImXsize, gImYsize/size_adjust_factor, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_REV_8_8_APPLE, image );
  477. # endif
  478. #else
  479. # error Unknown default pixel format defined in config.h
  480. #endif
  481. }
  482. else {
  483. #if (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ARGB)
  484. # ifdef AR_BIG_ENDIAN
  485. glTexImage2D( AR_TEXTURE_RECTANGLE, 0, GL_RGBA, gImXsize, gImYsize/size_adjust_factor, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, image );
  486. # else
  487. glTexImage2D( AR_TEXTURE_RECTANGLE, 0, GL_RGBA, gImXsize, gImYsize/size_adjust_factor, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, image );
  488. # endif
  489. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ABGR)
  490. glTexImage2D( AR_TEXTURE_RECTANGLE, 0, GL_RGBA, gImXsize, gImYsize/size_adjust_factor, 0, GL_ABGR, GL_UNSIGNED_BYTE, image );
  491. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGRA)
  492. glTexImage2D( AR_TEXTURE_RECTANGLE, 0, GL_RGB, gImXsize, gImYsize/size_adjust_factor, 0, GL_BGRA, GL_UNSIGNED_BYTE, image );
  493. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGR)
  494. glTexImage2D( AR_TEXTURE_RECTANGLE, 0, GL_RGB, gImXsize, gImYsize/size_adjust_factor, 0, GL_BGR, GL_UNSIGNED_BYTE, image );
  495. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGBA)
  496. glTexImage2D( AR_TEXTURE_RECTANGLE, 0, GL_RGBA, gImXsize, gImYsize/size_adjust_factor, 0, GL_RGBA, GL_UNSIGNED_BYTE, image );
  497. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGB)
  498. glTexImage2D( AR_TEXTURE_RECTANGLE, 0, GL_RGB, gImXsize, gImYsize/size_adjust_factor, 0, GL_RGB, GL_UNSIGNED_BYTE, image );
  499. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_MONO)
  500. glTexImage2D( AR_TEXTURE_RECTANGLE, 0, GL_LUMINANCE, gImXsize, gImYsize/size_adjust_factor, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, image );
  501. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_2vuy)
  502. # ifdef AR_BIG_ENDIAN
  503. glTexImage2D( AR_TEXTURE_RECTANGLE, 0, GL_RGB, gImXsize, gImYsize/size_adjust_factor, 0, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_REV_APPLE, image );
  504. # else
  505. glTexImage2D( AR_TEXTURE_RECTANGLE, 0, GL_RGB, gImXsize, gImYsize/size_adjust_factor, 0, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, image );
  506. # endif
  507. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_yuvs)
  508. # ifdef AR_BIG_ENDIAN
  509. glTexImage2D( AR_TEXTURE_RECTANGLE, 0, GL_RGB, gImXsize, gImYsize/size_adjust_factor, 0, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, image );
  510. # else
  511. glTexImage2D( AR_TEXTURE_RECTANGLE, 0, GL_RGB, gImXsize, gImYsize/size_adjust_factor, 0, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_REV_APPLE, image );
  512. # endif
  513. #else
  514. # error Unknown default pixel format defined in config.h
  515. #endif
  516. old_size_adjust_factor = size_adjust_factor;
  517. }
  518. if( flag[mode][win][list] ) {
  519. listIndex[mode][win][list] = glGenLists(1);
  520. glNewList(listIndex[mode][win][list], GL_COMPILE_AND_EXECUTE);
  521. z = -1.0;
  522. qy = gImYsize * 0 / 20.0;
  523. for( j = 1; j <= 20; j++ ) {
  524. py = qy;
  525. qy = gImYsize * j / 20.0;
  526. glBegin( GL_QUAD_STRIP );
  527. for( i = 0; i <= 20; i++ ) {
  528. px = gImXsize * i / 20.0;
  529. arParamObserv2Ideal( dist_factor, px, py, &x1, &y1 );
  530. arParamObserv2Ideal( dist_factor, px, qy, &x2, &y2 );
  531. if( xwin == 0 && ywin == 0 ) {
  532. xx1 = x1 * gZoom;
  533. yy1 = gWinYsize - y1 * gZoom;
  534. xx2 = x2 * gZoom;
  535. yy2 = gWinYsize - y2 * gZoom;
  536. }
  537. else if( xwin == 1 && ywin == 0 ) {
  538. xx1 = gXsize + x1 * gZoom;
  539. yy1 = gWinYsize - y1 * gZoom;
  540. xx2 = gXsize + x2 * gZoom;
  541. yy2 = gWinYsize - y2 * gZoom;
  542. }
  543. else {
  544. xx1 = (xwin-1)*gMiniXsize + x1*gZoom/(double)GMINI;
  545. xx2 = (xwin-1)*gMiniXsize + x2*gZoom/(double)GMINI;
  546. yy1 = gWinYsize-gYsize-(ywin-1)*gMiniYsize - y1*gZoom/(double)GMINI;
  547. yy2 = gWinYsize-gYsize-(ywin-1)*gMiniYsize - y2*gZoom/(double)GMINI;
  548. }
  549. glTexCoord2d( px, py/size_adjust_factor ); glVertex3d( xx1, yy1, z );
  550. glTexCoord2d( px, qy/size_adjust_factor ); glVertex3d( xx2, yy2, z );
  551. }
  552. glEnd();
  553. }
  554. glEndList();
  555. flag[mode][win][list] = 0;
  556. }
  557. else {
  558. glCallList( listIndex[mode][win][list] );
  559. }
  560. glBindTexture( AR_TEXTURE_RECTANGLE, 0 );
  561. glDisable( AR_TEXTURE_RECTANGLE );
  562. glPixelStorei( GL_UNPACK_ROW_LENGTH, 0 );
  563. }
  564. #endif
  565. #ifndef _WIN32
  566. static void argDispImageTex4( ARUint8 *image, int xwin, int ywin, int mode )
  567. #else
  568. static void argDispImageTex4( ARUint8 *wimage, int xwin, int ywin, int mode )
  569. #endif
  570. {
  571. static int initf = 1;
  572. static int flag[3][MINIWIN_MAX+2][2];
  573. static int listIndex[3][MINIWIN_MAX+2][2];
  574. static int old_size_adjust_factor = -1;
  575. #ifdef _WIN32
  576. static ARUint8 *image = NULL;
  577. #endif
  578. double *dist_factor;
  579. double tsx, tsy, tex, tey;
  580. double px, py, qx, qy, z;
  581. double x1, x2, x3, x4;
  582. double y1, y2, y3, y4;
  583. double xx1, xx2, xx3, xx4;
  584. double yy1, yy2, yy3, yy4;
  585. int size_adjust_factor;
  586. int list, win;
  587. int i, j;
  588. switch( mode ) {
  589. case 0: dist_factor = &(gCparam.dist_factor[0]); break;
  590. case 1: dist_factor = &(gsCparam.dist_factorL[0]); break;
  591. case 2: dist_factor = &(gsCparam.dist_factorR[0]); break;
  592. default: return;
  593. }
  594. #ifdef _WIN32
  595. if( image == NULL ) {
  596. arMalloc(image,ARUint8,gImXsize*tex1Ysize*AR_PIX_SIZE_DEFAULT);
  597. }
  598. memcpy(image, wimage, gImXsize*gImYsize*AR_PIX_SIZE_DEFAULT);
  599. #endif
  600. if( initf ) {
  601. for(j=0;j<3;j++) {
  602. for(i=0;i<MINIWIN_MAX+2;i++) flag[j][i][0] = flag[j][i][1] = 1;
  603. }
  604. initf = 0;
  605. }
  606. if( argTexmapMode == AR_DRAW_TEXTURE_HALF_IMAGE ) {
  607. size_adjust_factor = 2;
  608. list = 1;
  609. }
  610. else {
  611. size_adjust_factor = 1;
  612. list = 0;
  613. }
  614. if( xwin == 0 && ywin == 0 ) win = 0;
  615. else if( xwin == 1 && ywin == 0 ) win = 1;
  616. else win = gMiniXnum * (ywin-1) + xwin + 1;
  617. glEnable( GL_TEXTURE_2D );
  618. glMatrixMode(GL_TEXTURE);
  619. glLoadIdentity();
  620. glMatrixMode(GL_MODELVIEW);
  621. glBindTexture( GL_TEXTURE_2D, glid[0] );
  622. #ifdef APPLE_TEXTURE_FAST_TRANSFER
  623. glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_PRIORITY, 0.0);
  624. glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, 1);
  625. #endif
  626. glPixelStorei( GL_UNPACK_ROW_LENGTH, gImXsize*size_adjust_factor );
  627. if( size_adjust_factor == old_size_adjust_factor ) {
  628. #if (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ARGB)
  629. # ifdef AR_BIG_ENDIAN
  630. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, image );
  631. # else
  632. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, image );
  633. # endif
  634. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ABGR)
  635. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_ABGR, GL_UNSIGNED_BYTE, image );
  636. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGRA)
  637. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_BGRA, GL_UNSIGNED_BYTE, image );
  638. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGR)
  639. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_BGR, GL_UNSIGNED_BYTE, image );
  640. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGBA)
  641. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_RGBA, GL_UNSIGNED_BYTE, image );
  642. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGB)
  643. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_RGB, GL_UNSIGNED_BYTE, image );
  644. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_MONO)
  645. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_LUMINANCE, GL_UNSIGNED_BYTE, image );
  646. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_2vuy)
  647. # ifdef AR_BIG_ENDIAN
  648. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_REV_APPLE, image );
  649. # else
  650. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, image );
  651. # endif
  652. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_yuvs)
  653. # ifdef AR_BIG_ENDIAN
  654. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, image );
  655. # else
  656. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_REV_APPLE, image );
  657. # endif
  658. #else
  659. # error Unknown default pixel format defined in config.h
  660. #endif
  661. }
  662. else {
  663. #if (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ARGB)
  664. # ifdef AR_BIG_ENDIAN
  665. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, image );
  666. # else
  667. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, image );
  668. # endif
  669. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ABGR)
  670. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_ABGR, GL_UNSIGNED_BYTE, image );
  671. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGRA)
  672. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_BGRA, GL_UNSIGNED_BYTE, image );
  673. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGR)
  674. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_BGR, GL_UNSIGNED_BYTE, image );
  675. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGBA)
  676. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_RGBA, GL_UNSIGNED_BYTE, image );
  677. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGB)
  678. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_RGB, GL_UNSIGNED_BYTE, image );
  679. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_MONO)
  680. glTexImage2D( GL_TEXTURE_2D, 0, GL_LUMINANCE, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, image );
  681. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_2vuy)
  682. # ifdef AR_BIG_ENDIAN
  683. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_REV_APPLE, image );
  684. # else
  685. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, image );
  686. # endif
  687. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_yuvs)
  688. # ifdef AR_BIG_ENDIAN
  689. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, image );
  690. # else
  691. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_REV_APPLE, image );
  692. # endif
  693. #else
  694. # error Unknown default pixel format defined in config.h
  695. #endif
  696. old_size_adjust_factor = size_adjust_factor;
  697. }
  698. if( flag[mode][win][list] ) {
  699. listIndex[mode][win][list] = glGenLists(1);
  700. glNewList(listIndex[mode][win][list], GL_COMPILE_AND_EXECUTE);
  701. z = -1.0;
  702. qy = gImYsize * 0 / 20.0;
  703. tey = ((double)gImYsize / (double)tex1Ysize) * (double)0 / 20.0;
  704. for( j = 1; j <= 20; j++ ) {
  705. py = qy;
  706. tsy = tey;
  707. qy = gImYsize * j / 20.0;
  708. tey = ((double)gImYsize / (double)tex1Ysize) * (double)j / 20.0;
  709. qx = gImXsize * 0 / 20.0;
  710. tex = ((double)gImXsize / (double)(tex1Xsize1)) * (double)0 / 20.0;
  711. for( i = 1; i <= 20; i++ ) {
  712. px = qx;
  713. tsx = tex;
  714. qx = gImXsize * i / 20.0;
  715. tex = ((double)gImXsize / (double)(tex1Xsize1)) * (double)i / 20.0;
  716. arParamObserv2Ideal( dist_factor, px, py, &x1, &y1 );
  717. arParamObserv2Ideal( dist_factor, qx, py, &x2, &y2 );
  718. arParamObserv2Ideal( dist_factor, qx, qy, &x3, &y3 );
  719. arParamObserv2Ideal( dist_factor, px, qy, &x4, &y4 );
  720. if( xwin == 0 && ywin == 0 ) {
  721. xx1 = x1 * gZoom ;
  722. yy1 = gWinYsize - y1 * gZoom;
  723. xx2 = x2 * gZoom ;
  724. yy2 = gWinYsize - y2 * gZoom;
  725. xx3 = x3 * gZoom ;
  726. yy3 = gWinYsize - y3 * gZoom;
  727. xx4 = x4 * gZoom ;
  728. yy4 = gWinYsize - y4 * gZoom;
  729. }
  730. else if( xwin == 1 && ywin == 0 ) {
  731. xx1 = gXsize + x1 * gZoom;
  732. yy1 = gWinYsize - y1 * gZoom;
  733. xx2 = gXsize + x2 * gZoom;
  734. yy2 = gWinYsize - y2 * gZoom;
  735. xx3 = gXsize + x3 * gZoom;
  736. yy3 = gWinYsize - y3 * gZoom;
  737. xx4 = gXsize + x4 * gZoom;
  738. yy4 = gWinYsize - y4 * gZoom;
  739. }
  740. else {
  741. xx1 = (xwin-1)*gMiniXsize + x1*gZoom/(double)GMINI;
  742. xx2 = (xwin-1)*gMiniXsize + x2*gZoom/(double)GMINI;
  743. xx3 = (xwin-1)*gMiniXsize + x3*gZoom/(double)GMINI;
  744. xx4 = (xwin-1)*gMiniXsize + x4*gZoom/(double)GMINI;
  745. yy1 = gWinYsize-gYsize-(ywin-1)*gMiniYsize - y1*gZoom/(double)GMINI;
  746. yy2 = gWinYsize-gYsize-(ywin-1)*gMiniYsize - y2*gZoom/(double)GMINI;
  747. yy3 = gWinYsize-gYsize-(ywin-1)*gMiniYsize - y3*gZoom/(double)GMINI;
  748. yy4 = gWinYsize-gYsize-(ywin-1)*gMiniYsize - y4*gZoom/(double)GMINI;
  749. }
  750. glBegin( GL_QUADS );
  751. glTexCoord2d( tsx, tsy ); glVertex3d( xx1, yy1, z );
  752. glTexCoord2d( tex, tsy ); glVertex3d( xx2, yy2, z );
  753. glTexCoord2d( tex, tey ); glVertex3d( xx3, yy3, z );
  754. glTexCoord2d( tsx, tey ); glVertex3d( xx4, yy4, z );
  755. glEnd();
  756. }
  757. }
  758. glEndList();
  759. flag[mode][win][list] = 0;
  760. }
  761. else {
  762. glCallList( listIndex[mode][win][list] );
  763. }
  764. glBindTexture( GL_TEXTURE_2D, 0 );
  765. glDisable( GL_TEXTURE_2D );
  766. glPixelStorei( GL_UNPACK_ROW_LENGTH, 0 );
  767. }
  768. #ifndef _WIN32
  769. static void argDispImageTex3( ARUint8 *image, int xwin, int ywin, int mode )
  770. #else
  771. static void argDispImageTex3( ARUint8 *wimage, int xwin, int ywin, int mode )
  772. #endif
  773. {
  774. static int initf = 1;
  775. static int flag[3][MINIWIN_MAX+2][2];
  776. static int listIndex[3][MINIWIN_MAX+2][2];
  777. static int old_size_adjust_factor = -1;
  778. #ifdef _WIN32
  779. static ARUint8 *image = NULL;
  780. #endif
  781. double *dist_factor;
  782. double tsx, tsy, tex, tey;
  783. double px, py, qx, qy, z;
  784. double x1, x2, x3, x4;
  785. double y1, y2, y3, y4;
  786. double xx1, xx2, xx3, xx4;
  787. double yy1, yy2, yy3, yy4;
  788. int size_adjust_factor;
  789. int win, list;
  790. int i, j;
  791. switch( mode ) {
  792. case 0: dist_factor = &(gCparam.dist_factor[0]); break;
  793. case 1: dist_factor = &(gsCparam.dist_factorL[0]); break;
  794. case 2: dist_factor = &(gsCparam.dist_factorR[0]); break;
  795. default: return;
  796. }
  797. #ifdef _WIN32
  798. if( image == NULL ) {
  799. arMalloc(image,ARUint8,gImXsize*tex1Ysize*AR_PIX_SIZE_DEFAULT);
  800. }
  801. memcpy(image, wimage, gImXsize*gImYsize*AR_PIX_SIZE_DEFAULT);
  802. #endif
  803. if( initf ) {
  804. for(j=0;j<3;j++) {
  805. for(i=0;i<=MINIWIN_MAX;i++) flag[j][i][0] = flag[j][i][1] = 1;
  806. }
  807. initf = 0;
  808. }
  809. if( argTexmapMode == AR_DRAW_TEXTURE_HALF_IMAGE ) {
  810. size_adjust_factor = 2;
  811. list = 1;
  812. }
  813. else {
  814. size_adjust_factor = 1;
  815. list = 0;
  816. }
  817. if( xwin == 0 && ywin == 0 ) win = 0;
  818. else if( xwin == 1 && ywin == 0 ) win = 1;
  819. else win = gMiniXnum * (ywin-1) + xwin + 1;
  820. glEnable( GL_TEXTURE_2D );
  821. glMatrixMode(GL_TEXTURE);
  822. glLoadIdentity();
  823. glMatrixMode(GL_MODELVIEW);
  824. glBindTexture( GL_TEXTURE_2D, glid[0] );
  825. #ifdef APPLE_TEXTURE_FAST_TRANSFER
  826. glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_PRIORITY, 0.0);
  827. glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, 1);
  828. #endif
  829. glPixelStorei( GL_UNPACK_ROW_LENGTH, gImXsize*size_adjust_factor );
  830. if( size_adjust_factor == old_size_adjust_factor ) {
  831. #if (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ARGB)
  832. # ifdef AR_BIG_ENDIAN
  833. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, image );
  834. # else
  835. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, image );
  836. # endif
  837. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ABGR)
  838. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_ABGR, GL_UNSIGNED_BYTE, image );
  839. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGRA)
  840. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_BGRA, GL_UNSIGNED_BYTE, image );
  841. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGR)
  842. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_BGR, GL_UNSIGNED_BYTE, image );
  843. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGBA)
  844. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_RGBA, GL_UNSIGNED_BYTE, image );
  845. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGB)
  846. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_RGB, GL_UNSIGNED_BYTE, image );
  847. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_MONO)
  848. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_LUMINANCE, GL_UNSIGNED_BYTE, image );
  849. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_2vuy)
  850. # ifdef AR_BIG_ENDIAN
  851. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_REV_APPLE, image );
  852. # else
  853. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, image );
  854. # endif
  855. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_yuvs)
  856. # ifdef AR_BIG_ENDIAN
  857. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, image );
  858. # else
  859. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_REV_APPLE, image );
  860. # endif
  861. #else
  862. # error Unknown default pixel format defined in config.h
  863. #endif
  864. }
  865. else {
  866. #if (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ARGB)
  867. # ifdef AR_BIG_ENDIAN
  868. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, image );
  869. # else
  870. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, image );
  871. # endif
  872. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ABGR)
  873. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_ABGR, GL_UNSIGNED_BYTE, image );
  874. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGRA)
  875. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_BGRA, GL_UNSIGNED_BYTE, image );
  876. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGR)
  877. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_BGR, GL_UNSIGNED_BYTE, image );
  878. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGBA)
  879. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_RGBA, GL_UNSIGNED_BYTE, image );
  880. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGB)
  881. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_RGB, GL_UNSIGNED_BYTE, image );
  882. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_MONO)
  883. glTexImage2D( GL_TEXTURE_2D, 0, GL_LUMINANCE, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, image );
  884. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_2vuy)
  885. # ifdef AR_BIG_ENDIAN
  886. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_REV_APPLE, image );
  887. # else
  888. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, image );
  889. # endif
  890. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_yuvs)
  891. # ifdef AR_BIG_ENDIAN
  892. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, image );
  893. # else
  894. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_REV_APPLE, image );
  895. # endif
  896. #else
  897. # error Unknown default pixel format defined in config.h
  898. #endif
  899. }
  900. if( flag[mode][win][list] ) {
  901. listIndex[mode][win][list] = glGenLists(2);
  902. glNewList(listIndex[mode][win][list], GL_COMPILE_AND_EXECUTE);
  903. z = -1.0;
  904. qy = gImYsize * 0 / 20.0;
  905. tey = ((double)gImYsize / (double)tex1Ysize) * (double)0 / 20.0;
  906. for( j = 1; j <= 20; j++ ) {
  907. py = qy;
  908. tsy = tey;
  909. qy = gImYsize * j / 20.0;
  910. tey = ((double)gImYsize / (double)tex1Ysize) * (double)j / 20.0;
  911. qx = tex1Xsize1 * 0 / 16.0;
  912. tex = (double)0 / 16.0;
  913. for( i = 1; i <= 16; i++ ) {
  914. px = qx;
  915. tsx = tex;
  916. qx = tex1Xsize1 * i / 16.0;
  917. tex = (double)i / 16.0;
  918. arParamObserv2Ideal( dist_factor, px, py, &x1, &y1 );
  919. arParamObserv2Ideal( dist_factor, qx, py, &x2, &y2 );
  920. arParamObserv2Ideal( dist_factor, qx, qy, &x3, &y3 );
  921. arParamObserv2Ideal( dist_factor, px, qy, &x4, &y4 );
  922. if( x2 < x1 ) continue;
  923. if( x4 > x3 ) continue;
  924. if( y4 < y1 ) continue;
  925. if( y3 < y2 ) continue;
  926. if( x2 < 0 || x3 < 0 ) continue;
  927. if( x1 > gImXsize || x4 > gImXsize ) continue;
  928. if( y4 < 0 || y3 < 0 ) continue;
  929. if( y1 > gImYsize || y2 > gImXsize ) continue;
  930. if( xwin == 0 && ywin == 0 ) {
  931. xx1 = x1 * gZoom;
  932. yy1 = gWinYsize - y1 * gZoom;
  933. xx2 = x2 * gZoom;
  934. yy2 = gWinYsize - y2 * gZoom;
  935. xx3 = x3 * gZoom;
  936. yy3 = gWinYsize - y3 * gZoom;
  937. xx4 = x4 * gZoom;
  938. yy4 = gWinYsize - y4 * gZoom;
  939. }
  940. else if( xwin == 1 && ywin == 0 ) {
  941. xx1 = gXsize + x1 * gZoom;
  942. yy1 = gWinYsize - y1 * gZoom;
  943. xx2 = gXsize + x2 * gZoom;
  944. yy2 = gWinYsize - y2 * gZoom;
  945. xx3 = gXsize + x3 * gZoom;
  946. yy3 = gWinYsize - y3 * gZoom;
  947. xx4 = gXsize + x4 * gZoom;
  948. yy4 = gWinYsize - y4 * gZoom;
  949. }
  950. else {
  951. xx1 = (xwin-1)*gMiniXsize + x1*gZoom/(double)GMINI;
  952. xx2 = (xwin-1)*gMiniXsize + x2*gZoom/(double)GMINI;
  953. xx3 = (xwin-1)*gMiniXsize + x3*gZoom/(double)GMINI;
  954. xx4 = (xwin-1)*gMiniXsize + x4*gZoom/(double)GMINI;
  955. yy1 = gWinYsize-gYsize-(ywin-1)*gMiniYsize - y1*gZoom/(double)GMINI;
  956. yy2 = gWinYsize-gYsize-(ywin-1)*gMiniYsize - y2*gZoom/(double)GMINI;
  957. yy3 = gWinYsize-gYsize-(ywin-1)*gMiniYsize - y3*gZoom/(double)GMINI;
  958. yy4 = gWinYsize-gYsize-(ywin-1)*gMiniYsize - y4*gZoom/(double)GMINI;
  959. }
  960. glBegin( GL_QUADS );
  961. glTexCoord2d( tsx, tsy ); glVertex3d( xx1, yy1, z );
  962. glTexCoord2d( tex, tsy ); glVertex3d( xx2, yy2, z );
  963. glTexCoord2d( tex, tey ); glVertex3d( xx3, yy3, z );
  964. glTexCoord2d( tsx, tey ); glVertex3d( xx4, yy4, z );
  965. glEnd();
  966. }
  967. }
  968. glEndList();
  969. }
  970. else {
  971. glCallList( listIndex[mode][win][list] );
  972. }
  973. glBindTexture( GL_TEXTURE_2D, glid[1] );
  974. #ifdef APPLE_TEXTURE_FAST_TRANSFER
  975. glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_PRIORITY, 0.0);
  976. glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, 1);
  977. #endif
  978. if( size_adjust_factor == old_size_adjust_factor ) {
  979. #if (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ARGB)
  980. # ifdef AR_BIG_ENDIAN
  981. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize2, tex1Ysize/size_adjust_factor, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
  982. # else
  983. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize2, tex1Ysize/size_adjust_factor, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
  984. # endif
  985. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ABGR)
  986. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize2, tex1Ysize/size_adjust_factor, GL_ABGR, GL_UNSIGNED_BYTE, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
  987. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGRA)
  988. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize2, tex1Ysize/size_adjust_factor, GL_BGRA, GL_UNSIGNED_BYTE, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
  989. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGR)
  990. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize2, tex1Ysize/size_adjust_factor, GL_BGR, GL_UNSIGNED_BYTE, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
  991. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGBA)
  992. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize2, tex1Ysize/size_adjust_factor, GL_RGBA, GL_UNSIGNED_BYTE, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
  993. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGB)
  994. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize2, tex1Ysize/size_adjust_factor, GL_RGB, GL_UNSIGNED_BYTE, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
  995. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_MONO)
  996. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize2, tex1Ysize/size_adjust_factor, GL_LUMINANCE, GL_UNSIGNED_BYTE, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
  997. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_2vuy)
  998. # ifdef AR_BIG_ENDIAN
  999. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize2, tex1Ysize/size_adjust_factor, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_REV_APPLE, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
  1000. # else
  1001. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize2, tex1Ysize/size_adjust_factor, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
  1002. # endif
  1003. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_yuvs)
  1004. # ifdef AR_BIG_ENDIAN
  1005. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize2, tex1Ysize/size_adjust_factor, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
  1006. # else
  1007. glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize2, tex1Ysize/size_adjust_factor, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_REV_APPLE, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
  1008. # endif
  1009. #else
  1010. # error Unknown default pixel format defined in config.h
  1011. #endif
  1012. }
  1013. else {
  1014. #if (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ARGB)
  1015. # ifdef AR_BIG_ENDIAN
  1016. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, tex1Xsize2, tex1Ysize/size_adjust_factor, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
  1017. # else
  1018. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, tex1Xsize2, tex1Ysize/size_adjust_factor, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
  1019. # endif
  1020. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ABGR)
  1021. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, tex1Xsize2, tex1Ysize/size_adjust_factor, 0, GL_ABGR, GL_UNSIGNED_BYTE, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
  1022. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGRA)
  1023. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize2, tex1Ysize/size_adjust_factor, 0, GL_BGRA, GL_UNSIGNED_BYTE, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
  1024. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGR)
  1025. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize2, tex1Ysize/size_adjust_factor, 0, GL_BGR, GL_UNSIGNED_BYTE, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
  1026. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGBA)
  1027. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, tex1Xsize2, tex1Ysize/size_adjust_factor, 0, GL_RGBA, GL_UNSIGNED_BYTE, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
  1028. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGB)
  1029. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize2, tex1Ysize/size_adjust_factor, 0, GL_RGB, GL_UNSIGNED_BYTE, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
  1030. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_MONO)
  1031. glTexImage2D( GL_TEXTURE_2D, 0, GL_LUMINANCE, tex1Xsize2, tex1Ysize/size_adjust_factor, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
  1032. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_2vuy)
  1033. # ifdef AR_BIG_ENDIAN
  1034. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize2, tex1Ysize/size_adjust_factor, 0, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_REV_APPLE, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
  1035. # else
  1036. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize2, tex1Ysize/size_adjust_factor, 0, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
  1037. # endif
  1038. #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_yuvs)
  1039. # ifdef AR_BIG_ENDIAN
  1040. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize2, tex1Ysize/size_adjust_factor, 0, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
  1041. # else
  1042. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize2, tex1Ysize/size_adjust_factor, 0, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_REV_APPLE, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
  1043. # endif
  1044. #else
  1045. # error Unknown default pixel format defined in config.h
  1046. #endif
  1047. old_size_adjust_factor = size_adjust_factor;
  1048. }
  1049. if( flag[mode][win][list] ) {
  1050. glNewList(listIndex[mode][win][list]+1, GL_COMPILE_AND_EXECUTE);
  1051. z = -1.0;
  1052. qy = gImYsize * 0 / 20.0;
  1053. tey = ((double)gImYsize / (double)tex1Ysize) * (double)0 / 20.0;
  1054. for( j = 1; j <= 20; j++ ) {
  1055. py = qy;
  1056. tsy = tey;
  1057. qy = gImYsize * j / 20.0;
  1058. tey = ((double)gImYsize / (double)tex1Ysize) * (double)j / 20.0;
  1059. qx = tex1Xsize1 + (gImXsize-tex1Xsize1) * 0 / 4.0;
  1060. tex = ((double)(gImXsize-tex1Xsize1) / (double)tex1Xsize2) * 0 / 4.0;
  1061. for( i = 1; i <= 4; i++ ) {
  1062. px = qx;
  1063. tsx = tex;
  1064. qx = tex1Xsize1 + (gImXsize-tex1Xsize1) * i / 4.0;
  1065. tex = ((double)(gImXsize-tex1Xsize1) / (double)tex1Xsize2) * i / 4.0;
  1066. arParamObserv2Ideal( dist_factor, px, py, &x1, &y1 );
  1067. arParamObserv2Ideal( dist_factor, qx, py, &x2, &y2 );
  1068. arParamObserv2Ideal( dist_factor, qx, qy, &x3, &y3 );
  1069. arParamObserv2Ideal( dist_factor, px, qy, &x4, &y4 );
  1070. if( x2 < x1 ) continue;
  1071. if( x4 > x3 ) continue;
  1072. if( y4 < y1 ) continue;
  1073. if( y3 < y2 ) continue;
  1074. if( x2 < 0 || x3 < 0 ) continue;
  1075. if( x1 > gImXsize || x4 > gImXsize ) continue;
  1076. if( y4 < 0 || y3 < 0 ) continue;
  1077. if( y1 > gImYsize || y2 > gImXsize ) continue;
  1078. if( xwin == 0 && ywin == 0 ) {
  1079. xx1 = x1 * gZoom;
  1080. yy1 = gWinYsize - y1 * gZoom;
  1081. xx2 = x2 * gZoom;
  1082. yy2 = gWinYsize - y2 * gZoom;
  1083. xx3 = x3 * gZoom;
  1084. yy3 = gWinYsize - y3 * gZoom;
  1085. xx4 = x4 * gZoom;
  1086. yy4 = gWinYsize - y4 * gZoom;
  1087. }
  1088. else if( xwin == 1 && ywin == 0 ) {

Large files files are truncated, but you can click here to view the full file