O código desta função é:
Uint32
SDL_GetMouseState(int *x, int *y)
{
SDL_Mouse *mouse = SDL_GetMouse();
if (x) {
*x = mouse->x;
}
if (y) {
*y = mouse->y;
}
return mouse->buttonstate;
}
E SDL_GetMouse
apenas retorna endereço da variável global estática. Por isso, não há nada inseguro com ele, mas não há atomicidade.
No entanto os eventos são processados separadamente. Se você não prcess eventos, a estrutura do mouse não atualizar e SDL_GetMouseState
irá dar-lhe valores desatualizados. Documentação afirma explicitamente que você deve chamar SDL_PumpEvents
apenas no segmento de gráficos (o que inicializado sistema de gráficos).
Pior cenário é você que lê vales da SDL_GetMouseState
enquanto outra thread atualiza-lo. Você pode ler o valor antigo, novo valor, ou mesmo uma mistura de dois (por exemplo x de novo, mas y de idade).