Stavo scrivendo una nuova base di codice in opengl e ho riscontrato un bug strano molto presto. È una fluttuazione distinta nel framerate che è ripetitiva e prevedibile.Possibili cause di cadute FPS cicliche?
So che è decisamente proporzionale agli oggetti renderizzati. È anche proporzionale alle dimensioni dello schermo (formato non finestra, non dimensioni della finestra, appena formato dispositivo fisico) 'grosso modo un rapporto di 0,2: 1 (basso: alto) incornicia
ho ottenuto curioso e graficamente esso, orso tenere presente che la finestra/contesto non è sincronizzato o limitato.
La vista è completamente fissa e tutti gli oggetti sono fermi. Ogni frame è esattamente lo stesso. Nessun input è stato dato in qualsiasi momento. Non c'è niente in base al tempo. Non si verifica la garbage collection.
Non riesco a capirlo, se è praticamente un fotogramma che viene sottoposto a rendering più e più volte cosa potrebbe causare un così grande cambiamento?
Ecco il codice pseudo del programma di flusso
create window
load shaders
grab uniform locations
create camera
create 3 meshes // They just hold the buffers and data for a model
create x objects and pass a pointer to a random mesh // Objects hold position, rotation etc + link to mesh
while game is running
poll window for events
capture mouse and recalculate VP matrix if required
for each object
recalc MVP
bind mesh's buffers and draw elements
draw window //SFML handles this, just swaps front/back buffers and draws
clean up data
Se questo non dà intuizioni poi ho caricato il progetto VS2012 a GitHub: https://github.com/Twistedsnail/Untitled_for_SO (probabilmente non verrà eseguito a livello locale, perché richiede SFML2 in una posizione specificata e GLM nei file di VS)
Probabilmente sarebbe utile se potessimo vedere il codice. Se è troppo lungo includere nella domanda, ci sono dei posti in cui puoi postarlo e aggiungere un link nella tua domanda qui. Inoltre, è vecchio (rete fissa) o nuovo (pipeline programmabile con shader) OpenGL? –
Shader di destinazione GL4.1. Caricherò il codice quando ne avrò una possibilità più tardi oggi. –
Una volta ho avuto un problema molto simile con CUDA. Circa ogni 200 ms proverei un ritardo di 2 ms tra le esecuzioni del kernel (dove ogni ciclo nell'esecuzione del kernel sarebbe identico).Non ho mai avuto la causa del problema, perché a un certo punto del processo di sviluppo è svanito e non potevo essere disturbato a dividere in due la cronologia delle modifiche. – datenwolf