Edellä on käsitelty usea peruspiirtofunktio. Tästä kappaleesta löydät monta lisäfunktiota, jotka tarjoavat paljon enemmän mahdollisuuksia. Ensinnäkin on funktioita, joiden avulla voidaan piirtää kuvioita liukuväritäytöllä. Toiseksi on funktioita yleiskäyttöisempien monikulmioiden piirtämiselle, ja lisäksi on mahdollista piirtää monikulmioita tekstuurilla.
Seuraavat laajennetut versiot peruspiirtofunktioista ovat olemassa. Jokainen niistä saa ylimääräisiä parametreja värin määrittämiselle kuvion kärkipisteisiin. Oletuspiirtoväriä ei käytetä näissä funktioissa.
draw_point_color(x,y,col1) Piirtää annetun värisen pisteen kohtaan (x,y).
draw_line_color(x1,y1,x2,y2,col1,col2) Piirtää viivan pisteiden (x1,y1) ja (x2,y2) välille väritettynä väristä col1 väriin col2.
draw_line_width_color(x1,y1,x2,y2,w,col1,col2) Piirtää w pikseliä leveän viivan pisteiden (x1,y1) ja (x2,y2) välille väritettynä väristä col1 väriin col2.
draw_rectangle_color(x1,y1,x2,y2,col1,col2,col3,col4,outline) Piirtää suorakulmion. Neljä väriä määrittävät värit ylävasemman, yläoikean, alaoikean ja alavasemman kulman kärkipisteissä. outline määrittää, piirretäänkö vain ääriviiva (true) vai onko suorakulmio täytetty (false).
draw_roundrect_color(x1,y1,x2,y2,col1,col2,outline) Piirtää pyöristetyn suorakulmion. col1 on keskustan väri ja col2 on reunaman väri. outline määrittää, piirretäänkö vain ääriviiva (true) vai onko suorakulmio täytetty (false).
draw_triangle_color(x1,y1,x2,y2,x3,y3,col1,col2,col3,outline) Piirtää kolmion. Kolme väriä ovat kolmen kärkipisteen värit. outline määrittää, piirretäänkö vain ääriviiva (true) vai onko kolmio täytetty (false).
draw_circle_color(x,y,r,col1,col2,outline) Piirtää ympyrän pisteeseen (x,y) säteellä r. col1 on keskustan väri ja col2 on reunaman väri. outline määrittää, piirretäänkö vain ääriviiva (true) vai onko ympyrä täytetty (false).
draw_ellipse_color(x1,y1,x2,y2,col1,col2,outline) Piirtää ellipsin. col1 on keskustan väri ja col2 on reunaman väri. outline määrittää, piirretäänkö vain ääriviiva (true) vai onko ellipsi täytetty (false).
Voit myös piirtää suurempia primitiivejä. Tämä toimii hieman eri tavalla. Aloitat määrittelemällä primitiivin, jonka haluat piirtää. Seuraavaksi määrittelet sen kärkipisteet, ja lopuksi päätät primitiivin, jolloin se piirretään. On olemassa kuusi eri primitiivityyppiä:
pr_pointlist Kärkipisteet ovat joukko pisteitä.
pr_linelist Kärkipisteet ovat joukko viivan osia. Jokainen pari kärkipisteitä muodostaa osan viivaa. Kärkipisteitä on siis oltava parillinen määrä.
pr_linestrip Kärkipisteet muodostavat murtoviivan, jossa ensimmäinen yhdistyy toiseen, toinen kolmanteen, jne. Viimeinen ei yhdisty ensimmäiseen. Sinun täytyy määrittää ylimääräinen kopio ensimmäisestä kärkipisteestä sitä varten.
pr_trianglelist Kärkipisteet ovat joukko kolmioita. Jokainen kolmen joukko kärkipisteitä muodostaa kolmion. Kärkipisteiden lukumäärän täytyy siis olla kolmen monikerta.
pr_trianglestrip Kärkipisteet muodostavat tässäkin kolmioita, mutta nyt hieman eritavalla. Ensimmäiset kolme muodostavat kolmion. Näistä kärkipisteistä kaksi viimeistä yhdessä seuraavan kärkipisteen kanssa muodostavat seuraavan kolmion, jne. Jokainen uusi kärkipiste määrittää siis uuden kolmion, joka on kytkettynä edelliseen.
pr_trianglefan Muistuttaa kolmiolistaa, mutta tässä tapauksessa ensimmäinen kärkipiste on osa kaikkia kolmioita. Jälleen jokainen uusi kärkipiste määrittää uuden kolmion, joka on kytkettynä edelliseen kärkipisteeseen ja ensimmäiseen kärkipisteeseen.
Seuraavat funktiot on tarkoitettu primitiivien piirtämiseen:
draw_primitive_begin(kind) Aloita primitiivi, joka on annettua tyyppiä.
draw_vertex(x,y) Lisää kärkipiste (x,y) primitiiviin käyttäen aiemmin asetettua väriä ja alpha-arvoa.
draw_vertex_color(x,y,col,alpha) Lisää kärkipiste (x,y) primitiiviin määrittäen sille oman värin ja alpha-arvon. Tämä mahdollistaa primitiivien luomisen, joissa on sulavasti vaihtuva väri ja alpha-arvo.
draw_primitive_end() Päätä primitiivin kuvaus. Tämä funktio itse asiassa piirtää sen.
Lisäksi on myös mahdollista piirtää primitiivejä käyttäen kuvia tai taustoja tekstuureina. Kun käytät tekstuuria, kuva sijoitetaan primitiiviin uudelleenmuotoiltuna niin, että se sopii primitiiviin. Tekstuureja käytetään yksityiskohtien lisäämiseksi primitiiveihin, esim. tiiliseinään. Käyttääksesi tekstuureja, sinun on ensin saatava haluamasi tekstuurin id. Tähän tarkoitukseen on olemassa seuraava funktio:
sprite_get_texture(spr,subimg) Palauttaa kuvan spr alikuvaa subimg vastaavan tekstuurin id-arvon.
background_get_texture(back) Palauttaa taustaa back vastaavan tekstuurin id-arvon.
Valittu tekstuuri ei ole välttämättä vielä videomuistissa. Järjestelmä laittaa sen sinne, kun tarvitset sitä, mutta joissain tapauksissa haluat päättää siitä itse. Tätä varten on olemassa seuraava funktio:
texture_preload(texid) Laittaa tekstuurin välittömästi videomuistiin.
texture_set_priority(texid,prio) Kun videomuistia on liian vähän, joitain tekstuureja poistetaan väliaikaisesti, jotta saadaan tilaa tarvittaville. Tekstuurit, joilla on alhaisin prioriteetti, poistetaan ensin. Oletuksena kaikkien prioriteetti on 0, mutta tämän funktion avulla voit muuttaa prioriteettia. (Käytä positiivisia arvoja!)
Lisätäksesi tekstuureita primitiiveihin, sinun täytyy määritellä mihin mitkäkin tekstuurin osat laitetaan primitiivissä. Tekstuurin sijainnit määritetään arvoilla 0 - 1, mutta tässä on ongelma. Tekstuurien kokojen täytyy olla 2:n potensseja (esim. 32x32 tai 64x64). Jos haluat käyttää kuvia tai taustoja tekstuureina, sinun on parasta varmistaa, että niillä on tällainen koko. Jos ei, testi tulee olemaan tyhjä. Saadaksesi selville, mitä tekstuurin osaa tosiasiassa käytetään, voit käyttää seuraavia kahta funktiota. Ne palauttavat arvon 0 ja 1 väliltä, joka merkitsee käytetyn tekstuurin osan leveyttä tai korkeutta. Tämän arvon asettaminen tekstuurin koordinaatiksi osoittaa tekstuurin oikean reunan tai alareunan.
texture_get_width(texid) Palauttaa leveyden tekstuurista, jolla on annettu id. Leveys on välillä 0 - 1.
texture_get_height(texid) Palauttaa korkeuden tekstuurista, jolla on annettu id. Korkeus on välillä 0 - 1.
Piirtääksesi primitiivejä, joilla on tekstuuri, käytä seuraavia funktioita:
draw_primitive_begin_texture(kind,texid) Aloittaa määrätyn tyyppisen primitiivin, jolla on annettu tekstuuri.
draw_vertex_texture(x,y,xtex,ytex) Lisää kärkipisteen (x,y) primitiiviin ja liittää siihen tekstuurin kohdan (xtex,ytex). Väri ja alpha-arvo ovat aiemmin asetetut arvot. xtex ja ytex ovat tavallisesti 0 - 1, mutta myös suurempia arvoja voidaan käyttää, mikä johtaa tekstuurin toistoon (ks. edellä).
draw_vertex_texture_color(x,y,xtex,ytex,col,alpha) Lisää kärkipisteen (x,y) primitiiviin ja liittää siihen tekstuurin kohdan (xtex,ytex). Kärkipisteelle määritetään oma väri ja alpha-arvo.
draw_primitive_end() Päättää primitiivin kuvauksen. Tämä funktio itse asiassa piirtää sen.
On olemassa kolme funktiota, jotka vaikuttavat siihen, miten tekstuurit piirretään:
texture_set_interpolation(linear) Määrittää, käytetäänkö suoraviivaista interpolaatiota (true) vai valitaanko lähin kuvapiste (false). Suoraviivainen interpolaatio tekee tekstuurista sulavamman, mutta voi myös tehdä siitä hieman sumean ja se voi myös viedä hieman aikaa. Tämä asetus vaikuttaa myös kuvien ja taustojen piirtämiseen. Oletuksena tämä on epätosi. (Tämä voidaan myös asettaa pelin asetuksista (Global Game Settings).)
texture_set_blending(blend) Määrittää, käytetäänkö värjäystä ja alphaläpinäkyvyyttä. Tämän asettaminen pois päältä voi nopeuttaa peliä vanhemmille koneilla. Tämä asetus vaikuttaa myös kuvien ja taustojen piirtämiseen. Oletuksena tämä on tosi.
texture_set_repeat(repeat) Määrittää, käytetäänkö tekstuurin toistoa. Tämä toimii seuraavasti. Kuten edellä on mainittu, tekstuurin koordinaatit ovat välillä 0 - 1. Jos määrität arvoksi suuremman kuin 1, oletuksena loppuja ei piirretä. Asettamalla toiston todeksi, tekstuuria toistetaan. Huomaa, että kuvat ja taustat piirretään aina ilman toistoa. Heti kun piirrät siis kuvan tai taustan, tämä arvo palautuu epätodeksi. Oletuksena tämä on epätosi.
On olemassa lisäksi kaksi funktiota, jotka eivät ole hyödyllisiä pelkästään tekstuurien piirtämisessä. Tavallisesti primitiivit sulautuvat taustaan käyttäen alpha-arvoja. Voit itse asiassa määritellä, kuinka tämän tulisi tapahtua. Tavallisen tilan lisäksi on mahdollista määrittää, että uusi väri tulee lisätä jo olemassa olevaan väriin tai vähentää jo olemassa olevasta väristä. Tätä voidaan käyttää esim. valokeilan tai varjojen luomiseen. On myös mahdollista tavallaan ottaa enimmäismäärät uudesta ja jo olemassa olevasta väristä. Tämä voi ehkäistä tietyt värin kylläisyystehosteet, joita voit saada lisäämällä. Huomaa, että sekä vähentäminen että enimmäismäärä eivät ota alpha-arvoa täydellisesti huomioon. (DirectX ei salli tätä.) Sinun on siis parasta varmistaa, että kuvan ulkoalue on musta. On olemassa kaksi funkiota. Ensimmäinen antaa vain neljä edellä mainittua vaihtoehtoa. Toinen funktio antaa paljon enemmän mahdollisuuksia. Sinun tulisi tehdä hieman kokeiluja eri asetuksilla. Tehokkaasti käytettynä niitä voidaan käyttää luomaan esim. mielenkiintoisia räjähdys- tai valotehosteita.
draw_set_blend_mode(mode) Määrittää käytettävän sulautustilan (blend mode). Seuraavat arvot voidaan asettaa: bm_normal, bm_add, bm_subtract, ja bm_max. Älä unohda nollata tilaa normaaliksi jälkeenpäin, sillä muuten muutkin kuvat ja jopa taustat piirretään uudessa sulautustilassa.
draw_set_blend_mode_ext(src,dest) Määrittää sulautustilan, jota käytetään sekä lähde- että kohdeväriin. Uusi väri on joku kerroin kertaa lähde ja joku toinen kerroin kertaa kohde. Nämä kertoimet asetetaan tällä funktiolla. Ymmärtääksemme tämän, lähteellä ja kohteella on molemmilla punainen(R), vihreä(G) ja sininen(B) sininen osa sekä alphaosa. Lähde on siis (Rl, Gl, Bl, Al) ja kohde on (Rk, Gk, Bk, Ak). Kaikkien katsotaan olevan välillä 0 - 1. Sulautuskertoimet, jotka voidaan asettaa sekä lähteelle että kohteelle ovat:Esimerkiksi tavallinen sulautustila asettaa lähdesulatuksen kertoimeksi bm_src_alpha ja kohdesulautuksen kertoimeksi bm_inv_src_alpha. Älä unohda nollata tilaa normaaliksi käytön jälkeen, sillä muuten myös muut kuvat ja jopa taustat piirretään uudessa sulautustilassa.
- bm_zero: Sulautuskerroin on (0, 0, 0, 0).
- bm_one: Sulautuskerroin on (1, 1, 1, 1).
- bm_src_color: Sulautuskerroin on (Rl, Gl, Bl, Al).
- bm_inv_src_color: Sulautuskerroin on (1–Rl, 1–Gl, 1–Bl, 1–Al).
- bm_src_alpha: Sulautuskerroin on (Al, Al, Al, Al).
- bm_inv_src_alpha: Sulautuskerroin on (1–Al, 1–Al, 1–Al, 1–Al).
- bm_dest_alpha: Sulautuskerroin on (Ak, Ak, Ak, Ak).
- bm_inv_dest_alpha: Sulautuskerroin on (1–Ak, 1–Ak, 1–Ak, 1–Ak).
- bm_dest_color: Sulautuskerroin on (Rk, Gk, Bk, Ak).
- bm_inv_dest_color: Sulautuskerroin on (1–Rk, 1–Gk, 1–Bk, 1–Ak).
- bm_src_alpha_sat: Sulautuskerroin on (f, f, f, 1); f = min(Al, 1–Ak).
Primitiivien, joilla on tekstuuri, piirtäminen vaatii hieman työtä, mutta voi johtaa hienoihin tuloksiin. Voit jopa käyttää sitä tehdäksesi vale-3D-pelejä.