Графика 24 бит, И возможно - создание игры... |
Графика 24 бит, И возможно - создание игры... |
Dark |
12.11.2004 19:35
Сообщение
#1
|
Знаток Группа: Пользователи Сообщений: 408 Пол: Мужской Репутация: 3 |
Приветствую вас, тут я буду рассказывать об основах программирования графики 24 бит. Возможно, я также сподвигнусь написать игрушку, пока что - первоначально в планах наподобии King Bounty =) [в 24 битах... круто =) ]
-------------------- - Где я?
- Во тьме. - В какой тьме? - Во тьме твоего мозга. |
Dark |
13.11.2004 1:46
Сообщение
#2
|
Знаток Группа: Пользователи Сообщений: 408 Пол: Мужской Репутация: 3 |
Введение.
Видеорежимы direct color были введены начиная со стандарта VESA 1.2 Главное отличие этих режимов от режимов VESA 256 цветов - это то, что они не используют палитру. Это избавляет от манипуляций с регистрами видеокарточки, и при добавлении новых рисунков на экран можно не бояться порчи изображения в целом. Код точки 24 бита занимает 32 бита, кроме базовых цветов (RGB) в него входит пустой байт Разряды 24-31 16-23 9-15 0-8 ------------------------------------------------------------------------------------------- |резервный| Красный | Зеленый | Синий | | байт | цвет | цвет | цвет | ------------------------------------------------------------------------------------------- Стоит напомнить =), что в силу архитектуры Intel двойное слово хранится задом наперед - т.е. 1вым будет синий цвет, и т.д. Недостатки режима 24 бита: 1. трехбайтный код не обрабатывается командами процессора, поэтому приходиться разбивать на 2 действия - вывод байта и вывод слова. 2. Размер сегмента кратен двойке - поэтому в него не помещается целое количество трехбайтовых точек. У одной из них [первой или последней] будет искажение - т.е. надо проверять сколько до конца сегмента надеюсь =) понятно... -------------------- - Где я?
- Во тьме. - В какой тьме? - Во тьме твоего мозга. |
Dark |
6.12.2004 10:49
Сообщение
#3
|
Знаток Группа: Пользователи Сообщений: 408 Пол: Мужской Репутация: 3 |
Все программы, которые я пишу, я буду писать либо в Turbo Assembler, либо в TP
Первым делом - установка режима. VESA режимы, котрые нам подходят [24/32 bit] Код режима Разрешение экрана размер строки(в байтах) 10Fh 320*200 960/1280 112h 640*480 1290/2560 115р 800*600 2400/3200 118h 1024*768 3072/4096 11Bh 1280*1024 3840/5120 Я все время буду работать с режимом 800*600. Ну начнем мы с информационных функций: 1. Запрос общих данных 4F00h Входные данные ES:DI адрес(указатель) массива на 256 байт, который будет заполняться информацией о видеокарте. Первые 20 байт заполняются следующими данными: СМЕЩЕНИЕ ПО МАССИВУ РАЗМЕР(байт) ДАННЫЕ 00h 4 'VESA' 04h 2 версия VESA 06h 4 адрес строки фирмы-изготовителя 0Ah 4 СпецСвойства 0Eh 4 Адрес начала списка информации о поддерживаемых режимах 12H 2 Объем памяти видеокарточки (в блоках по 64 Кб) - Версия VESA, указывается номер версии и ее редакция. Записана в виде 0102 для VESA 1.2 - Строка фирмы-изготовителя. Коды формата ASII, строка заканчивется 0 (стандарт ASIIZ) - Спецсвойста я описывать не буду, либо опишу потом - они пока что интереса не представляют. - Признаком конца списка режимов является код 0FFFFh Анализ Спецсвойст и списка видеорежимов не очень целесообразен. Остальные байты в резерве. простейшая програмка, выводящая всю информацию, получаемую этим прерыванием:
Обратите внимание - первая строка - в виде билеберды потому что функции BIOS и DOS работают ТОЛЬКО с ASCII строками, поэтому мне пришлось написать дополнительно функцию, преобразующую слово в BCD слово, а затем BCD слово в символ. Если кто то знает более легкий путь, пусть сообщит сюда, мне. Следующая фаза - получение информации о режиме. О ней в другом выпуске. Мне интересны любые вопросы и коментарии, которые вы можете предложить. |Пытался запихнуть в архив - не удалось, форум не хочет его грузить =( попытаюсь ночью -------------------- - Где я?
- Во тьме. - В какой тьме? - Во тьме твоего мозга. |
FreeMan |
6.12.2004 18:09
Сообщение
#4
|
- Группа: Пользователи Сообщений: 480 Пол: Мужской Репутация: 4 |
Неоптимально.... Посмотреть хотя бы на то, что везде через es работа. Это, вроде, + такт и + байт(не проверял). надо через ds. А так не присматривался. Посмотрю, тогда напишу больше.
-------------------- бб
|
Dark |
7.12.2004 2:46
Сообщение
#5
|
Знаток Группа: Пользователи Сообщений: 408 Пол: Мужской Репутация: 3 |
Если бы пригляделся - увидел бы что ds используется одновременно с es
или ты про что то другое? -------------------- - Где я?
- Во тьме. - В какой тьме? - Во тьме твоего мозга. |
FreeMan |
8.12.2004 17:40
Сообщение
#6
|
- Группа: Пользователи Сообщений: 480 Пол: Мужской Репутация: 4 |
Так блин я ж и говорю. замени lodsw, поставь через es, а всё остальное через ds imho будет оптимальнее + у тебя она что в tiny не влазит? пихай все переменные в секцию кода.
используй неиспользуемую часть переменной buffer. -------------------- бб
|
Dark |
9.12.2004 2:14
Сообщение
#7
|
Знаток Группа: Пользователи Сообщений: 408 Пол: Мужской Репутация: 3 |
просто разные подходы к программированию
Я ж не учу оптимизированности... Хотя, ты прав, она не помешает Но иногда - оптимизированность мешает пониманию... -------------------- - Где я?
- Во тьме. - В какой тьме? - Во тьме твоего мозга. |
Текстовая версия | 9.11.2024 14:05 |