OpenComputers/GPU API

Этот интерфейс предоставляет расширенную функциональность видеокарт.

Для простых программ будет достаточно Term API.


Название компонента: `gpu`

.



`bind(address: string): boolean[, string]`


Связывает видеокарту с монитором (который задан адресом).

Возвращает `true`

или `false`

, в зависимости от успеха.

Одна видеокарта может работать только с одним монитором одновременно. Все операции производимые на видеокарте, будут отображаться на мониторе, связанном с ней. Если вы хотите выводить изображение на несколько мониторов, подключите с своему компьютеру несколько видеокарт.



`getScreen():string`


Возвращает адрес экрана, к которому привязана видеокарта.

*Примечание*: начиная с версии OpenComputers 1.3.2.



`getBackground(): number, boolean`


Возвращает текущий цвет фона. Этот применяется ко всем "пикселям", которые изменяются другими операторами.

Первое возвращаемое значение — RGB цвет в шестнадцатеричном формате, т.е. `0xRRGGBB`

. Такой формат используется мониторами и видеокартами вне зависимости от уровня и глубины цвета.

Второе значение показывает в каком формате представлен цвет (`true`

- в виде номера в палитре, `false`

- в виде числа RGB)



`setBackground(color: number[, isPaletteIndex: boolean]): number[, index]`


Устанавливает новый цвет фона. Возвращаемое значение — старый цвет, в том виде, в каком он был установлен (т.е. не сжатый до цветовой глубины экрана/видекарты).

Если цвет принадлежал палитре, второе возвращаемое значение будет индексом этого цвета в палитре. Иначе - `nil`

.

Функция работает с RGB цветом в шестнадцатеричном формате, т.е. `0xRRGGBB`

. Такой формат используется мониторами и видеокартами вне зависимости от уровня и глубины цвета.



`getForeground(): number, boolean`


Как `getBackground`

, только для основного цвета.



`setForeground(color: number[, isPaletteIndex: boolean]): number[, index]`


Как `setBackground`

, только для основного цвета.



`setPaletteColor(index: number, value: number): number`


Устанавливает RGB цвет `value`

в палитру по индексу `index`

.



`getPaletteColor(index: number): number`


Возвращает цвет палитры по заданному индексу.



`maxDepth(): number`


Возвращает максимальную глубину цвета, которая поддерживается видеокартой и монитором (одновременно).



`getDepth(): number`


Текущая глубина цвета видеокарты/монитора в битах. Может быть равна 1, 4 или 8.



`setDepth(bit: number): boolean`


Устанавливает новую глубину цвета. Это значение не может быть больше максимально поддерживаемого экраном/видеокартой (`maxDepth`

). Значение большее, или некорректное вызовет ошибку.

Возвращает `true`

или `false`

, в зависимости от успеха.



`maxResolution(): number, number`


Возвращает максимальное разрешение, поддерживаемое видеокартой и монитором, с которым она связана.



`getResolution(): number, number`


Возвращает текущее разрешение.



`setResolution(width: number, height: number): boolean`


Задает новое разрешение. Разрешение не может быть больше, чем максимальное поддерживаемое экраном и видеокартой (`maxResolution`

). Значение большее, или некорректное вызовет ошибку.

Возвращает `true`

или `false`

, в зависимости от успеха.



`getSize(): number, number`


Возвращает размер мультиблочного экрана, в блоках. Для простого экрана или робота это будет (1, 1).

* Внимание!* Функция устарела. Используйте

`screen.getAspectRatio()`

вместо нее.


`get(x: number, y: number): string, number, number, number or nil, number or nil`


Возвращает символ, который отображен по заданным координатам. Второе и третье значения - основной цвет, и цвет фона соответственно, в виде RGB значений. Если это цвета палитры, то четвертое и пятое значения будут содержать их индексы. Иначе - они будут пусты (`nil`

).



`set(x: number, y: number, value: string[, vertical:boolean]): boolean`


Пишет строку на экран, начиная в заданных координатах. Функция просто копирует строку в буфер видеокарты в виде символьной последовательности. Т.е. если строка содержит символы переносов, они будут просто отображены на дисплее как специальные символы. Строка не будет отображена в несколько линий.

Возвращает `true`

или `false`

, в зависимости от успеха.

Необязательный четвертый параметр позволяет вывести строку вертикально, если он будет равен `true`

.



`copy(x: number, y: number, width: number, height: number, tx: number, ty: number): boolean`


Копирует фрагмент экранного буфера в другое место. Копируемый участок задан параметрами `x`

, `y`

, `width`

и `height`

. Место, куда он будет скопирован определяется как `x + tx`

, `y + ty`

, `width`

и `height`

.

Возвращает `true`

или `false`

, в зависимости от успеха.



`fill(x: number, y: number, width: number, height: number, char: string): boolean`


Заполняет прямоугольник экранного буфера заданным символом. Прямоугольник задается параметрами `x`

, `y`

, `width`

и `height`

.

Параметр `char`

должен содержать один символ.

Функция возвращает `true`

или `false`

, в зависимости от успеха.

*Примечание*: заполнение экрана символами пробела (`' '`

) обычно тратит меньше энергии, т.к. это операция "очистки" экрана. (См. файл конфигурации).

### Операции с видеопамятью

* Внимание!* Перечисленные далее методы доступны, начиная с версии

**мода**

`1.7.6`

.
В более старых версиях этих методов **нет**.

`getActiveBuffer(): number`


Возвращает индекс активного буфера видеокарты. Значение 0 зарезервировано для экранного буфера, и может быть возвращено функцией, даже если монитора нет.

`setActiveBuffer(index: number): number`


Устанавливает активный буфер видеокарты на `index`

. Значение 0 зарезервировано для экранного буфера, и может быть установлено даже если монитора нет. Возвращает nil, если значение `index`

неверное. (значение 0 верное, даже если монитора нет)

`buffers(): table`


Возвращает таблицу, содержащую индексы всех выделенных буферов видеопамяти (не включая 0, который зарезервирован как индекс экранного буфера).

`allocateBuffer([width: number, height: number]): number`


Выделяет новый буфер размерами `width`

*`height`

(или максимальное разрешение видеокарты по умолчанию). Возвращает индекс нового буфера, или ошибку, если видеопамяти недостаточно. Буфер может быть аллоцирован даже если ни один монитор не связан с этой видеокартой. Индекс 0 всегда зарезервирован в качестве индекса экранного буфера, по этому минимальное значение, которое может вернуть эта функция - 1.

`freeBuffer([index: number]): boolean`


Удаляет буфер согласно указанному в `index`

номеру (или активный, если `index`

отсутствует). Возвращает true, если буфер был удалён. Когда вы удаляете активный буфер, видеокарта автоматически устанавливает 0 (экранный буфер) в качестве активного буфера.

`freeAllBuffers()`


Удаляет все буферы, очищает всю видеопамять. Индекс активного буфера всегда устанавливается на 0 после вызова этой функции.

`totalMemory(): number`


Возвращает общий объём памяти видеокарты. Не включая экранный буфер, да, тот самый, под индексом 0...

`freeMemory(): number`


Возвращает общий объём **свободной** на данный момент видеопамяти. Не учитывая экран.

`getBufferSize([index: number]): number, number`


Возвращает размер буфера под номером `index`

(или активный, если `index`

не указан). Для буфера с индексом 0, результатом этой функции будет фактически текущее разрешение экрана. Возвращает nil для неверных индексов.

`bitblt([dst: number, col: number, row: number, width: number, height: number, src: number, fromCol: number, fromRow: number])`


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

Название параметра | Значение по умолчанию | Описание |
---|---|---|

dst | 0 | индекс буфера, в который копировать |

col | 1 | x-координата левого-верхнего угла области буфера `dst` , куда будет скопировано изображение из буфера `src`
|

row | 1 | y-координата левого-верхнего угла области буфера `dst` , куда будет скопировано изображение из буфера `src`
|

width | ширина буфера, в который копировать | ширина копируемого участка изображения |

height | высота буфера, в который копировать | высота копируемого участка изображения |

src | активный на данный момент буфер | индекс буфера, из которого нужно скопировать |

fromCol | 1 | x-координата левого-верхнего угла той области буфера, из которого необходимо произвести копирование, которая будет скопирована |

fromRow | 1 | y-координата левого-верхнего угла той области буфера, из которого необходимо произвести копирование, которая будет скопирована |


Возвращает true, если копирование произошло успешно.

## Пример программы

local component = require("component") local gpu = component.gpu -- получаем прокси видеокарты local w, h = gpu.getResolution() gpu.fill(1, 1, w, h, " ") -- очищаем экран gpu.setForeground(0x000000) gpu.setBackground(0xFFFFFF) gpu.fill(1, 1, w/2, h/2, "X") -- заполняем верхнюю-левую четверть экрана gpu.copy(1, 1, w/2, h/2, w/2, h/2) -- копируем верхнюю-левую четверть в правую-нижнюю