Специфікація BTRON3 (Український переклад) | Розділ 6: Графічні примітиви (Display Primitives)
Повернутися до змісту розділу Графічних примітивів
Попередня сторінка: 2.1 Вступ (Повернутися)
Наступна сторінка: 2.3 Базові функції графічного порту (Перейти)

2.2 Базові графічні концепції (Basic Display Concepts)

2.2.1 Координатна площина, точки та прямокутники

Графічна система BTRON базується на двовимірній цілочисельній координатній сітці (Grid) із діапазоном координат від $-32768$ до $+32767$ у 16-бітному форматі.

Вісь X спрямована горизонтально зліва направо, а вісь Y — вертикально зверху вниз. Координатні лінії розміщуються між пікселями, а самі пікселі займають одиничні квадратні комірки на сітці.

□ Точка (PNT)

typedef struct {
    H   x;      /* Горизонтальна координата X (-32768..+32767) */
    H   y;      /* Вертикальна координата Y (-32768..+32767) */
} PNT;

□ Розмір (SIZE)

typedef struct {
    H   w;      /* Ширина (width >= 0) */
    H   h;      /* Висота (height >= 0) */
} SIZE;

□ Прямокутник (RECT)

typedef struct {
    H   c_left;     /* Ліва межа X (включно) */
    H   c_top;      /* Верхня межа Y (включно) */
    H   c_right;    /* Права межа X (не включно) */
    H   c_bottom;   /* Нижня межа Y (не включно) */
} RECT;

Усі прямокутники у BTRON визначаються за правилом напіввідкритого інтервалу (Half-Open Interval Property): прямокутник охоплює пікселі $[c\_left, c\_right)$ по горизонталі та $[c\_top, c\_bottom)$ по вертикалі. Штирина обчислюється як $w = c\_right - c\_left$, а висота $h = c\_bottom - c\_top$.

□ Список прямокутників та складна область (RLIST / GRGN)

typedef struct {
    H       nrect;      /* Кількість прямокутників у списку */
    RECT    rect[1];    /* Масив прямокутних областей */
} RLIST;

typedef struct {
    RECT    bounds;     /* Загальний описовий прямокутник (Bounding Box) */
    RLIST   rlist;      /* Список прямокутників, що утворюють регіон */
} GRGN;

2.2.2 Бітові карти та специфікація пристрою (Bitmaps & DEV_SPEC)

Бітова карта (Bitmap) — це прямокутна область графічної пам'яті (відеопам'ять VRAM або оперативна пам'ять RAM), де кожен піксель кодується відповідною кількістю бітів.

□ Структура бітової карти (BITMAP)

typedef struct {
    W       planes;     /* Кількість бітових площин (planes > 0; від'ємне = апаратний VRAM) */
    W       pixbits;    /* Глибина кольору пікселя в бітах (1, 2, 4, 8, 16, 24, 32) */
    H       rowbytes;   /* Байт у одному рядку растру (Row Bytes) */
    RECT    bounds;     /* Межі растру у координатах бітової карти */
    B       *addr;      /* Вказівник на початок буфера відеопам'яті у пам'яті */
} BITMAP;

□ Специфікація графічного пристрою (DEV_SPEC)

typedef struct {
    UW  attr;       /* Атрибути пристрою (Lock, наявність VRAM, Color Map, Color Mode) */
    W   planes;     /* Кількість бітових площин */
    W   pixbits;    /* Глибина кольору (біт на піксель) */
    H   hpixels;    /* Фізична ширина екрана у пікселях */
    H   vpixels;    /* Фізична висота екрана у пікселях */
    H   hres;       /* Роздільна здатність по горизонталі (пікс/см або -пікс/дюйм) */
    H   vres;       /* Роздільна здатність по вертикалі */
    H   color[4];   /* Біти каналів кольору (RGB / CMY / Gray) */
    H   resv[6];    /* Зарезервовано */
} DEV_SPEC;

2.2.3 Представлення кольору (COLOR & CSPEC)

Колір у BTRON представлений 32-бітним словом типу COLOR:

    TCCC CCCC RRRR RRRR GGGG GGGG BBBB BBBB
typedef UW  COLOR;  /* 32-бітне значення кольору */

□ Специфікація колірної палітри (CSPEC)

typedef struct {
    W       attr;       /* Атрибути колірної системи */
    H       info[4];    /* Кількість елементів палітри або маски компонент */
    COLOR   *colmap;    /* Вказівник на масив кольорів палітри */
} CSPEC;

2.2.4 Середовище малювання (Drawing Environment / GID)

Середовище малювання (дескриптор GID) зберігає повний графічний контекст:

□ Режими малювання (Draw Mode / RasterOp)

#define DM_PAINT    0   /* Пряме заміщення пікселів джерелом (Source Copy) */
#define DM_OVER     1   /* Накладання з урахуванням прозорості (Transparent Over) */
#define DM_XOR      2   /* Побітове виключне АБО (Invert / Toggle) */
#define DM_OR       3   /* Побітове логічне АБО */
#define DM_AND      4   /* Побітове логічне І */

□ Патерн малювання (PAT)

typedef struct {
    SIZE    size;       /* Розмір патерну (зазвичай 8x8 або 16x16) */
    H       rowbytes;   /* Кількість байтів у одному рядку растру патерну */
    B       data[1];    /* Масив бітової маски патерну */
} PAT;

2.2.5 Виведення тексту та шрифти

Виведення текстових символів враховує колір тексту (chfgc), колір фону (chbgc), напрямок письма (CharacterDirection) та міжсимвольні інтервали (CGAP).

□ Напрямок виведення тексту (CharacterDirection)

enum CharacterDirection {
    TORIGHT = 0,    /* Зліва направо (стандартний європейський текст) */
    TOLEFT  = 1,    /* Справа наліво (арабська / іврит) */
    TOUP    = 2,    /* Знизу вгору */
    TODOWN  = 3,    /* Згори вниз (традиційне вертикальне японське письмо) */
    TOARB   = 4     /* Довільний напрямок за вектором кута */
};

□ Міжсимвольні інтервали (CharacterGap / CGAP)

typedef struct {
    H   dir;        /* Напрямок: 0 = у напрямку письма, 1 = у зворотному */
    UH  gap;        /* Інтервал у пікселях або частках розміру шрифту */
} SGAP;

typedef struct {
    SGAP    hgap;   /* Горизонтальний інтервал між символами */
    SGAP    vgap;   /* Вертикальний інтервал між рядками */
    SGAP    hspgap; /* Додатковий горизонтальний інтервал після пробілу */
    SGAP    vspgap; /* Додатковий вертикальний інтервал після пробілу */
} CGAP;

Повернутися до змісту розділу Графічних примітивів
Попередня сторінка: 2.1 Вступ (Повернутися)
Наступна сторінка: 2.3 Базові функції графічного порту (Перейти)