cb-hackers / cbEnchanted

A new runtime for CoolBasic
13 stars 3 forks source link

Piirtokomentojen siirto isosta kuvasta ruudulle on hidasta #87

Closed aXu-AP closed 12 years ago

aXu-AP commented 12 years ago

Jännä ongelma, en tiedä onko tämän ratkaiseminen teidän käsissä, mutta kuten otsikko sanoo, DrawToScreen vie ihmeellisen kauan isosta kuvasta ruudulle siirtyessä:

SCREEN 500, 500
Map = MakeImage(1000, 1000)
HotSpot Map
Repeat
    t = Timer()
    DrawToImage Map
    tDrawToImage = Timer() - t

        t = Timer()
        Color Rand(255), Rand(255), Rand(255)
        Circle Rand(1000), Rand(1000), Rand(30)
        tColorCircle = Timer() - t

    t = Timer()
    DrawToScreen
    tDrawToScreen = Timer() - t

    t = Timer()
    DrawImage Map, MouseX(), MouseY()
    tDrawImage = Timer() - t

    Color 255, 255, 255
    Text 0, 0, tDrawToImage + " ms: Piirtokomennot siirrettiin 1000x1000px kuvaan"
    Text 0, 15, tColorCircle + " ms: Ympyrä piirrettiin kuvaan"
    Text 0, 30, tDrawToScreen + " ms: Piirtokomennot siirrettiin ruudulle"
    Text 0, 45, tDrawImage + " ms: 1000x1000px kuva piirrettiin"

    DrawScreen
Forever

Itselläni DrawToScreen-komento vie aina >100 ms (joka, turha sanoakaan, vaikuttaa FPS:ään hieman negatiivisesti). Tuo aika näyttäisi olevan suoraan verrannollinen kuvan pinta-alaan, joten kuvan käsitteleminen pienemmissä paloissa ei auta.

Haluaisin siis lähinnä tietää mistä tämä johtuu ja pystyykö ongelmaa välttämään mitenkään? Ymmärrän kyllä, jos asiaa ei voida korjata.

valscion commented 12 years ago

Kyseinen lagiminen johtuu siitä että kuva kopioidaan ja maskiväri muutetaan läpinäkyväksi. Tästä on kyllä mainittu cbE:n erikoisuuksista kertovalla wikisivulla. Ratkaisuna on DefaultMaskin ottaminen pois päältä ja piirtämällä alphavärillä mielummin. Huimasti nopeampaa.

aXu-AP commented 12 years ago

Ohhoh, missasin tuon kohdan (tai muistin kyllä, että jotain siitä DefaultMaskista puhuttiin, mutta ei nyt tullut mieleen). Anteeksi vaiva, nyt toimii hyvin :)