Partner WFG, 2FG, 1FG – PRIROČNIK ZA PROGRAMIRANJE

9. GRAFIČNI PROGRAMI

==================

9.1. GRAFIČNI IN TEKSTOVNI NAČIN

Grafični zaslon Partnerja je fizično ločen od tekstovnega zaslona. Sistem ima dve neodvisni področji pomnilnika – eno za tekstovni zaslon (upravljan prek SCN2674) in eno za grafično ploskev. Ko program vstopi v grafični način, tekstovni zaslon ni izbrisan; tipično pa je zaželeno, da ga pred vstopom pobrišemo in skrijemo utripajoči kazalec, da ne moti grafičnega prikaza.

Priporočen vzorec inicializacije in zaključka:

#include <partner/conio.h>
#include <ugpx.h>

/* --- Vstop v grafični način --- */
clrscr();                      /* Pobrišemo tekstovni zaslon  */
setcursortype(NOCURSOR);       /* Skrijemo utripajoci kazalec */
ginit(0);                      /* Inicializiramo grafiko      */

/* ... graficne operacije ... */

/* --- Izhod iz grafičnega načina --- */
gexit();                       /* Vrnemo tekstovni nacin      */
setcursortype(NORMALCURSOR);   /* Prikazemo kazalec           */

Funkcija ginit() sprejme parameter načina:

  • ginit(0) – ločljivost 1024×256 točk
  • ginit(1) – ločljivost 1024×512 točk

9.2. DVE GRAFIČNI STRANI

Partner ima dve grafični strani (strani 0 in 1). V danem trenutku je vidna ena stran, program pa piše v katerokoli. To omogoča tehniko dvojnega medpomnjenja (double buffering): risanje poteka na skriti strani, ki jo ob zaključku prikažemo – animacija tako ne utripa.

Stran izberemo s funkcijo gsetpage(uint8_t page). Klic nastavi tako vidno stran kot stran za risanje.

Opozorilo: ob inicializaciji sta obe strani neinicializirani. Pred začetkom risanja je treba pobrisati obe:

ginit(0);

gsetpage(0);  gcls();   /* Pobrišemo stran 0 */
gsetpage(1);  gcls();   /* Pobrišemo stran 1 */
gsetpage(0);            /* Zacnemo na strani 0 */
Partner WFG, 2FG, 1FG – PRIROČNIK ZA PROGRAMIRANJE

9.3. PRIMERI GRAFIČNEGA PROGRAMIRANJA

Primer 1 – osnovno risanje točk, črt in pravokotnikov:

#include <partner/conio.h>
#include <ugpx.h>

clrscr();
setcursortype(NOCURSOR);
ginit(0);

/* Pobriši obe strani */
gsetpage(0); gcls();
gsetpage(1); gcls();
gsetpage(0);

gsetcolor(1);             /* Bela barva risanja */

/* Točka */
gxy(100, 50);
gputpixel();

/* Črta od (10,10) do (200,80) */
gxy(10, 10);
gdrawline(200, 80);

/* Pravokotnik (obroba) */
gdrawrect(50, 20, 300, 100);

/* Zapolnjen pravokotnik */
gfillrect(400, 20, 600, 100);

/* Počakaj na tipko, nato izhod */
getch();
gexit();
setcursortype(NORMALCURSOR);

Primer 2 – izpis besedila s pisavo:

#include <partner/conio.h>
#include <ugpx.h>

/* Pisava mora biti prevedena z orodjem snatch
   in deklarirana z extern (glej poglavje 6.2) */
extern void moja_pisava;

clrscr();
setcursortype(NOCURSOR);
ginit(0);
gsetpage(0); gcls();
gsetpage(1); gcls();
gsetpage(0);

gsetcolor(1);
gxy(50, 30);
gputtext("Pozdravljen, svet!", &moja_pisava);

getch();
gexit();
setcursortype(NORMALCURSOR);
Partner WFG, 2FG, 1FG – PRIROČNIK ZA PROGRAMIRANJE

Primer 3 – animacija z dvojnim medpomnjenjem:

Program riše na skriti strani, nato jo prikaže. Vidna stran se nikoli ne riše neposredno – animacija je gladka brez utripanja.

#include <partner/conio.h>
#include <ugpx.h>

clrscr();
setcursortype(NOCURSOR);
ginit(0);

gsetpage(0); gcls();
gsetpage(1); gcls();

uint8_t visible = 0;   /* Trenutno vidna stran   */
uint8_t hidden  = 1;   /* Stran za risanje       */
uint16_t x = 0;

while (!kbhit()) {
    /* Rišemo na skriti strani */
    gsetpage(hidden);
    gcls();
    gsetcolor(1);
    gxy(x, 100);
    gdrawrect(x, 80, x + 40, 140);

    /* Prikazemo skrito stran */
    gsetpage(visible);

    /* Zamenjamo vlogi strani */
    uint8_t tmp = visible;
    visible = hidden;
    hidden  = tmp;

    /* Premik žogice */
    x += 4;
    if (x > 980) x = 0;
}

gexit();
setcursortype(NORMALCURSOR);

Popoln opis vseh grafičnih funkcij je v Dodatku C: Knjižnica ugpx.