Sto usando SDL2 su Windows (ho testato Windows 7 e Windows 8). Stavo giocando con il rendering di una texture bloccata alle coordinate del mouse per creare una sorta di effetto "mirino".SDL2 renda struttura ritarda visibilmente dietro il mouse
Funziona, ma la consistenza ritardo visibilmente dietro il mouse che crea un ritardo imbarazzante tra il movimento del mouse e gli aggiornamenti resi. Onestamente, il ritardo è molto minore, ma a qualcuno che si preoccupa dell'accuratezza assoluta, guiderà la persona folle.
La mia domanda è, fondamentalmente, è normale? Immagino che il ritardo sia dovuto al tempo impiegato da Windows per consegnare l'evento a SDL e quindi a SDL per consegnarmi l'evento. Come si può ottenere un effetto "crosshair" bloccato tramite SDL?
Il mio codice di riferimento:
#include "SDL.h"
int main(int argc, char* args[])
{
SDL_Init(SDL_INIT_EVERYTHING);
SDL_Window* window = SDL_CreateWindow("SDL", 100, 100, 640, 480, SDL_WINDOW_SHOWN);
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
SDL_Surface* surface = SDL_LoadBMP("mouse.bmp");
SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer, surface);
SDL_FreeSurface(surface);
bool isExiting = false;
int x = 0;
int y = 0;
while(!isExiting)
{
SDL_Event e;
while(SDL_PollEvent(&e))
{
if(e.type == SDL_QUIT)
{
isExiting = true;
break;
}
else if(e.type == SDL_MOUSEMOTION)
{
x = e.motion.x;
y = e.motion.y;
}
}
SDL_Rect destRect;
destRect.h = 19;
destRect.w = 19;
destRect.x = x;
destRect.y = y;
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, texture, NULL, &destRect);
SDL_RenderPresent(renderer);
}
SDL_Quit();
return 0;
}
Hai il [compositore Windows] (http://en.wikipedia.org/wiki/Compositing_window_manager#Microsoft_Windows) attivato? Il tuo ciclo 'while' principale richiede sempre ~ 16-17ms per l'esecuzione? – genpfault
@genpfault Il compositing è abilitato. Verificherò quando disabilitato. Non ho ancora programmato il ciclo, quindi dovrò provare anche quello. –
Il vostro 'SDL_Surface' sarà non essere disegnato da meravigliarsi se gli pos del mouse, il cambiamento a' destRect.x = x - (destRect.w/2); destRect.y = y - (destRect.h/2); ' – olevegard