SDL_PollEvent () пропускает события

Очень простая программа, для рисования на экране (как с помощью пера в Paint)

Я использую SDL 1.2. Только события, которые я обрабатываю, это движение мыши, щелчок левой кнопкой мыши и выход из программы. Моя проблема в том, что события SDL_MOUSEMOTION «пропускаются», когда я быстро двигаю мышь (когда я говорю быстро, я имею в виду быстрее, чем 1 пиксель / секунду)

Почему это происходит?

снимки экрана:

http://postimg.org/image/gcb87v9zr/

http://postimg.org/image/i5e4w6v6f/

#include <SDL/SDL.h>

SDL_Event event;
SDL_Surface* screen;
bool clicked = false;
Uint32 whiteColor;
int W = 200; // screen width
int H = 200; // screen height
Uint32* screenPixels;

bool handleInput();

int main(int argc, char** argv)
{
SDL_Init(SDL_INIT_EVERYTHING);
screen = SDL_SetVideoMode(W,H,32,SDL_SWSURFACE);
whiteColor = SDL_MapRGB(screen->format,255,255,255);

screenPixels = (Uint32*) screen->pixels;

while(handleInput())
{

}
SDL_Quit();
return 0;
}

bool handleInput()
{
while(SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_QUIT:{
return false;
break;
}
case SDL_MOUSEBUTTONDOWN:{
clicked = true;
break;
}
case SDL_MOUSEBUTTONUP:{
clicked = false;
break;
}
case SDL_MOUSEMOTION:{
if(clicked)
{
int P_x = event.motion.x;
int P_y = event.motion.y;
screenPixels[P_y * W + P_x] = whiteColor;
SDL_Flip(screen);
}
break;
}
}
}
return true;
}

-1

Решение

Это потому что ты SDL_Flip для всего вашего экрана это занимает слишком много времени.

Лучше позвонить SDL_Flip в другой теме (используя std::async, например).

Или вы можете обновить не всю поверхность, а только часть, цвет которой меняется на белый.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]