On Sat, 28 Jan 2006 11:25:50 +0100, Andreas Jaeger wrote:
>"Martin Bickel" <mbickel(a)asc-hq.org> writes:
>
>> Hello,
>>
>> I've encountered an extremely degraded performance for all SDL based
>> applications / games on 10.1 Beta1. Drawing the application window is
>> so slow that one can watch it being drawn from top to bottom.
>
>Is this a issue of our slow fontconfig? Please test the updated RPM
>that I announced,
No, unfortunately not. Installing the new fontconfig didn't help.
To demonstrate and reproduce the problem, I've made the attached test
program (build instructions included). It just makes simple screen
updates for 20 seconds without drawing anything.
Debian unstable, X.org 6.9.0 with radeon driver, SDL 1.2.9, x86-64:
230 fps
SuSE 10.1 beta 1, X.org 6.9.0-9 with radeon driver, SDL 1.2.9, x86-64:
2 fps !!!
So 2 fps is the upper limit that _any_ SDL-based 2D-applications will
reach on SuSE 10.1. And most games and emulators included in SuSE are
based on SDL.
I suggest to get some more results from different installations to see
if this problem is specific to my setup or common.
Regards,
Martin Bickel
/*
prerequisite packages:
SDL
SDL-dev
to compile:
g++ -I/usr/X11R6/include -I/usr/include/SDL -D_REENTRANT -c testfps.cpp
g++ -o testfps testfps.o -lm -lSDL -lpthread
*/
#include <stdio.h>
#include <stdlib.h>
#include "SDL.h"
int main()
{
/* Initialize SDL */
if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) {
fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError());
exit(1);
}
atexit(SDL_Quit);
int video_bpp;
const SDL_VideoInfo *info = SDL_GetVideoInfo();
if ( info->vfmt->BitsPerPixel > 8 ) {
video_bpp = info->vfmt->BitsPerPixel;
} else {
video_bpp = 16;
fprintf(stderr, "forced 16 bpp mode\n");
}
SDL_Surface *screen;
if ( (screen=SDL_SetVideoMode(1000,700,video_bpp,SDL_SWSURFACE)) == NULL ) {
fprintf(stderr, "Couldn't set video mode: %s\n", SDL_GetError());
exit(2);
}
int time = 20;
Uint32 ticks1 = SDL_GetTicks();
Uint32 ticks2;
int frames = 0;
do {
SDL_UpdateRect(screen, 0, 0, 0, 0);
++frames;
ticks2 = SDL_GetTicks();
} while ( ticks2 - ticks1 < time * 1000 );
printf("%d fps\n", frames / time );
return(0);
}