Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Windows - Screen tearing effect - come evitarlo?
Forum - Windows - Screen tearing effect - come evitarlo?

Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:00
Giovedì, 01/01/1970
Oh, ho proprio voglia di sparare lì una domanda difficile.

Ho letto e riletto un sacco d'articoli in merito all'eliminazione dell'effetto "screen tearing" dovuto alla mancata sincronizzazione tra frequenza dei fotogrammi in un'animazione e frequenza di aggiornamento dello schermo. Ho trovato indicazioni circa la necessità di attendere il momento del cosiddetto "refresh" prima di avviare l'aggiornamento della visualizzazione del fotogramma. Ho scoperto che c'è una tecnica molto intelligente di scambio di buffer per mezzo di un semplice scambio di puntatori (anziché per mezzo d'una copiatura di valanghe di bit). Tutto bellissimo, però...

...però ho scoperto che l'unico sistema per poter fare queste cose in Windows passa attraverso l'acquisizione di tonnellate di librerie, sia che si tratti di DirectX o di OpenGL o di SDL (che poi rimandano sempre a DirectX) o di altre dello stesso tenore. Son riuscito a mettere insieme un programmino di prova con Direct3D che aggiorna correttamente lo schermo, ma il "rigiro" è talmente intricato da renderlo inutilizzabile in semplici programmi come quelli che interessano a me (che, per intendersi, usano massicciamente GDI e GDI+).

Ora, la domanda a bruciapelo: esistono mezzi (che prescindano dal ricorso a librerie non "native" dell'OS Windows) per ottenere qualche tipo di buffer sincronizzabile col "refresh rate" dello schermo e facilmente abbinabile a un HDC o a un oggetto Graphics per disegnarci con GDI e GDI+?

Fino ad ora ho solo trovato soluzioni mirate al 3D (che per me è troppo complesso da gestire, oltre che al di là dei miei interessi attuali). Davvero, pare impossibile che non esista un mezzo per disegnare un'immagine (fosse anche solo una "x") con GDI/GDI+ su una bitmap in offscreen e passare quella bitmap sullo schermo in sincronia col "refresh rate" di quest'ultimo. Eppure, io quel mezzo non riesco a reperirlo. Qualcuno più pratico può darmi qualche indicazione realistica che possa interessare a un hobbista come me?

Ultima modifica effettuata da il 29/08/2014 alle 12:53
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 20:47
Venerdì, 29/08/2014
Provo a rispondermi da solo (dopo altre ricerche). Se qualcuno ne ha voglia, mi dica se sono sulla strada giusta o se sto perdendo tempo. Direct2D PARE che vada nella direzione che ipotizzavo. Però, se non ho capito male, con Direct2D viene tagliato completamente fuori il "mondo XP", il che non è che mi garbi un gran che (un sacco di gente tra chi dovrebbe usare i miei programmini ha XP, e non mi sembra corretto sgambettarla).

Procederò nella lettura e nella "sperimentazione" per capire più a fondo, ma un "aiutino" non guasterebbe, se qualcuno ha già seguito lo stesso percorso e ne sa più di me (e non è che ci voglia molto a saperne più di me). Ora sto scaricando un paio di SDK, e spero di riuscire a renderli operativi senza impazzire, per poter fare qualche prova.

PM Quote
Avatar
tasx (Dev Team)
Expert


Messaggi: 439
Iscritto: 15/12/2008

Segnala al moderatore
Postato alle 14:49
Sabato, 30/08/2014
Ciao, se usi il framework WPF non dovresti avere questi problemi per il rendering della UI usa le directx quindi va basso livello senza stare a complicare la vita al programmatore ;)

PM Quote