misc/libfreetype/src/tools/test_bbox.c
branchwebgl
changeset 9521 8054d9d775fd
parent 9282 92af50454cf2
parent 9519 b8b5c82eb61b
child 9950 2759212a27de
equal deleted inserted replaced
9282:92af50454cf2 9521:8054d9d775fd
     1 #include <ft2build.h>
       
     2 #include FT_FREETYPE_H
       
     3 #include FT_BBOX_H
       
     4 
       
     5 
       
     6 #include <time.h>    /* for clock() */
       
     7 
       
     8 /* SunOS 4.1.* does not define CLOCKS_PER_SEC, so include <sys/param.h> */
       
     9 /* to get the HZ macro which is the equivalent.                         */
       
    10 #if defined(__sun__) && !defined(SVR4) && !defined(__SVR4)
       
    11 #include <sys/param.h>
       
    12 #define CLOCKS_PER_SEC HZ
       
    13 #endif
       
    14 
       
    15   static long
       
    16   get_time( void )
       
    17   {
       
    18     return clock() * 10000L / CLOCKS_PER_SEC;
       
    19   }
       
    20 
       
    21 
       
    22 
       
    23 
       
    24   /* test bbox computations */
       
    25 
       
    26 #define  XSCALE    65536
       
    27 #define  XX(x)     ((FT_Pos)(x*XSCALE))
       
    28 #define  XVEC(x,y)  { XX(x), XX(y) }
       
    29 #define  XVAL(x)   ((x)/(1.0*XSCALE))
       
    30 
       
    31   /* dummy outline #1 */
       
    32   static FT_Vector  dummy_vec_1[4] =
       
    33   {
       
    34 #if 1
       
    35     XVEC( 408.9111, 535.3164 ),
       
    36     XVEC( 455.8887, 634.396  ),
       
    37     XVEC( -37.8765, 786.2207 ),
       
    38     XVEC( 164.6074, 535.3164 )
       
    39 #else
       
    40     { (FT_Int32)0x0198E93DL , (FT_Int32)0x021750FFL },  /* 408.9111, 535.3164 */
       
    41     { (FT_Int32)0x01C7E312L , (FT_Int32)0x027A6560L },  /* 455.8887, 634.3960 */
       
    42     { (FT_Int32)0xFFDA1F9EL , (FT_Int32)0x0312387FL },  /* -37.8765, 786.2207 */
       
    43     { (FT_Int32)0x00A49B7EL , (FT_Int32)0x021750FFL }   /* 164.6074, 535.3164 */
       
    44 #endif
       
    45    };
       
    46 
       
    47   static char  dummy_tag_1[4] =
       
    48   {
       
    49     FT_CURVE_TAG_ON,
       
    50     FT_CURVE_TAG_CUBIC,
       
    51     FT_CURVE_TAG_CUBIC,
       
    52     FT_CURVE_TAG_ON
       
    53   };
       
    54 
       
    55   static short  dummy_contour_1[1] =
       
    56   {
       
    57     3
       
    58   };
       
    59 
       
    60   static FT_Outline  dummy_outline_1 =
       
    61   {
       
    62     1,
       
    63     4,
       
    64     dummy_vec_1,
       
    65     dummy_tag_1,
       
    66     dummy_contour_1,
       
    67     0
       
    68   };
       
    69 
       
    70 
       
    71   /* dummy outline #2 */
       
    72   static FT_Vector  dummy_vec_2[4] =
       
    73   {
       
    74     XVEC( 100.0, 100.0 ),
       
    75     XVEC( 100.0, 200.0 ),
       
    76     XVEC( 200.0, 200.0 ),
       
    77     XVEC( 200.0, 133.0 )
       
    78   };
       
    79 
       
    80   static FT_Outline  dummy_outline_2 =
       
    81   {
       
    82     1,
       
    83     4,
       
    84     dummy_vec_2,
       
    85     dummy_tag_1,
       
    86     dummy_contour_1,
       
    87     0
       
    88   };
       
    89 
       
    90 
       
    91   static void
       
    92   dump_outline( FT_Outline*  outline )
       
    93   {
       
    94     FT_BBox  bbox;
       
    95 
       
    96     /* compute and display cbox */
       
    97     FT_Outline_Get_CBox( outline, &bbox );
       
    98     printf( "cbox = [%.2f %.2f %.2f %.2f]\n",
       
    99              XVAL( bbox.xMin ),
       
   100              XVAL( bbox.yMin ),
       
   101              XVAL( bbox.xMax ),
       
   102              XVAL( bbox.yMax ) );
       
   103 
       
   104     /* compute and display bbox */
       
   105     FT_Outline_Get_BBox( outline, &bbox );
       
   106     printf( "bbox = [%.2f %.2f %.2f %.2f]\n",
       
   107              XVAL( bbox.xMin ),
       
   108              XVAL( bbox.yMin ),
       
   109              XVAL( bbox.xMax ),
       
   110              XVAL( bbox.yMax ) );
       
   111   }
       
   112 
       
   113 
       
   114 
       
   115   static void
       
   116   profile_outline( FT_Outline*   outline,
       
   117                    long          repeat )
       
   118   {
       
   119     FT_BBox  bbox;
       
   120     long     count;
       
   121     long     time0;
       
   122 
       
   123     time0 = get_time();
       
   124     for ( count = repeat; count > 0; count-- )
       
   125       FT_Outline_Get_CBox( outline, &bbox );
       
   126 
       
   127     time0 = get_time() - time0;
       
   128     printf( "time = %5.2f cbox = [%.2f %.2f %.2f %.2f]\n",
       
   129              ((double)time0/10000.0),
       
   130              XVAL( bbox.xMin ),
       
   131              XVAL( bbox.yMin ),
       
   132              XVAL( bbox.xMax ),
       
   133              XVAL( bbox.yMax ) );
       
   134 
       
   135 
       
   136     time0 = get_time();
       
   137     for ( count = repeat; count > 0; count-- )
       
   138       FT_Outline_Get_BBox( outline, &bbox );
       
   139 
       
   140     time0 = get_time() - time0;
       
   141     printf( "time = %5.2f bbox = [%.2f %.2f %.2f %.2f]\n",
       
   142              ((double)time0/10000.0),
       
   143              XVAL( bbox.xMin ),
       
   144              XVAL( bbox.yMin ),
       
   145              XVAL( bbox.xMax ),
       
   146              XVAL( bbox.yMax ) );
       
   147   }
       
   148 
       
   149 #define REPEAT  100000L
       
   150 
       
   151   int  main( int  argc, char**  argv )
       
   152   {
       
   153     printf( "outline #1\n" );
       
   154     profile_outline( &dummy_outline_1, REPEAT );
       
   155 
       
   156     printf( "outline #2\n" );
       
   157     profile_outline( &dummy_outline_2, REPEAT );
       
   158     return 0;
       
   159   }
       
   160