SDL_SHOWCURSOR (SDL_FALSE) Лаги - PullRequest
       23

SDL_SHOWCURSOR (SDL_FALSE) Лаги

0 голосов
/ 16 марта 2012

Если я попытаюсь использовать SDL_ShowCursor (SDL_FALSE), то приложение будет сильно зависать в полноэкранном режиме, но не в оконном режиме.Однако, если курсор отображается в полноэкранном режиме, он не будет отставать.Игра запаздывает только тогда, когда я что-то делаю с курсором, пока он скрыт.Как я могу остановить отставание?Кстати, я использую SDL с OpenGL.Это мой код.

Инициализирован

void init(int fullscreen)
{
    SDL_Init(SDL_INIT_EVERYTHING);

    if (fullscreen == 0)
{
    screen = SDL_SetVideoMode(640,480,32,SDL_SWSURFACE|SDL_OPENGL|SDL_RESIZABLE|SDL_FULLSCREEN);
}
    else if (fullscreen == 1)
    {
        screen = SDL_SetVideoMode(640,480,32,SDL_SWSURFACE|SDL_OPENGL|SDL_RESIZABLE);
}

    SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );

    SDL_ShowCursor(SDL_DISABLE);


glClearColor(value2/100,value2/100,value2/100,1.0f);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90.0,1.0/1.0,1.0, 5000.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

    glEnable(GL_TEXTURE_2D);
glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_NORMALIZE);

    glShadeModel(GL_SMOOTH);

    glEnable(GL_BLEND);
    glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

    glEnable(GL_FOG);
glFogi(GL_FOG_MODE, GL_LINEAR);
    glFogfv(GL_FOG_COLOR, fogColor);
    glFogf(GL_FOG_DENSITY, fogDensity);
    glHint(GL_FOG_HINT, GL_NICEST);
    glFogf(GL_FOG_START, 0.0f);
    glFogf(GL_FOG_END, 500.0f);
}; 

Реализован

void player_action()
{
if (SDL_PollEvent(&event))
{
    switch (event.type)
    {
        case SDL_MOUSEMOTION:
            {

                player.rotxl = (screen->w)/2;
                player.rotxd = event.motion.x - player.rotxl;
                player.rotx = player.rotx + (player.rotxd/4);
                if (player.rotx < 0)
                {
                    player.rotx = player.rotx + 360;
                };
                if (player.rotx > 360)
                {
                    player.rotx = player.rotx - 360;
                }
            };
        break;
...