Kun kuvaa scrollaa Windowsin ikkunassa suhteellisen nopeasti vasemmalle tai oikealle, niin minkälaisella manööverillä liikuttamisen saisi tahdistettua näytönohjaimen kanssa siten, ettei kuva välkyttäisi?
Yritin kahden piirtopinnan avulla, mutta kun piirtopinnat swappaa keskenään, silloin välkytti vielä pahemmin.
Oletko kokeillut BitBlt funktiota, se on kohtuullisen nopea tapa piirtää grafiikkaa. Haulla varmaan löytyy jotain esimerkkejä/koodivinkkejä.
Juuh, BitBlt funktiolla scrollaaminen on nyt tehty.
Tarkennusta edelliseen, siis BitBlt funktio nimenomaan välkyttää, kun sitä ei ole tahdistettu näytönohjaimen kanssa. (Edellisestä saattoi ymmärtää väärin, että ongelma olisi jo ratkennut.)
Millähän tavalla nuo piirtopinnat swappasit? Toivottavasti yritit oikealla kaksoispuskuroinnilla ja SwapBuffers-funktiolla etkä BitBlt:llä ja tekokaksoispuskurilla.
Luullakseni jo tuo saattaa riittää tahdistamiseen näytönohjaimen kanssa, ja jos ei, niin ainakin alustamalla OpenGL:n pääsee tuloksiin. Usein VSync on itsestään päällä, ja sen käyttöön voi vaikuttaa tällaisella viritelmällä:
typedef BOOL (APIENTRY * t_wglSwapIntervalEXT) (int); t_wglSwapIntervalEXT f_wglSwapIntervalEXT = (t_wglSwapIntervalEXT) wglGetProcAddress("wglSwapIntervalEXT"); if (f_wglSwapIntervalEXT) f_wglSwapIntervalEXT(1); /* 1 = päällä, 0 = pois */
Jossain näin väitettävän, että tuo toimisi vain kokoruututilassa, mutta kyllä se minulla toimii ikkunassakin; 125 kuvaa sekunnissa jää 75:ksi, jos ei erityisesti laita VSynciä pois.
SwapBuffers-funktiolla ei välkytä. Tein nimenomaan mainitsemallasi väärällä tavalla (BitBlt:llä ja tekokaksoispuskurilla).
Mutta nyt homma toimii, kiitos ratkaisusta.
Aihe on jo aika vanha, joten et voi enää vastata siihen.