Pixilang - кросс-платформенный язык программирования для небольших графических и звуковых приложений. Примеры применения: арт-эксперименты, демки (demoscene), синтезаторы, игры. Концепция языка разработана в 2006 году Александром Золотовым (NightRadio) и Михаилом Разуваевым (Goglus).
Pixilang-программы хранятся в текстовых файлах (UTF8) с расширением .txt или .pixi. Поэтому вы можете использовать любой текстовый редактор для создания таких программ. Pixilang не имеет встроенного редактора. После старта появляется файловый диалог, в котором нужно указать, где лежит запускаемая pixi-программа.
Ключевые особенности:
При запуске из командной строки Pixilang принимает дополнительные опции в приведенном ниже формате.
pixilang [options] [source_file_name] [options] -c генерация байт-кода; будет создан файл source_file_name.pixicode. Примечание: файлы в формате *.pixicode привязаны к архитектуре и могут неправильно работать на других устройствах.
В основе Pixilang - контейнеры (или pixi-контейнеры, как их иногда называют) и переменные.
Контейнер - это двумерный массив, таблица из X колонок и Y строк. Каждая ячейка этой таблицы - число определенного типа. Тип задан один на весь контейнер. Например, ячейки могут хранить цвета пикселей, тогда контейнер превращается в картинку. Контейнер может быть строкой текста, куском звука и т.д. Если вы знакомы с другими языками программирования, то считайте контейнер массивом, состоящим из (X*Y) ячеек. Каждый контейнер после создания имеет свой ID (порядковый номер): 0,1,2,3 и т.д. Нулевой ID по умолчанию указывает на контейнер с экраном.
Структура контейнера:
Новый контейнер можно получить используя функцию new() или какую-то другую специальную функцию, возвращающую блок данных. Контейнер удаляется двумя способами:
В Pixilang отсутствует автоматический сборщик мусора, поэтому будьте внимательны - каждый новый контейнер отнимает память до тех пор, пока вы не удалите этот контейнер.
Максимальное количество контейнеров в программе - 8192. Но это число можно увеличить через параметр pixi_containers_num в файле конфигурации pixilang_config.ini. Кроме того, если вы собираете Pixilang из исходников, кол-во контейнеров можно указать в файле user_code_info.cpp, используя такой код: const char* g_app_options[] = { "pixi_containers_num", 0 }; int g_app_options_val[] = { 16384 };
Переменная - имя ячейки памяти, в которой хранится одно знаковое целое 32-битное число (например, 25) или 32-битное число с плавающей запятой (например, 33.44). Локальные переменные (с символом $ перед именем) доступны только в рамках одной функции, в которой эти переменные определены. Глобальные переменные (без символа $) доступны в любом месте программы.
Числа можно описывать в различных форматах. Примеры:
В каком бы формате вы не описали число, внутри Pixilang оно все равно будет 32-битным целым или 32-битным с плавающей запятой.
Простейшие примеры применения контейнеров и переменных:
x = new( 4 ) //Создаем контейнер из 4-х пикселей. Сохраняем ID контейнера в переменную x. //Элементы контейнера адресуются с нуля: // первый элемент - x[ 0 ]; // второй элемент - x[ 1 ]; // ... // последний элемент - x[ размер - 1 ]; x[ 0 ] = #0000FF //Записываем значение синего цвета в первый пиксель контейнера. x[ 2 ] = WHITE //Записываем значение белого цвета в пиксель 2. x[ 3 ] = RED //Записываем значение белого цвета в пиксель 3. x[ 4 ] = BLUE //Здесь ничего не произойдет, т.к. элемента под номером 4 не существует. b = x[ 2 ] //Читаем элемент 2 //Теперь переменная b содержит число, соответствующее белому цвету. v = x[ 8 ] //Пытаемся прочитать элемент 8 //Переменная v содержит ноль, т.к. элемент 8 прочитать не удалось remove( x ) //Удаляем контейнер
c = new( 4, 4 ) //Создаем 2D контейнер 4 на 4 пикселя. Сохраняем ID контейнера в переменную c. c[ 2, 2 ] = WHITE //Присваиваем пикселю с координатами 2,2 (относительно левого верхнего угла) белый цвет. remove( c ) //Удаляем контейнер
str = "Hello" //"Hello" - это строковый контейнер, состоящий из пяти 8-битных символов (кодировка UTF-8). //Подобные контейнеры-строки создаются автоматически на этапе компиляции программы. //Удалять их вручную так, как это сделано в предыдущем примере, не надо. //Контейнеру со строкой "Hello" автоматически присвоится ID (порядковый номер). //Например, ID будет равен 4. //Тогда код str = "Hello" будет равноценен коду str = 4. str[ 0 ] = 'h' //Меняем самую первую букву в строке. Было - 'H'. Станет - 'h'. str[ 2 ] = 0 //Меняем букву 'l' на нулевой символ, означающий конец строки //...теперь строка превратилась в "he". //Конец строки - это либо нулевой символ, либо конец контейнера.
a = 4 //Глобальная переменная fn function() { $k = 2 //Локальная переменная function2 = { //Определяем еще одну функцию $x = 899.334 //Локальная переменная //В этом месте $k недоступна, т.к. находится в другой функции } //В этом месте $x недоступна } //В этом месте $k и $x недоступны
Система координат Pixilang представлена на следующей картинке:
Ниже приведены примеры, показывающие основные правила оформления имен файлов и директорий.
//Файл спрятан в нескольких директориях относительно текущего местоположения пикси-программы: "folder1/folder2/folder3/filename" //Файл лежит в текущей рабочей папке Pixilang: // iOS: documents; // WinCE: корень файловой системы (/); // для остальных систем: в той же самой папке, в которой лежит Pixilang; "1:/filename" //Файл лежит в директории для настроек и скрытых данных приложения: // Linux: /home/username/.config/Pixilang; // iOS: папка для файлов приложения (NSApplicationSupportDirectory); // Android: папка с настройками на внутренней карте памяти устройства; "2:/filename" //Файл лежит во временной директории: "3:/filename"
Рассмотрим операторы на конкретных примерах.
//Условные операторы if, else if a == b { /*Код в этом месте выполняется, если a равно b*/ } else { /*Код в этом месте выполняется в противном случае (a не равно b)*/ } if x == 4 && y == 2 { /*Код в этом месте выполняется, если x равно 4 и y равно 2*/ } //Оператор цикла: while a = 0 while( a < 3 ) { //Код в этом месте выполняется, если a меньше 3 a + 3 } //Операторы цикла: while, break a = 0 while( a < 100 ) { //Код в этом месте выполняется, если a меньше 100 if a == 10 { break } //Если a = 10, то разрываем цикл оператором break //Для остановки нескольких вложенных циклов сразу можно использовать оператор breakX, //где X - глубина. Например break2 остановит два цикла. //А при помощи оператора breakall можно остановить все циклы, //которые активны в данный момент для текущего потока выполнения. a + 1 } //Операторы цикла: while, continue a = 0 b = 0 while( a < 100 ) { //Код в этом месте выполняется, если a меньше 100 if a == 10 { a + 1 continue } //Если a = 10, то переходим к следующей итерации цикла // (игнорируем следующие две строчки кода) a + 1 b + 1 } //Операторы перехода: go, goto m1: a + 1 goto m1 //Переход на метку m1 //Операторы остановки: halt, stop halt //В этом месте программа останавливается //Оператор подключения: include include "prog2.txt" //В этом месте подключаем код из файла prog2.txt //Оператор определения функции: fn fn fff( $x, $y ) //Определяем функцию fff с параметрами $x и $y { //Код функции fff ret //Простой выход из функции ret( 4 ) //Выход из функции с возвращением значения 4 }
Ниже приведена таблица математических операторов. Приоритет 0 - наивысший, такие операции будут выполняться в первую очередь.
Приоритет | Оператор | Описание | Результат | Пример |
---|---|---|---|---|
0 | % | Деление по модулю | Целое число | a = b % 4 |
0 | / | Деление | Число с плавающей запятой | a = b / 4 |
0 | div | Целочисленное деление | Целое число | a = b div 4 |
0 | * | Умножение | Зависит от операндов | a = b * 4 |
1 | + | Сложение | Зависит от операндов | a = b + 4 |
1 | - | Вычитание | Зависит от операндов | a = b - 4 |
2 | >> | Битовый сдвиг вправо | Целое число | a = b >> 4 |
2 | << | Битовый сдвиг влево | Целое число | a = b << 4 |
3 | == | Равно | Целое число 1 или 0 | if a == b {} |
3 | != | Не равно | Целое число 1 или 0 | if a != b {} |
3 | < | Меньше | Целое число 1 или 0 | if a < b {} |
3 | > | Больше | Целое число 1 или 0 | if a > b {} |
3 | <= | Меньше или равно | Целое число 1 или 0 | if a <= b {} |
3 | >= | Больше или равно | Целое число 1 или 0 | if a >= b {} |
4 | | | Побитовая операция ИЛИ (OR) | Целое число | a = b | 4 |
4 | ^ | Побитовая операция исключающего ИЛИ (XOR) | Целое число | a = b ^ 4 |
4 | & | Побитовая операция И (AND) | Целое число | a = b & 4 |
5 | || | Логическая операция ИЛИ (OR) | Целое число 1 или 0 | if a || b {} |
5 | && | Логическая операция И (AND) | Целое число 1 или 0 | if a && b {} |
Контейнер может содержать элементы одного из нижеперечисленных типов.
64-битные типы в текущей версии не поддерживается, но поддержка может быть включена при самостоятельной сборке Pixilang из исходников. Для включения необходимо внести небольшие правки в файле pixilang.h в разделе Configuration.
Для OpenGL:
Уровни компрессии:
Сохранение GIF:
Сохранение JPEG:
Эти константы используются, например, при выводе текста. Их можно комбинировать при помощи побитовой операции ИЛИ (|). Отсутствие TOP и BOTTOM обозначает вертикальное выравнивание по центру. Отсутствие LEFT и RIGHT обозначает горизонтальное выравнивание по центру.
Типы эффектов для функции effector():
Режимы для gl_draw_arrays() (аналог функции glDrawArrays()):
Константы для gl_blend_func() (аналог функции glBlendFunc()):
Параметры состояния (для gl_get_int() и gl_get_float()):
Встроенные шейдеры для функции gl_new_prog():
Глобальные OpenGL контейнеры:
Флаги для функции set_audio_callback():
Флаги для функций midi_get_device(), midi_open_port():
Номера ячеек (полей) в контейнере EVT:
Типы событий (для поля EVT_TYPE):
Флаги события (для поля EVT_FLAGS):
Коды клавиш (для поля EVT_KEY):
Константы для функции set_quit_action():
Флаги (опции) для thread_create():
Для функции op_cn():
Для функций op_cn(), op_cc():
Для функции op_cc():
Для функции op_ccn():
Для функции generator():
Номера ячеек (полей) в контейнере с информацией о сэмпле:
Флаги:
Эти свойства могут использоваться при проигрывании, сохранении и загрузке контейнеров:
Создать новый контейнер с данными.
Сразу после создания контейнер может быть заполнен неопределенными значениями. Прежде чем читать из этого контейнера, его следует очистить функцией clean или заполнить полезными данными.
Параметры ( xsize, ysize, type )
Возвращаемое значение: ID контейнера или -1, если произошла ошибка при создании.
Примеры
p = new() //Создать контейнер 1x1. Тип = пиксели. p = new( 4 ) //Создать контейнер 4x1. Тип = пиксели. p = new( 4, 4 ) //Создать контейнер 4x4. Тип = пиксели. p = new( 4, 4, FLOAT32 ) //Создать контейнер 4x1. Тип = 32-битные числа с плавающей запятой.
Удалить контейнер.
Параметры ( pixi )
Примеры
p = new() //Создаем новый контейнер remove( p ) //Удаляем его
Удалить контейнер и связанный с ним контейнер альфа-канала (прозрачность).
Параметры ( pixi )
Изменить параметры контейнера.
Параметры ( pixi, xsize, ysize, type, flags )
-1 в любом из параметров (кроме опций) будет означать, что данный параметр контейнера остается без изменений.
Возвращаемое значение: 0 - успешно; 1 - ошибка.
Примеры
p = new() //Создаем новый контейнер 1x1 resize( p, 32 ) //Изменяем его размер на 32x1 remove( p ) //Удаляем контейнер
Перевернуть контейнер на угол angle*90 градусов, по часовой стрелке.
Параметры ( pixi, angle )
Преобразовать значения контейнера к другому типу.
Параметры ( pixi, new_type )
Очистить контейнер (заполнить нулями или указанным значением).
Параметры ( dest_cont, v, offset, count )
Примеры
p = new() //Создаем новый контейнер clean( p ) //Очищаем его remove( p ) //И удаляем
Создать точную копию контейнера.
Параметры ( pixi )
Возвращаемое значение: ID нового контейнера или -1, если произошла ошибка при создании.
Скопировать данные из контейнера src в контейнер dest.
Параметры ( dest, src, dest_offset, src_offset, count, dest_step, src_step, flags )
Примеры
//Скопировать все элементы из контейнера img1 в img2: copy( img2, img1 ) //Скопировать элементы 8...200 из контейнера img1 в img2: copy( img2, img1, 8, 8, 200 ) //Скопировать 200 элементов начиная с 8 из контейнера img1 в img2 с шагом 2: copy( img2, img1, 8, 8, 200, 2, 2 )
Возвращаемое значение: количество элементов, которые удалось успешно скопировать.
Получить размер контейнера (кол-во элементов).
Параметры ( pixi )
Возвращаемое значение
Размер контейнера (кол-во элементов).
Примеры
p = new( 8, 8 ) //Создаем новый контейнер 8x8 size = get_size( p ) //Записываем его размер в переменную size remove( p ) //Удаляем контейнер
Получить ширину контейнера.
Параметры ( pixi )
Возвращаемое значение: ширина контейнера.
Примеры
p = new( 8, 8 ) //Создаем новый контейнер 8x8 xsize = get_xsize( p ) //Записываем его ширину в переменную xsize remove( p ) //Удаляем контейнер
Получить высоту контейнера.
Параметры ( pixi )
Возвращаемое значение: высота контейнера.
Примеры
p = new( 8, 8 ) //Создаем новый контейнер 8x8 ysize = get_xsize( p ) //Записываем его высоту в переменную ysize remove( p ) //Удаляем контейнер
Получить размер элемента контейнера (в байтах).
Параметры ( pixi )
Возвращаемое значение: размер элемента контейнера (в байтах).
Примеры
p = new( 8, 8, INT16 ) //Создаем новый контейнер 8x8; тип элемента = INT16 esize = get_esize( p ) //Записываем размер его элемента в переменную esize //Теперь в переменной esize находится число 2 (т.к. 16 бит - это два байта). remove( p ) //Удаляем контейнер
Получить тип элемента контейнера.
Параметры ( pixi )
Возвращаемое значение: тип элемента контейнера.
Примеры
p = new( 8, 8, INT32 ) //Создаем новый контейнер 8x8; тип элемента = INT32 type = get_type( p ) //Записываем тип его элемента в переменную type //Теперь в переменной type находится константа INT32. remove( p ) //Удаляем контейнер
Получить флаги контейнера. Под флагами подразумевается 32-битное число, каждый бит в котором отвечает за включение/выключение какой-то опции контейнера. Полный список флагов можно посмотреть в этом разделе.
Параметры ( pixi )
Возвращаемое значение: флаги контейнера.
Установить флаги контейнера. Под флагами подразумевается 32-битное число, каждый бит в котором отвечает за включение/выключение какой-то опции контейнера. Полный список флагов можно посмотреть в этом разделе.
Параметры ( pixi, flags )
Примеры
set_flags( img, GL_MIN_LINEAR | GL_MAG_LINEAR )
Сбросить флаги контейнера.
Параметры ( pixi, flags )
Получить значение свойства контейнера. У каждого контейнера может быть неограниченное количество свойств.
Другой путь получения свойства контейнера - использовать оператор . (точка). Например: value = image.fps
Параметры ( pixi, prop_name, def_prop )
Возвращаемое значение: числовое значение указанного свойства контейнера.
Установить значение свойства контейнера.
Другой путь установки свойства контейнера - использовать оператор . (точка). Например: image.fps = 20
Параметры ( pixi, prop_name, value )
Примеры
p = new( 8, 8, INT32 ) //Создаем новый контейнер 8x8; тип элемента = INT32 set_prop( p, "speed", 777 ) //Добавляем свойство "speed" у созданного контейнера v = get_prop( p, "speed" ) //Читаем значение этого свойства //Теперь в переменной v лежит число 777 //Рассмотрим так же более простой способ работы со свойствами контейнера //(при помощи оператора . (точка)): p.speed = 777 v = p.speed
Удалить все свойства контейнера.
Параметры ( pixi )
Включить/выключить отладочные сообщения менеджера управления памятью.
Параметры ( enable )
Запаковать контейнер библиотекой Zlib.
Параметры ( source, level )
Возвращаемое значение: ID нового контейнера, который является запакованной копией source; или -1 в случае ошибки.
Распаковать контейнер библиотекой Zlib.
Параметры ( source )
Возвращаемое значение: ID нового контейнера, который является распакованной копией source; или -1 в случае ошибки.
Альтернативные имена: num2str.
Конвертировать число из переменной в текстовую строку (в контейнер).
Параметры ( str, num )
Примеры
v = 45.64 s = "" num_to_str( s, v ) fputs( s ) fputs( "\n" )
Альтернативные имена: str2num.
Конвертировать текста (из контейнера) в число.
Параметры ( str )
Возвращаемое значение: числовое значение.
Примеры
a = str_to_num( "-55.44" ) b = a + 4
Добавляет строку source к строке destination. Обе строки должны заканчиваться символом с кодом 0, если кол-во остальных символов в строке меньше размера контейнера, в котором строка находится. После выполнения этой функции размер контейнера destination может увеличиться, если в нем не хватит места для строки source.
Параметры ( destination, source )
Параметры ( dest, dest_offset, source, source_offset )
Сравнивает две строки str1 и str2. Обе строки должны заканчиваться символом с кодом 0, если кол-во остальных символов в строке меньше размера контейнера, в котором строка находится.
Параметры ( str1, str2 )
Параметры ( str1, str1_offset, str2, str2_offset )
Возвращаемое значение:
Возвращает длину строки. Завершающий символ с кодом 0 не учитывается. Строки должна заканчиваться символом с кодом 0, если кол-во остальных символов в строке меньше размера контейнера, в котором строка находится.
Параметры ( str )
Параметры ( str, str_offset )
Возвращаемое значение: длина строки.
Ищет первое вхождение подстроки str2 в строке str1. Обе строки должны заканчиваться символом с кодом 0, если кол-во остальных символов в строке меньше размера контейнера, в котором строка находится.
Параметры ( str1, str2 )
Параметры ( str1, str1_offset, str2, str2_offset )
Возвращаемое значение: смещение подстроки str2 в строке str1 или -1, если подстрока не найдена.
Форматирует и запоминает наборы символов и значений в str. Каждый аргумент (если он есть), преобразуется и выводится согласно соответствующей спецификации формата в format. Подробное описание формата можно почитать здесь: https://ru.wikipedia.org/wiki/Printf или в любой документации на функцию sprintf() языка Си/Си++. Контейнер str расширяется при необходимости.
Параметры ( str, format, … )
Возвращаемое значение: количество символов, записанных в str или отрицательное значение в случае ошибки.
Примеры
sprintf( str, "Some text" ) //Записать текст в контейнер str //В результате контейнер str будет содержать следующую строку: "Some text" sprintf( str, "Number: %d", 12 ) //Записать знаковое десятичное число //В результате контейнер str будет содержать следующую строку: "Number: 12"
То же самое, что sprintf, только результат (набор символов и значений) записывается в поток STDOUT.
Параметры ( format, … )
Форматный вывод текста в указанный поток (открытый функцией fopen() или fopen_mem()).
Параметры ( stream, format, … )
Форматный вывод текста в буфер для логов (журнал событий). Формат такой же, как в printf.
Параметры ( format, … )
Получить буфер с логом (журнал событий).
Возвращаемое значение: ID нового контейнера, в котором лежит свежий лог; (контейнер нужно удалять вручную при помощи remove()).
Получить буфер с системным логом (журнал событий). Системный лог содержит сообщения от всех виртуальных машин Pixilang и различных системных функций (глобальная инициализация Pixilang).
Возвращаемое значение: ID нового контейнера, в котором лежит свежий лог; (контейнер нужно удалять вручную при помощи remove()).
Загрузить контейнер из файла.
Параметры ( filename, options )
Возвращаемое значение: ID загруженного контейнера или -1 в случае ошибки.
Примеры
//Грузим файл: c = load( "smile.jpg" ) if c >= 0 { //Получаем формат загруженного файла: file_format = c.file_format //Возможные значения переменной file_format: // FORMAT_RAW; // FORMAT_JPEG; // FORMAT_PNG; // FORMAT_GIF; // FORMAT_WAVE; // FORMAT_AIFF; // FORMAT_PIXICONTAINER; // или еще какое-то из раздела "Типы файлов". }
Загрузить контейнер из потока данных, открытого функцией fopen() или fopen_mem().
Параметры ( stream, options )
Возвращаемое значение: ID загруженного контейнера или -1 в случае ошибки.
Сохранить контейнер в указанном формате.
Параметры ( pixi, filename, format, options )
Возвращаемое значение: 0 в случае успешного сохранения.
Примеры
c = load( "smile.jpg" ) save( c, "smile.png", FORMAT_PNG ) save( c, "smile2.jpg", FORMAT_JPEG ) //Quality = 85 (default) save( c, "smile3.jpg", FORMAT_JPEG, 100 ) //Quality = 100
Сохранить контейнер в поток данных, открытый функцией fopen() или fopen_mem().
Параметры ( pixi, stream, format, options )
Возвращаемое значение: 0 в случае успешного сохранения.
Преобразовать путь в стиле Pixilang (например, 1:/img.png) в стиль реальной файловой системы (например, C:/Documents and Settings/username/Application Data/img.png).
Параметры ( path )
Возвращаемое значение: ID контейнера с новым именем файла; (контейнер нужно удалять вручную при помощи remove()).
Examples
filename = "1:/some_file" realpath = get_real_path( filename ) printf( "File name: %s; Real path: %s\n", filename, realpath ) remove( realpath )
Функции для получения списка файлов.
Примеры
path = CURRENT_PATH //Директория, в которой мы будем сканировать файлы. mask = -1 //Примеры маски: "txt/doc", "avi"; или -1 для получения всех файлов. fl = new_flist( path, mask ) if fl >= 0 { printf( "Some files found in %s\n", path ) while( 1 ) { file_name = get_flist_name( fl ) file_type = get_flist_type( fl ) //0 - файл; 1 - директория; if file_type == 0 { printf( "FILE %s%s\n", path, file_name ) } else { printf( "DIR %s%s\n", path, file_name ) } if flist_next( fl ) == 0 //Переходим к следующему файлу { //Файлов больше нет break } } remove_flist( fl ) }
Получить размер файла.
Параметры ( filename )
Параметры ( filename )
Параметры ( old_filename, new_filename )
Скопировать файл из source_filename в destination_filename.
Параметры ( source_filename, destination_filename )
Создать директорию.
Параметры ( directory_name, mode )
Использовать поток данных _stream_ (открытый функцией fopen() или fopen_mem()) как виртуальный диск 0:/ . При этом _stream_ должен указывать на открытый незапакованный TAR архив. Файлы внутри TAR архива будут доступны для всех файловых функций через обращение к диску 0:/.
Параметры ( stream )
Параметры ( filename, mode )
Возвращаемое значение: ID потока данных, связанного с указанным файлом; или 0 в случае ошибки.
Примеры
f = fopen( "/tmp/data.txt", "rb" ) //Открываем файл data.txt для чтения fclose( f ) //...и закрываем его.
Открыть контейнер _data_ как файл.
Параметры ( data )
Возвращаемое значение: ID потока данных, связанного с указанным контейнером; или 0 в случае ошибки.
Параметры ( stream )
Примеры
f = fopen( "/tmp/data.txt", "rb" ) //Открываем файл data.txt для чтения. c = fgetc( f ) //Получаем байт из этого файла. fclose( f ) //Закрываем файл.
Параметры ( c, stream )
Примеры
f = fopen( "/tmp/data.txt", "wb" ) //Открываем файл data.txt для записи. fputc( 0x12, f ) //Записываем байт 0x12 в этот файл. fclose( f ) //Закрываем файл.
Параметры ( s, stream )
Примеры
f = fopen( "/tmp/data.txt", "wb" ) //Открываем файл data.txt для записи. str = "Hello!" fputc( str, f ) //Записываем строку "Hello!" в этот файл. fclose( f ) //Закрываем файл.
Параметры ( data, size, stream, data_offset_optional )
Примеры
f = fopen( "/tmp/data.txt", "wb" ) //Открываем файл data.txt для записи. str = "Hello!" fwrite( str, 2, f ) //Записываем первые два байта из контейнера str в этот файл. fclose( f ) //Закрываем файл.
Параметры ( stream )
Загрузить строку текста из потока stream.
Параметры ( s, n, stream, offset )
Возвращаемое значение: длина полученной строки.
Примеры
string = new( 256, 1, INT8 ) f = fopen( "/tmp/data.txt", "rb" ) //Открываем файл data.txt для чтения. fgets( string, 256, f ) //Получаем строку текста из этого файла. //Полученная строка помещается в указанный выше контейнер string. //Если в контейнере недостаточно места, то строка обрезается. fclose( f ) //Закрываем файл.
Загрузить блок данных из потока stream.
Параметры ( data, size, stream, data_offset_optional )
Параметры ( stream )
Параметры ( stream )
Параметры ( stream, offset, origin )
Параметры ( stream )
Примеры
//Один из способов получения размера файла: f = fopen( "/tmp/data.txt", "rb" ) fseek( f, 0, SEEK_END ) size_of_file = ftell( f ) fclose( f )
Установить значение одного из дополнительных атрибутов файла.
Параметры ( path, attr_name, data, data_size_in_bytes, flags )
Возвращаемое значение: 0 в случае успешного завершения или -1 в случае ошибки.
Вывести содержимое рабочего экрана на дисплей и подождать указанное количество миллисекунд.
Параметры ( delay, x, y, xsize, ysize )
Возвращаемое значение:
Включить/выключить вертикальную синхронизацию (синхронизация кадровой частоты с частотой вертикальной развёртки монитора). vsync(1) - включить. vsync(0) - выключить.
Параметры ( enable )
Изменить размер пикселей на экране. Размер по умолчанию (минимальный) = 1. Увеличение размера ведет к уменьшению разрешения экрана.
Параметры ( size )
Получить размер экранного пикселя.
Сделать указанный контейнер текущим рабочим экраном. ID контейнера с экраном по умолчанию - 0.
Параметры ( pixi )
Получить ID контейнера, который в данный момент является рабочим экраном.
Возвращаемое значение: ID контейнера, который является рабочим экраном.
Параметры ( zbuf_container )
Указать контейнер, который будет буфером глубины (Z-Buffer) при рисовании трехмерных объектов. Подробнее про Z-буферизацию можно почитать здесь.
Контейнер должен иметь тип INT32 и по размерам совпадать с размером текущего экрана.
Получить значение цвета с заданными характеристиками r,g,b (красный,зеленый,синий).
Параметры ( red, green, blue )
Возвращаемое значение: значение цвета; формат этого значения может меняться в зависимости от версии Pixilang; например, если Pixilang скомпилирован для устройств с 8-битным дисплеем, то значение цвета будет в диапазоне от 0 до 255.
Получить интенсивность красной составляющей в указанном цвете.
Параметры ( color )
Возвращаемое значение: интенсивность красной составляющей; от 0 до 255.
Получить интенсивность зеленой составляющей в указанном цвете.
Параметры ( color )
Возвращаемое значение: интенсивность зеленой составляющей; от 0 до 255.
Получить интенсивность синей составляющей в указанном цвете.
Параметры ( color )
Возвращаемое значение: интенсивность синей составляющей; от 0 до 255.
Получить промежуточное значение цвета между двумя известными.
Параметры ( c1, c2, v )
Возвращаемое значение: промежуточное значение цвета.
Установить прозрачность для всех последующих функций.
Параметры ( t )
Получить текущее значение прозрачности.
Очистить текущий рабочий экран заданным цветом (или черным, если цвет не задан).
Параметры ( color )
Нарисовать точку.
Параметры ( x, y, color )
Нарисовать точку в 3D.
Параметры ( x, y, z, color )
Получить цвет в указанной точке.
Параметры ( x, y )
Возвращаемое значение: значение цвета в указанной точке.
Получить цвет в указанной точке.
Параметры ( x, y, z )
Возвращаемое значение: значение цвета в указанной точке.
Нарисовать линию.
Параметры ( x1, y1, x2, y2, color )
Нарисовать линию в 3D.
Параметры ( x1, y1, z1, x2, y2, z2, color )
Нарисовать прямоугольник.
Параметры ( x, y, xsize, ysize, color )
Нарисовать закрашенный прямоугольник.
Параметры ( x, y, xsize, ysize, color )
Вывести на экран контейнер с картинкой.
Параметры ( pixi_cont, x, y, color, xscale, yscale, src_x, src_y, src_xsize, src_ysize )
Примеры
pixi( image ) pixi( image, 10, 20 ) pixi( image, 30, 40, GREEN ) pixi( image, 90, 20, GREEN, 0.5, 0.5 )
Нарисовать массив треугольников.
Параметры ( vertices, triangles, tnum )
Отсортировать массив треугольников по глубине так, чтобы при вызове triangles3d() сначала рисовались дальние треугольники, а потом ближние.
Параметры ( vertices, triangles, tnum )
Установить/сбросить цвет прозрачности у контейнера.
Параметры ( pixi, color )
Привязать к контейнеру другой контейнер с альфа-каналом. Альфа-канал должен иметь тип INT8.
Параметры ( pixi, alpha )
Получить ID контейнера с альфа-каналом, привязанного к указанному контейнеру.
Параметры ( pixi )
Возвращаемое значение: ID контейнера или -1 (если альфа-канал отсутствует).
Вывести текст на экран.
Параметры ( text, x, y, color, align, max_xsize )
Примеры
print( "Hello Pixi!", 0, 0 ) //цвет - белый; выравнивание - по центру; print( "line1\nline2", 50, 50, RED ) //выравнивание - по центру; print( "line1\nline2", -50, 50, RED, TOP | LEFT ) //выравнивание - по верхнему левому краю;
Параметр ( text, align, max_xsize )
Возвращаемое значение: ширина текста в пикселях.
Параметр ( text, align, max_xsize )
Возвращаемое значение: высота текста в пикселях.
Параметры ( first_char_utf32, font_image, xchars, ychars )
Параметры ( char_utf32 )
Возвращаемое значение: ID контейнера, в котором находится картинка шрифта для указанного символа.
Наложить эффект на выделенный участок экрана. На координаты этой функции не действует трансформация.
Параметры ( type, power, color, x, y, xsize, ysize, x_step, y_step )
Нарисовать цветной градиент в указанном прямоугольнике. На координаты этой функции не действует трансформация.
Параметры ( color1, transp1, color2, transp2, color3, transp3, color4, transp4, x, y, xsize, ysize, x_step, y_step )
Разбить картинку по каналам (красный, зеленый, синий) или наоборот собрать. Канал в данном случае - это контейнер любого типа, в который будут записываться (или считываться) значения яркости красной, зеленой или синей составляющей изображения.
Параметры ( direction, image, red_channel, green_channel, blue_channel, image_offset, channel_offset, size )
Примеры
img = load( "some_image.jpg" ) xsize = get_xsize( img ) ysize = get_ysize( img ) r = new( xsize, ysize, INT16 ) g = new( xsize, ysize, INT16 ) b = new( xsize, ysize, INT16 ) split_rgb( 0, img, r, g, b ) //Разбиваем картинку img на составляющие r, g, b //Получаем яркость красного (от 0 до 255) для первого пикселя изображения: value = r[ 0 ]
Аналогична split_rgb(), только для преобразования в/из формата YCbCr.
Версия Pixilang с поддержкой OpenGL основана на стандартах OpenGL ES 2.0 и OpenGL ES Shading Language 1.0 (GLSL ES).
Краткое изложение стандарта на нескольких страницах: OpenGL ES 2.0 Quick Reference Card.
Установить gl_callback - функцию, которая будет отвечать за OpenGL-отрисовку кадра.
Параметры ( gl_callback, user_data )
Примеры
fn gl_callback( $user_data ) { set_screen( GL_SCREEN ) //Включить режим рисования в буфер OpenGL clear( YELLOW ) set_screen( 0 ) //Возвращаемся в обычный режим рисования } set_gl_callback( gl_callback, 0 ) while( 1 ) { while( get_event() ) { if EVT[ EVT_TYPE ] == EVT_QUIT { break2 } } frame() } set_gl_callback( -1 ) //Удалить gl_callback
Удалить из контейнера все OpenGL данные, которые были созданы автоматически во время перерисовки OpenGL кадра внутри gl_callback().
Параметры ( container )
Гибрид OpenGL функций glColor4ub(), glBindTexture(), glVertexPointer(), glColorPointer(), glTexCoordPointer(), glDrawArrays().
Можно вызывать только внутри кода, заданного set_gl_callback().
Параметры ( mode, first, count, color_r, color_g, color_b, color_a, texture, vertex_array, color_array, texcoord_array )
Полный аналог OpenGL функции glBlendFunc() или glBlendFuncSeparate() (если заданы sfactor_alpha и dfactor_alpha).
Можно вызывать только внутри кода, заданного set_gl_callback().
Вызывайте эту функцию без параметров, если нужно сбросить все значения в исходное состояние.
Параметры ( sfactor, dfactor, sfactor_alpha, dfactor_alpha )
Превратить указанный контейнер cnum в OpenGL framebuffer (с прикрепленной текстурой) и сделать его текущим - то есть, все последующие операции рисования отправлять не на экран, а в этот буфер.
Для отключения и перехода обратно на основной экран - вызовите эту функцию без параметров.
Разрешение основного экрана никак не влияет на выбранный framebuffer.
Можно вызывать только внутри кода, заданного set_gl_callback().
Параметры ( cnum )
Привязать указанный контейнер cnum к текстурному блоку texture_unit.
Можно вызывать только внутри кода, заданного set_gl_callback().
Параметры ( cnum, texture_unit )
Пример
fn gl_callback( $userdata ) { set_screen( GL_SCREEN ) gl_bind_texture( some_image2, 1 ) //привязать контейнер some_image2 к текстурному блоку 1 gl_bind_texture( some_image3, 2 ) //привязать контейнер some_image3 к текстурному блоку 2 gl_use_prog( gl_prog ) //Use user-defined GLSL program gl_uniform( gl_prog.g_texture2, 1 ) //установка переменной шейдера: g_texture2 = текстурный блок 1 gl_uniform( gl_prog.g_texture3, 2 ) //установка переменной шейдера: g_texture3 = текстурный блок 2 pixi( some_image ) gl_use_prog() //Back to default GLSL program set_screen( 0 ) //Back to the default screen } gl_vshader = GL_SHADER_TEX_RGB_SOLID //Vertex shader = default shader for solid primitives drawing gl_fshader = //Fragment shader "uniform sampler2D g_texture; //главный текстурный блок 0 (задается из pixi()) uniform sampler2D g_texture2; //текстурный блок 1 uniform sampler2D g_texture3; //текстурный блок 2 uniform vec4 g_color; IN vec2 tex_coord_var; void main() { vec4 c1 = texture2D( g_texture, tex_coord_var ); vec4 c2 = texture2D( g_texture2, tex_coord_var ); vec4 c3 = texture2D( g_texture3, tex_coord_var ); gl_FragColor = ( c1 + c2 + c3 ) * g_color; } " gl_prog = gl_new_prog( gl_vshader, gl_fshader )
Получить значение параметра состояния в целочисленном формате. Полный аналог OpenGL функции glGetIntegerv().
Можно вызывать только внутри кода, заданного set_gl_callback().
Параметры ( pname )
Получить значение параметра состояния в формате числа с плавающей точкой. Полный аналог OpenGL функции glGetFloatv().
Можно вызывать только внутри кода, заданного set_gl_callback().
Параметры ( pname )
Версия Pixilang с поддержкой OpenGL может использовать вершинные (vertex) и фрагментные (fragment) шейдеры, которые описываются специальным языком (основанном на ANSI C) OpenGL ES Shading Language 1.0 (GLSL ES).
Вершинный шейдер обрабатывает параметры вершин многогранников (из которых построены все объекты в OpenGL): координаты, текстурные координаты, цвет и т.д.
Фрагментный шейдер обрабатывает цвет каждого пикселя во время рисования многогранника.
В вершинных шейдерах используйте следующие правила (для получения максимальной кросс-платформенности в Pixilang):
В фрагментных шейдерах используйте следующие правила
Создать новую GLSL программу - контейнер, совмещающий вершинный и фрагментный шейдеры. Эту функцию можно вызывать в любом месте Pixilang-кода. Непосредственная сборка программы (компиляция шейдеров и их объединение) будет происходить позже, когда вы передадите этот контейнер в функцию gl_use_prog().
Параметры ( vertex_shader, fragment_shader )
Возвращаемое значение: ID контейнера с GLSL программой или отрицательное значение в случае ошибки; (контейнер нужно удалять вручную при помощи remove()).
Использовать GLSL программу, созданную ранее при помощи gl_new_prog().
Если программа используется впервые, то будет произведена компиляция и объединение шейдеров, находящихся внутри этой программы.
Можно вызывать только внутри кода, заданного set_gl_callback().
Параметры ( prog )
Pixilang может передавать данные в GLSL переменные с квалификатором uniform. Uniform-переменные являются глобальными и могут использоваться как в вершинных, так и во фрагментных шейдерах. Функции типа gl_uniform() используются для передачи значений в эти переменные.
Можно вызывать только внутри кода, заданного set_gl_callback().
Через gl_uniform() можно также менять содержимое массивов в шейдерах, если использовать эту функцию следующим образом: gl_uniform( var_location, src_container, vector_size, first_vector, count ), где count - это количество векторов, которые будут записаны в массив из контейнера src_container.
Параметры ( var_location, v0, v1, v2, v3 )
Примеры
gl_use_prog( gl_prog ) //Используем GLSL программу gl_prog gl_uniform( gl_prog.g_time, get_timer( 0 ) ) //Задаем значение uniform-переменной g_time
Функция аналогичная gl_uniform(), но для работы с матрицами.
Можно вызывать только внутри кода, заданного set_gl_callback().
Параметры ( size, matrix_location, transpose, matrix )
Примеры
gl_use_prog( gl_prog ) //Использовать GLSL программу gl_prog gl_uniform( 4, gl_prog.g_mat, 0, source_matrix ) //Сохранить данные из контейнера source_matrix в матрицу g_mat
Запаковать текущее содержимое контейнера в кадр. Номер кадра должен быть в свойстве “frame” этого контейнера.
Параметры ( pixi )
Распаковать кадр в текущее содержимое контейнера. Номер кадра должен быть в свойстве “frame” этого контейнера.
Параметры ( pixi )
Создать анимацию - скрытую область контейнера, в которой будут располагаться запакованные кадры.
Параметры ( pixi )
Удалить анимацию в указанном контейнере.
Параметры ( pixi )
Продублировать текущий кадр в указанном контейнере. Номер кадра должен быть в свойстве “frame” этого контейнера.
Параметры ( pixi )
Удалить текущий кадр в указанном контейнере. Номер кадра должен быть в свойстве “frame” этого контейнера.
Параметры ( pixi )
Включить режим авто-проигрывания для указанного контейнера. В этом режиме нужные кадры будут распаковываться автоматически во время вызова функции pixi().
Параметры ( pixi )
Выключить режим авто-проигрывания для указанного контейнера.
Параметры ( pixi )
Трансформация системы координат.
Сброс (очистка текущей матрицы трансформации).
Параметры ( angle, x, y, z )
Параметры ( x, y, z )
Параметры ( x, y, z )
Сохранить текущую матрицу трансформации в стек.
Загрузить последнюю сохраненную матрицу трансформации из стека.
Получить текущую матрицу трансформации (4×4 FLOAT).
Параметры ( matrix_container )
Установить текущую матрицу трансформации (4×4 FLOAT).
Параметры ( matrix_container )
Умножить текущую матрицу трансформации на matrix_container.
Параметры ( matrix_container )
Пересчитать координаты точки с учетом текущей матрицы трансформации.
Параметры ( point_coordinates )
Задать функцию, которая будет генерировать звуковой поток.
Параметры ( callback, userdata, sample_rate, format, channels, flags )
Примеры
fn audio_callback( $stream, $userdata, $channels, $frames, $time ) { generator( OP_SIN, $channels[ 0 ], 0, 32767 / 2, 0.1, 0 ) //Левый канал generator( OP_SIN, $channels[ 1 ], 0, 32767 / 2, 0.1, 0 ) //Правый канал ret(1) //возвращаемые значения: // 0 - тишина, выходные каналы $channels не заполнены; // 1 - выходные каналы $channels заполнены (как в примере выше); // 2 - тишина, выходные каналы $channels заполнены нулями (или знач. близкими к нулю). } //Запустить звук: set_audio_callback( audio_callback, 0, 22050, INT16, 2, AUDIO_FLAG_INTERP2 )
//Остановить звук: set_audio_callback( -1 )
Получить локальную или глобальную частоту дискретизации.
Параметры ( source )
Возвращаемое значение: частота дискретизации в Гц.
Параметры ( disable_enable )
Параметры ( note, finetune )
Возвращаемое значение: частота ноты в Герцах.
Параметры ( client_name )
Возвращаемое значение: ID клиента или отрицательное значение в случае ошибки.
Параметры ( client_id )
Параметры ( client_id, device_num, flags )
Возвращаемое значение: имя устройства под номером device_num или -1, если нет такого устройства.
Параметры ( client_id, port_name, device_name, flags )
Возвращаемое значение: номер открытого порта (port ID) или отрицательное значение в случае ошибки.
Параметры ( client_id, port_id )
Параметры ( client_id, port_id )
Параметры ( client_id, port_id, data_cont )
Возвращаемое значение: размер (в байтах) текущего MIDI события.
Параметры ( client_id, port_id )
Возвращаемое значение: время (в системных тиках) текущего MIDI события
Перейти на следующее сообщения в очереди.
Параметры ( client_id, port_id )
Параметры ( client_id, port_id, data_cont, data_size, t )
Запустить таймер.
Параметры ( timer_num )
Получить значение таймера в миллисекундах.
Параметры ( timer_num )
Возвращаемое значение: 32-битное значение таймера в миллисекундах.
Получить значение системного 32-битного таймера высокого разрешения. Единица измерения - 1 тик.
Получить количество системных тиков в секунду.
Заснуть на указанный промежуток времени.
Параметры ( delay )
Получить очередное событие от системы.
Возвращаемое значение: 0 - нет новых событий; 1 - очередное событие получено, и оно находится в контейнере EVT.
Установить поведение программы при получении события EVT_QUIT.
Параметры ( action )
Возможные значения параметра action:
Создать новый поток выполнения, в котором сразу после создания будет запущена функция thread_function( $thread_id, $user_data )
Параметры ( thread_function, user_data, flags_optional )
Возвращаемое значение: ID потока или -1 в случае ошибки.
Примеры
fn thread_body( $thread_id, $user_data ) { printf( "Thread code\n" ) } thread_id = thread_create( thread_body, 0 ) //Создаем новый поток err = thread_destroy( thread_id, 1000 ) //Ждем до 1000 миллисекунд, пока поток завершится if err == 0 { printf( "Поток успешно завершен и закрыт\n" ) } if err == 1 { printf( "Тайм-аут. Стоит попробовать еще раз\n" ) } if err == 2 { printf( "Возникла ошибка в функции thread_destroy()\n" ) }
Закрыть поток выполнения.
Параметры ( thread_id, timeout_ms )
Возвращаемое значение:
Примеры
new_mutex = mutex_create() mutex_lock( new_mutex ) mutex_unlock( new_mutex ) mutex_destroy( new_mutex )
acos( x ); acosh( x ); asin( x ); asinh( x ); atan( x ); atanh( x ); ceil( x ); cos( x ); cosh( x ); exp( x ); exp2( x ); expm1( x ); abs( x ); floor( x ); mod( x, y ); log( x ); log2( x ); log10( x ); pow( base, exp ); sin( x ); sinh( x ); sqrt( x ); tan( x ); tanh( x );
rand() - получить случайное число в диапазоне от 0 до 32767; rand_seed( seed ) - установить позицию (состояние) генератора случайных чисел.
Примечание: функции обработки данных не работают с контейнерами динамического типа.
Выполнить операцию обработки данных. Операнды: - контейнер C1; - числовое значение N.
Для каждого элемента контейнера C1 будет выполняться следующее:
C1[ i ] = C1[ i ] OP N, где i - номер элемента; OP - выбранная операция.
Параметры ( opcode, C1, N ) - для всего контейнера С1
Параметры ( opcode, C1, N, x, xsize ) - область задана в 1D координатах
Параметры ( opcode, C1, N, x, y, xsize, ysize ) - область задана в 2D координатах
* opcode - код операции; * C1 - контейнер, над которым будет производиться выбранная операция; результат будет помещен в него же; * N - числовое значение; * x,y,xsize,ysize - регион, в котором будет выполняться операция.
Примеры
//Прибавить число 32 к каждому элементу контейнера img: op_cn( OP_ADD, img, 32 ) //Прибавить число 32 к элементам 128...256: op_cn( OP_ADD, img, 32, 128, 128 ) //Прибавить число 32 к элементам в регионе (8,8,32,32): op_cn( OP_ADD, img, 32, 8, 8, 32, 32 )
Выполнить операцию обработки данных. Операнды: - контейнер C1; - контейнер C2.
Для каждого элемента контейнера C1 будет выполняться следующее:
C1[ i ] = C1[ i ] OP C2[ i ], где i - номер элемента; OP - выбранная операция.
Параметры ( opcode, C1, C2 ) - для всей области контейнера С1
Параметры ( opcode, C1, C2, dest_x, src_x, xsize ) - область задана в 1D координатах
Параметры ( opcode, C1, C2, dest_x, dest_y, src_x, src_y, xsize, ysize ) - область задана в 2D координатах
Выполнить операцию обработки данных. Операнды: - контейнер C1; - контейнер C2; - числовое значение N.
Для каждого элемента контейнера C1 будет выполняться следующее:
C1[ i ] = C1[ i ] OP C2[ i ] OP2 N, где i - номер элемента; OP - выбранная операция; OP2 - дополнительная операция.
Параметры ( opcode, C1, C2, N ) - для всей области контейнера C1
Параметры ( opcode, C1, C2, N, dest_x, src_x, xsize ) - область задана в 1D координатах
Параметры ( opcode, C1, C2, N, dest_x, dest_y, src_x, src_y, xsize, ysize ) - область задана в 2D координатах
Генератор сигнала.
Параметры ( opcode, pixi, phase, amplitude, delta_x, delta_y, x, y, xsize, ysize )
Примеры
//Сгенерировать синусоиду в контейнер img: generator( OP_SIN, img, 0, 1, 0.1, 0.1 ) //Сгенерировать синусоиду по более быстрому, но менее точному алгоритму: generator( OP_SIN8, img, 0, 1, 0.1, 0.1 ) //Сгенерировать синусоиду в элементы 8...128 контейнера img: generator( OP_SIN, img, 0, 1, 0.1, 0.1, 8, 120 ) //Сгенерировать синусоиду в регион (8,8,32,32) контейнера img: generator( OP_SIN, img, 0, 1, 0.1, 0.1, 8, 8, 32, 32 )
Очень быстрый многоканальный сэмплер (набор из неограниченного количества примитивных генераторов), где сэмпл имеет фиксированный размер (32768 отсчетов) и всегда зациклен (loop).
Параметры ( dest, dest_offset, dest_length, table, amp, amp_delta, pos, pos_delta, gen_offset, gen_step, gen_count )
Возвращаемое значение: 0 в случае успешного завершения.
Параметры ( sample_info )
Примеры
sample_data = new( 256, 1, INT16 ) //создаем 16-битный сэмпл sample_info = new( SMP_INFO_SIZE, 1, INT32 ) //создаем контейнер для сэмплера clean( sample_info ) sample_info[ SMP_DEST ] = buffer //Контейнер, в который будем записывать sample_info[ SMP_DEST_OFF ] = 0 //Смещение в контейнере sample_info[ SMP_DEST_LEN ] = 256 //Размер области, которую будем заполнять sample_info[ SMP_SRC ] = sample_data sample_info[ SMP_SRC_OFF_H ] = 0 //Смещение сэмпла (левая часть числа с фиксированной точкой) sample_info[ SMP_SRC_OFF_L ] = 0 //Смещение сэмпла (правая часть числа с фиксированной точкой, от 0 до 65535) sample_info[ SMP_SRC_SIZE ] = 0 //Размер сэмпла (0 - весь сэмпл целиком) sample_info[ SMP_LOOP ] = 0 //Начало лупа (повторяемого участка сэмпла) sample_info[ SMP_LOOP_LEN ] = 128 //Длина лупа (или 0, если луп отключен) sample_info[ SMP_VOL1 ] = 0 //Начальная громкость sample_info[ SMP_VOL2 ] = 32768 //Конечная громкость (32768 = 1.0) sample_info[ SMP_DELTA ] = ( 1 << 16 ) //Дельта (скорость проигрывания); fixed point (real_value * 65536) sample_info[ SMP_FLAGS ] = SMP_FLAG_INTERP4 | SMP_FLAG_PINGPONG //Кубическая сплайновая интерполяция и луп в режиме ping-pong sampler( sample_info ) //Записываем сэмпл с выбранными параметрами в контейнер buffer
Линейная интерполяция (по двум точкам) усиления и DC-смещения в выделенной области контейнера. Без ограничения (защиты от переполнения).
Параметры ( data_cont, v1, v2, offset, size, dc_offset1, dc_offset2 )
Параметры ( container, val1, val2, val3, val4, x, y, xsize, ysize, x_step, y_step )
Выполнить быстрое преобразование Фурье.
Параметры ( inverse, im, re, size )
Создать новый фильтр, в основе которого следующая функция:
output[ n ] = ( a[ 0 ] * input[ n ] + a[ 1 ] * input[ n - 1 ] + ... + a[ a_count - 1 ] * input[ n - a_count - 1 ] + b[ 0 ] * output[ n - 1 ] + ... + b[ b_count - 1 ] * output[ n - b_count - 1 ] ) >> rshift;
Параметры ( flags_for_future_use )
Возвращаемое значение: ID нового контейнера, в котором находятся данные фильтра.
Параметры ( filter )
Параметры ( filter )
Параметры ( filter, a, b, rshift, flags )
Возвращаемое значение: 0 в случае успешной инициализации фильтра.
Применить фильтр.
Параметры ( filter, output, input, flags, offset, size )
Возвращаемое значение: 0 в случае успешного применения фильтра.
Подстановка значений контейнера. Типы контейнеров dest и values должны быть одинаковыми. Для каждого элемента контейнера dest будет выполняться следующее действие: dest[ i ] = values[ (unsigned)src[ i ] ]
Параметры ( dest, src, values, dest_offset, src_offset, size )
Примеры
//Преобразовать 8-битную картинку в формат пикселей текущего экрана: //src - это, например, контейнер основного экрана; //img8 - контейнер с 8-битной картинкой (256 цветов); //palette - контейнер с палитрой из 256 цветов; replace_values( scr, img8, palette )
Скопировать (и растянуть/сжать, если нужно) указанную область контейнера src в указанную область контейнера dest.
Параметры ( dest, src, flags, dest_x, dest_y, dest_rect_xsize, dest_rect_ysize, src_x, src_y, src_rect_xsize, src_rect_ysize )
Открыть диалоговое окно выбора файла.
Параметры ( dialog_name, mask, id, default_name )
Возвращаемое значение: ID контейнера с именем выбранного файла или -1, если файл не выбран; (контейнер нужно удалять вручную при помощи remove()).
Открыть диалоговое окно с глобальными настройками Pixilang.
Открыть указанный URL в браузере.
Параметры ( url_string )
Открыть динамически подключаемую библиотеку (например, .DLL для Windows или .SO для Linux).
Параметры ( lib_file_name )
Возвращаемое значение: ID открытой библиотеки или -1 в случае ошибки.
Примеры
//Например, мы имеем какую-то C функцию int show_info( int x, int y, void* data ) //в библиотеке mylib.dll. //Вызовем ее из Pixilang: dl = dlopen( "mylib.dll" ) //Открываем библиотеку if dl >= 0 { f = dlsym( dl, "show_info", "iip" ) //Получаем ID функции show_info() // "iip" - int int pointer if f >= 0 { retval = dlcall( dl, f, 1, 2, "blahblah" ) //вызываем функцию show_info() с параметрами 1, 2, "blahblah" } dlclose( dl ) //Закрываем библиотеку }
Закрыть динамически подключаемую библиотеку.
Параметры ( lib_id )
Получить ID символа (функции или переменной) из динамической библиотеки.
Параметры ( lib_id, symbol_name, format, calling_convention )
Возвращаемое значение: ID символа или -1 в случае ошибки.
Вызвать функцию из динамической библиотеки.
Параметры ( lib_id, symbol_id, optional_function_parameters )
Выполнить системную команду.
Параметры ( command )
Примеры
//Удаляем файл в Unix-совместимой ОС: system( "rm /tmp/data.txt" )
Функция возвращает количество аргументов, переданных программе.
Функция возвращает ID контейнера со строкой, в которой записан аргумент под номером n.
Параметры ( n )
Примеры
if argc() >= 4 { a = argv( 3 ) remove( a ) }
Выйти из Pixilang.
Параметры ( exit_code )
Примеры
exit( 4 ) //Выйти с кодом 4