Come testereste o eseguireste i test automatici più efficaci sul codice grafico per OpenGL?


17

Sto scrivendo un gioco e il motore grafico di accompagnamento su OpenGL in C ++. Sono anche un fan di buoni processi di codifica e test automatizzati. Il codice grafico + i test sembrano piuttosto immiscibili, poiché l'output è spesso solo visivo o fortemente orientato al visual.

Ad esempio, immagina di analizzare il flusso di immagini non elaborate che viene eseguito il rendering sullo schermo byte per byte: devi confrontare i dati di test, che è difficile da creare / ottenere e spesso le immagini renderizzate non sono identiche su un livello di byte durante l'esecuzione in momenti diversi: piccoli cambiamenti negli algoritmi annulleranno completamente questo approccio.

Sto pensando di creare una suite di unità di test visiva, in cui posso fondamentalmente rendere diverse scene di test, mostrando cose come la mappatura delle ombre, l'animazione, ecc. Ecc. Come parte di CI, queste scene verrebbero quindi rese in un video file (o eventualmente lasciarlo come eseguibile) con metriche diverse. Ciò richiederebbe comunque l'ispezione manuale del file video, ma almeno sarebbe in qualche modo automatizzato e standardizzato.

Cosa pensi? Spero ci siano modi migliori?


2
Questa è una buona domanda, mi chiedo se otterresti risposte migliori su gamedev.stackexchange.com dal momento che potrebbero esserci più persone che se ne sono occupate prima.
FrustratedWithFormsDesigner,

3
Dato che usi OpenGL, considera di studiare il modo in cui il gruppo Khronos esegue i test di conformità per questa API. I colleghi del mio ex-progetto che si sono occupati di questo mi hanno detto che i test grafici Khronos sono quasi perfetti come si arriva
moscerino

@FrustratedWithFormsDesigner Grazie, mi sono completamente dimenticato di gamedev.stackexchange ... Ho cercato i programmatori abbastanza a fondo, ma non quello. Sembra che la maggior parte delle risposte ai test unitari laggiù si concentri sulle cose solitamente testate, quindi forse questo non è un duplicato. Ne controllerò un po 'di più, grazie :)
Max

Risposte:


8

La libreria di elaborazione delle immagini opencv lo fa salvando l'immagine e confrontandola con un'immagine di riferimento - ha un sacco di funzioni di test c ++ e macro per gestire la corrispondenza approssimativa dell'immagine ecc.


Proverò a dare un'occhiata più approfonditamente da solo, ma quella pagina non dice nulla sulla corrispondenza approssimativa dell'immagine. Sai se funzionerebbe per i test di regressione nel caso di comparare i frame? Quindi ho potuto ispezionare visivamente la prima volta che una scena è stata riprodotta, annotandola come riferimento così via. OpenCV ha funzioni pronte per questo che potrei usare? : p
Max

@max generalmente esiste una versione "gold" della funzione di test che genera il frame di riferimento e viene eseguita una volta durante la creazione del test. Nella distribuzione ci sono alcune macro di "confronto immagine di prova". Non credo che ci sia qualcosa di specifico per leggere nuovamente i buffer openGL su un'immagine, ma è abbastanza facile
Martin Beckett,

4

Il framework di test può convertire l'immagine di test in un buffer, recuperare l'immagine renderizzata e confrontarla con un'immagine di riferimento "dorata" che è stata precedentemente generata a tale scopo.

Ciò non funzionerà altrettanto bene nei casi in cui non si prevede che i risultati del test rimangano esattamente gli stessi. Tuttavia, è possibile calcolare la differenza quadrata delle immagini di prova e di riferimento e confrontarla con una soglia.

È inoltre possibile fornire la registrazione e il controllo dei dati sulle prestazioni, poiché una regressione importante delle prestazioni è un'altra possibile modalità di errore.


4

Anche se non puoi confrontare le immagini di output, almeno sarai in grado di verificare che i tuoi rendering vengano completati in modo appropriato (nessun arresto anomalo, lunghe attese, ecc. Ecc.). Trovare un modo per controllare le immagini è meglio, ovviamente, ma anche senza di esso avrai guadagnato qualcosa dai test.


2
Esatto: stavo per rispondere a qualcosa di simile ("Anche se hai un test unitario che genera semplicemente alla cieca il file video e fa dei test banali (ad es. Ha la lunghezza giusta, non completamente nero, non completamente bianco), potrebbe essere sufficiente per rilevare molti errori di regressione. Soprattutto quelli che causano semplicemente un'eccezione alle tue funzioni. ") ma non è necessaria una seconda risposta simile, quindi la lascio solo come commento qui.
user281377,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.