Minecraft Wiki
Advertisement

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

Для простых программ будет достаточно 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) -- копируем верхнюю-левую четверть в правую-нижнюю
Advertisement