Forth
http://fforum.winglion.ru/

Quark: PIXELZ
http://fforum.winglion.ru/viewtopic.php?f=23&t=1887
Страница 1 из 1

Автор:  Hishnik [ Вс янв 18, 2009 00:19 ]
Заголовок сообщения:  Quark: PIXELZ

Обновление кварка (build 16)

PIXELZ ( x, y, color -- ) - это почти обычный PIXEL. Отличается тем, что предназначен для решения проблемы вывода перекрывающихся объектов методом грубой силы. С этим словом связаны следующие переменные (VARIABLE)
OBJECT-ID[] - указатель на массив 2048*2048 4-байтовых ячеек, хранящих идентификаторы объектов, выведенных в соответствующие пикселы экрана
OBJECT-Z[] - указатель на массив 2048*2048 4-байтовых ячеек, хранящих координаты Z выведенных объектов
OBJECT-ID - идентификатор текущего объекта
OBJECT-Z - координата Z текущего объекта

Слово PIXELZ проверяет координату Z в массиве и сравнивает ее с OBJECT-Z. Вывод пиксела производится только в том случае, если OBJECT-Z больше или равен содержимому массива OBJECT-Z[] для соответствующего пиксела. Если это выполняется, OBJECT-Z заменяет содержимое этой ячейки, а в соответствующую этому пикселу ячейку OBJECT-ID[] записывается OBJECT-ID. Таким образом, узнать, какой именно объект находится в интересующих нас координатах, можно просто чтением массива OBJECT-ID[].

Память для массивов при старте системы не выделяется (для экономии, поскольку требуется по 16 Мб для каждого массива). Это необходимо сделать самостоятельно, записав указатели в OBJECT-Z[] и OBJECT-ID[].

Также добавлены разнообразные указатели на начальные адреса всех используемых стеков и их DEPTH.

Автор:  WingLion [ Вс янв 18, 2009 01:18 ]
Заголовок сообщения: 

Короче говоря, это то, что называется Z-буфер, ведь так?

Автор:  Hishnik [ Вс янв 18, 2009 01:22 ]
Заголовок сообщения: 

WingLion писал(а):
Короче говоря, это то, что называется Z-буфер, ведь так?

Да, его программная реализация. Только кроме Z-буфера, еще "ID-буфер". С прицелом на форт-процессоры, которые смогут при наличии достаточного объема памяти делать сравнение Z аппаратно и выполнять ровно то же, что и кварк на PC.

Автор:  VoidVolker [ Вс янв 18, 2009 11:43 ]
Заголовок сообщения: 

Урра! 8) CF-стек используется при создании конструкций ветвления и циклов без счетчика? А что значат эти слова: CFSTACKADDR CFSTACKID?

Автор:  Hishnik [ Вс янв 18, 2009 12:56 ]
Заголовок сообщения: 

control-flow стек в действительности организован как две независимых области памяти с общим указателем глубины. Один хранит адреса ссылок (вперед или назад, в зависимости от того, что требуется для конкретной конструкции), второй хранит идентификаторы структур управления, чтобы была возможность проверять парность ключевых слов. Например, IF запоминает текущий адрес для последующего вписывания ссылки вперед на стеке с начальным адресом CFSTACKADDR и одновременно кладет на стек CFSTACKID константу 1, чтобы ELSE/THEN могли убедиться, что они закрывают условный оператор, а не что-то еще.

Автор:  Hishnik [ Вс янв 18, 2009 13:03 ]
Заголовок сообщения: 

Да, совсем забыл. Добавлена также "сдвоенная" переменная X0Y0. Это слово указывает на адрес, в котором хранятся смещения по X и по Y соответственно. При выводе точки через PIXELZ эти смещения прибавляются к координатам, снимаемым со стека (например, перемещается панель с множеством объектов, и смещение панели автоматически применяется при отрисовке этих объектов). Кроме того, уже существующий массив, адресуемый через VIEWPORT, также используется для отсечения точек при выводе.

Автор:  VoidVolker [ Вс янв 18, 2009 21:10 ]
Заголовок сообщения: 

Хищник писал(а):
"сдвоенная" переменная X0Y0.

В смысле двойная - две ячейки по 4 байта, или два числа по 2 байта в одной ячейке?

Автор:  Hishnik [ Вс янв 18, 2009 21:46 ]
Заголовок сообщения: 

Две ячейки по 4 байта.

Страница 1 из 1 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/