Moi olen miettinyt tässä että voiko c++:lla tehdä grafiikkaa ilman SDL:llää, allegroa, OpenGl, windowsia tai muuta vastaavaa. Eli onko jokin tyyli millä voi esim. vaihtaa jonkin ruudun pixelin väriä tms. Anteeksi etten oikein osaa selittää asiaa
Assembly on ainakin yksi vaihtoehto tehdä omat funktiot piirtämiseen. Tosin, en keksi siihen mitään järkevää syytä siihen, että pitäisi omat funktiot tuollaiseen tehdä.
Ongelmanahan tuossa on koodin portattavuus. DOSissa homma hoituu (ilman assemblyä) sisällyttämällä dos.h, josta löytyy funktio intr
tai vastaava. Oli nimi mikä tahansa, sillä voi kuitenkin kutsua keskeytystä 13h sopivilla parametreillä, jolloin saa näyttötilaksi vaikkapa 320x200, 256 väriä. Sitten voi kirjoitella ruudulle suoralla muistinosoituksella. Helpommalla pääsee, kun käyttää valmista rajapintaa. Koodi porttautuu helpommin (jos valitsee sopivan rajapinnan), toimii nopeammin ja päästää helpommin käsiksi isompiin näyttötiloihin.
jaa, oli vain hauska tietää miten homma toimi, mutta kiitos vastauksista
C++ ei itsessään ota kantaa mihinkään pikseleihin. Grafiikan piirtämiseen tarvitset aina jonkun rajapinnan avuksi (GDI, SDL, OpenGL, DirectX tms.)
iluwatar kirjoitti:
C++ ei itsessään ota kantaa mihinkään pikseleihin. Grafiikan piirtämiseen tarvitset aina jonkun rajapinnan avuksi (GDI, SDL, OpenGL, DirectX tms.)
Jos DOSissa tekee, niin kyllä niihin pikseleihin pääsee käsiksi. Usko tai älä, mutta on ollut aika, jolloin ei ollut GDI:tä, SDL:ää, OpenGL:ää eikä DirectX:ää. Ja miten nuo sitten pääsevät käsiksi pikseleihin, jos niihin ei pääse käsiksi kuin rajapintojen kautta? C:llä ja C++:lla (tai paikoin assemblyllä) nuokin on kirjoitettu.
iluwatar kirjoitti:
Grafiikan piirtämiseen tarvitset aina jonkun rajapinnan avuksi (GDI, SDL, OpenGL, DirectX tms.)
Tai sitten et. Kuten Metabolix yllä toteaa, esimerkiksi DOSissa (tai itse asiassa vaikka ilman käyttöjärjestelmää) homma onnistuu ihan vaan kutsumalla keskeytyksillä sopivan näyttötilan ja sitten tunkemalla niitä tavuja suoralla muistiinosoituksella. En sanoisi tätä rajapinnaksi.
Mutta vain masokisti lähtisi tekemään graafista ohjelmaa ilman jotain graafista kirjastoa. Kaikki kunnia sille, joka sen tekee, mutta silloinkin kannattaisi vähintään luoda oma näppärä setti funktioita, joita sitten voi käyttää jatkossakin. Ja silloinhan eräänlainen rajapinta on tehty.
Itselläni oli joskus vanha CP/M-järjestelmällä toimiva tietokone, jossa oli 80*25 merkin tekstinäyttö. Osa 8 bittisestä merkistöstä oli grafiikkamerkkejä, ei noita DOS:sta tuttuja viivoja, vaan kuuden "pikselin" merkkejä, joita oli siis 64. Niitten pohjalta loin hienon grafiikkakirjaston assemblerille ja pascalille, jolla pystyin piirtämään 160*75*1 grafiikkaikkunaan kaikkea kivaa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.