/lib/SRC/Gl/gsub.c
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
- #include <stdio.h>
- #include <stdlib.h>
- #if defined(_WIN32)
- #include <windows.h>
- #include <string.h>
- #endif
- #ifndef __APPLE__
- # include <GL/glut.h>
- # ifdef GL_VERSION_1_2
- # include <GL/glext.h>
- # endif
- #else
- # include <GLUT/glut.h>
- # include <OpenGL/glext.h>
- #endif
- #include <AR/config.h>
- #include <AR/param.h>
- #include <AR/ar.h>
- #include <AR/gsub.h>
- #ifndef GL_ABGR
- # define GL_ABGR GL_ABGR_EXT
- #endif
- #ifndef GL_BGRA
- # define GL_BGRA GL_BGRA_EXT
- #endif
- #ifndef GL_BGR
- # define GL_BGR GL_BGR_EXT
- #endif
- #ifndef GL_RGBA
- # define GL_RGBA GL_RGBA_EXT
- #endif
- #ifndef GL_RGB
- # define GL_RGB GL_RGB_EXT
- #endif
- #ifdef AR_OPENGL_TEXTURE_RECTANGLE
- # if defined(GL_TEXTURE_RECTANGLE_EXT)
- # define AR_TEXTURE_RECTANGLE GL_TEXTURE_RECTANGLE_EXT
- # elif defined(GL_TEXTURE_RECTANGLE_NV)
- # define AR_TEXTURE_RECTANGLE GL_TEXTURE_RECTANGLE_NV
- # else
- # undef AR_OPENGL_TEXTURE_RECTANGLE
- # endif
- #endif
- #define MINIWIN_MAX 8
- #define REVERSE_LR 1
- #define LEFTEYE 1
- #define RIGHTEYE 2
- #define GMINI 2
- int argDrawMode = DEFAULT_DRAW_MODE;
- int argTexmapMode = DEFAULT_DRAW_TEXTURE_IMAGE;
- static ARParam gCparam;
- static ARSParam gsCparam;
- static double gl_cpara[16];
- //static double gl_cparaL[16];
- //static double gl_cparaR[16];
- static double gl_lpara[16];
- static double gl_rpara[16];
- static int gl_hmd_flag = 0;
- static int gl_hmd_para_flag = 0;
- static int gl_stereo_flag = 0;
- //static int gl_twin_flag = 0;
- static double gZoom;
- static int gXsize, gYsize;
- static int gMiniXnum, gMiniYnum;
- static int gMiniXsize, gMiniYsize;
- static int gWinXsize, gWinYsize;
- static int gImXsize, gImYsize;
- static int win;
- static GLuint glid[4];
- static void (*gMouseFunc)(int button, int state, int x, int y);
- static void (*gKeyFunc)(unsigned char key, int x, int y);
- static void (*gMainFunc)(void);
- static void argInit2( int fullFlag );
- static void argInitLoop(void);
- static void argInitStencil(void);
- static void argSetStencil( int flag );
- static void argConvGLcpara2( double cparam[3][4], int width, int height, double gnear, double gfar, double m[16] );
- static int useTextureRectangle = 0;
- static GLint maxRectangleTextureSize = 0;
- static int tex1Xsize1 = 1;
- static int tex1Xsize2 = 1;
- static int tex1Ysize = 1;
- static int tex2Xsize = 1;
- static int tex2Ysize = 1;
- #ifdef AR_OPENGL_TEXTURE_RECTANGLE
- static void argDispImageTexRectangle( ARUint8 *image, int xwin, int ywin, int mode );
- #endif
- static void argDispImageTex3( ARUint8 *image, int xwin, int ywin, int mode );
- static void argDispImageTex4( ARUint8 *image, int xwin, int ywin, int mode );
- static void argDispHalfImageTex( ARUint8 *image, int xwin, int ywin, int mode );
- static void argDispImageDrawPixels( ARUint8 *image, int xwin, int ywin );
- static void argDispHalfImageDrawPixels( ARUint8 *image, int xwin, int ywin );
- void argInqSetting( int *hmdMode,
- int *gMiniXnum2, int *gMiniYnum2,
- void (**mouseFunc)(int button, int state, int x, int y),
- void (**keyFunc)(unsigned char key, int x, int y),
- void (**mainFunc)(void) )
- {
- *hmdMode = gl_hmd_flag;
- *gMiniXnum2 = gMiniXnum;
- *gMiniYnum2 = gMiniYnum;
- *mouseFunc = gMouseFunc;
- *keyFunc = gKeyFunc;
- *mainFunc = gMainFunc;
- }
- void argInit( ARParam *cparam, double zoom, int fullFlag, int xwin, int ywin, int hmd_flag )
- {
- int i;
- gl_hmd_flag = hmd_flag;
- gZoom = zoom;
- gImXsize = cparam->xsize;
- gImYsize = cparam->ysize;
- if( gl_hmd_flag == 0 ) {
- gXsize = (double)cparam->xsize * gZoom;
- gYsize = (double)cparam->ysize * gZoom;
- }
- else {
- gXsize = AR_HMD_XSIZE;
- gYsize = AR_HMD_YSIZE;
- }
- gMiniXsize = (double)cparam->xsize * gZoom / GMINI;
- gMiniYsize = (double)cparam->ysize * gZoom / GMINI;
- if( xwin * ywin > MINIWIN_MAX ) {
- if( xwin > MINIWIN_MAX ) xwin = MINIWIN_MAX;
- ywin = MINIWIN_MAX / xwin;
- }
- gMiniXnum = xwin;
- gMiniYnum = ywin;
- gWinXsize = (gMiniXsize*gMiniXnum > gXsize)?
- gMiniXsize*gMiniXnum: gXsize;
- gWinYsize = gYsize + gMiniYsize*gMiniYnum;
- gCparam = *cparam;
- for( i = 0; i < 4; i++ ) {
- gCparam.mat[1][i] = (gCparam.ysize-1)*(gCparam.mat[2][i]) - gCparam.mat[1][i];
- }
- argConvGLcpara( &gCparam, AR_GL_CLIP_NEAR, AR_GL_CLIP_FAR, gl_cpara );
- argInit2( fullFlag );
- }
- static void argInit2( int fullFlag )
- {
- glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);
- glutInitWindowPosition(0, 0);
- glutInitWindowSize(gWinXsize, gWinYsize);
- win = glutCreateWindow("");
- if( fullFlag ) {
- glutFullScreen();
- gWinXsize = glutGet(GLUT_SCREEN_WIDTH);
- gWinYsize = glutGet(GLUT_SCREEN_HEIGHT);
- }
- #ifdef AR_OPENGL_TEXTURE_RECTANGLE
- #if defined(GL_TEXTURE_RECTANGLE_EXT)
- if( glutExtensionSupported("GL_EXT_texture_rectangle") ) {
- useTextureRectangle = 1;
- glGetIntegerv(GL_MAX_RECTANGLE_TEXTURE_SIZE_EXT, &maxRectangleTextureSize);
- }
- #elif defined(GL_TEXTURE_RECTANGLE_NV)
- if( glutExtensionSupported("GL_NV_texture_rectangle") ) {
- useTextureRectangle = 1;
- glGetIntegerv(GL_MAX_RECTANGLE_TEXTURE_SIZE_NV, &maxRectangleTextureSize);
- }
- #endif
- #endif
- gMouseFunc = NULL;
- gKeyFunc = NULL;
- gMainFunc = NULL;
- glGenTextures(4, glid);
- glBindTexture( GL_TEXTURE_2D, glid[0] );
- glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );
- glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP );
- glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP );
- glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
- glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
- glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL );
- glBindTexture( GL_TEXTURE_2D, glid[1] );
- glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );
- glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP );
- glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP );
- glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
- glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
- glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL );
- glBindTexture( GL_TEXTURE_2D, glid[2] );
- glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );
- glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP );
- glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP );
- glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
- glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
- glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL );
- if( gImXsize > 512 ) {
- tex1Xsize1 = 512;
- tex1Xsize2 = 1;
- while( tex1Xsize2 < gImXsize - tex1Xsize1 ) tex1Xsize2 *= 2;
- }
- else {
- tex1Xsize1 = 1;
- while( tex1Xsize1 < gImXsize ) tex1Xsize1 *= 2;
- }
- tex1Ysize = 1;
- while( tex1Ysize < gImYsize ) tex1Ysize *= 2;
- tex2Xsize = 1;
- while( tex2Xsize < gImXsize/2 ) tex2Xsize *= 2;
- tex2Ysize = 1;
- while( tex2Ysize < gImYsize/2 ) tex2Ysize *= 2;
- }
- void argCleanup( void )
- {
- /*
- glutDestroyWindow( win );
- */
- }
- void argSwapBuffers( void )
- {
- glutSwapBuffers();
- }
- void argMainLoop( void (*mouseFunc)(int button, int state, int x, int y),
- void (*keyFunc)(unsigned char key, int x, int y),
- void (*mainFunc)(void) )
- {
- gMouseFunc = mouseFunc;
- gKeyFunc = keyFunc;
- gMainFunc = mainFunc;
- glutDisplayFunc( argInitLoop );
- glutMainLoop();
- }
- static void argInitLoop(void)
- {
- arUtilSleep( 500 );
- argDrawMode2D();
- if( gl_hmd_flag || gl_stereo_flag ) {
- glClearColor( 0.0, 0.0, 0.0, 0.0 );
- glClear(GL_COLOR_BUFFER_BIT);
- argInitStencil();
- argSwapBuffers();
- }
- glClearColor( 0.0, 0.0, 0.0, 0.0 );
- glClear(GL_COLOR_BUFFER_BIT);
- argSwapBuffers();
- glClear(GL_COLOR_BUFFER_BIT);
- argSwapBuffers();
- glutKeyboardFunc( gKeyFunc );
- glutMouseFunc( gMouseFunc );
- glutDisplayFunc( gMainFunc );
- glutIdleFunc( gMainFunc );
- }
- void argDrawMode2D( void )
- {
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glOrtho(0, gWinXsize, 0, gWinYsize, -1.0, 1.0);
- glViewport(0, 0, gWinXsize, gWinYsize);
- argSetStencil( 0 );
- }
- void argDraw2dLeft( void )
- {
- if( gl_hmd_flag == 0 && gl_stereo_flag == 0 ) return;
- argSetStencil( LEFTEYE );
- }
- void argDraw2dRight( void )
- {
- if( gl_hmd_flag == 0 && gl_stereo_flag == 0 ) return;
- argSetStencil( RIGHTEYE );
- }
- void argDrawMode3D( void )
- {
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- }
- void argDraw3dLeft( void )
- {
- if( gl_hmd_flag == 0 || gl_hmd_para_flag == 0 ) return;
- glViewport(0, gWinYsize-AR_HMD_YSIZE, AR_HMD_XSIZE, AR_HMD_YSIZE);
- argSetStencil( LEFTEYE );
- glMatrixMode(GL_PROJECTION);
- glLoadMatrixd( gl_lpara );
- }
- void argDraw3dRight( void )
- {
- if( gl_hmd_flag == 0 || gl_hmd_para_flag == 0 ) return;
- glViewport(0, gWinYsize-AR_HMD_YSIZE, AR_HMD_XSIZE, AR_HMD_YSIZE);
- argSetStencil( RIGHTEYE );
- glMatrixMode(GL_PROJECTION);
- glLoadMatrixd( gl_rpara );
- }
- void argDraw3dCamera( int xwin, int ywin )
- {
- if( xwin == 0 && ywin == 0 ) {
- glViewport(0, gWinYsize-(int)(gZoom*gImYsize),
- (int)(gZoom*gImXsize), (int)(gZoom*gImYsize));
- }
- else {
- glViewport((xwin-1)*gMiniXsize, gWinYsize-gYsize-ywin*gMiniYsize,
- gMiniXsize, gMiniYsize);
- }
- argSetStencil( 0 );
-
- glMatrixMode(GL_PROJECTION);
- glLoadMatrixd( gl_cpara );
- }
- void argConvGlpara( double para[3][4], double gl_para[16] )
- {
- int i, j;
- for( j = 0; j < 3; j++ ) {
- for( i = 0; i < 4; i++ ) {
- gl_para[i*4+j] = para[j][i];
- }
- }
- gl_para[0*4+3] = gl_para[1*4+3] = gl_para[2*4+3] = 0.0;
- gl_para[3*4+3] = 1.0;
- }
- void argDispImage( ARUint8 *image, int xwin, int ywin )
- {
- if( argDrawMode == AR_DRAW_BY_GL_DRAW_PIXELS ) {
- argDispImageDrawPixels( image, xwin, ywin );
- }
- else {
- if( xwin == 0 && ywin == 0 ) {
- glScissor(0, gWinYsize-(int)(gZoom*gImYsize),
- (int)(gZoom*gImXsize), (int)(gZoom*gImYsize));
- }
- else {
- glScissor((xwin-1)*gMiniXsize, gWinYsize-gYsize-ywin*gMiniYsize,
- gMiniXsize, gMiniYsize);
- }
- glEnable( GL_SCISSOR_TEST );
- /* glDisable( GL_DEPTH_TEST ); */
- if( useTextureRectangle
- && gImXsize < maxRectangleTextureSize
- && gImYsize < maxRectangleTextureSize ) {
- #ifdef AR_OPENGL_TEXTURE_RECTANGLE
- argDispImageTexRectangle( image, xwin, ywin, 0 );
- #endif
- }
- else {
- if( gImXsize > tex1Xsize1 )
- argDispImageTex3( image, xwin, ywin, 0 );
- else
- argDispImageTex4( image, xwin, ywin, 0 );
- }
- glDisable( GL_SCISSOR_TEST );
- }
- }
- static void argDispImageDrawPixels( ARUint8 *image, int xwin, int ywin )
- {
- float sx, sy;
- GLfloat zoom;
- if( xwin == 0 && ywin == 0 ) {
- zoom = gZoom;
- sx = 0;
- sy = gWinYsize - 0.5;
- }
- else if( xwin == 1 && ywin == 0 ) {
- zoom = gZoom;
- sx = gXsize;
- sy = gWinYsize - 0.5;
- }
- else {
- zoom = gZoom / (double)GMINI;
- sx = (xwin-1)*gMiniXsize;
- sy = gWinYsize - gYsize - (ywin-1)*gMiniYsize - 0.5;
- }
- glDisable(GL_TEXTURE_2D);
- glPixelZoom( zoom, -zoom);
- glRasterPos3f( sx, sy, -1.0 );
- #if (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ARGB)
- # ifdef AR_BIG_ENDIAN
- glDrawPixels( gImXsize, gImYsize, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, image );
- # else
- glDrawPixels( gImXsize, gImYsize, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, image );
- # endif
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ABGR)
- glDrawPixels( gImXsize, gImYsize, GL_ABGR, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGRA)
- glDrawPixels( gImXsize, gImYsize, GL_BGRA, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGR)
- glDrawPixels( gImXsize, gImYsize, GL_BGR, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGBA)
- glDrawPixels( gImXsize, gImYsize, GL_RGBA, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGB)
- glDrawPixels( gImXsize, gImYsize, GL_RGB, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_MONO)
- glDrawPixels( gImXsize, gImYsize, GL_LUMINANCE, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_2vuy)
- # ifdef AR_BIG_ENDIAN
- glDrawPixels( gImXsize, gImYsize, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_REV_APPLE, image );
- # else
- glDrawPixels( gImXsize, gImYsize, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, image );
- # endif
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_yuvs)
- # ifdef AR_BIG_ENDIAN
- glDrawPixels( gImXsize, gImYsize, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, image );
- # else
- glDrawPixels( gImXsize, gImYsize, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_REV_APPLE, image );
- # endif
- #else
- # error Unknown default pixel format defined in config.h
- #endif
- }
- #ifdef AR_OPENGL_TEXTURE_RECTANGLE
- static void argDispImageTexRectangle( ARUint8 *image, int xwin, int ywin, int mode )
- {
- static int initf = 1;
- static int flag[3][MINIWIN_MAX+2][2];
- static int listIndex[3][MINIWIN_MAX+2][2];
- static int old_size_adjust_factor = -1;
- double *dist_factor;
- double px, py, qy, z;
- double x1, x2;
- double y1, y2;
- double xx1, xx2;
- double yy1, yy2;
- int size_adjust_factor;
- int list, win;
- int i, j;
- switch( mode ) {
- case 0: dist_factor = &(gCparam.dist_factor[0]); break;
- case 1: dist_factor = &(gsCparam.dist_factorL[0]); break;
- case 2: dist_factor = &(gsCparam.dist_factorR[0]); break;
- default: return;
- }
- if( initf ) {
- for(j=0;j<3;j++) {
- for(i=0;i<MINIWIN_MAX+2;i++) flag[j][i][0] = flag[j][i][1] = 1;
- }
- initf = 0;
- }
- if( argTexmapMode == AR_DRAW_TEXTURE_HALF_IMAGE ) {
- size_adjust_factor = 2;
- list = 1;
- }
- else {
- size_adjust_factor = 1;
- list = 0;
- }
- if( xwin == 0 && ywin == 0 ) win = 0;
- else if( xwin == 1 && ywin == 0 ) win = 1;
- else win = gMiniXnum * (ywin-1) + xwin + 1;
- glEnable( AR_TEXTURE_RECTANGLE );
- glMatrixMode(GL_TEXTURE);
- glLoadIdentity();
- glMatrixMode(GL_MODELVIEW);
- glBindTexture( AR_TEXTURE_RECTANGLE, glid[3] );
- #ifdef APPLE_TEXTURE_FAST_TRANSFER
- glTexParameterf(AR_TEXTURE_RECTANGLE, GL_TEXTURE_PRIORITY, 0.0);
- glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, 1);
- #endif
- glPixelStorei( GL_UNPACK_ROW_LENGTH, gImXsize*size_adjust_factor );
- if( size_adjust_factor == old_size_adjust_factor ) {
- #if (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ARGB)
- # ifdef AR_BIG_ENDIAN
- glTexSubImage2D( AR_TEXTURE_RECTANGLE, 0, 0, 0, gImXsize, gImYsize/size_adjust_factor, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, image );
- # else
- glTexSubImage2D( AR_TEXTURE_RECTANGLE, 0, 0, 0, gImXsize, gImYsize/size_adjust_factor, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, image );
- # endif
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ABGR)
- glTexSubImage2D( AR_TEXTURE_RECTANGLE, 0, 0, 0, gImXsize, gImYsize/size_adjust_factor, GL_ABGR, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGRA)
- glTexSubImage2D( AR_TEXTURE_RECTANGLE, 0, 0, 0, gImXsize, gImYsize/size_adjust_factor, GL_BGRA, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGR)
- glTexSubImage2D( AR_TEXTURE_RECTANGLE, 0, 0, 0, gImXsize, gImYsize/size_adjust_factor, GL_BGR, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGBA)
- glTexSubImage2D( AR_TEXTURE_RECTANGLE, 0, 0, 0, gImXsize, gImYsize/size_adjust_factor, GL_RGBA, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGB)
- glTexSubImage2D( AR_TEXTURE_RECTANGLE, 0, 0, 0, gImXsize, gImYsize/size_adjust_factor, GL_RGB, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_MONO)
- glTexSubImage2D( AR_TEXTURE_RECTANGLE, 0, 0, 0, gImXsize, gImYsize/size_adjust_factor, GL_LUMINANCE, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_2vuy)
- # ifdef AR_BIG_ENDIAN
- glTexSubImage2D( AR_TEXTURE_RECTANGLE, 0, 0, 0, gImXsize, gImYsize/size_adjust_factor, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_REV_APPLE, image );
- # else
- glTexSubImage2D( AR_TEXTURE_RECTANGLE, 0, 0, 0, gImXsize, gImYsize/size_adjust_factor, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, image );
- # endif
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_yuvs)
- # ifdef AR_BIG_ENDIAN
- glTexSubImage2D( AR_TEXTURE_RECTANGLE, 0, 0, 0, gImXsize, gImYsize/size_adjust_factor, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, image );
- # else
- glTexSubImage2D( AR_TEXTURE_RECTANGLE, 0, 0, 0, gImXsize, gImYsize/size_adjust_factor, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_REV_8_8_APPLE, image );
- # endif
- #else
- # error Unknown default pixel format defined in config.h
- #endif
- }
- else {
- #if (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ARGB)
- # ifdef AR_BIG_ENDIAN
- glTexImage2D( AR_TEXTURE_RECTANGLE, 0, GL_RGBA, gImXsize, gImYsize/size_adjust_factor, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, image );
- # else
- glTexImage2D( AR_TEXTURE_RECTANGLE, 0, GL_RGBA, gImXsize, gImYsize/size_adjust_factor, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, image );
- # endif
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ABGR)
- glTexImage2D( AR_TEXTURE_RECTANGLE, 0, GL_RGBA, gImXsize, gImYsize/size_adjust_factor, 0, GL_ABGR, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGRA)
- glTexImage2D( AR_TEXTURE_RECTANGLE, 0, GL_RGB, gImXsize, gImYsize/size_adjust_factor, 0, GL_BGRA, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGR)
- glTexImage2D( AR_TEXTURE_RECTANGLE, 0, GL_RGB, gImXsize, gImYsize/size_adjust_factor, 0, GL_BGR, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGBA)
- glTexImage2D( AR_TEXTURE_RECTANGLE, 0, GL_RGBA, gImXsize, gImYsize/size_adjust_factor, 0, GL_RGBA, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGB)
- glTexImage2D( AR_TEXTURE_RECTANGLE, 0, GL_RGB, gImXsize, gImYsize/size_adjust_factor, 0, GL_RGB, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_MONO)
- glTexImage2D( AR_TEXTURE_RECTANGLE, 0, GL_LUMINANCE, gImXsize, gImYsize/size_adjust_factor, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_2vuy)
- # ifdef AR_BIG_ENDIAN
- 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 );
- # else
- glTexImage2D( AR_TEXTURE_RECTANGLE, 0, GL_RGB, gImXsize, gImYsize/size_adjust_factor, 0, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, image );
- # endif
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_yuvs)
- # ifdef AR_BIG_ENDIAN
- glTexImage2D( AR_TEXTURE_RECTANGLE, 0, GL_RGB, gImXsize, gImYsize/size_adjust_factor, 0, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, image );
- # else
- 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 );
- # endif
- #else
- # error Unknown default pixel format defined in config.h
- #endif
- old_size_adjust_factor = size_adjust_factor;
- }
- if( flag[mode][win][list] ) {
- listIndex[mode][win][list] = glGenLists(1);
- glNewList(listIndex[mode][win][list], GL_COMPILE_AND_EXECUTE);
- z = -1.0;
- qy = gImYsize * 0 / 20.0;
- for( j = 1; j <= 20; j++ ) {
- py = qy;
- qy = gImYsize * j / 20.0;
- glBegin( GL_QUAD_STRIP );
- for( i = 0; i <= 20; i++ ) {
- px = gImXsize * i / 20.0;
- arParamObserv2Ideal( dist_factor, px, py, &x1, &y1 );
- arParamObserv2Ideal( dist_factor, px, qy, &x2, &y2 );
- if( xwin == 0 && ywin == 0 ) {
- xx1 = x1 * gZoom;
- yy1 = gWinYsize - y1 * gZoom;
- xx2 = x2 * gZoom;
- yy2 = gWinYsize - y2 * gZoom;
- }
- else if( xwin == 1 && ywin == 0 ) {
- xx1 = gXsize + x1 * gZoom;
- yy1 = gWinYsize - y1 * gZoom;
- xx2 = gXsize + x2 * gZoom;
- yy2 = gWinYsize - y2 * gZoom;
- }
- else {
- xx1 = (xwin-1)*gMiniXsize + x1*gZoom/(double)GMINI;
- xx2 = (xwin-1)*gMiniXsize + x2*gZoom/(double)GMINI;
- yy1 = gWinYsize-gYsize-(ywin-1)*gMiniYsize - y1*gZoom/(double)GMINI;
- yy2 = gWinYsize-gYsize-(ywin-1)*gMiniYsize - y2*gZoom/(double)GMINI;
- }
- glTexCoord2d( px, py/size_adjust_factor ); glVertex3d( xx1, yy1, z );
- glTexCoord2d( px, qy/size_adjust_factor ); glVertex3d( xx2, yy2, z );
- }
- glEnd();
- }
- glEndList();
- flag[mode][win][list] = 0;
- }
- else {
- glCallList( listIndex[mode][win][list] );
- }
- glBindTexture( AR_TEXTURE_RECTANGLE, 0 );
- glDisable( AR_TEXTURE_RECTANGLE );
- glPixelStorei( GL_UNPACK_ROW_LENGTH, 0 );
- }
- #endif
- #ifndef _WIN32
- static void argDispImageTex4( ARUint8 *image, int xwin, int ywin, int mode )
- #else
- static void argDispImageTex4( ARUint8 *wimage, int xwin, int ywin, int mode )
- #endif
- {
- static int initf = 1;
- static int flag[3][MINIWIN_MAX+2][2];
- static int listIndex[3][MINIWIN_MAX+2][2];
- static int old_size_adjust_factor = -1;
- #ifdef _WIN32
- static ARUint8 *image = NULL;
- #endif
- double *dist_factor;
- double tsx, tsy, tex, tey;
- double px, py, qx, qy, z;
- double x1, x2, x3, x4;
- double y1, y2, y3, y4;
- double xx1, xx2, xx3, xx4;
- double yy1, yy2, yy3, yy4;
- int size_adjust_factor;
- int list, win;
- int i, j;
- switch( mode ) {
- case 0: dist_factor = &(gCparam.dist_factor[0]); break;
- case 1: dist_factor = &(gsCparam.dist_factorL[0]); break;
- case 2: dist_factor = &(gsCparam.dist_factorR[0]); break;
- default: return;
- }
- #ifdef _WIN32
- if( image == NULL ) {
- arMalloc(image,ARUint8,gImXsize*tex1Ysize*AR_PIX_SIZE_DEFAULT);
- }
- memcpy(image, wimage, gImXsize*gImYsize*AR_PIX_SIZE_DEFAULT);
- #endif
- if( initf ) {
- for(j=0;j<3;j++) {
- for(i=0;i<MINIWIN_MAX+2;i++) flag[j][i][0] = flag[j][i][1] = 1;
- }
- initf = 0;
- }
- if( argTexmapMode == AR_DRAW_TEXTURE_HALF_IMAGE ) {
- size_adjust_factor = 2;
- list = 1;
- }
- else {
- size_adjust_factor = 1;
- list = 0;
- }
- if( xwin == 0 && ywin == 0 ) win = 0;
- else if( xwin == 1 && ywin == 0 ) win = 1;
- else win = gMiniXnum * (ywin-1) + xwin + 1;
- glEnable( GL_TEXTURE_2D );
- glMatrixMode(GL_TEXTURE);
- glLoadIdentity();
- glMatrixMode(GL_MODELVIEW);
- glBindTexture( GL_TEXTURE_2D, glid[0] );
- #ifdef APPLE_TEXTURE_FAST_TRANSFER
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_PRIORITY, 0.0);
- glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, 1);
- #endif
- glPixelStorei( GL_UNPACK_ROW_LENGTH, gImXsize*size_adjust_factor );
- if( size_adjust_factor == old_size_adjust_factor ) {
- #if (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ARGB)
- # ifdef AR_BIG_ENDIAN
- glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, image );
- # else
- glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, image );
- # endif
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ABGR)
- glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_ABGR, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGRA)
- glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_BGRA, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGR)
- glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_BGR, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGBA)
- glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_RGBA, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGB)
- glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_RGB, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_MONO)
- glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_LUMINANCE, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_2vuy)
- # ifdef AR_BIG_ENDIAN
- glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_REV_APPLE, image );
- # else
- glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, image );
- # endif
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_yuvs)
- # ifdef AR_BIG_ENDIAN
- glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, image );
- # else
- glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_REV_APPLE, image );
- # endif
- #else
- # error Unknown default pixel format defined in config.h
- #endif
- }
- else {
- #if (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ARGB)
- # ifdef AR_BIG_ENDIAN
- glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, image );
- # else
- glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, image );
- # endif
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ABGR)
- glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_ABGR, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGRA)
- glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_BGRA, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGR)
- glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_BGR, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGBA)
- glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_RGBA, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGB)
- glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_RGB, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_MONO)
- glTexImage2D( GL_TEXTURE_2D, 0, GL_LUMINANCE, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_2vuy)
- # ifdef AR_BIG_ENDIAN
- 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 );
- # else
- glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, image );
- # endif
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_yuvs)
- # ifdef AR_BIG_ENDIAN
- glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, image );
- # else
- 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 );
- # endif
- #else
- # error Unknown default pixel format defined in config.h
- #endif
- old_size_adjust_factor = size_adjust_factor;
- }
- if( flag[mode][win][list] ) {
- listIndex[mode][win][list] = glGenLists(1);
- glNewList(listIndex[mode][win][list], GL_COMPILE_AND_EXECUTE);
- z = -1.0;
- qy = gImYsize * 0 / 20.0;
- tey = ((double)gImYsize / (double)tex1Ysize) * (double)0 / 20.0;
- for( j = 1; j <= 20; j++ ) {
- py = qy;
- tsy = tey;
- qy = gImYsize * j / 20.0;
- tey = ((double)gImYsize / (double)tex1Ysize) * (double)j / 20.0;
- qx = gImXsize * 0 / 20.0;
- tex = ((double)gImXsize / (double)(tex1Xsize1)) * (double)0 / 20.0;
- for( i = 1; i <= 20; i++ ) {
- px = qx;
- tsx = tex;
- qx = gImXsize * i / 20.0;
- tex = ((double)gImXsize / (double)(tex1Xsize1)) * (double)i / 20.0;
- arParamObserv2Ideal( dist_factor, px, py, &x1, &y1 );
- arParamObserv2Ideal( dist_factor, qx, py, &x2, &y2 );
- arParamObserv2Ideal( dist_factor, qx, qy, &x3, &y3 );
- arParamObserv2Ideal( dist_factor, px, qy, &x4, &y4 );
- if( xwin == 0 && ywin == 0 ) {
- xx1 = x1 * gZoom ;
- yy1 = gWinYsize - y1 * gZoom;
- xx2 = x2 * gZoom ;
- yy2 = gWinYsize - y2 * gZoom;
- xx3 = x3 * gZoom ;
- yy3 = gWinYsize - y3 * gZoom;
- xx4 = x4 * gZoom ;
- yy4 = gWinYsize - y4 * gZoom;
- }
- else if( xwin == 1 && ywin == 0 ) {
- xx1 = gXsize + x1 * gZoom;
- yy1 = gWinYsize - y1 * gZoom;
- xx2 = gXsize + x2 * gZoom;
- yy2 = gWinYsize - y2 * gZoom;
- xx3 = gXsize + x3 * gZoom;
- yy3 = gWinYsize - y3 * gZoom;
- xx4 = gXsize + x4 * gZoom;
- yy4 = gWinYsize - y4 * gZoom;
- }
- else {
- xx1 = (xwin-1)*gMiniXsize + x1*gZoom/(double)GMINI;
- xx2 = (xwin-1)*gMiniXsize + x2*gZoom/(double)GMINI;
- xx3 = (xwin-1)*gMiniXsize + x3*gZoom/(double)GMINI;
- xx4 = (xwin-1)*gMiniXsize + x4*gZoom/(double)GMINI;
- yy1 = gWinYsize-gYsize-(ywin-1)*gMiniYsize - y1*gZoom/(double)GMINI;
- yy2 = gWinYsize-gYsize-(ywin-1)*gMiniYsize - y2*gZoom/(double)GMINI;
- yy3 = gWinYsize-gYsize-(ywin-1)*gMiniYsize - y3*gZoom/(double)GMINI;
- yy4 = gWinYsize-gYsize-(ywin-1)*gMiniYsize - y4*gZoom/(double)GMINI;
- }
- glBegin( GL_QUADS );
- glTexCoord2d( tsx, tsy ); glVertex3d( xx1, yy1, z );
- glTexCoord2d( tex, tsy ); glVertex3d( xx2, yy2, z );
- glTexCoord2d( tex, tey ); glVertex3d( xx3, yy3, z );
- glTexCoord2d( tsx, tey ); glVertex3d( xx4, yy4, z );
- glEnd();
- }
- }
- glEndList();
- flag[mode][win][list] = 0;
- }
- else {
- glCallList( listIndex[mode][win][list] );
- }
- glBindTexture( GL_TEXTURE_2D, 0 );
- glDisable( GL_TEXTURE_2D );
- glPixelStorei( GL_UNPACK_ROW_LENGTH, 0 );
- }
- #ifndef _WIN32
- static void argDispImageTex3( ARUint8 *image, int xwin, int ywin, int mode )
- #else
- static void argDispImageTex3( ARUint8 *wimage, int xwin, int ywin, int mode )
- #endif
- {
- static int initf = 1;
- static int flag[3][MINIWIN_MAX+2][2];
- static int listIndex[3][MINIWIN_MAX+2][2];
- static int old_size_adjust_factor = -1;
- #ifdef _WIN32
- static ARUint8 *image = NULL;
- #endif
- double *dist_factor;
- double tsx, tsy, tex, tey;
- double px, py, qx, qy, z;
- double x1, x2, x3, x4;
- double y1, y2, y3, y4;
- double xx1, xx2, xx3, xx4;
- double yy1, yy2, yy3, yy4;
- int size_adjust_factor;
- int win, list;
- int i, j;
- switch( mode ) {
- case 0: dist_factor = &(gCparam.dist_factor[0]); break;
- case 1: dist_factor = &(gsCparam.dist_factorL[0]); break;
- case 2: dist_factor = &(gsCparam.dist_factorR[0]); break;
- default: return;
- }
- #ifdef _WIN32
- if( image == NULL ) {
- arMalloc(image,ARUint8,gImXsize*tex1Ysize*AR_PIX_SIZE_DEFAULT);
- }
- memcpy(image, wimage, gImXsize*gImYsize*AR_PIX_SIZE_DEFAULT);
- #endif
- if( initf ) {
- for(j=0;j<3;j++) {
- for(i=0;i<=MINIWIN_MAX;i++) flag[j][i][0] = flag[j][i][1] = 1;
- }
- initf = 0;
- }
- if( argTexmapMode == AR_DRAW_TEXTURE_HALF_IMAGE ) {
- size_adjust_factor = 2;
- list = 1;
- }
- else {
- size_adjust_factor = 1;
- list = 0;
- }
- if( xwin == 0 && ywin == 0 ) win = 0;
- else if( xwin == 1 && ywin == 0 ) win = 1;
- else win = gMiniXnum * (ywin-1) + xwin + 1;
- glEnable( GL_TEXTURE_2D );
- glMatrixMode(GL_TEXTURE);
- glLoadIdentity();
- glMatrixMode(GL_MODELVIEW);
- glBindTexture( GL_TEXTURE_2D, glid[0] );
- #ifdef APPLE_TEXTURE_FAST_TRANSFER
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_PRIORITY, 0.0);
- glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, 1);
- #endif
- glPixelStorei( GL_UNPACK_ROW_LENGTH, gImXsize*size_adjust_factor );
- if( size_adjust_factor == old_size_adjust_factor ) {
- #if (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ARGB)
- # ifdef AR_BIG_ENDIAN
- glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, image );
- # else
- glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, image );
- # endif
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ABGR)
- glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_ABGR, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGRA)
- glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_BGRA, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGR)
- glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_BGR, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGBA)
- glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_RGBA, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGB)
- glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_RGB, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_MONO)
- glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_LUMINANCE, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_2vuy)
- # ifdef AR_BIG_ENDIAN
- glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_REV_APPLE, image );
- # else
- glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, image );
- # endif
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_yuvs)
- # ifdef AR_BIG_ENDIAN
- glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, image );
- # else
- glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize1, tex1Ysize/size_adjust_factor, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_REV_APPLE, image );
- # endif
- #else
- # error Unknown default pixel format defined in config.h
- #endif
- }
- else {
- #if (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ARGB)
- # ifdef AR_BIG_ENDIAN
- glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, image );
- # else
- glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, image );
- # endif
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ABGR)
- glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_ABGR, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGRA)
- glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_BGRA, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGR)
- glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_BGR, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGBA)
- glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_RGBA, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGB)
- glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_RGB, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_MONO)
- glTexImage2D( GL_TEXTURE_2D, 0, GL_LUMINANCE, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, image );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_2vuy)
- # ifdef AR_BIG_ENDIAN
- 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 );
- # else
- glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, image );
- # endif
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_yuvs)
- # ifdef AR_BIG_ENDIAN
- glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, image );
- # else
- 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 );
- # endif
- #else
- # error Unknown default pixel format defined in config.h
- #endif
- }
- if( flag[mode][win][list] ) {
- listIndex[mode][win][list] = glGenLists(2);
- glNewList(listIndex[mode][win][list], GL_COMPILE_AND_EXECUTE);
- z = -1.0;
- qy = gImYsize * 0 / 20.0;
- tey = ((double)gImYsize / (double)tex1Ysize) * (double)0 / 20.0;
- for( j = 1; j <= 20; j++ ) {
- py = qy;
- tsy = tey;
- qy = gImYsize * j / 20.0;
- tey = ((double)gImYsize / (double)tex1Ysize) * (double)j / 20.0;
- qx = tex1Xsize1 * 0 / 16.0;
- tex = (double)0 / 16.0;
- for( i = 1; i <= 16; i++ ) {
- px = qx;
- tsx = tex;
- qx = tex1Xsize1 * i / 16.0;
- tex = (double)i / 16.0;
- arParamObserv2Ideal( dist_factor, px, py, &x1, &y1 );
- arParamObserv2Ideal( dist_factor, qx, py, &x2, &y2 );
- arParamObserv2Ideal( dist_factor, qx, qy, &x3, &y3 );
- arParamObserv2Ideal( dist_factor, px, qy, &x4, &y4 );
- if( x2 < x1 ) continue;
- if( x4 > x3 ) continue;
- if( y4 < y1 ) continue;
- if( y3 < y2 ) continue;
- if( x2 < 0 || x3 < 0 ) continue;
- if( x1 > gImXsize || x4 > gImXsize ) continue;
- if( y4 < 0 || y3 < 0 ) continue;
- if( y1 > gImYsize || y2 > gImXsize ) continue;
- if( xwin == 0 && ywin == 0 ) {
- xx1 = x1 * gZoom;
- yy1 = gWinYsize - y1 * gZoom;
- xx2 = x2 * gZoom;
- yy2 = gWinYsize - y2 * gZoom;
- xx3 = x3 * gZoom;
- yy3 = gWinYsize - y3 * gZoom;
- xx4 = x4 * gZoom;
- yy4 = gWinYsize - y4 * gZoom;
- }
- else if( xwin == 1 && ywin == 0 ) {
- xx1 = gXsize + x1 * gZoom;
- yy1 = gWinYsize - y1 * gZoom;
- xx2 = gXsize + x2 * gZoom;
- yy2 = gWinYsize - y2 * gZoom;
- xx3 = gXsize + x3 * gZoom;
- yy3 = gWinYsize - y3 * gZoom;
- xx4 = gXsize + x4 * gZoom;
- yy4 = gWinYsize - y4 * gZoom;
- }
- else {
- xx1 = (xwin-1)*gMiniXsize + x1*gZoom/(double)GMINI;
- xx2 = (xwin-1)*gMiniXsize + x2*gZoom/(double)GMINI;
- xx3 = (xwin-1)*gMiniXsize + x3*gZoom/(double)GMINI;
- xx4 = (xwin-1)*gMiniXsize + x4*gZoom/(double)GMINI;
- yy1 = gWinYsize-gYsize-(ywin-1)*gMiniYsize - y1*gZoom/(double)GMINI;
- yy2 = gWinYsize-gYsize-(ywin-1)*gMiniYsize - y2*gZoom/(double)GMINI;
- yy3 = gWinYsize-gYsize-(ywin-1)*gMiniYsize - y3*gZoom/(double)GMINI;
- yy4 = gWinYsize-gYsize-(ywin-1)*gMiniYsize - y4*gZoom/(double)GMINI;
- }
- glBegin( GL_QUADS );
- glTexCoord2d( tsx, tsy ); glVertex3d( xx1, yy1, z );
- glTexCoord2d( tex, tsy ); glVertex3d( xx2, yy2, z );
- glTexCoord2d( tex, tey ); glVertex3d( xx3, yy3, z );
- glTexCoord2d( tsx, tey ); glVertex3d( xx4, yy4, z );
- glEnd();
- }
- }
- glEndList();
- }
- else {
- glCallList( listIndex[mode][win][list] );
- }
- glBindTexture( GL_TEXTURE_2D, glid[1] );
- #ifdef APPLE_TEXTURE_FAST_TRANSFER
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_PRIORITY, 0.0);
- glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, 1);
- #endif
- if( size_adjust_factor == old_size_adjust_factor ) {
- #if (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ARGB)
- # ifdef AR_BIG_ENDIAN
- 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 );
- # else
- 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 );
- # endif
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ABGR)
- glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize2, tex1Ysize/size_adjust_factor, GL_ABGR, GL_UNSIGNED_BYTE, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGRA)
- glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize2, tex1Ysize/size_adjust_factor, GL_BGRA, GL_UNSIGNED_BYTE, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGR)
- glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize2, tex1Ysize/size_adjust_factor, GL_BGR, GL_UNSIGNED_BYTE, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGBA)
- glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize2, tex1Ysize/size_adjust_factor, GL_RGBA, GL_UNSIGNED_BYTE, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGB)
- glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize2, tex1Ysize/size_adjust_factor, GL_RGB, GL_UNSIGNED_BYTE, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_MONO)
- glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex1Xsize2, tex1Ysize/size_adjust_factor, GL_LUMINANCE, GL_UNSIGNED_BYTE, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_2vuy)
- # ifdef AR_BIG_ENDIAN
- 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 );
- # else
- 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 );
- # endif
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_yuvs)
- # ifdef AR_BIG_ENDIAN
- 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 );
- # else
- 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 );
- # endif
- #else
- # error Unknown default pixel format defined in config.h
- #endif
- }
- else {
- #if (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ARGB)
- # ifdef AR_BIG_ENDIAN
- 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 );
- # else
- 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 );
- # endif
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ABGR)
- glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, tex1Xsize2, tex1Ysize/size_adjust_factor, 0, GL_ABGR, GL_UNSIGNED_BYTE, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGRA)
- glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize2, tex1Ysize/size_adjust_factor, 0, GL_BGRA, GL_UNSIGNED_BYTE, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGR)
- glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize2, tex1Ysize/size_adjust_factor, 0, GL_BGR, GL_UNSIGNED_BYTE, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGBA)
- glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, tex1Xsize2, tex1Ysize/size_adjust_factor, 0, GL_RGBA, GL_UNSIGNED_BYTE, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGB)
- glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex1Xsize2, tex1Ysize/size_adjust_factor, 0, GL_RGB, GL_UNSIGNED_BYTE, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_MONO)
- glTexImage2D( GL_TEXTURE_2D, 0, GL_LUMINANCE, tex1Xsize2, tex1Ysize/size_adjust_factor, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, image+tex1Xsize1*AR_PIX_SIZE_DEFAULT );
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_2vuy)
- # ifdef AR_BIG_ENDIAN
- 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 );
- # else
- 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 );
- # endif
- #elif (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_yuvs)
- # ifdef AR_BIG_ENDIAN
- 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 );
- # else
- 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 );
- # endif
- #else
- # error Unknown default pixel format defined in config.h
- #endif
- old_size_adjust_factor = size_adjust_factor;
- }
- if( flag[mode][win][list] ) {
- glNewList(listIndex[mode][win][list]+1, GL_COMPILE_AND_EXECUTE);
- z = -1.0;
- qy = gImYsize * 0 / 20.0;
- tey = ((double)gImYsize / (double)tex1Ysize) * (double)0 / 20.0;
- for( j = 1; j <= 20; j++ ) {
- py = qy;
- tsy = tey;
- qy = gImYsize * j / 20.0;
- tey = ((double)gImYsize / (double)tex1Ysize) * (double)j / 20.0;
- qx = tex1Xsize1 + (gImXsize-tex1Xsize1) * 0 / 4.0;
- tex = ((double)(gImXsize-tex1Xsize1) / (double)tex1Xsize2) * 0 / 4.0;
- for( i = 1; i <= 4; i++ ) {
- px = qx;
- tsx = tex;
- qx = tex1Xsize1 + (gImXsize-tex1Xsize1) * i / 4.0;
- tex = ((double)(gImXsize-tex1Xsize1) / (double)tex1Xsize2) * i / 4.0;
- arParamObserv2Ideal( dist_factor, px, py, &x1, &y1 );
- arParamObserv2Ideal( dist_factor, qx, py, &x2, &y2 );
- arParamObserv2Ideal( dist_factor, qx, qy, &x3, &y3 );
- arParamObserv2Ideal( dist_factor, px, qy, &x4, &y4 );
- if( x2 < x1 ) continue;
- if( x4 > x3 ) continue;
- if( y4 < y1 ) continue;
- if( y3 < y2 ) continue;
- if( x2 < 0 || x3 < 0 ) continue;
- if( x1 > gImXsize || x4 > gImXsize ) continue;
- if( y4 < 0 || y3 < 0 ) continue;
- if( y1 > gImYsize || y2 > gImXsize ) continue;
- if( xwin == 0 && ywin == 0 ) {
- xx1 = x1 * gZoom;
- yy1 = gWinYsize - y1 * gZoom;
- xx2 = x2 * gZoom;
- yy2 = gWinYsize - y2 * gZoom;
- xx3 = x3 * gZoom;
- yy3 = gWinYsize - y3 * gZoom;
- xx4 = x4 * gZoom;
- yy4 = gWinYsize - y4 * gZoom;
- }
- else if( xwin == 1 && ywin == 0 ) {
- …
Large files files are truncated, but you can click here to view the full file