Page 1 of 2

cbSDL v.0.20 - Nopeampaa grafiikkaa

Posted: Tue Nov 04, 2008 8:10 pm
by KilledWhale
cbSDL v.0.20
Kuten projektin nimikin kertoo kyseessä on SDL-wrapperi CoolBasicille. Tällä hetkellä cbSDL sisältää peruskomennot 2d grafiikkaan, mutta mahdollisesti tulevaisuudessa 3d-tuki voidaan saada mukaan OpenGL tuen avulla. Vaikka dll-kutsut syövätkin suuren osan SDL:n nopeudesta ero CoolBasicin valmiisiin komentoihin on kuitenkin huomattava (vai hoitaako cb 512 * 512 kuvan pyörityksen reaaliajassa?). Alunperin projekti käytti Marcoderin dll komentoja, mutta ylimääräisten funktiokutsujen välttämiseksi ja lisätehon saamiseksi jätin sen pois alkuvaiheissa. Mainittakoon vielä varalta niille jotka eivät tiedä, että SDL on nopea ja yksinkertainen kirjasto grafiikan piirtoon.

Projektin dll on mahdollista kääntää oman mielen mukaan, jolloin voi saada ylimääräiset tarkistukset pois virheistä jne. jolloin huonommilla koneilla nopeutta säästyy taas vähän. Myös piirtokomennot tai kuvakomennot voi jättää halutessaan pois.
KilledWhale wrote:Koska suunnitellun demoprojektin toteutus venyy julkaisen projektin cb puolen jo nyt.
Paketti sisältää cbSDL.dll ja muut tarvittavat dll:t
cbSDL.cb on varsinainen projekti joka pitää includettaa ja SDL_testi on esimerkkiohjelma joka on ladattavissa ensimmäisestä viestistä.
dll on kaikilla ominaisuuksillä käännetty (input, gfx ja image) ja sisältää myös virheilmoitukset (hieman hitaampi kuin ilman virheitä mutta saa kelvata)
Lataa:
http://up.servut.us/dl/11143.ikg8

Tällä hetkellä projektissa on valmiina seuraavat komennot:

Code: Select all

// Lasku (molemmat hoidetaan cb puolella ilman dll ja on tehty vain helpottamaan elämää
SDL_FPS()
SDL_MamRGBA()

// Yleinen
SDL_Init()
SDL_Quit()

// Piirto
SDL_Circle()
SDL_Box()
SDL_Triangle()
SDL_Line()
SDL_Ellipse()

// Ikkuna
SDL_Screen()
SDL_SetWindow()
SDL_DrawScreen()

// Kuvat
SDL_LoadImage()
SDL_DrawImage()
SDL_DeleteImage()
SDL_RotateImage()
SDL_ImageWidth() (toimii myös näytölle)
SDL_ImageHeight() (toimii myös näytölle)
SDL_Lock()
SDL_Unlock()
SDL_GetPixel()
SDL_SetPixel()
SDL_AlphaImage()
SDL_MaskImage()
SDL_DrawImageBox()

// Syötteet
SDL_KeyDown()
SDL_MouseX()
SDL_MouseY()
SDL_MouseDown()
// Teksti
SDLTTF_Init()
SDLTTF_LoadFont()
SDLTTF_Text()

// Eventit
SDL_PollEvent()
Changelog:

Code: Select all

//////////////////////////////////////////////////////////////////
v.0.20
- SDL_DrawImageBox()
- SDLTTF_Init()
- SDLTTF_LoadFont()
- SDLTTF_Text()
- SDL_PollEvent
v.0.10
-Dll mahdollista kääntää debug -ominaisuuksilla tai ilman (ilman luonnollisesti hieman nopeampi)
-Dll mahdollista kääntää ilman piirtokomentoja
-Dll mahdollista kääntää ilman kuvakomentoja
-Suurin osa komennoista sisältää nyt virheilmoitukset debugatessa
-Ensimmäinen demo julkaistu
////////////////////////////
v.0.02
-Lisätty SDL_Line()
-Lisätty SDL_Ellipse()
-Lisätty SDL_AlphaImage()
-Lisätty SDL_MaskImage()
-Lisätty SDL_MouseX()
-Lisätty SDL_MouseY()
-Lisätty SDL_MouseDown()
////////////////////////////
v.0.01
-Changelog aloitettu
Lataa versio 0.20
http://killedwhale.jouluserver.com/cbSD ... se%202.zip

C++ lähdekoodit:
http://killedwhale.jouluserver.com/cbSDL%20-%20c++.zip

Lisäksi tarvitset ainakin:
SDL
SDL_gfx
SDL_image (vaatii toimiakseen tiff, zlib, libpng ja libjpeg)
SDL_ttf

Jos haluat jättää joitain toimintoja pois dll:stä avaa cbSDL.h ja muuta haluamasi seuraavista:
#define IMAGE 1 // Kuvat
#define GFX 1 // Piirtokomennot
#define DEBUG 1 // Virheentarkistukset mukana tai ei (ilman hieman nopeampaa)
#define INPUT 1 // Syötteet
#define EVENT 1 // SDL_Eventit
#define TTF 1 // Fontit ja tekstin piirto

Re: cbSDL v.0.10

Posted: Tue Nov 04, 2008 8:13 pm
by JATothrim
Aivan Mahtava. :shock: Hyvä, KilledWhale! tälle tulee pakostakin käyttöä!! :D

Re: cbSDL v.0.10 - Nopeampaa grafiikkaa

Posted: Tue Nov 04, 2008 10:33 pm
by Harakka
Ohhoh. Tätä on jo odotettu, aika monta kertaa valitettu mahdottomaksi :D Tiedossa iloista testailua vanhojen efektien ym. parissa. Tosin pikselikomennoissa DLL-kutsut saattavat vähentää hyötyä aika paljon? Läpinäkyvyys vaikuttaa lupaavalta ja nyt onnistuvat aika paljon kätevämmin pyörivät karttasysteemit. Isot kiitokset.

EDIT: Jaa, ei vielä ladattavissa. Pöh. :P

Re: cbSDL v.0.10 - Nopeampaa grafiikkaa

Posted: Wed Nov 05, 2008 12:43 am
by Ilmuri
Eikös jostain SDL:n lisäkirjastoista löydy trifilleri ja rotozoomeri? Olisiko mahdollista ahtaa ainakin trifilleri mukaan?

Re: cbSDL v.0.10 - Nopeampaa grafiikkaa

Posted: Wed Nov 05, 2008 8:02 am
by KilledWhale
Tosin pikselikomennoissa DLL-kutsut saattavat vähentää hyötyä aika paljon?
Jep, aiemmin testatessa koko ruudun piirtoon pikseli kerrallaan meni ~10sekuntia ja vaikka kaikki pikselit ladottiin taulukkoon se ei paljoa nopeuttanut.
Olisiko mahdollista ahtaa ainakin trifilleri mukaan?
On jo mukana ;)

Re: cbSDL v.0.10 - Nopeampaa grafiikkaa

Posted: Wed Nov 05, 2008 11:05 am
by Ilmuri
KilledWhale wrote:
Olisiko mahdollista ahtaa ainakin trifilleri mukaan?
On jo mukana ;)
No onpa taas tyhmä olo. Kyseessä lienee yksiväriset kolmiot?

Re: cbSDL v.0.10 - Nopeampaa grafiikkaa

Posted: Wed Nov 05, 2008 3:04 pm
by KilledWhale
Ilmuri wrote:
KilledWhale wrote:
Olisiko mahdollista ahtaa ainakin trifilleri mukaan?
On jo mukana ;)
No onpa taas tyhmä olo. Kyseessä lienee yksiväriset kolmiot?
Kyllä.

Tosiaan toiveita komentoihin voi sanella jo nyt niin pyrin laittamaan ne julkaistavaan versioon mukaan.

Re: cbSDL v.0.10 - Nopeampaa grafiikkaa

Posted: Wed Nov 05, 2008 3:19 pm
by Dande
Mitenkäs onnistuit DLL:n funktiolla piirtämään CoolBasicin ikkunaan? Tai jos tuo testin ikkuna SDL:n luoma, niin minne piilotit CB:n oman?
Hyvältähän tuo näyttää. Olisit tosin voinut valita portattavaksi jonkun laitteistokiihdytetyn kirjaston, kuten vaikka SFML.

Re: cbSDL v.0.10 - Nopeampaa grafiikkaa

Posted: Wed Nov 05, 2008 5:18 pm
by KilledWhale
Galgoneer wrote:Mitenkäs onnistuit DLL:n funktiolla piirtämään CoolBasicin ikkunaan? Tai jos tuo testin ikkuna SDL:n luoma, niin minne piilotit CB:n oman?
Hyvältähän tuo näyttää. Olisit tosin voinut valita portattavaksi jonkun laitteistokiihdytetyn kirjaston, kuten vaikka SFML.
CB-ikkunan otsikoksi laitetaan jotain tyyliin "himepleaz" jonka jälkeen se piilotetaan ja luodaan uusi sdl ikkuna päälle. Yritän vielä selvittää parempaa tapaa asian hoitamiseksi mutta siihen saakka tämä saa kelvata :P

Re: cbSDL v.0.10 - Nopeampaa grafiikkaa

Posted: Wed Nov 05, 2008 5:44 pm
by tuhoojabotti
tuleeko tähän tulevaisuudessa myös ei pikselöityneet piirto komennot, sana ei nyt muistu mieleen, joku antialiasointi yms. :P

Re: cbSDL v.0.10 - Nopeampaa grafiikkaa

Posted: Wed Nov 05, 2008 10:22 pm
by kezzzu
Hmm, voisi mahdollisesti toimia myös tällä kepposella (D3D apihookilla) :
http://www.gamedev.net/community/forums ... _id=493024
http://www.gamedev.net/community/forums ... _id=359794

Eli jätät normaalisti cb:n ruudun taustalle fullscreen modelle ja koukutat sdl , opengl tai mitä vaan päälle ;D jos oikein tajusin..

Jos oon väärässä soveltuvuudesta tähän projektiin niin korjatkaa mun tietoja.

Kezzzu

Re: cbSDL v.0.10 - Nopeampaa grafiikkaa

Posted: Wed Nov 05, 2008 10:41 pm
by kezzzu
Ja vielä tämä unohtui:
http://www.codeguru.com/Cpp/W-P/dll/hoo ... .php/c127/

eli kun teet wrapperiin tuon niin pitäs toimia ehkä ^^

btw en osaa sitten pätkääkään ohjelmoida. JA kirjaimellisesti

Kezzzu

Re: cbSDL v.0.10 - Nopeampaa grafiikkaa

Posted: Thu Nov 06, 2008 7:58 am
by KilledWhale
kezzzu wrote:Hmm, voisi mahdollisesti toimia myös tällä kepposella (D3D apihookilla) :
http://www.gamedev.net/community/forums ... _id=493024
http://www.gamedev.net/community/forums ... _id=359794

Eli jätät normaalisti cb:n ruudun taustalle fullscreen modelle ja koukutat sdl , opengl tai mitä vaan päälle ;D jos oikein tajusin..

Jos oon väärässä soveltuvuudesta tähän projektiin niin korjatkaa mun tietoja.

Kezzzu
kezzzu wrote:Ja vielä tämä unohtui:
http://www.codeguru.com/Cpp/W-P/dll/hoo ... .php/c127/

eli kun teet wrapperiin tuon niin pitäs toimia ehkä ^^

btw en osaa sitten pätkääkään ohjelmoida. JA kirjaimellisesti

Kezzzu
Lueskelen nuo läpi koulun jälkeen ja katson jos hookkaaminen on mahdollista. En ole ihan varma miten SDL-pinnan saisi directx ikkuunaan mutta katsotaan. :P

Kiitos linkeistä kuitenkin

Re: cbSDL v.0.10 - Nopeampaa grafiikkaa

Posted: Thu Nov 06, 2008 8:14 am
by vilQuri
Todella hienoa! Jos saisi tuon SDL_MIxer lisäkirjaston ahdattua mukaan niin voisi tehdä kaupallisiakin pelejä musiikeilla :mrgreen: .

Re: cbSDL v.0.10 - Nopeampaa grafiikkaa

Posted: Thu Nov 06, 2008 4:15 pm
by temu92
Ei voi ilman fmodin lisenssin ostamista, sillä cb:n käännetyssä exe tiedostossa on silti vieläkin fmodin dll pakattuna mukaan. Sitäpaitsi Audiere on ainakin imo parempi kun SDL_Mixer.

Re: cbSDL v.0.10 - Nopeampaa grafiikkaa

Posted: Thu Nov 06, 2008 4:40 pm
by KilledWhale
temu92 wrote:Ei voi ilman fmodin lisenssin ostamista, sillä cb:n käännetyssä exe tiedostossa on silti vieläkin fmodin dll pakattuna mukaan. Sitäpaitsi Audiere on ainakin imo parempi kun SDL_Mixer.
Senhän voi aina poistaa :D

Re: cbSDL v.0.10 - Nopeampaa grafiikkaa

Posted: Fri Nov 07, 2008 1:41 pm
by Aavesoturi
Tämä on mielenkiintoista. Just pari päivää ennen ku julkaisit tuon ni mietiskelin että pitäiskö kokeilla tehä joku grafiikka wrapperi cb:lle. Tänään sitten testasin ja tein freebasicilla opengl wrapperi dll:n. Se ei tosin osaa tällä hetkellä muuta kun luoda ikkunan ja piirrellä viivoja (+pari muuta käskyä). Lähinnä nopeutta halusin testata ja alustavat testit oli aika masentavia:

Testi: 4000 random viivaa 800*600 ikkunassa
cb:n piirtokomennot: 120ms
cbgl DLL: >500ms

Kokeilin sitten piruuttani mitä luvut on pelkällä fb:llä:
fb:n piirtokomennot: n. 32ms
fb opengl moodissa: n. 2ms
fb opengl:ssä, viivat antialiasoituina ja blendattuina: n. 8ms

Nuo tulokset kyllä näyttää että eniten aikaa kuluu selvästi DLL-kutsuihin, joten päätin sitten kokeilla ilman Marcoderin dll kirjastoa, kun tossa ekassa postissakin sanottiin että se syö aikaa.
Tulos: cbgl 50ms, eli nopeus yli kymmenkertaistu ku tiputti marcoderin kirjaston pois!

Uteliaisuudesta haluasin tietää kuinka kauan tuolta cbSDL:ltä menee tuohon samaan testiin, eli 4000 viivaa.
(Niin ja ps, on kyllä kamalaa kikkailua tuo parametrien välitys dll:ille)
(PPS, vois kokeilla piruuttaan Irrlichtin wrappaamista :P )

Re: cbSDL v.0.10 - Nopeampaa grafiikkaa

Posted: Fri Nov 07, 2008 3:22 pm
by KilledWhale
Omalla koneellani (intel pentium 3 ~800mhz, 512ram) aikaa kului noin 400ms ilman marcoderin kirjastoa.

Re: cbSDL v.0.10 - Nopeampaa grafiikkaa

Posted: Fri Nov 07, 2008 3:32 pm
by TheFish
Entä jos antaisit testi ohjelman aavesoturille, niin saisi samalla kokoonpanolla nuo luvut?

Re: cbSDL v.0.10 - Nopeampaa grafiikkaa

Posted: Fri Nov 07, 2008 3:35 pm
by KilledWhale
Tässä olisi testiohjelma http://up.servut.us/11142.i62g46j

Ohjelma piirtää 4000 viivaa ja errorittaa siihen kuluneen ajan.
Kaikki halukkaat sanokoon tuloksensa