PutPixel apuja

Anonyymi

Mikä käsky Windowsissa vastaa BGI:n PutPixel käskyä? Kävin noin vuosi sitten tietokonegrafiikan "alkeiskurssin" ja siellä käytettiin vielä vanhaa DOS-pohjaista Borlandin C kääntäjää ja PutPixel tuli tutuksi. Nyt yritän tehdä jotain näyttävää Visual Studion opiskelijaversiolla mutta en vain keksi miten niinkin yksinkertaisen asian kuin pikselin tulostus näytölle tuntuu monimutkaiselle??

54

1505

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Anonyymi

      C olen käyttänyt grafiikan piirtoon SDL-kirjastoa.

      SetPixel()

      Sets a single pixel to desired value

      SDLSurface.SetPixel( x, y, value )
      x X coordinates of the pixel to be set
      y Y coordinates of the pixel to be set
      value The value to be set
      Raises:
      ParamError if x or y are out of ranges

      This functions sets the color of a pixel to the desired value. The value is the palette index if this map has a palette, otherwise is a truecolor value whose precision depends on the mode depth.

      To get a suitable value for this surface, use SDLSurface.GetPixel.

      • Anonyymi

        Poista se sekoileva windows! jossa ei mikään toimi!


    • Anonyymi

      Katso Visual Studion dokumentaatiosta.

      • Anonyymi

        Visual Studio on IDE...


      • Anonyymi
        Anonyymi kirjoitti:

        Visual Studio on IDE...

        TOIN SAIRANRASKA OHJELMA!


      • Anonyymi
        Anonyymi kirjoitti:

        TOIN SAIRANRASKA OHJELMA!

        Tahmaa takulla !


      • Anonyymi
        Anonyymi kirjoitti:

        Visual Studio on IDE...

        No mutta ihanko totta? Dokumentaatio sillä on silti, ja sieltä selviää yhtä sun toista, mukaanlukien vastaus aloittajan kysymykseen.


      • Anonyymi
        Anonyymi kirjoitti:

        TOIN SAIRANRASKA OHJELMA!

        Et ilmeisesti tiedä mitä eroa on IDE:llä ja koodieditorilla? Tietenkin IDE on paljon raskaampi käyttää, mutta vastaavasti sillä voi tehdä paljon sellaista mitä et voi tehdä pelkällä koodieditorilla.

        Jos koneesi ei jaksa pyörittää Visual Studiota, älä käytä Visual Studiota. Ei vika ole VS:ssä, vaan sinun heikkotehoisessa koneessasi.


      • Anonyymi

        Pyysin lähihoitajaa laitaan mulle peräpuikon, mutta se soitti poliisin!


      • Anonyymi
        Anonyymi kirjoitti:

        No mutta ihanko totta? Dokumentaatio sillä on silti, ja sieltä selviää yhtä sun toista, mukaanlukien vastaus aloittajan kysymykseen.

        Outlookin suodatus petti – käyttäjien sähköpostit täyttyivät roskapostista


    • Anonyymi

      Toisin kuin DOS:ssa, Windowsissa ohjelma ei voi piirtää mitä haluaa minne haluaa - eihän siitä tulisi mitään jos joku toinen ohjelma vaikka muuttaisi nettiselaimen näyttämää kuvaa.

      Pitää käyttää ikkunoita yms. ja juttu on hankalampaa (mutta turvallisempaa) kuin DOS:ssa.

      • Anonyymi

        Näinpä. Ja jos haluaa koko ruudun piirtoalustakseen, niin sitten vain avaa sen ikkunan koko ruudun tilaan.


      • Anonyymi

        Jos oikein muistan, ainakin vanhemmissa Windowseissa pystyi piirtelemään viivoja kaikkien ikkunoiden päälle, piti vaan jotenkin ottaa se hdc, beginPaint , endPaint yms.. mutta tästä on aikaa jo 1996, etten kyllä ihan muista.


    • Anonyymi

      Tattis vastaajille!

    • Anonyymi

      Nuo piirtorutiinit tulee usein eri SDK-ympäristöistä. Eräs tällainen on qt5, jolla piirto tehdään canvas-olioon, ellen väärin muista. Ensin siis avataan ikkuna, johon voi piirtää. Qt5:n etu on se, että sitä käyttämällä ohjelma on helppo portata eri käyttöjärjestelmien välillä. Muitakin kirjastoja on olemassa käyttöjärjestelmän taholta tarjolla, mutta yleensä niiden käyttö on jonkin verran hankalampaa, kuin käyttää SDK:n läpi valmista wrapperia piirtoa varten - koodia ainakin tarvitaan paljon vähemmän ja esimerkkiohjelmia on tarjolla joissa esitellään API-funktioita.

      • Anonyymi

        "Qt5:n etu on se, että sitä käyttämällä ohjelma on helppo portata eri käyttöjärjestelmien välillä. "

        Hölmöltä kuullostaa. Viimeiset 12 vuotta on voinut piirtää pikseleitä selaimessa pikseleitä canvasille kääntämättä ja toimii joka paikassa. Tekee vain parin rivin SetPixel funktion että piirtää 1x1 pikselin kokoisia neliöitä.

        Tämä on hassua kun tällä palstalla ehdotellaan aina jotain 70-luvun välineitä yksinkertaisten asioiden tekemiseen silloin kun on parempaakin olemassa.


      • Anonyymi

        Toisko joku siinollia mulle, t, Vapunen.


      • Anonyymi
        Anonyymi kirjoitti:

        "Qt5:n etu on se, että sitä käyttämällä ohjelma on helppo portata eri käyttöjärjestelmien välillä. "

        Hölmöltä kuullostaa. Viimeiset 12 vuotta on voinut piirtää pikseleitä selaimessa pikseleitä canvasille kääntämättä ja toimii joka paikassa. Tekee vain parin rivin SetPixel funktion että piirtää 1x1 pikselin kokoisia neliöitä.

        Tämä on hassua kun tällä palstalla ehdotellaan aina jotain 70-luvun välineitä yksinkertaisten asioiden tekemiseen silloin kun on parempaakin olemassa.

        Jos lähdetään siitä, että pikseleitä pitäisi saada ruudulle miljardi sekunnissa? Ei tuollaiset selain-höpsädykset oikein tahdo toimia. Kummallista, että nykyään halutaan tehdä tekniikalla, jossa tehot saadaan pidettyä n. 80-luvun alun kotikoneiden tasolla vaikka selain käyttää nyky-prosessorin kaiken irtoavan tehon..


    • Anonyymi

      Joissain kielissä tuokin on tehty vaikeaksi.

      Delphillä helppoa:

      esim.

      Paintbox1.Canvas.Pixels[X,Y] := clRed;

      tuo muuttaa yhden pikselin (koordinaatit X,Y) punaiseksi.

      Jos kohde ei ole paintbox vaan Bitmap1:TBitmap, niin:

      Bitmap1.Canvas.Pixels[X,Y] := clLime;

      tuo taas muuttaa Bitmapissa yhden pikselin kirkkaanvihreäksi.

      • Anonyymi

        Vaapusella taas rahat ihan loppu!


      • Anonyymi

        Delphistä puuheenollen, fpc-src:ssä on esimerkkikoodia sdl:n käytöstä. Testasin mielenkiinnosta tuota pixelin piirtoa ja sen sai toimimaan double bufferingin kanssa melko pienellä vaivalla, jolloin näytölle sai 10Hz virkistystaajuuden 640x480 tarkkuudella ikkunassa. Tuosta jos haluaa lähteä optimoimaan saa luultavasti ihan pelattavan. Koska kuva tuotetaan tavallisessa muistipuskurissa on pikselin piirto aika nopea toimenpide.
        Valitettavasti en löytänyt sdl2-esimerkkejä tuolta, se olisi luultavasti järkevämpi valinta kuitenkin. No, sdl on saatu toimimaan hyvin ja korvaa bgi-kirjaston. Näyttäisi löytyvän opengl-esimerkkejä myös jos kiinnostusta riittää:
        /usr/share/fpcsrc/3.0.4/packages
        Ja kuvien generointiin tietysti fcl-image:
        https://wiki.freepascal.org/fcl-image


      • Anonyymi
        Anonyymi kirjoitti:

        Delphistä puuheenollen, fpc-src:ssä on esimerkkikoodia sdl:n käytöstä. Testasin mielenkiinnosta tuota pixelin piirtoa ja sen sai toimimaan double bufferingin kanssa melko pienellä vaivalla, jolloin näytölle sai 10Hz virkistystaajuuden 640x480 tarkkuudella ikkunassa. Tuosta jos haluaa lähteä optimoimaan saa luultavasti ihan pelattavan. Koska kuva tuotetaan tavallisessa muistipuskurissa on pikselin piirto aika nopea toimenpide.
        Valitettavasti en löytänyt sdl2-esimerkkejä tuolta, se olisi luultavasti järkevämpi valinta kuitenkin. No, sdl on saatu toimimaan hyvin ja korvaa bgi-kirjaston. Näyttäisi löytyvän opengl-esimerkkejä myös jos kiinnostusta riittää:
        /usr/share/fpcsrc/3.0.4/packages
        Ja kuvien generointiin tietysti fcl-image:
        https://wiki.freepascal.org/fcl-image

        Mutta miksi noin hankalasti?


      • Anonyymi
        Anonyymi kirjoitti:

        Mutta miksi noin hankalasti?

        En keksi, mikä tuossa olisi niin hankalaa ollut:
        type
        Pixel = Record
        x,y: integer;
        color: Uint32;
        end;

        var scr: PSDL_Surface;
        pix: Pixel;
        ...init
        scr := SDL_SetVideoMode(640,480,32,SDL_SWSURFACE);
        ...pikselin määrittely
        pix.x := 320;
        pix.y := 240;
        pix.color := SDL_MapRGB(scr^.format $ff,$0,$0); {red}
        ...lasketaan sijainti bufferissa
        p := Pointer( PUint8( scr^.pixels ) (plus) Uint32(pix.y) * scr_surf^.pitch
        (plus) Uint32(pix.x) * bpp);
        ...ja piirretään
        PUint32(p)^ := pix1.color;

        ...tarpeeksi monta pistettä, saadaan ne ruudulle päivittämällä koko ruutu:
        SDL_UpdateRect(scr,0,0,0,0);


      • Anonyymi
        Anonyymi kirjoitti:

        En keksi, mikä tuossa olisi niin hankalaa ollut:
        type
        Pixel = Record
        x,y: integer;
        color: Uint32;
        end;

        var scr: PSDL_Surface;
        pix: Pixel;
        ...init
        scr := SDL_SetVideoMode(640,480,32,SDL_SWSURFACE);
        ...pikselin määrittely
        pix.x := 320;
        pix.y := 240;
        pix.color := SDL_MapRGB(scr^.format $ff,$0,$0); {red}
        ...lasketaan sijainti bufferissa
        p := Pointer( PUint8( scr^.pixels ) (plus) Uint32(pix.y) * scr_surf^.pitch
        (plus) Uint32(pix.x) * bpp);
        ...ja piirretään
        PUint32(p)^ := pix1.color;

        ...tarpeeksi monta pistettä, saadaan ne ruudulle päivittämällä koko ruutu:
        SDL_UpdateRect(scr,0,0,0,0);

        "En keksi, mikä tuossa olisi niin hankalaa ollut:"

        https://www.w3schools.com/graphics/canvas_drawing.asp

        Tekee vain funtion mikä piirtää 1x1

        esim jotain tällaista:

        function setPixel(x, y, canvas) { canvas.strokeRect(x,y,1,1);}

        Ja se kun höpötät jostain OpenGL:n lisäämisestä tuohon... miksi?


      • Anonyymi

        Liekkö enää Delphissä elossa ne DelphiX -komponentit tai jatkokehitelty? Niillä oli tosi kätevä tehdä pelejä, ainakin 2D-pelejä, nuo käytti DirectX-rajapintaa pohjana.


      • Anonyymi
        Anonyymi kirjoitti:

        Liekkö enää Delphissä elossa ne DelphiX -komponentit tai jatkokehitelty? Niillä oli tosi kätevä tehdä pelejä, ainakin 2D-pelejä, nuo käytti DirectX-rajapintaa pohjana.

        En usko tuota kätevyyttä.

        SDL:ssä ollut paljonkin järkeä ihan siitä saakka kun se tuli. Se ollut oikeasti hyvä, on vieläkin hengissä ja ikivanhat vanhat softat kääntyy sille edelleen.

        Mutta kyllä siitäkin aika meni ajat sitten ohi kun sai selaimella tehtyä tai pelimoottorilla.


    • Anonyymi

      Tästä on aiempi topik
      https://keskustelu.suomi24.fi/t/16853840/empisteiden-piirtaminen-ruudulleem

      P/Invoke on ohjelmistokomponentti windows alustalla .NET kielille jolla päästään yleensä C++-kielessä käytettyihin windowsin yleisiin ohjelmointi käskyihin.
      https://learn.microsoft.com/en-us/dotnet/standard/native-interop/pinvoke

      Näitä käskyjä importaavia finger printejä löytyy täältä
      https://www.pinvoke.net/default.aspx/gdi32.SetPixel
      Specialisti osaa tehdä fingerprintit c-kielen .h-tiedostosta.

      • Anonyymi

      • Anonyymi
        Anonyymi kirjoitti:

        Esimerkiksi SetPixel käskyn esittely löytyy tiedostosta wingdi.h sivulta https://learn.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-setpixel

        Olennainen kysymys olisi että miksi pitäisi käyttää jotain legacyrajapintoja tähän harjoitteluun?

        Kyllä se SDL on tässä vaivattomampi. Vielä kätevämpi olisi toteuttaa itse se SetPixel funktio että piirtelee selaimessa canvasille (käytännössä 1x1 kokoisen neliön piirto oman funktion sisällä) niin ei tarvitsisi asennella tai kääntää mitään. Pelkkä editori vaan.


      • Anonyymi
        Anonyymi kirjoitti:

        Olennainen kysymys olisi että miksi pitäisi käyttää jotain legacyrajapintoja tähän harjoitteluun?

        Kyllä se SDL on tässä vaivattomampi. Vielä kätevämpi olisi toteuttaa itse se SetPixel funktio että piirtelee selaimessa canvasille (käytännössä 1x1 kokoisen neliön piirto oman funktion sisällä) niin ei tarvitsisi asennella tai kääntää mitään. Pelkkä editori vaan.

        En usko että suomesta löytyy kovin montaa pc-grafiikkaohjelmointiin perehtynyttä ammattilaista, sellaisia taitaa löytyä peliohjelmoinnin ja laitteistovalmistajien parista.
        PC-tietokoneen näytönohjaus ja sen mikropiiri ja ohjelmisto ovat pääasiassa käyttöjärjestelmäriippumattomia ja omia ohjelmistojaan ja ohjelmointirajapintojaan.

        Esimerkiksi tämä windows käyttöjärjestelmä funktio SetPixel on monikerros-arkkitehtuuria joka päätyy erilaisten ohjelmistokomponenttien ja ajuriarkkitehtuurien kautta laitteistotasolle, eikä sillä tosiaan näytön grafiikkaa ohjelmoida perustasolla jossa 4K näyttö virkistyy 100 hz taajuudella.


      • Anonyymi
        Anonyymi kirjoitti:

        En usko että suomesta löytyy kovin montaa pc-grafiikkaohjelmointiin perehtynyttä ammattilaista, sellaisia taitaa löytyä peliohjelmoinnin ja laitteistovalmistajien parista.
        PC-tietokoneen näytönohjaus ja sen mikropiiri ja ohjelmisto ovat pääasiassa käyttöjärjestelmäriippumattomia ja omia ohjelmistojaan ja ohjelmointirajapintojaan.

        Esimerkiksi tämä windows käyttöjärjestelmä funktio SetPixel on monikerros-arkkitehtuuria joka päätyy erilaisten ohjelmistokomponenttien ja ajuriarkkitehtuurien kautta laitteistotasolle, eikä sillä tosiaan näytön grafiikkaa ohjelmoida perustasolla jossa 4K näyttö virkistyy 100 hz taajuudella.

        "En usko että suomesta löytyy kovin montaa pc-grafiikkaohjelmointiin perehtynyttä ammattilaista, sellaisia taitaa löytyä peliohjelmoinnin ja laitteistovalmistajien parista."

        Olen perehtynyt tähän syvällisesti joskaan en työn parissa sitä tee ja tunnen ihmisiä ketkä sitten työkseen tekevät. Kyseistä aihetta muuten opetetaan kouluissakin.

        "PC-tietokoneen näytönohjaus ja sen mikropiiri ja ohjelmisto ovat pääasiassa käyttöjärjestelmäriippumattomia ja omia ohjelmistojaan ja ohjelmointirajapintojaan."

        Ei mitään peligrafiikkaa tehdä ohjelmoimalla suoraan rautaa. Tuosta on yli 25v aikaa kun tuollaista tehtiin peleissä. Silloin 90-luvun puolivälin jälkeen alettiin käyttämään DirectX:ää ja pian sen jälkeen tuli SDL jos halusi piirtää pikseleitä laitteistoriippumattomasti. Peliohjelmoinnissa nämä eivät kiinnosta kun peliohjelmointi tehdään korkeammalla tasolla käyttäen pelimoottoria. Pelejä tehtiin pelimoottoreita käyttäen jo 80-luvulla.

        "Esimerkiksi tämä windows käyttöjärjestelmä funktio SetPixel on monikerros-arkkitehtuuria joka päätyy erilaisten ohjelmistokomponenttien ja ajuriarkkitehtuurien kautta laitteistotasolle, eikä sillä tosiaan näytön grafiikkaa ohjelmoida perustasolla jossa 4K näyttö virkistyy 100 hz taajuudella."

        Kyllä se 4K näyttö virkistyy 100Hz taajuudella vaikka sen pikselin piirtää siihen selaimen canvasille. Voi muuten ohjelmoida vaikka pelejä jos siltä tuntuu.


      • Anonyymi
        Anonyymi kirjoitti:

        "En usko että suomesta löytyy kovin montaa pc-grafiikkaohjelmointiin perehtynyttä ammattilaista, sellaisia taitaa löytyä peliohjelmoinnin ja laitteistovalmistajien parista."

        Olen perehtynyt tähän syvällisesti joskaan en työn parissa sitä tee ja tunnen ihmisiä ketkä sitten työkseen tekevät. Kyseistä aihetta muuten opetetaan kouluissakin.

        "PC-tietokoneen näytönohjaus ja sen mikropiiri ja ohjelmisto ovat pääasiassa käyttöjärjestelmäriippumattomia ja omia ohjelmistojaan ja ohjelmointirajapintojaan."

        Ei mitään peligrafiikkaa tehdä ohjelmoimalla suoraan rautaa. Tuosta on yli 25v aikaa kun tuollaista tehtiin peleissä. Silloin 90-luvun puolivälin jälkeen alettiin käyttämään DirectX:ää ja pian sen jälkeen tuli SDL jos halusi piirtää pikseleitä laitteistoriippumattomasti. Peliohjelmoinnissa nämä eivät kiinnosta kun peliohjelmointi tehdään korkeammalla tasolla käyttäen pelimoottoria. Pelejä tehtiin pelimoottoreita käyttäen jo 80-luvulla.

        "Esimerkiksi tämä windows käyttöjärjestelmä funktio SetPixel on monikerros-arkkitehtuuria joka päätyy erilaisten ohjelmistokomponenttien ja ajuriarkkitehtuurien kautta laitteistotasolle, eikä sillä tosiaan näytön grafiikkaa ohjelmoida perustasolla jossa 4K näyttö virkistyy 100 hz taajuudella."

        Kyllä se 4K näyttö virkistyy 100Hz taajuudella vaikka sen pikselin piirtää siihen selaimen canvasille. Voi muuten ohjelmoida vaikka pelejä jos siltä tuntuu.

        Alaan perehtynyt varmasti osaa paremmin esittää kuinka grafiikkakorttia ohjelmoidaan. Grafiikkakorteissa näyttää olevan tällä hetkellä omaa muistia 30 GB:en asti, joka on kolme neljä kertaa enemmän kuin keskiverto PC:n RAM.

        https://developer.nvidia.com/nsight-visual-studio-edition
        "NVIDIA Nsight™ VSE allows you to build and debug integrated GPU kernels and native CPU code as well as inspect the state of the GPU and memory."
        Alan osaamista harventaa se että C++ ohjelmointia ei opeteta yleisesti alaan liittyvässä koulutuksessa, yleisesti käytössä olevat laitteistot eivät tue grafiikka-ohjelmointia.

        Ala onkin jonkinlainen atk-alan elitistinen osa.
        Joka on hiukan nurinkurista, että tämä laitteistovalmistajien masinoima "peliala" on täyttänyt jo huonekaluliikkeet ja atk-markkinat ylihinnoiteltujen pelituotteidensa kanssa, ja koko atk-alasta on tullut jotain lasten pelailua, kun atk:lla olisi paljon enemmän annettavaa yhteiskunnille.


      • Anonyymi
        Anonyymi kirjoitti:

        "En usko että suomesta löytyy kovin montaa pc-grafiikkaohjelmointiin perehtynyttä ammattilaista, sellaisia taitaa löytyä peliohjelmoinnin ja laitteistovalmistajien parista."

        Olen perehtynyt tähän syvällisesti joskaan en työn parissa sitä tee ja tunnen ihmisiä ketkä sitten työkseen tekevät. Kyseistä aihetta muuten opetetaan kouluissakin.

        "PC-tietokoneen näytönohjaus ja sen mikropiiri ja ohjelmisto ovat pääasiassa käyttöjärjestelmäriippumattomia ja omia ohjelmistojaan ja ohjelmointirajapintojaan."

        Ei mitään peligrafiikkaa tehdä ohjelmoimalla suoraan rautaa. Tuosta on yli 25v aikaa kun tuollaista tehtiin peleissä. Silloin 90-luvun puolivälin jälkeen alettiin käyttämään DirectX:ää ja pian sen jälkeen tuli SDL jos halusi piirtää pikseleitä laitteistoriippumattomasti. Peliohjelmoinnissa nämä eivät kiinnosta kun peliohjelmointi tehdään korkeammalla tasolla käyttäen pelimoottoria. Pelejä tehtiin pelimoottoreita käyttäen jo 80-luvulla.

        "Esimerkiksi tämä windows käyttöjärjestelmä funktio SetPixel on monikerros-arkkitehtuuria joka päätyy erilaisten ohjelmistokomponenttien ja ajuriarkkitehtuurien kautta laitteistotasolle, eikä sillä tosiaan näytön grafiikkaa ohjelmoida perustasolla jossa 4K näyttö virkistyy 100 hz taajuudella."

        Kyllä se 4K näyttö virkistyy 100Hz taajuudella vaikka sen pikselin piirtää siihen selaimen canvasille. Voi muuten ohjelmoida vaikka pelejä jos siltä tuntuu.

        "Ei mitään peligrafiikkaa tehdä ohjelmoimalla suoraan rautaa."

        Tuskimpa se "rauta" ilman ohjelmointia toimii, eli kyllä sitä ihan "suoraan" ohjelmoidaan. Samalla tapaa kuin CPU toimii omalla "rautaisella" käskykannallaan.


      • Anonyymi
        Anonyymi kirjoitti:

        "En usko että suomesta löytyy kovin montaa pc-grafiikkaohjelmointiin perehtynyttä ammattilaista, sellaisia taitaa löytyä peliohjelmoinnin ja laitteistovalmistajien parista."

        Olen perehtynyt tähän syvällisesti joskaan en työn parissa sitä tee ja tunnen ihmisiä ketkä sitten työkseen tekevät. Kyseistä aihetta muuten opetetaan kouluissakin.

        "PC-tietokoneen näytönohjaus ja sen mikropiiri ja ohjelmisto ovat pääasiassa käyttöjärjestelmäriippumattomia ja omia ohjelmistojaan ja ohjelmointirajapintojaan."

        Ei mitään peligrafiikkaa tehdä ohjelmoimalla suoraan rautaa. Tuosta on yli 25v aikaa kun tuollaista tehtiin peleissä. Silloin 90-luvun puolivälin jälkeen alettiin käyttämään DirectX:ää ja pian sen jälkeen tuli SDL jos halusi piirtää pikseleitä laitteistoriippumattomasti. Peliohjelmoinnissa nämä eivät kiinnosta kun peliohjelmointi tehdään korkeammalla tasolla käyttäen pelimoottoria. Pelejä tehtiin pelimoottoreita käyttäen jo 80-luvulla.

        "Esimerkiksi tämä windows käyttöjärjestelmä funktio SetPixel on monikerros-arkkitehtuuria joka päätyy erilaisten ohjelmistokomponenttien ja ajuriarkkitehtuurien kautta laitteistotasolle, eikä sillä tosiaan näytön grafiikkaa ohjelmoida perustasolla jossa 4K näyttö virkistyy 100 hz taajuudella."

        Kyllä se 4K näyttö virkistyy 100Hz taajuudella vaikka sen pikselin piirtää siihen selaimen canvasille. Voi muuten ohjelmoida vaikka pelejä jos siltä tuntuu.

        Yksi pikseli 0.05 ms välein tarkoittaa että yhden 4K 3840 x 2160 px kuvan piirtämiseen kuluu 7 minuuttia. 100 hz taajuuteen nähden se on yli 40.000 kertaa liian hidasta.
        Varmasti voi ohjelmoida esimerkiksi pieniä matopelejä.


      • Anonyymi
        Anonyymi kirjoitti:

        Alaan perehtynyt varmasti osaa paremmin esittää kuinka grafiikkakorttia ohjelmoidaan. Grafiikkakorteissa näyttää olevan tällä hetkellä omaa muistia 30 GB:en asti, joka on kolme neljä kertaa enemmän kuin keskiverto PC:n RAM.

        https://developer.nvidia.com/nsight-visual-studio-edition
        "NVIDIA Nsight™ VSE allows you to build and debug integrated GPU kernels and native CPU code as well as inspect the state of the GPU and memory."
        Alan osaamista harventaa se että C ohjelmointia ei opeteta yleisesti alaan liittyvässä koulutuksessa, yleisesti käytössä olevat laitteistot eivät tue grafiikka-ohjelmointia.

        Ala onkin jonkinlainen atk-alan elitistinen osa.
        Joka on hiukan nurinkurista, että tämä laitteistovalmistajien masinoima "peliala" on täyttänyt jo huonekaluliikkeet ja atk-markkinat ylihinnoiteltujen pelituotteidensa kanssa, ja koko atk-alasta on tullut jotain lasten pelailua, kun atk:lla olisi paljon enemmän annettavaa yhteiskunnille.

        Koko lystin maksaa keskivertokäyttäjä, jonka täytyy uusi laitteensa "suunnitellun vanhenemisen" seurauksena vähintään kerran viidessä vuodessa.
        Se on aika iso kasa rahaa, jos miljardi laitetta x 500 euroa uusitaan vuosittain. Toki on paljon härskimpääkin toimintaa kuten 10 miljardia muutamaan pienlentokoneeseen.


      • Anonyymi
        Anonyymi kirjoitti:

        Alaan perehtynyt varmasti osaa paremmin esittää kuinka grafiikkakorttia ohjelmoidaan. Grafiikkakorteissa näyttää olevan tällä hetkellä omaa muistia 30 GB:en asti, joka on kolme neljä kertaa enemmän kuin keskiverto PC:n RAM.

        https://developer.nvidia.com/nsight-visual-studio-edition
        "NVIDIA Nsight™ VSE allows you to build and debug integrated GPU kernels and native CPU code as well as inspect the state of the GPU and memory."
        Alan osaamista harventaa se että C ohjelmointia ei opeteta yleisesti alaan liittyvässä koulutuksessa, yleisesti käytössä olevat laitteistot eivät tue grafiikka-ohjelmointia.

        Ala onkin jonkinlainen atk-alan elitistinen osa.
        Joka on hiukan nurinkurista, että tämä laitteistovalmistajien masinoima "peliala" on täyttänyt jo huonekaluliikkeet ja atk-markkinat ylihinnoiteltujen pelituotteidensa kanssa, ja koko atk-alasta on tullut jotain lasten pelailua, kun atk:lla olisi paljon enemmän annettavaa yhteiskunnille.

        "Alaan perehtynyt varmasti osaa paremmin esittää kuinka grafiikkakorttia ohjelmoidaan."

        Kun kyse on peleistä niin toimii niin, että käytetään pelimoottoria mikä hoitaa sen matalamman tason. Sinne vaan tehdään pari shaderia lisäksi että ei kaikkea vedetä oletuksilla.

        Sitten kun mennään matalammalle tasolle niin löytyy grafiikkakirjastoja jotka abstaktoi matalamman tason, eli voi käskeä grafiikkakorttia ja välissä oleva kerros kääntää alustakohtaisille grafiikkarajapinnoille.

        Jos haluaa mennä vielä matalammalle niin sitten löytyy grafiikkarajapintoja kuten OpenGL, OpenGL ES/WebGL, Vulcan, DirectX ja Metal.

        Ja tässä kohtaa sitten on vastassa suljetumpi tekniikka että jotkut firmat pitävät niitä liikesalaisuuksina ja ei grafiikkaa ohjelmoidessa matalemmalle mennä. Poislukien on sitten se mitä näytönohjainvalmistajat, konsolivalmistajat jne. tekevät itse ja jotkut avoimen lähdekoodin reverse-engineering ajurit.

        Grafiikkakortteja voi myös laittaa ajamaan koodia ja AI hommissa käytetään niinikään frameworkkeja. Matalammalle tasolle mentäessä voi käyttää näytönohjainvalmistajan dokumentaatiota ja SDK:ta. Löytyy sitten vaikka OpenCL, HIP ja CUDA.

        "Ala onkin jonkinlainen atk-alan elitistinen osa."

        Kuinka niin? Ihan perusohjelmointia tuo on.

        "ja koko atk-alasta on tullut jotain lasten pelailua, kun atk:lla olisi paljon enemmän annettavaa yhteiskunnille."

        Höpöhöpö. Tällä hetkellä satsataan todella paljon tekoälyjen ohjelmointiin ja ne tehdään juurikin frameworkeilla jotka käyttävät GPU:a.


      • Anonyymi
        Anonyymi kirjoitti:

        "Ei mitään peligrafiikkaa tehdä ohjelmoimalla suoraan rautaa."

        Tuskimpa se "rauta" ilman ohjelmointia toimii, eli kyllä sitä ihan "suoraan" ohjelmoidaan. Samalla tapaa kuin CPU toimii omalla "rautaisella" käskykannallaan.

        Et nyt tajua että siellä on välissä softaa.

        Ei ohjelmoija kirjoita koodia millään GPU:n käskykannalla tai ränkkää jotain rekistereitä. Siellä on softalla toteutettu rajapinta ja pelien tapauksessa siellä on paljonkin rajapintaa välissä ja homma tehdään paljon korkeammalla tasolla.


      • Anonyymi
        Anonyymi kirjoitti:

        Yksi pikseli 0.05 ms välein tarkoittaa että yhden 4K 3840 x 2160 px kuvan piirtämiseen kuluu 7 minuuttia. 100 hz taajuuteen nähden se on yli 40.000 kertaa liian hidasta.
        Varmasti voi ohjelmoida esimerkiksi pieniä matopelejä.

        Ei niitä pelejä tehdä piirtämällä asioita pikseli kerrallaan. Kyllä se kuva siellä näytönohjaimella päivittyy 100 kertaa sekunnissa mutta sotket nyt tähän sen latenssin mikä tulee kuin käsketään piirtämään pikseli.

        Peleissä yleisesti käsketään piirtämään vaikka monsteri ja alla oleva tekniikka hoitaa geometrian, valaisun, pinnoituksen jne. automaattisesti sen mukaan miten objekti on mallinnettu mallinnusohjelmassa.

        Pikseleitä ei piirretty pahemmin edes 80-luvulla. Käskettiin piirtämään vaikka sprite.

        Huomioi että aloittajalla oli kyseessä pikselin piirto eikä peliohjelmointi.


      • Anonyymi
        Anonyymi kirjoitti:

        Koko lystin maksaa keskivertokäyttäjä, jonka täytyy uusi laitteensa "suunnitellun vanhenemisen" seurauksena vähintään kerran viidessä vuodessa.
        Se on aika iso kasa rahaa, jos miljardi laitetta x 500 euroa uusitaan vuosittain. Toki on paljon härskimpääkin toimintaa kuten 10 miljardia muutamaan pienlentokoneeseen.

        Kuka maksaa kuka ei.

        Vastustan suunniteltua vanhenemista ja maksan siitä vähän enemmän että saan laitteiston ja ohjelmiston mikä ei vanhene ennenaikaisesti.

        Vanhin nVidian näytönohjain esimerkiksi on itseasiassa vuodelta 2010 joka tukee riittävän nykyaikaista grafiikkakiihdytystä että on yhteensopiva. Tuollainen oli yhteensopiva Windows 7:n kanssa joka on edelleen tekohengitettävissä.

        Vuoden 2010 näytönohjain oli vaan aika hidas, mutta vuoden 2011 peliohjain, joku Geforce GTX 460 vastasi tehoiltaan nykyisiä tehokkaita mobiili GPU:ja että ei periaatteessa haittaa suurimmassa osassa grafiikkaohjelmointia yhtään.


      • Anonyymi
        Anonyymi kirjoitti:

        Et nyt tajua että siellä on välissä softaa.

        Ei ohjelmoija kirjoita koodia millään GPU:n käskykannalla tai ränkkää jotain rekistereitä. Siellä on softalla toteutettu rajapinta ja pelien tapauksessa siellä on paljonkin rajapintaa välissä ja homma tehdään paljon korkeammalla tasolla.

        Kyllä jopa C#-kieleen voidaan sisällyttää assembly-koodia, joka on jo käytännössä "rautakoodia" rekistereineen, mikä sinänsä on yleensä tarpeetonta kääntäjän tehdessä saman yksinkertaisemmilla ohjelmointikäskyillä, mutta saattaa olla joskus optimoinnin tai vähemmän käytettyjen funktioiden kannalta optimaalisempaa.


      • Anonyymi
        Anonyymi kirjoitti:

        Kyllä jopa C#-kieleen voidaan sisällyttää assembly-koodia, joka on jo käytännössä "rautakoodia" rekistereineen, mikä sinänsä on yleensä tarpeetonta kääntäjän tehdessä saman yksinkertaisemmilla ohjelmointikäskyillä, mutta saattaa olla joskus optimoinnin tai vähemmän käytettyjen funktioiden kannalta optimaalisempaa.

        Siitä on todennäköisesti enemmän haittaa kuin hyötyä.


      • Anonyymi
        Anonyymi kirjoitti:

        Alaan perehtynyt varmasti osaa paremmin esittää kuinka grafiikkakorttia ohjelmoidaan. Grafiikkakorteissa näyttää olevan tällä hetkellä omaa muistia 30 GB:en asti, joka on kolme neljä kertaa enemmän kuin keskiverto PC:n RAM.

        https://developer.nvidia.com/nsight-visual-studio-edition
        "NVIDIA Nsight™ VSE allows you to build and debug integrated GPU kernels and native CPU code as well as inspect the state of the GPU and memory."
        Alan osaamista harventaa se että C ohjelmointia ei opeteta yleisesti alaan liittyvässä koulutuksessa, yleisesti käytössä olevat laitteistot eivät tue grafiikka-ohjelmointia.

        Ala onkin jonkinlainen atk-alan elitistinen osa.
        Joka on hiukan nurinkurista, että tämä laitteistovalmistajien masinoima "peliala" on täyttänyt jo huonekaluliikkeet ja atk-markkinat ylihinnoiteltujen pelituotteidensa kanssa, ja koko atk-alasta on tullut jotain lasten pelailua, kun atk:lla olisi paljon enemmän annettavaa yhteiskunnille.

        "Grafiikkakorteissa näyttää olevan tällä hetkellä omaa muistia 30 GB:en asti, joka on kolme neljä kertaa enemmän kuin keskiverto PC:n RAM."

        Tsihih.. Normi pelitietokoneessa on 32Gb RAM muistia, Raspberry Pi:ssä on 8Gb.


    • Anonyymi

      Oletko jäänyt viimevuosituhannelle!

      • Anonyymi

        Wielä windows 7:ssä sai toimimaan Win95 pelit Virtual PC:en XP modessa. Nämä nykyiset ovat jotain aivotonta räiskimistä, vähän kun Suomen poliitikkojen ristiretki Ukrainassa.


      • Anonyymi
        Anonyymi kirjoitti:

        Wielä windows 7:ssä sai toimimaan Win95 pelit Virtual PC:en XP modessa. Nämä nykyiset ovat jotain aivotonta räiskimistä, vähän kun Suomen poliitikkojen ristiretki Ukrainassa.

        Toden totta, virtuaali pc:n saa Win10:Een jos on Pro versio ja tarpeeksi vanhentumattomat ja tehokkaat raudat koneessa.


      • Anonyymi
        Anonyymi kirjoitti:

        Toden totta, virtuaali pc:n saa Win10:Een jos on Pro versio ja tarpeeksi vanhentumattomat ja tehokkaat raudat koneessa.

        Windows 11?
        Windows 10 Home and Pro Jul 29, 2015- Oct 14, 2025.
        Eli over my Blue Screen of Death.


      • Anonyymi
        Anonyymi kirjoitti:

        Toden totta, virtuaali pc:n saa Win10:Een jos on Pro versio ja tarpeeksi vanhentumattomat ja tehokkaat raudat koneessa.

        https://learn.microsoft.com/en-us/virtualization/hyper-v-on-windows/reference/hyper-v-requirements
        Prosessorin Tech Specs. CPU support for VM Monitor Mode Extension (VT-x on Intel CPU's) ✔️
        C:\>systeminfo
        Hyper-V Requirements:
        VM Monitor Mode Extensions: Yes ✔️
        Virtualization Enabled In Firmware: Yes ✔️
        Second Level Address Translation: Yes ✔️
        Data Execution Prevention Available: Yes ✔️

        The Hyper-V role cannot be installed on:
        Windows 10 Home ❌

        Windows 10 pro + 250 € ✔️ (jos lisenssin jostain pystyy hankkimaan).

        Sitten vain tekemään levykuvia vanhoista käyttiksistä.


      • Anonyymi
        Anonyymi kirjoitti:

        https://learn.microsoft.com/en-us/virtualization/hyper-v-on-windows/reference/hyper-v-requirements
        Prosessorin Tech Specs. CPU support for VM Monitor Mode Extension (VT-x on Intel CPU's) ✔️
        C:\>systeminfo
        Hyper-V Requirements:
        VM Monitor Mode Extensions: Yes ✔️
        Virtualization Enabled In Firmware: Yes ✔️
        Second Level Address Translation: Yes ✔️
        Data Execution Prevention Available: Yes ✔️

        The Hyper-V role cannot be installed on:
        Windows 10 Home ❌

        Windows 10 pro 250 € ✔️ (jos lisenssin jostain pystyy hankkimaan).

        Sitten vain tekemään levykuvia vanhoista käyttiksistä.

        Windows 10 Pro tulee tietokoneen mukana kunhan ostaa työkoneen eikä jostain Gigantista.


      • Anonyymi
        Anonyymi kirjoitti:

        https://learn.microsoft.com/en-us/virtualization/hyper-v-on-windows/reference/hyper-v-requirements
        Prosessorin Tech Specs. CPU support for VM Monitor Mode Extension (VT-x on Intel CPU's) ✔️
        C:\>systeminfo
        Hyper-V Requirements:
        VM Monitor Mode Extensions: Yes ✔️
        Virtualization Enabled In Firmware: Yes ✔️
        Second Level Address Translation: Yes ✔️
        Data Execution Prevention Available: Yes ✔️

        The Hyper-V role cannot be installed on:
        Windows 10 Home ❌

        Windows 10 pro 250 € ✔️ (jos lisenssin jostain pystyy hankkimaan).

        Sitten vain tekemään levykuvia vanhoista käyttiksistä.

        Tarkistin hinnan, Käynnistä valikko > Asetukset > Päivitys ja Turvallisuus > Aktivointi > Mene kauppaan.
        149 €, mutta, upgreidaus pitäisi tehdä Microsoft-tilin kautta, enkä ole koskaan rekisteröinyt käyttöjärjestelmää nimiini, enkä niin tee nytkään.
        Mihin maailmassa, Microsoft tarvitsee ihmisten tietoja. Meillä on EU tietoturva-asetus, jossa on periaatteet siitä, mitä tietoja eri toimijat tarvitsevat. Olisi toimijoidenkin kannalta tarkoituksenmukaisempaa olla keräämättä tietoja mitä ei mihinkään tarvita.


      • Anonyymi
        Anonyymi kirjoitti:

        Tarkistin hinnan, Käynnistä valikko > Asetukset > Päivitys ja Turvallisuus > Aktivointi > Mene kauppaan.
        149 €, mutta, upgreidaus pitäisi tehdä Microsoft-tilin kautta, enkä ole koskaan rekisteröinyt käyttöjärjestelmää nimiini, enkä niin tee nytkään.
        Mihin maailmassa, Microsoft tarvitsee ihmisten tietoja. Meillä on EU tietoturva-asetus, jossa on periaatteet siitä, mitä tietoja eri toimijat tarvitsevat. Olisi toimijoidenkin kannalta tarkoituksenmukaisempaa olla keräämättä tietoja mitä ei mihinkään tarvita.

        Sinänsä huvittavaa, että tietojen luovutukseen kuljetaan "turvallisuus"-valikon kautta. MS ilmeisesti ajattelee olevansa turvallinen "Big Brother". Kuitenkin jo pelkkä tietojen päätyminen toisen osapuolen haltuun on periaatteellinen tietoturvaloukkaus.


      • Anonyymi
        Anonyymi kirjoitti:

        Tarkistin hinnan, Käynnistä valikko > Asetukset > Päivitys ja Turvallisuus > Aktivointi > Mene kauppaan.
        149 €, mutta, upgreidaus pitäisi tehdä Microsoft-tilin kautta, enkä ole koskaan rekisteröinyt käyttöjärjestelmää nimiini, enkä niin tee nytkään.
        Mihin maailmassa, Microsoft tarvitsee ihmisten tietoja. Meillä on EU tietoturva-asetus, jossa on periaatteet siitä, mitä tietoja eri toimijat tarvitsevat. Olisi toimijoidenkin kannalta tarkoituksenmukaisempaa olla keräämättä tietoja mitä ei mihinkään tarvita.

        Varmaan mainostamista varten. Ja toinen juttu tietenkin että laskuttamista varten.

        Mutta tosiaankin, ei mitään järkeä käyttää Windowsia jos tuo häiritsee.


      • Anonyymi
        Anonyymi kirjoitti:

        Varmaan mainostamista varten. Ja toinen juttu tietenkin että laskuttamista varten.

        Mutta tosiaankin, ei mitään järkeä käyttää Windowsia jos tuo häiritsee.

        Muutamia käyttäjän tietoihin liittyviä asetuksia, joilla käyttöjä voi luovuttaa tietoja tietokoneen käytöstään Microsoftille.
        Asetukset > Yksityisyys > Aktiivisuus historia > Lähetä aktiivisuus historia Microsoftille

        Edge selain
        edge://settings/profiles/rewards > Earn Microsoft Rewards in Microsoft Edge
        edge://settings/profiles/localBrowserDataShare > Share browsing data with other Windows features
        edge://settings/privacy >
        - Help improve Microsoft products by sending optional diagnostic data about how you use the browser, websites you visit, and crash reports
        - Help improve Microsoft products by sending the results from searches on the web
        - Allow Microsoft to use your browsing activity including history, favorites, usage and other browsing data to personalize Microsoft Edge and Microsoft services like ads, search, shopping and news
        edge://settings/content/paymentHandler > Allow sites to install payment handlers (recommended)
        edge://settings/system > Continue running background extensions and apps when Microsoft Edge is closed


      • Anonyymi
        Anonyymi kirjoitti:

        Muutamia käyttäjän tietoihin liittyviä asetuksia, joilla käyttöjä voi luovuttaa tietoja tietokoneen käytöstään Microsoftille.
        Asetukset > Yksityisyys > Aktiivisuus historia > Lähetä aktiivisuus historia Microsoftille

        Edge selain
        edge://settings/profiles/rewards > Earn Microsoft Rewards in Microsoft Edge
        edge://settings/profiles/localBrowserDataShare > Share browsing data with other Windows features
        edge://settings/privacy >
        - Help improve Microsoft products by sending optional diagnostic data about how you use the browser, websites you visit, and crash reports
        - Help improve Microsoft products by sending the results from searches on the web
        - Allow Microsoft to use your browsing activity including history, favorites, usage and other browsing data to personalize Microsoft Edge and Microsoft services like ads, search, shopping and news
        edge://settings/content/paymentHandler > Allow sites to install payment handlers (recommended)
        edge://settings/system > Continue running background extensions and apps when Microsoft Edge is closed

        Haluatko luovuttaa jollekin internetkäyttöhistoriasi. Ensin rekisteröimällä käyttöjärjestelmän nimiisi, sen jälkeen yrittämällä olla selvillä sadoista Windowsin ja sen ohjelmien asetuksista jotka myös lisääntyvät ja muuttuvat päivityksissä. Edgen päivityksiä ei voi ajoittaa kuten Windowsin päivityksiä, vaan edge päivittyy taustalla kun se päivittyy, huomaat sen yllättäin ilmoituksella "selain on päivitetty".


      • Anonyymi
        Anonyymi kirjoitti:

        Wielä windows 7:ssä sai toimimaan Win95 pelit Virtual PC:en XP modessa. Nämä nykyiset ovat jotain aivotonta räiskimistä, vähän kun Suomen poliitikkojen ristiretki Ukrainassa.

        Mistä tietää, että peli on huono? Se on toteutettu tunnetulla pelimoottorilla.. vitsi on siinä, että nuo on järjestäin optimoitu tiettyä pelityyppiä ajatellen ja jos pelimoottorilla on pelannut yhtä hyvää peliä - seuraavat on pakostakin huonoja, koska pelimoottori ei ole järin paljoa kehittynyt. Näkisin pelimoottorin käytön eräänlaisena välivaiheen koodina, jolla voi toteuttaa joitain osia pelistä ja demota kohtia, jotka vaatii pelimoottoriin uudempaa tekniikkaa toimiakseen.


    Ketjusta on poistettu 7 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Cynthia Woods

      😋😍😋😍😋😍😋😍😋 💋 ­­­N­­y­m­­­f­o­­m­­a­­a­­­n­i -> https://x18.fun/girl04372247#CynthiaWoods 🔞💋❤️💋❤️💋🔞�
      YIT-Yhtymä
      1
      14846
    2. Aimee Dvorak

      😍😋😍😋😍😋😍😋😍 💋 ­­N­­­y­­­m­­f­o­m­a­a­n­­­i -> https://x18.fun/girl02740429#AimeeDvorak 🔞❤️❤️❤️❤️❤️🔞💋💋
      0
      3049
    3. Stephanie Love

      😋😋😋😋😋😋😋😋😋😋 ❤️ ­­N­y­­­m­f­­o­­m­­­a­a­­n­­­i -> https://x18.fun/girl01692207#StephanieLove 🔞❤️💋❤️💋❤️
      Lappi
      0
      3046
    4. Molly Graham

      😍😋😍😋😍😋😍😋😍 😍 ­­N­­­y­­m­­­f­­­o­­m­­a­a­n­i -> https://x18.fun/girl02277975#MollyGraham 🔞❤️💋❤️💋❤️🔞❤️
      Puhelimet
      0
      3045
    5. Rachelle Reynolds

      😋😍😋😍😋😍😋😍😋 🔞 ­N­­­y­­m­f­­­o­­m­­­a­­a­n­i -> https://x18.fun/girl03175674#RachelleReynolds 🔞❤️💋❤️💋❤️
      Etelä-Savo
      0
      3045
    6. Becky Steele

      🍑🍑🍑🍑🍑🍑🍑🍑🍑🍑🍑🍑 💋 ­­N­y­­­m­­f­­­o­­­m­­a­a­­­n­­i -> https://x18.fun/girl05250014#BeckySteele 🔞❤️💋❤️
      Arkkitehtuuri
      0
      3045
    7. Allison Queen

      🍒🍑🍒🍑🍒🍑🍒🍑🍒 ❤️ ­N­­­y­m­­­f­­­o­­m­a­a­­­n­­­i -> https://x18.fun/girl07854217#AllisonQueen 🔞❤️❤️❤️❤️❤️🔞
      Vedonlyönti
      0
      3044
    8. Pamela Orr

      😋😋😋😋😋😋😋😋😋😋 🍒 ­­­N­y­­m­f­­o­­­m­a­­­a­­­n­­­i -> https://x18.fun/girl06055581#PamelaOrr 🔞❤️💋❤️💋❤️🔞
      Star Wars
      0
      3044
    9. Lakeisha Coleman

      🍑🍒🍑🍒🍑🍒🍑🍒🍑 💋 ­­N­y­­­m­f­­o­­m­a­­­a­n­­i -> https://x18.fun/girl08105348#LakeishaColeman 🔞💋❤️💋❤️💋🔞
      Synnytys
      0
      3040
    10. Jennifer Mitchell

      🍑🍒🍑🍒🍑🍒🍑🍒🍑 🔞 ­­N­y­­m­­­f­o­­m­­­a­a­n­­­i -> https://x18.fun/girl08490246#JenniferMitchell 🔞❤️💋❤️💋❤️
      Joensuu
      0
      3039
    Aihe