cbGL - Laitteistokiihdytettyä grafiikkaa
Posted: Sun Nov 09, 2008 7:03 pm
cbGL - Laitteistokiihdytettyä grafiikkaa
Kaikki tiedostot, myös FreeBASIC puolen sorsat, löytyvät githubista: http://github.com/tapio/cbgl/tree/master
PÄIVITETTY 21.11.2008 - viewtopic.php?f=11&t=1192&p=19364#p19364
PÄIVITETTY 18.11.2008 - viewtopic.php?f=11&t=1192&p=19272#p19272
Tästä alkaa alkuperäinen, vanhentunut posti:
Eli olen tuon KilledWhalen SDL-wrapperin innoittamana koodannut DLL:n, joka piirtää grafiikkaa OpenGL kiihdytettynä. Homma toimii luomalla uusi OpenGL ikkuna ja piilottamalla cb:n oma. Tässä on se huono puoli, että mitkään cb:n grafiikka tai syötekomennot (esim. Keydown, Mousedown) eivät toimi, mutta toisaalta ideana onkin käyttää näitä nopeampia GL komentoja. Lisäksi luultavasti on mahdollista käyttää kyllä tilekarttoja ja objekteja liikuttamiseen ja törmäystarkistukseen, pitää vain tehdä rutiinit, jotka piirtävät ne käyttäen näitä cbgl funktioita.
Tämä DLL ei ole toistaiseksi varsinainen OpenGL wrapperi, vaan kokoelma komentoja jotka tekevät asiota OpenGL:llä. Myöhemmin on mahdollista lisäillä sitten 3d kamaa ym, mutta ekaks kokeilen tehdä perus 2d-jutut (ja itseasiassa opettelen tässä tämän avulla koodaamaan OpenGL:ää). 3d:ssä on se ikävää, että se vaatii aika monta dll-kutsua, jotka ovat tässä se nopeuden pullonkaula. Lisäksi 3d opengl:llä ei ole välttämättä aloittelijoita varten ja kehittyneemmät koodarit luultavasti käyttävät mielummin sellaista kieltä, joka tukee sitä ilman wrappereita.
Kirjasto on aika alussa vielä, ja esim. kuvien lataaminen on kankeaa (lue alhaalta huomioita), joskin oikein käytettynä erittäin vikkelää. Kirjasto sisältää tällä hetkellä seuraavat komennot, joiden käyttö lienee selvää.
* cbglInit(w,h,fullscreen)
* cbglTermianate
* cbglSetWindow(windowtitle$)
* cbglCls()
* cbglFlip()
* cbglColor(r,g,b)
* cbglDot(x,y)
* cbglLine(x1,y1,x2,y2)
* cbglBox(x1,y1,x2,y2,filled=0)
* cbglCircle(x,y,r,filled=0)
* cbglEllipse(x,y,a,b,filled=0)
* cbglLoadImage(filename$) [palauttaa kuvan handlen]
* cbglDrawImage(img,x,y,rot=0,scale=1.0,alpha=255)
* cbglImageWidth(id)
* cbglImageHeight(id)
* cbglKeyDown(scancode)
* cbglMouseDown(button=1)
* cbglMouseX()
* cbglMouseY()
* cbglMouseZ()
Puutteita ja huomioita:
* Minkäänlaista tekstin tulostusta ei vielä ole.
* LoadImage osaa ladata ainoastaan png-kuvia.
* Kuvat on todella hitaita ellei niiden koko ole kakkosen potensseja (eli käytännössä kuvat kannattaa skaalata haluamansa kokoisiksi).
* DrawImage osaa kuitenkin skaalata, pyörittää ja muuttaa kuvan läpinäkyvyyttä reaaliajassa.
* Toistaiseksi (valinnainen) antialiasointi puuttuu noilta grafiikka primitiiveiltä.
* Benchmarkkaus cbSDL:ää vastaan on vaiheessa, ensimmäinen testi viivojen piirtelyssä kallistui ehkä aavistuksen cbgl:än hyväksi, mutta koska tässä on vielä puutteita tärkeillä osa-alueilla, ei ehkä vielä kannata ruveta käyttämään. EDIT: jos nyt oikein laskeskelin, niin cbSDL pyörittelee yhtä 512^2 kuvaa noin 70-140 FPS:llä, kun cbgl pyörittelee, skaalaa ja muuttaa kolmen samankokoisen kuvan kokoa FPS:llä 1000-Infinity.
Ladattavassa paketissa on pieni demo ohjelma (cbglTest.cb), includettava kirjasto (cbgl.cb), yksi testikuva (kukka.png) sekä itse dll (cbgl.dll). Laittelen itse dll:nkin lähdekoodia jossain vaiheessa jakeluun.
UPDATE: v0.1.1, korjattu MouseXYZ bugit ja lisätty cbglImageWidth ja cbglImageHeight. Paketissa on nyt myös mukana zlib, jos se joltain puuttuu.
UPDATE: v0.3.0, Lisätty 3d kamaa ja muuta
UPDATE: v0.4.0, Wrapperi käyttämään vakioita merkkijonojen sijaan, tekstin piirto onnistuu, teksturointi esimerkki mukaan pakettiin, muutamia uusia juttuja.
Kaikki tiedostot, myös FreeBASIC puolen sorsat, löytyvät githubista: http://github.com/tapio/cbgl/tree/master
PÄIVITETTY 21.11.2008 - viewtopic.php?f=11&t=1192&p=19364#p19364
PÄIVITETTY 18.11.2008 - viewtopic.php?f=11&t=1192&p=19272#p19272
Tästä alkaa alkuperäinen, vanhentunut posti:
Eli olen tuon KilledWhalen SDL-wrapperin innoittamana koodannut DLL:n, joka piirtää grafiikkaa OpenGL kiihdytettynä. Homma toimii luomalla uusi OpenGL ikkuna ja piilottamalla cb:n oma. Tässä on se huono puoli, että mitkään cb:n grafiikka tai syötekomennot (esim. Keydown, Mousedown) eivät toimi, mutta toisaalta ideana onkin käyttää näitä nopeampia GL komentoja. Lisäksi luultavasti on mahdollista käyttää kyllä tilekarttoja ja objekteja liikuttamiseen ja törmäystarkistukseen, pitää vain tehdä rutiinit, jotka piirtävät ne käyttäen näitä cbgl funktioita.
Tämä DLL ei ole toistaiseksi varsinainen OpenGL wrapperi, vaan kokoelma komentoja jotka tekevät asiota OpenGL:llä. Myöhemmin on mahdollista lisäillä sitten 3d kamaa ym, mutta ekaks kokeilen tehdä perus 2d-jutut (ja itseasiassa opettelen tässä tämän avulla koodaamaan OpenGL:ää). 3d:ssä on se ikävää, että se vaatii aika monta dll-kutsua, jotka ovat tässä se nopeuden pullonkaula. Lisäksi 3d opengl:llä ei ole välttämättä aloittelijoita varten ja kehittyneemmät koodarit luultavasti käyttävät mielummin sellaista kieltä, joka tukee sitä ilman wrappereita.
Kirjasto on aika alussa vielä, ja esim. kuvien lataaminen on kankeaa (lue alhaalta huomioita), joskin oikein käytettynä erittäin vikkelää. Kirjasto sisältää tällä hetkellä seuraavat komennot, joiden käyttö lienee selvää.
* cbglInit(w,h,fullscreen)
* cbglTermianate
* cbglSetWindow(windowtitle$)
* cbglCls()
* cbglFlip()
* cbglColor(r,g,b)
* cbglDot(x,y)
* cbglLine(x1,y1,x2,y2)
* cbglBox(x1,y1,x2,y2,filled=0)
* cbglCircle(x,y,r,filled=0)
* cbglEllipse(x,y,a,b,filled=0)
* cbglLoadImage(filename$) [palauttaa kuvan handlen]
* cbglDrawImage(img,x,y,rot=0,scale=1.0,alpha=255)
* cbglImageWidth(id)
* cbglImageHeight(id)
* cbglKeyDown(scancode)
* cbglMouseDown(button=1)
* cbglMouseX()
* cbglMouseY()
* cbglMouseZ()
Puutteita ja huomioita:
* Minkäänlaista tekstin tulostusta ei vielä ole.
* LoadImage osaa ladata ainoastaan png-kuvia.
* Kuvat on todella hitaita ellei niiden koko ole kakkosen potensseja (eli käytännössä kuvat kannattaa skaalata haluamansa kokoisiksi).
* DrawImage osaa kuitenkin skaalata, pyörittää ja muuttaa kuvan läpinäkyvyyttä reaaliajassa.
* Toistaiseksi (valinnainen) antialiasointi puuttuu noilta grafiikka primitiiveiltä.
* Benchmarkkaus cbSDL:ää vastaan on vaiheessa, ensimmäinen testi viivojen piirtelyssä kallistui ehkä aavistuksen cbgl:än hyväksi, mutta koska tässä on vielä puutteita tärkeillä osa-alueilla, ei ehkä vielä kannata ruveta käyttämään. EDIT: jos nyt oikein laskeskelin, niin cbSDL pyörittelee yhtä 512^2 kuvaa noin 70-140 FPS:llä, kun cbgl pyörittelee, skaalaa ja muuttaa kolmen samankokoisen kuvan kokoa FPS:llä 1000-Infinity.
Ladattavassa paketissa on pieni demo ohjelma (cbglTest.cb), includettava kirjasto (cbgl.cb), yksi testikuva (kukka.png) sekä itse dll (cbgl.dll). Laittelen itse dll:nkin lähdekoodia jossain vaiheessa jakeluun.
UPDATE: v0.1.1, korjattu MouseXYZ bugit ja lisätty cbglImageWidth ja cbglImageHeight. Paketissa on nyt myös mukana zlib, jos se joltain puuttuu.
UPDATE: v0.3.0, Lisätty 3d kamaa ja muuta
UPDATE: v0.4.0, Wrapperi käyttämään vakioita merkkijonojen sijaan, tekstin piirto onnistuu, teksturointi esimerkki mukaan pakettiin, muutamia uusia juttuja.