2010-07-31 10 views
8

Questo è un po 'strano, ma ho notato che all'interno di glAlphaFuncx vengono spese fino a 40 percentuali del tempo di rendering. So che il test alfa è molto costoso, ma la cosa interessante è che non la uso :) Nessun singolo punto di codice usa il test alfa, né invoco questa funzione in nessun altro modo.Prestazioni OpenGL su iPhone: glAlphaFuncx sulla traccia

Ho anche controllato il livello GL per miscelare altri tipi di elementi che potrebbero causare ciò, ma è quello che è.

Quindi, se qualcuno sa che cosa potrebbe causare glAlphaFuncx ad apparire sulla traccia delle prestazioni di CPU Sampler, sarei contento di sentirlo :)

Aggiornamento: fissa il link screenshot: http://twitpic.com/2afxho/full

Update 2 : la funzione che porta alla invocazione di glAlpaFuncx contiene una sola riga:

[context presentRenderbuffer:GL_RENDERBUFFER_OES]; 

Update 3: ho provato a fissare il punto di interruzione all'interno di questa funzione, ma sembra non essere stato invocato affatto. Immagino che il profiler sia incasinato qui ...

+2

tuo screenshot non funziona :( – Calvin1602

+0

Ci scusiamo per questo, fissa – Anton

risposta

1

È strano che questa funzione appaia su una traccia di profiler, come dici tu non lo stai usando. Prova a impostare un breakpoint in glAlphaFuncx per vedere da dove viene chiamato.

Ma comunque, questo non dovrebbe essere un problema, glAlphaFunc semplicemente imposterà uno stato sul lato del server GL, non lo farà (o dovrebbe) fare più elaborazione di quello. Non dovrebbe essere un problema di prestazioni, forse è un bug nell'implementazione GL o nel profiler.

Per sicurezza, è possibile disabilitare il test alfa con glDisable (GL_ALPHA_TEST).

+0

Ho provato a disabilitarlo - senza fortuna Per quanto riguarda il luogo di invocazione - si prega di guardare il mio aggiornamento, sembra ad essere invocata dal [contesto presentRenderbuffer: GL_RENDERBUFFER_OES] Il motivo per cui sono preoccupato è che le prestazioni dell'applicazione non sono elevate, anche se sto rendendo poche geometrie, quindi sarebbe bello se potessi risolverlo ... – Anton

+0

Beh, se quella funzione è davvero abilitando e usando il test alfa, non c'è molto che tu possa fare. Vorrei usare un profiler/debugger OpenGL, come gDebugger, per vedere quale parte della pipeline GL è il collo di bottiglia. poiché CPU e GPU funzionano in parallelo. –

+0

Il fatto è che iPod Touch esegue perfettamente l'applicazione (FPS = 60), quindi la mia congettura CPU è un collo di bottiglia (AFAIK hanno le stesse GPU) – Anton

0

Da quello che riesco a vedere, glAlphaFuncx potrebbe semplicemente prendere il colpo per impostare il rendering o spingere i pixel. Potrebbe essere che sia eseguito prima o l'ultimo nel rendering.

Hai un problema di prestazioni effettivo o stai solo cercando di trovare pezzi di codice da tagliare/ottimizzare?

In tal caso, è necessario impostare un punto di interruzione in glAlphaFuncx e vedere da dove viene chiamato e perché. Per fare ciò, basta aprire la console del debugger e digitare "break glAlphaFuncx".

+0

Bene, voglio che l'applicazione funzioni un po 'più veloce, in questo modo sarà abbastanza liscia per me. Ho provato a impostare il punto di interruzione all'interno di questa funzione, ma sembra che non sia stato invocato affatto. Immagino che il profiler sia incasinato qui ... – Anton

0

indipendentemente dal sistema, questo tipo di comportamento - il tempo trascorso presentare ciò che è stato redatto - quasi sempre indica che la GPU è il collo di bottiglia. O stai disegnando troppo (se il framerate è un problema), o la CPU non sta facendo abbastanza (se il framerate va bene).

In realtà, c'è un'altra possibilità: che la quantità di GPU funzioni va bene, ma il sistema è in attesa di qualche tipo di periodo di ritracciamento verticale. (Ciò sembra improbabile su un dispositivo che abbia sempre un LCD e non supporta la visualizzazione di una scansione raster, ma forse le cose funzionano ancora in modo non convenzionale in questo modo internamente.) Il risultato è ancora lo stesso per quanto riguarda la quantità di lavoro della CPU. , però, nel senso che hai tempo per fare più cose senza incidere sulla frequenza dei fotogrammi.

Non riesco a spiegare esattamente perché glAlphaFuncx appaia nello stack delle chiamate, ma se non sembra mai essere effettivamente chiamato allora lo considererei un'aringa rossa fino a prova contraria. .

Problemi correlati