IPB

> Модуль ScpGraph
Чат
Форум
Загрузка...
 

  Модуль ScpGraph


Модуль ScpGraph предназначен для гибкого доступа к дополнительным BGI драйверам. Стандартные режимы жёстко закодированы константами, ни добавить к ним, ни отнять. Подход, основанный на использовании констант, можно было бы распространить на режимы SVGA, и ранее в School Pak так и было сделано, но этот подход оказался плох по нескольким причинам. Во–первых, если регистрировать все SVGA драйвера, таблица дополнительных драйверов забивается, и на VGA 320x200 слота уже не хватает. Во–вторых, на разных конфигурациях (разное железо, разные виртуальные машины) могут лучше подходить разные драйвера, и у конечного пользователя должна быть возможность влиять на выбор драйвера, даже не имея доступ к исходным текстам вашей программы.

Чтобы это было возможно, при инициализации дополнительного видеорежима сканируется специальный текстовый файл TABLE.BGT, который должен быть расположен рядом с BGI драйверами. В этом текстовом файле находится таблица соответствий разрешений, количества цветов и драйверов с кодами режимов для них.

Пример использования содержится в файле X:\BP\DEMOS\GRTEST.PAS

Процедуры, функции, константы

В большинстве ситуаций предполагается использование процедур и функций модуля Graph, а в этом модуле содержится только то, чего не хватает в Graph.

InitScpGraph — инициализация графического режима. В отличие от InitGraph, работает не с константами режимов, а с разрешением и количеством цветов. Драйвер ищется по файлу TABLE.BGT

Константы для PutImage: XNOR_PUT, NOR_PUT, NAND_PUT, TRANS_COPY_PUT

type DacPalette16  = array[0..15] of array[0..2] of Byte;
type DacPalette256 = array[0..255] of array[0..2] of Byte;

type TColor = LongInt; { IRGB, I = Index }

(* Setvgapalette sets the entire 16 color palette *)
(* PalBuf contains RGB values for all 16 colors   *)
(* R,G,B values range from 0 to 63                 *)
procedure SetVGAPalette16(PalBuf : DacPalette16);

(* Setvgapalette sets the entire 256 color palette *)
(* PalBuf contains RGB values for all 256 colors   *)
(* R,G,B values range from 0 to 63                 *)
procedure SetVGAPalette256(PalBuf : DacPalette256);

function RGB(R, G, B : Integer) : TColor;

function IRGB(I, R, G, B : Integer) : TColor;

function RealDrawColor(Color : TColor) : Integer;

function RealFillColor(Color : TColor) : Integer;

function RealColor(Color : TColor) : Integer;

function RealPixelColor(PixColor : Integer) : TColor;

function GetStdColor(C : Integer) : TColor;

Эти функции нужны, чтобы в режимах High Color и True Color оперировать цветами вне зависимости от того, какой именно сейчас режим. RGB создаёт TColor, не зависящий от того, какой сейчас видеорежим, а RealDrawColor преобразует этот цвет в значение, зависящее от цветового режима.

Пример

 for i := 0 to 255 do
 begin
    SetColor(RealDrawColor(RGB($ff, i, 255 - i)));
    Line(0, 250 + i, GetMaxX, 250 + i);
 end;

Поддерживаемые видеорежимы

Список режимов читается из отдельного файла TABLE.BGT, поэтому, если будет сделана поддержка какого–то другого видеорежима, можно добавить эту информацию в этот файл, и программа сможет работать с этим драйвером. Ниже указаны те режимы, которые поддерживаются SVGA драйверами в School Pak:

; Формат:
; Стандартные режимы:
; !Xres Yres Colors IsSVGA GrMode GrDriver
; IsSVGA = 0; GrMode и GrDriver -- два числа,
; которые нужно передать в первый и второй
; параметры
; Нестандартные режимы:
; +Xres Yres Colors IsSVGA GrMode GrDriverName
; GrMode -- это режим, а GrDriverName -- это
; имя файла графического драйвера
; Colors: меньше 256 -- количество цветов
; 1500 -- 15бит, 1600 -- 16бит, 2400 -- 24бит
; 3200 -- 32бит
; если - вместо +, проверить доступность 386 инструкций
; если разрешение нулевое, оно определяется автоматически
; у более ранних приоритет выше

; Режимы хуже, чем 16 цветов, не описаны

; SVGA16

+ 320  200   16 1 0 SVGA16
+ 640  200   16 1 1 SVGA16
+ 640  350   16 1 2 SVGA16
+ 640  480   16 1 3 SVGA16
+ 800  600   16 1 4 SVGA16
+1024  768   16 1 5 SVGA16
+1280 1024   16 1 6 SVGA16

; Стандартные режимы

! 640  200   16 0 0 3
! 640  350   16 0 1 3
! 640  480   16 0 2 3

!   0    0   16 0 0 0

; SVGA (386)

- 320  200  256 1 0 SVGA386
-   0    0  256 1 1 SVGA386
- 640  400  256 1 2 SVGA386
- 640  480  256 1 3 SVGA386
- 800  600  256 1 4 SVGA386
-1024  768  256 1 5 SVGA386
-1280 1024  256 1 6 SVGA386

; SVGA

+ 320  200  256 1 0 SVGA
+   0    0  256 1 1 SVGA
+ 640  400  256 1 2 SVGA
+ 640  480  256 1 3 SVGA
+ 800  600  256 1 4 SVGA
+1024  768  256 1 5 SVGA
+1280 1024  256 1 6 SVGA

; VGA256

+ 320  200  256 0 0 VGA256

; SVGA32k

+ 320  200 1500 1 0 SVGA32K
+ 640  350 1500 1 1 SVGA32K
+ 640  400 1500 1 2 SVGA32K
+ 640  480 1500 1 3 SVGA32K
+ 800  600 1500 1 4 SVGA32K
+1024  768 1500 1 5 SVGA32K
+1280 1024 1500 1 6 SVGA32K
+   0    0 1500 1 5 SVGA32K

; SVGA64k

+ 320  200 1600 1 0 SVGA64K
+ 640  350 1600 1 1 SVGA64K
+ 640  400 1600 1 2 SVGA64K
+ 640  480 1600 1 3 SVGA64K
+ 800  600 1600 1 4 SVGA64K
+1024  768 1600 1 5 SVGA64K
+1280 1024 1600 1 6 SVGA64K
+   0    0 1600 1 5 SVGA64K

; True Color
; не работает в DOSBox

+ 320  200 2400	1 0 SVGATC
+ 640  350 2400 1 1 SVGATC
+ 640  400 2400 1 2 SVGATC
+ 640  480 2400 1 3 SVGATC
+ 800  600 2400 1 4 SVGATC
+1024  768 2400 1 5 SVGATC
+1280 1024 2400 1 6 SVGATC
+   0    0 2400 1 5 SVGATC

Скачать

ScpGraph.7z
Архив содержит исходные коды ScpGraph, TABLE.BGT и дополнительные SVGA драйвера. Всё это уже есть в составе School Pak.

 
 К началу страницы 
Тэги: ScpGraph
 

Код для вставки: :: :: :: ГОСТ ::
Поделиться: //
 



-
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"