cbGL - Laitteistokiihdytettyä grafiikkaa

Jaa meneillään olevat projektisi tai valmiit pelit muun yhteisön kanssa täällä.
Post Reply
User avatar
Aavesoturi
Active Member
Posts: 163
Joined: Fri Aug 31, 2007 7:07 pm
Location: Helsinki
Contact:

cbGL - Laitteistokiihdytettyä grafiikkaa

Post by Aavesoturi » Sun Nov 09, 2008 8: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.
Attachments
cbgl.zip
v.0.4.0
(333.48 KiB) Downloaded 207 times
Last edited by Aavesoturi on Tue Jul 07, 2009 4:44 pm, edited 7 times in total.

User avatar
Dande
Active Member
Posts: 193
Joined: Tue Aug 28, 2007 4:30 pm

Re: cbGL - Laitteistokiihdytettyä grafiikkaa

Post by Dande » Sun Nov 09, 2008 8:52 pm

No niin, nyt rupeaa näyttämään CB:n grafiikan nopeus kunnolliselta :D
Kun muunsin nopeasti perustestiä siten, että se piirtää jokaisen kuvan kolmekymmentä kertaa, eli siis yhteensä 90 kuvaa erinäisillä efekteillä, niin fps tippui sinne 250-330 välimaastoon. 900 kuvalla (eli 300 jokaista) fps tippui ~45. 9000 kuvalla fps oli 4,7. Alla on Radeon 9600 XT ja AMD Athlon XP 2,2GHz

User avatar
vilQuri
Active Member
Posts: 239
Joined: Wed Aug 29, 2007 6:25 pm
Location: Turku

Re: cbGL - Laitteistokiihdytettyä grafiikkaa

Post by vilQuri » Sun Nov 09, 2008 9:08 pm

Image
Tuollainen tulee kun yrittää suorittaa tuota testi ohjelmaa, tosin siitä pääsee eroon laittamalla tämän windowsin järjestelmä kansioon. Ja vielä ihmetytti tuo FPS kun se hyppi 1000.0 - infinity välillä. Muuten aivan lostavaa työtä! Jos joku vielä jaksaisi tehdä wrapperin irrlichtille niin saisi 3D grafiikkaakin. Mistä muuten voisi löytää tuollaisen Dll/Wrapperin teko oppaan?

User avatar
Aavesoturi
Active Member
Posts: 163
Joined: Fri Aug 31, 2007 7:07 pm
Location: Helsinki
Contact:

Re: cbGL - Laitteistokiihdytettyä grafiikkaa

Post by Aavesoturi » Sun Nov 09, 2008 9:16 pm

vilQuri wrote: Tuollainen tulee kun yrittää suorittaa tuota testi ohjelmaa, tosin siitä pääsee eroon laittamalla tämän windowsin järjestelmä kansioon. Ja vielä ihmetytti tuo FPS kun se hyppi 1000.0 - infinity välillä. Muuten aivan lostavaa työtä! Jos joku vielä jaksaisi tehdä wrapperin irrlichtille niin saisi 3D grafiikkaakin. Mistä muuten voisi löytää tuollaisen Dll/Wrapperin teko oppaan?
Aina meinaa unohtua tuo zlib, laitan sen mukaan seuraavan pakettiin tässä myöhemmin illalla. Tuo FPS on tollanen, kun cb:n timerin resoluutio ei riitä mittaamaan tuon testiohjelman nopeutta, eli pääluupin suoritus kestää alle 1ms, jolloin fps:n laskennassa tulee nollalla jakamista -> Infinity.

Marcoder on tehny C++ DLL:n teko ohjeen cb:lle, joka löytyy täältä: http://koti.mbnet.fi/marcoder/cb/dll/
Tämä on kuitenkin tehty FreeBASICillä ja samalla kun julkaisen tämän lähdekoodin voin kirjottaa pienen esittelyn, miten FreeBascillä saa tehtyä DLL, jotka cb hyväksyy.

User avatar
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: cbGL - Laitteistokiihdytettyä grafiikkaa

Post by JATothrim » Sun Nov 09, 2008 10:47 pm

Nopeaa, ja nättiä. Alkaahan niitä cbDLL tsydeemejä tulemaan viimeinkin. :D Kirjastosta löysin pienen *vian* cbglMouseX() ja cbglMouseY() funktioista: haet hiiren paikan yhtenä tavuna?? silloinhan kordinaatit menee päin puuta jos ikkuna onkin suurempi kuin 255 pixeliä, koska byteen mahtuvat vain arvot 0-255. :mrgreen:
-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.

User avatar
Aavesoturi
Active Member
Posts: 163
Joined: Fri Aug 31, 2007 7:07 pm
Location: Helsinki
Contact:

Re: cbGL - Laitteistokiihdytettyä grafiikkaa

Post by Aavesoturi » Sun Nov 09, 2008 11:05 pm

Dark Code wrote:Nopeaa, ja nättiä. Alkaahan niitä cbDLL tsydeemejä tulemaan viimeinkin. :D Kirjastosta löysin pienen *vian* cbglMouseX() ja cbglMouseY() funktioista: haet hiiren paikan yhtenä tavuna?? silloinhan kordinaatit menee päin puuta jos ikkuna onkin suurempi kuin 255 pixeliä, koska byteen mahtuvat vain arvot 0-255. :mrgreen:
Juu tuo mulle irkissä jo jopa kahden henkilön toimesta kerrottiin. Copy-pasteillessa noita aina tulee, pitäis jaksaa testata enempi. Upin uuden paketin (eka viesti) jossa tuo on korjattu ja lisäksi paketissa on myös mukana ImageWidth/height funkkarit sekä zlib. (Siellä on pari fontti funkkariakin, mutta ne ei sitten toimi, turha kokeilla)

User avatar
Aavesoturi
Active Member
Posts: 163
Joined: Fri Aug 31, 2007 7:07 pm
Location: Helsinki
Contact:

Re: cbGL - Laitteistokiihdytettyä grafiikkaa

Post by Aavesoturi » Tue Nov 18, 2008 8:22 pm

Noniin, koodasin tänään lisää tätä. Ikävä kyllä vieläkään ei mukana ole tekstin tulostusta, mutta sen sijaan varsinainen OpenGL wrapperi on hyvässä vauhdissa. Eli nyt on oikeaa 3d:tä mukana. Huomaa, että tämä tosiaan wrappaa OpenGL:ää, eikä esim. Irrlichtiä, joten tässä kaikki pitää tehdä alusta-asti, eikä esim. valmista 3d modeli loaderia ole.

OpenGL:ssä on noin 250 funktiota, joten cb:n funktiorajoituksen takia ei ole mahdollista eikä järkevää tehdä kaikille komennoille omia funktiota. Kierrän tämän 9:llä monikäyttöisellä funktiolla, joiden nimet ovat mallia cbgl#x, jossa # on kertoo parametrien määrän 1-4 ja x on joko i kokonaislukuparametreille tai f liukuluvuille. lisäksi on cbgl0, joka ei ota yhtään numeerista parametriä. Lisäksi jokaiselle annetaan ensimmäisenä parametrinä merkkijonossa kutsuttavan OpenGl funktion nimi. Esimerkki:

Code: Select all

cbgl1i("glMatrixMode", GL_PROJECTION)
cbgl0("glLoadIdentity") 
cbgl4f("gluPerspective", 45.0, Float(scrW)/Float(scrH), 0.1, 100.0)
Tämä voi vaikuttaa hieman kömpelöltä ja rumalta, mutta näin cbgl vie mahdollisimman vähän funktio kapasiteetista ja periaatteessa kaikki komennot on mahdollista wrapata. Tällä hetkellä tuettuna on reilut 40 komentoa, jotka voi tarkistaa paketissa olevasta WrappedOpenGLcmds.txt:stä.

Paketissa tulee aikasemman 2d esimerkin lisäksi myös uusi include, glConsts.cb, joka sisältää rapiat 740 vakiota syötettäväviksi ogl-funktioille. Lisäksi mukana on NeHe:n OpenGL tutoriaalien numero 5:en cb porttaus, jossa pyörii 3d pyramidi ja kuutio. FPS tippuu noin 150:n tasolle, melko monen DLL-kutsun takia, mutta käyttämällä Display Listejä, tämä on kierrettävissä. Ideana on että tehdään modelit valmiiksi ja pää silmukassa kutsutaan vaan niitä sisältäviä listoja (vähän kuin makroja). Jolloin säästetään hurjasti funktiokutsujen määrässä. NeHe05_DispList.cb, on sama demo, muokattuna käyttämään noita listoja ja FPS poikkoilee meikällä 500-1000 välissä.

Mukana on vielä cbglTerminate funktio, joka olisi hyvä kutsua lopuksi (vapauttelee muistia ym). Lisäksi se antaa cb-ikkunan taas käytettäväksi, jos sille on vielä tarvetta.

Loppusanat: OpenGL koodaaminen on itseasiassa hyvin helppoa, mutta vaatii silti melkolailla ymmärrystä kolmiulotteisuudesta. Jos matriisit ja vektorit pelottavat sinua, suosittelisin pitäytymään 2d:ssä, tai etsimään jonkun enginen, joka piilottaa opengl kaman.

Paketin voipi ladata ekasta viestistä.

EDIT: Huomasin että tekstuuri mappauskin onnistuu, joten tässä olisi NeHe tuto 6, pyörivä, teksturoitu kuutio. Laitan sen pakettiin jahka jaksan, nyt jodut käyttämään omaa kuvaa (muista: koko on 2^x)

Code: Select all

Include "glConsts.cb"
Include "cbGL.cb"

Const scrW = 640
Const scrH = 480

cbglInit(scrW,scrH)

' ReSizeGLScene
cbgl4i("glViewport", 0, 0, scrW, scrH)                      ' Reset The Current Viewport
cbgl1i("glMatrixMode", GL_PROJECTION)                       ' Select The Projection Matrix
cbgl0("glLoadIdentity")                                     ' Reset The Projection Matrix
cbgl4f("gluPerspective", 45.0, Float(scrW)/Float(scrH), 0.1, 100.0)       ' Calculate The Aspect Ratio Of The Window
cbgl1i("glMatrixMode", GL_MODELVIEW)                        ' Select The Modelview Matrix
cbgl0("glLoadIdentity")                                     ' Reset The Modelview Matrix

' All Setup For OpenGL Goes Here
cbgl1i("glShadeModel", GL_SMOOTH)                           ' Enable Smooth Shading
cbgl4f("glClearColor", 0.0, 0.0, 0.0, 0.5)                  ' Black Background
cbgl1f("glClearDepth", 1.0)                                 ' Depth Buffer Setup
cbgl1i("glEnable", GL_DEPTH_TEST)                           ' Enables Depth Testing
cbgl1i("glDepthFunc", GL_LEQUAL)                            ' The Type Of Depth Testing To Do
cbgl2i("glHint", GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST) ' Really Nice Perspective Calculations
cbgl1i("glEnable", GL_TEXTURE_2D)                           ' Enable Texture Mapping ( NEW )

tex = cbglLoadImage("test.png")

' Generate a display list for the cube
cbgl2i("glNewList", 1, GL_COMPILE)
    cbgl2i("glBindTexture", GL_TEXTURE_2D, tex)
    cbgl1i("glBegin", GL_QUADS)                                        ' Draw A Quad
			' Front Face
			cbgl2f("glTexCoord2f", 0.0, 0.0) : cbgl3f("glVertex3f", -1.0, -1.0,  1.0)  ' Bottom Left Of The Texture and Quad
			cbgl2f("glTexCoord2f", 1.0, 0.0) : cbgl3f("glVertex3f",  1.0, -1.0,  1.0)  ' Bottom Right Of The Texture and Quad
			cbgl2f("glTexCoord2f", 1.0, 1.0) : cbgl3f("glVertex3f",  1.0,  1.0,  1.0)  ' Top Right Of The Texture and Quad
			cbgl2f("glTexCoord2f", 0.0, 1.0) : cbgl3f("glVertex3f", -1.0,  1.0,  1.0)  ' Top Left Of The Texture and Quad
			' Back Face
			cbgl2f("glTexCoord2f", 1.0, 0.0) : cbgl3f("glVertex3f", -1.0, -1.0, -1.0)  ' Bottom Right Of The Texture and Quad
			cbgl2f("glTexCoord2f", 1.0, 1.0) : cbgl3f("glVertex3f", -1.0,  1.0, -1.0)  ' Top Right Of The Texture and Quad
			cbgl2f("glTexCoord2f", 0.0, 1.0) : cbgl3f("glVertex3f",  1.0,  1.0, -1.0)  ' Top Left Of The Texture and Quad
			cbgl2f("glTexCoord2f", 0.0, 0.0) : cbgl3f("glVertex3f",  1.0, -1.0, -1.0)  ' Bottom Left Of The Texture and Quad
			' Top Face
			cbgl2f("glTexCoord2f", 0.0, 1.0) : cbgl3f("glVertex3f", -1.0,  1.0, -1.0)  ' Top Left Of The Texture and Quad
			cbgl2f("glTexCoord2f", 0.0, 0.0) : cbgl3f("glVertex3f", -1.0,  1.0,  1.0)  ' Bottom Left Of The Texture and Quad
			cbgl2f("glTexCoord2f", 1.0, 0.0) : cbgl3f("glVertex3f",  1.0,  1.0,  1.0)  ' Bottom Right Of The Texture and Quad
			cbgl2f("glTexCoord2f", 1.0, 1.0) : cbgl3f("glVertex3f",  1.0,  1.0, -1.0)  ' Top Right Of The Texture and Quad
			' Bottom Face
			cbgl2f("glTexCoord2f", 1.0, 1.0) : cbgl3f("glVertex3f", -1.0, -1.0, -1.0)  ' Top Right Of The Texture and Quad
			cbgl2f("glTexCoord2f", 0.0, 1.0) : cbgl3f("glVertex3f",  1.0, -1.0, -1.0)  ' Top Left Of The Texture and Quad
			cbgl2f("glTexCoord2f", 0.0, 0.0) : cbgl3f("glVertex3f",  1.0, -1.0,  1.0)  ' Bottom Left Of The Texture and Quad
			cbgl2f("glTexCoord2f", 1.0, 0.0) : cbgl3f("glVertex3f", -1.0, -1.0,  1.0)  ' Bottom Right Of The Texture and Quad
			' Right face
			cbgl2f("glTexCoord2f", 1.0, 0.0) : cbgl3f("glVertex3f",  1.0, -1.0, -1.0)  ' Bottom Right Of The Texture and Quad
			cbgl2f("glTexCoord2f", 1.0, 1.0) : cbgl3f("glVertex3f",  1.0,  1.0, -1.0)  ' Top Right Of The Texture and Quad
			cbgl2f("glTexCoord2f", 0.0, 1.0) : cbgl3f("glVertex3f",  1.0,  1.0,  1.0)  ' Top Left Of The Texture and Quad
			cbgl2f("glTexCoord2f", 0.0, 0.0) : cbgl3f("glVertex3f",  1.0, -1.0,  1.0)  ' Bottom Left Of The Texture and Quad
			' Left Face
			cbgl2f("glTexCoord2f", 0.0, 0.0) : cbgl3f("glVertex3f", -1.0, -1.0, -1.0)  ' Bottom Left Of The Texture and Quad
			cbgl2f("glTexCoord2f", 1.0, 0.0) : cbgl3f("glVertex3f", -1.0, -1.0,  1.0)  ' Bottom Right Of The Texture and Quad
			cbgl2f("glTexCoord2f", 1.0, 1.0) : cbgl3f("glVertex3f", -1.0,  1.0,  1.0)  ' Top Right Of The Texture and Quad
			cbgl2f("glTexCoord2f", 0.0, 1.0) : cbgl3f("glVertex3f", -1.0,  1.0, -1.0)  ' Top Left Of The Texture and Quad                 ' Bottom Right Of The Quad (Right)
    cbgl0("glEnd")   
cbgl0("glEndList")


Dim xrot#, yrot#, zrot#
// --- MAIN LOOP --- //
Repeat
    cbgl1i("glClear", GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT)    ' Clear Screen And Depth Buffer
    
    cbgl0("glLoadIdentity")                                         ' Reset The Current Modelview Matrix
    cbgl3f("glTranslatef", 0.0, 0.0, -5.0)                         ' Move Left 1.5 Units And Into The Screen 6.0
    cbgl4f("glRotatef", xrot, 1.0, 0.0, 0.0)                        ' Rotate The Triangle On The X axis
    cbgl4f("glRotatef", yrot, 0.0, 1.0, 0.0)                        ' Rotate The Triangle On The Y axis
    cbgl4f("glRotatef", zrot, 0.0, 0.0, 1.0)                        ' Rotate The Triangle On The Z axis

    cbgl1i("glCallList", 1)                                         ' Call Pyramid Display List                                  ' Call Cube Display List

    xrot + 0.3     ' X Axis Rotation
    yrot + 0.2     ' Y Axis Rotation
    zrot + 0.4     ' Z Axis Rotation  
    
    cbglFlip()
    
    If cbglKeyDown(cbkeyesc) Then cbglTerminate(): End
    cbglSetWindow("FPS: "+Str(1000.0 / (Timer()-t)))
    t = Timer()
Forever

User avatar
Dibalo
Advanced Member
Posts: 298
Joined: Mon Aug 27, 2007 8:12 pm
Location: Espoo, Finland
Contact:

Re: cbGL - Laitteistokiihdytettyä grafiikkaa

Post by Dibalo » Wed Nov 19, 2008 6:59 pm

Ihan uteliaisuudesta kysyn, millä tavalla kutsut funktiota merkkijonon perusteella itse dll:ssä. Millä tavalla valinta hoidetaan? On nimittäin muutamia kikkoja, joilla nopeutta saa lisättyä dramaattisesti (en toki epäile, ettetkö jo käyttäisi niitä).
The darkest spells can be found from
http://tunkkaus.blogspot.fi

User avatar
Aavesoturi
Active Member
Posts: 163
Joined: Fri Aug 31, 2007 7:07 pm
Location: Helsinki
Contact:

Re: cbGL - Laitteistokiihdytettyä grafiikkaa

Post by Aavesoturi » Thu Nov 20, 2008 11:21 am

Dibalo wrote:Ihan uteliaisuudesta kysyn, millä tavalla kutsut funktiota merkkijonon perusteella itse dll:ssä. Millä tavalla valinta hoidetaan? On nimittäin muutamia kikkoja, joilla nopeutta saa lisättyä dramaattisesti (en toki epäile, ettetkö jo käyttäisi niitä).
Itse asiassa en tiedä missä piripäissäni edes keksin käyttää merkkijonoja. Olen muokkaillut koodia siten että merkkijonot vaihtuu 1 tavun vakioihin, jolloin sekä cb:stä että dll:stä häipyy luuppi pois. Lisäksi sillon voin käskeä kääntäjää generoimaan dll:n select case -rakenteelle hyppytaulun (tms), jolloin siitä saa viimesetkin mehut irti. En tiedä olisiko funktiopointteritaulukko vielä vauhdikkaampi, mutta sanoisin, että se alkaa menemään merkityksettömäksi optimoinniksi.
EDIT: merkkijonot heivattuani tuo NeHe05 esimerkki pyörii sillä 1000 fps:llä ilman display listejäkin, eli kannattava muutos. Postailen päivitetyn paketin jahka kerkiän konvertoimaan loputki examppelit uuteen formaattiin.

User avatar
Aavesoturi
Active Member
Posts: 163
Joined: Fri Aug 31, 2007 7:07 pm
Location: Helsinki
Contact:

Re: cbGL - Laitteistokiihdytettyä grafiikkaa

Post by Aavesoturi » Fri Nov 21, 2008 1:16 am

Päivitys
Ekasta viestistä voipi ladata uuden, 0.4.0 version.
Ominaisuuksia, muutoksia ja huomioitavaa:
* Tekstin piirto onnistuu! (fontit ladataan 256*256 kuvasta)
* 2d esimerkkiä (cbglTest.cb) on päivitetty lisäämällä tekstin piirtoa
* Maskaus: Musta (0,0,0) eli sama kuin cb:ssä on maski väri, eikä sitä siis piirrettä
* Varsinaisille OpenGL wrapperifunktiolle ei enää välitetä haluttua kutsua merkkijonossa vaan vakiona, joita on 255 kappaletta cbGL.cb-tiedostossa (tämä on tuonut hurjasti lisää nopeutta)
* Toistaiseksi opengl komentoja kutsutaan ilman jälkiliitteitä (siis esim. glVertex eikä glVertex2f), [tietotyyppi ja parametrien määrä tulee wrapperi funktion nimessä - esim. cbgl2f(glVertex, 1.0, 1.0) ]
* Paketissa on nyt mukana myös tuo NeHe06 tuto (display listeillä) + tarvittava tekstuuri kuva
* Kuvia on nyt mahdollista ladata myös ilman filtteröintiä (valinnainen parametri: 0), lineaarisella filtterillä (oletus, 1) tai mipmapeilla (valinnainen parametri: 2)
* Joitakin uusia komentoja wrapperiin, luku taitaa olla nyt reilu 50

User avatar
CCE
Artist
Artist
Posts: 650
Joined: Mon Aug 27, 2007 9:53 pm

Re: cbGL - Laitteistokiihdytettyä grafiikkaa

Post by CCE » Tue Jul 07, 2009 4:03 pm

Jepjep, nostanpa näin vanhahtavan aiheen, mutta en löytänyt tälle parempaakaan paikkaa.
Elikkä onko tässä jotain tapaa saada nuolinäppäimet käyttöön? En ainakaan itse onnistunut saamaan niitä tunnistamaan painalluksia. Ja KeyHit KeyDownin ohella olisi myös ihan mukava lisä.

Muuten kyllä hyvin pätevä ja vauhdikas kirjasto. :>

User avatar
Aavesoturi
Active Member
Posts: 163
Joined: Fri Aug 31, 2007 7:07 pm
Location: Helsinki
Contact:

Re: cbGL - Laitteistokiihdytettyä grafiikkaa

Post by Aavesoturi » Tue Jul 07, 2009 4:42 pm

CCE wrote:Jepjep, nostanpa näin vanhahtavan aiheen, mutta en löytänyt tälle parempaakaan paikkaa.
Elikkä onko tässä jotain tapaa saada nuolinäppäimet käyttöön? En ainakaan itse onnistunut saamaan niitä tunnistamaan painalluksia. Ja KeyHit KeyDownin ohella olisi myös ihan mukava lisä.

Muuten kyllä hyvin pätevä ja vauhdikas kirjasto. :>
CB ja FB ei näköjään käytä samoja scan-koodeja nuolille, mutta näiden pitäisi toimia:

Code: Select all

Ylös: 72
Alas: 80
Vasen: 75
Oikea: 77
Tällä hetkellä käytän windowsia sen verran vähän, että on epätodennäköistä, että vähään aikaan tätä jatkan. Minulla on tosin tekeillä OpenGL sprite/partikkeli/tilemap -moottori, jonka valimstuttua, saattaisin integroida sen tähän, jolloin cb:n objektisysteemillekin olisi vastineensa.

Jos osaamista riittää, niin ominaisuuksia voi lisätä itsekin; cbgl:n cb ja fb sorsat löytyvät githubista: http://github.com/tapio/cbgl/tree/master

User avatar
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: cbGL - Laitteistokiihdytettyä grafiikkaa

Post by MaGetzUb » Tue Jul 07, 2009 11:18 pm

Joo, ja DrawtoGLImage sekä DrawtoGlScreen voisivat olla ihan jees... ;) Sekä myös joku DrawScaled image,x1,y1,x2,y2,x3,y3,x4,y4 (venyttää kuvan noihin koordinaatteihin sopivaksi. :D)
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.

User avatar
KilledWhale
Tech Developer
Tech Developer
Posts: 543
Joined: Sun Aug 26, 2007 2:43 pm
Location: Liminka

Re: cbGL - Laitteistokiihdytettyä grafiikkaa

Post by KilledWhale » Wed Jul 08, 2009 11:07 am

Tuo kulmien perusteella piirtäminen onnistunee glTexCoord2f käyttämällä.
CoolBasic henkilökuntaa
Kehittäjä

cbFUN Kello
cbSDL
Whale.dy.fi

<@cce> miltäs tuntuu olla suomen paras

User avatar
Aavesoturi
Active Member
Posts: 163
Joined: Fri Aug 31, 2007 7:07 pm
Location: Helsinki
Contact:

Re: cbGL - Laitteistokiihdytettyä grafiikkaa

Post by Aavesoturi » Wed Jul 08, 2009 4:29 pm

programmer of DSG wrote:Sekä myös joku DrawScaled image,x1,y1,x2,y2,x3,y3,x4,y4 (venyttää kuvan noihin koordinaatteihin sopivaksi. :D)
KilledWhale wrote:Tuo kulmien perusteella piirtäminen onnistunee glTexCoord2f käyttämällä.
Jotenkin näin (konvertoi cbgl:lle; ei testattu, mutta kopioitu dll:n DrawImage-funktiosta):

Code: Select all

  glEnable GL_TEXTURE_2D
  glBindTexture GL_TEXTURE_2D, texture_id
  glBegin GL_QUADS
    glTexCoord2f(0 , 1 )
    glVertex2i (x1 , y1 )
    glTexCoord2f(1 , 1 )
    glVertex2i (x2, y2 )
    glTexCoord2f(1 , 0 )
    glVertex2i (x4, y4)
    glTexCoord2f(0 , 0 )
    glVertex2i (x3, y3 )
  glEnd

User avatar
CCE
Artist
Artist
Posts: 650
Joined: Mon Aug 27, 2007 9:53 pm

Re: cbGL - Laitteistokiihdytettyä grafiikkaa

Post by CCE » Sun Aug 16, 2009 10:50 pm

Joo elikkä nostelenpa jälleen, kysyisin vain onko tässä mahdollista saada .PNG kuvien alphakanavaa toimimaan jotenkin järkevästi freebasic koodia muuntamatta, tällähetkellä se näyttäisi olevan tyyliä "jos enemmän kuin nolla, piirretään pikseli", joka näyttää varsin karulta pelissä. :I

User avatar
Aavesoturi
Active Member
Posts: 163
Joined: Fri Aug 31, 2007 7:07 pm
Location: Helsinki
Contact:

Re: cbGL - Laitteistokiihdytettyä grafiikkaa

Post by Aavesoturi » Mon Aug 17, 2009 5:20 pm

CCE wrote:Joo elikkä nostelenpa jälleen, kysyisin vain onko tässä mahdollista saada .PNG kuvien alphakanavaa toimimaan jotenkin järkevästi freebasic koodia muuntamatta, tällähetkellä se näyttäisi olevan tyyliä "jos enemmän kuin nolla, piirretään pikseli", joka näyttää varsin karulta pelissä. :I
Sanoisin että vaatii DLL:n muokkausta. CreateTexture ei näköjään osaa huomioida alpha-kanavaa, mutta sen pitäisi olla kohtuu helppo korjaus (cbgl.bas rivin 73 tienoille). Tuo github versio on hieman vanhempi kun meikän oma dev versio, joka sisälsi mm tuen tga kuville, mutta satuin menettämään sen datakorruptiossa. Parannukset on kuitenkin helppo palauttaa entistä ehompana käyttäen koodia fb 2d moottoristani, kunhan vaan löydän aikaa sille.

Post Reply