Автор |
Сообщение |
|
|
Заголовок сообщения: |
|
|
|
Две ячейки по 4 байта.
Две ячейки по 4 байта.
|
|
|
|
Добавлено: Вс янв 18, 2009 21:46 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Хищник писал(а): "сдвоенная" переменная X0Y0.
В смысле двойная - две ячейки по 4 байта, или два числа по 2 байта в одной ячейке?
[quote="Хищник"] "сдвоенная" переменная X0Y0.[/quote]
В смысле двойная - две ячейки по 4 байта, или два числа по 2 байта в одной ячейке?
|
|
|
|
Добавлено: Вс янв 18, 2009 21:10 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Да, совсем забыл. Добавлена также "сдвоенная" переменная X0Y0. Это слово указывает на адрес, в котором хранятся смещения по X и по Y соответственно. При выводе точки через PIXELZ эти смещения прибавляются к координатам, снимаемым со стека (например, перемещается панель с множеством объектов, и смещение панели автоматически применяется при отрисовке этих объектов). Кроме того, уже существующий массив, адресуемый через VIEWPORT, также используется для отсечения точек при выводе.
Да, совсем забыл. Добавлена также "сдвоенная" переменная X0Y0. Это слово указывает на адрес, в котором хранятся смещения по X и по Y соответственно. При выводе точки через PIXELZ эти смещения прибавляются к координатам, снимаемым со стека (например, перемещается панель с множеством объектов, и смещение панели автоматически применяется при отрисовке этих объектов). Кроме того, уже существующий массив, адресуемый через VIEWPORT, также используется для отсечения точек при выводе.
|
|
|
|
Добавлено: Вс янв 18, 2009 13:03 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
control-flow стек в действительности организован как две независимых области памяти с общим указателем глубины. Один хранит адреса ссылок (вперед или назад, в зависимости от того, что требуется для конкретной конструкции), второй хранит идентификаторы структур управления, чтобы была возможность проверять парность ключевых слов. Например, IF запоминает текущий адрес для последующего вписывания ссылки вперед на стеке с начальным адресом CFSTACKADDR и одновременно кладет на стек CFSTACKID константу 1, чтобы ELSE/THEN могли убедиться, что они закрывают условный оператор, а не что-то еще.
control-flow стек в действительности организован как две независимых области памяти с общим указателем глубины. Один хранит адреса ссылок (вперед или назад, в зависимости от того, что требуется для конкретной конструкции), второй хранит идентификаторы структур управления, чтобы была возможность проверять парность ключевых слов. Например, IF запоминает текущий адрес для последующего вписывания ссылки вперед на стеке с начальным адресом CFSTACKADDR и одновременно кладет на стек CFSTACKID константу 1, чтобы ELSE/THEN могли убедиться, что они закрывают условный оператор, а не что-то еще.
|
|
|
|
Добавлено: Вс янв 18, 2009 12:56 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Урра! CF-стек используется при создании конструкций ветвления и циклов без счетчика? А что значат эти слова: CFSTACKADDR CFSTACKID?
Урра! 8) CF-стек используется при создании конструкций ветвления и циклов без счетчика? А что значат эти слова: [b]CFSTACKADDR CFSTACKID[/b]?
|
|
|
|
Добавлено: Вс янв 18, 2009 11:43 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
WingLion писал(а): Короче говоря, это то, что называется Z-буфер, ведь так?
Да, его программная реализация. Только кроме Z-буфера, еще "ID-буфер". С прицелом на форт-процессоры, которые смогут при наличии достаточного объема памяти делать сравнение Z аппаратно и выполнять ровно то же, что и кварк на PC.
[quote="WingLion"]Короче говоря, это то, что называется Z-буфер, ведь так?[/quote]
Да, его программная реализация. Только кроме Z-буфера, еще "ID-буфер". С прицелом на форт-процессоры, которые смогут при наличии достаточного объема памяти делать сравнение Z аппаратно и выполнять ровно то же, что и кварк на PC.
|
|
|
|
Добавлено: Вс янв 18, 2009 01:22 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Короче говоря, это то, что называется Z-буфер, ведь так?
Короче говоря, это то, что называется Z-буфер, ведь так?
|
|
|
|
Добавлено: Вс янв 18, 2009 01:18 |
|
|
|
|
|
Заголовок сообщения: |
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.
Обновление кварка (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.
|
|
|
|
Добавлено: Вс янв 18, 2009 00:19 |
|
|
|
|