home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Computer Panoráma
/
computer_panorama_1997-12-hibas.iso
/
SHARE
/
GRAPH
/
PTC051.ZIP
/
EXAMPLES
/
PROFILE.CPP
< prev
next >
Wrap
C/C++ Source or Header
|
1997-09-23
|
10KB
|
301 lines
/////////////////////////////
// ptc conversion profiler //
/////////////////////////////
#include "ptc.h"
#include <conio.h>
#include <iostream.h>
#include <stdlib.h>
float Profile32(int x,int y,int format)
{
// initialize ptc
PTC ptc(x,y,format);
if (!ptc.ok()) return (float)0;
// create fullscreen surface
Surface surface(ptc,x,y,ARGB8888);
if (!surface.ok()) return (float)0;
// fill surface with random crap ;)
uint *p=(uint*)surface.Lock();
uint *pstop=p+x*y;
while (p<pstop)
{
*p=RGB32(random(256),random(256),random(256));
p++;
}
surface.Unlock();
// profile 1000 updates
int reps=1000;
clock_t time_start=clock();
for (int i=0; i<reps; i++)
{
if (!surface.Update()) return (float)0;
}
clock_t time_end=clock();
// calculate time taken
float dt=(time_end-time_start);
float t=dt/(float)CLOCKS_PER_SEC/(float)reps;
return t;
}
float Profile16(int x,int y,int format)
{
// initialize ptc
PTC ptc(x,y,format);
if (!ptc.ok()) return (float)0;
// create fullscreen surface
Surface surface(ptc,x,y,RGB565);
if (!surface.ok()) return (float)0;
// fill surface with random crap ;)
ushort *p=(ushort*)surface.Lock();
ushort *pstop=p+x*y;
while (p<pstop)
{
*p=RGB16(random(256),random(256),random(256));
p++;
}
surface.Unlock();
// profile 1000 updates
int reps=1000;
clock_t time_start=clock();
for (int i=0; i<reps; i++)
{
if (!surface.Update()) return (float)0;
}
clock_t time_end=clock();
// calculate time taken
float dt=(time_end-time_start);
float t=dt/(float)CLOCKS_PER_SEC/(float)reps;
return t;
}
float Profile8(int x,int y,int format)
{
// interator
int i=0;
// initialize ptc
PTC ptc(x,y,format);
if (!ptc.ok()) return (float)0;
// create fullscreen surface
Surface surface(ptc,x,y,INDEX8);
if (!surface.ok()) return (float)0;
// create palette
Palette palette;
uint *data=(uint*)palette.Lock();
for (i=0; i<256; i++)
{
*data=RGB32(i,i,i);
data++;
}
palette.Unlock();
// set surface palette
surface.SetPalette(palette);
// set display palette (if required)
FORMAT output=ptc.GetFormat();
if (output.type==INDEXED && output.model!=GREYSCALE) ptc.SetPalette(palette);
// fill surface with random pixels
char *p=(char*)surface.Lock();
char *pstop=p+x*y;
while (p<pstop)
{
*p=random(256);
p++;
}
surface.Unlock();
// profile 1000 updates
int reps=1000;
clock_t time_start=clock();
for (i=0; i<reps; i++)
{
if (!surface.Update()) return (float)0;
}
clock_t time_end=clock();
// calculate time taken
float dt=(time_end-time_start);
float t=dt/(float)CLOCKS_PER_SEC/(float)reps;
return t;
}
void PrintResult(char format[],float dt)
{
cout << format << "= ";
if (dt>0.000001) cout << 1/dt << " fps\n";
else cout << "n/a\n";
}
int main(int argc,char *argv[])
{
// parse command line for profile resolution
int xres=320;
int yres=200;
if (argc>=3)
{
xres=atoi(argv[1]);
yres=atoi(argv[2]);
}
// profile all 32bit -> X converters
float Time32_ARGB8888 = Profile32(xres,yres,ARGB8888);
float Time32_ABGR8888 = Profile32(xres,yres,ABGR8888);
float Time32_RGBA8888 = Profile32(xres,yres,RGBA8888);
float Time32_BGRA8888 = Profile32(xres,yres,BGRA8888);
float Time32_RGB888 = Profile32(xres,yres,RGB888);
float Time32_BGR888 = Profile32(xres,yres,BGR888);
float Time32_RGB565 = Profile32(xres,yres,RGB565);
float Time32_BGR565 = Profile32(xres,yres,BGR565);
float Time32_ARGB1555 = Profile32(xres,yres,ARGB1555);
float Time32_ABGR1555 = Profile32(xres,yres,ABGR1555);
float Time32_FAKEMODE1A = Profile32(xres,yres,FAKEMODE1A);
float Time32_FAKEMODE1B = Profile32(xres,yres,FAKEMODE1B);
float Time32_FAKEMODE1C = Profile32(xres,yres,FAKEMODE1C);
float Time32_FAKEMODE2A = Profile32(xres,yres,FAKEMODE2A);
float Time32_FAKEMODE2B = Profile32(xres,yres,FAKEMODE2B);
float Time32_FAKEMODE2C = Profile32(xres,yres,FAKEMODE2C);
float Time32_FAKEMODE3A = Profile32(xres,yres,FAKEMODE3A);
float Time32_FAKEMODE3B = Profile32(xres,yres,FAKEMODE3B);
float Time32_FAKEMODE3C = Profile32(xres,yres,FAKEMODE3C);
float Time32_GREY8 = Profile32(xres,yres,GREY8);
float Time32_RGB332 = Profile32(xres,yres,RGB332);
// profile all 16bit -> X converters
float Time16_ARGB8888 = Profile16(xres,yres,ARGB8888);
float Time16_ABGR8888 = Profile16(xres,yres,ABGR8888);
float Time16_RGBA8888 = Profile16(xres,yres,RGBA8888);
float Time16_BGRA8888 = Profile16(xres,yres,BGRA8888);
float Time16_RGB888 = Profile16(xres,yres,RGB888);
float Time16_BGR888 = Profile16(xres,yres,BGR888);
float Time16_RGB565 = Profile16(xres,yres,RGB565);
float Time16_BGR565 = Profile16(xres,yres,BGR565);
float Time16_ARGB1555 = Profile16(xres,yres,ARGB1555);
float Time16_ABGR1555 = Profile16(xres,yres,ABGR1555);
float Time16_FAKEMODE1A = Profile16(xres,yres,FAKEMODE1A);
float Time16_FAKEMODE1B = Profile16(xres,yres,FAKEMODE1B);
float Time16_FAKEMODE1C = Profile16(xres,yres,FAKEMODE1C);
float Time16_FAKEMODE2A = Profile16(xres,yres,FAKEMODE2A);
float Time16_FAKEMODE2B = Profile16(xres,yres,FAKEMODE2B);
float Time16_FAKEMODE2C = Profile16(xres,yres,FAKEMODE2C);
float Time16_FAKEMODE3A = Profile16(xres,yres,FAKEMODE3A);
float Time16_FAKEMODE3B = Profile16(xres,yres,FAKEMODE3B);
float Time16_FAKEMODE3C = Profile16(xres,yres,FAKEMODE3C);
float Time16_GREY8 = Profile16(xres,yres,GREY8);
float Time16_RGB332 = Profile16(xres,yres,RGB332);
// profile all 8bit -> X converters
float Time8_INDEX8 = Profile8(xres,yres,INDEX8);
float Time8_4BYTE = Profile8(xres,yres,32);
float Time8_3BYTE = Profile8(xres,yres,24);
float Time8_2BYTE = Profile8(xres,yres,16);
float Time8_FAKEMODE1A = Profile8(xres,yres,FAKEMODE1A);
float Time8_FAKEMODE1B = Profile8(xres,yres,FAKEMODE1B);
float Time8_FAKEMODE1C = Profile8(xres,yres,FAKEMODE1C);
float Time8_FAKEMODE2A = Profile8(xres,yres,FAKEMODE2A);
float Time8_FAKEMODE2B = Profile8(xres,yres,FAKEMODE2B);
float Time8_FAKEMODE2C = Profile8(xres,yres,FAKEMODE2C);
float Time8_FAKEMODE3A = Profile8(xres,yres,FAKEMODE3A);
float Time8_FAKEMODE3B = Profile8(xres,yres,FAKEMODE3B);
float Time8_FAKEMODE3C = Profile8(xres,yres,FAKEMODE3C);
float Time8_GREY8 = Profile8(xres,yres,GREY8);
float Time8_RGB332 = Profile8(xres,yres,RGB332);
// output results
cout << "PTC PROFILE RESULTS (" << xres << "," << yres << ")\n\n\n";
cout << "32bit -> X\n";
cout << "----------\n";
PrintResult("ARGB8888 ",Time32_ARGB8888);
PrintResult("ABGR8888 ",Time32_ABGR8888);
PrintResult("RGBA8888 ",Time32_RGBA8888);
PrintResult("BGRA8888 ",Time32_BGRA8888);
PrintResult("RGB888 ",Time32_RGB888);
PrintResult("BGR888 ",Time32_BGR888);
PrintResult("RGB565 ",Time32_RGB565);
PrintResult("BGR565 ",Time32_BGR565);
PrintResult("ARGB1555 ",Time32_ARGB1555);
PrintResult("ABGR1555 ",Time32_ABGR1555);
PrintResult("FAKEMODE1A ",Time32_FAKEMODE1A);
PrintResult("FAKEMODE1B ",Time32_FAKEMODE1B);
PrintResult("FAKEMODE1C ",Time32_FAKEMODE1C);
PrintResult("FAKEMODE2A ",Time32_FAKEMODE2A);
PrintResult("FAKEMODE2B ",Time32_FAKEMODE2B);
PrintResult("FAKEMODE2C ",Time32_FAKEMODE2C);
PrintResult("FAKEMODE3A ",Time32_FAKEMODE3A);
PrintResult("FAKEMODE3B ",Time32_FAKEMODE3B);
PrintRe