HLFX.Ru Forum
Показать все 6 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Xash3D (https://hlfx.ru/forum/forumdisplay.php?forumid=14)
-- Надо прикрутить кнопки btns_main.bmp в меню (https://hlfx.ru/forum/showthread.php?threadid=2670)


Отправлено Дядя Миша 03-03-2011 в 17:45:

Надо прикрутить кнопки btns_main.bmp в меню

Описываю задачу вкратце:
Текстура с кнопками сильно большая и поэтому загрузить её втупую и скормить OpenGL не получится. Точнее говоря на современных видимокартах это конечно прокатит, но на старых - бида-бида.
В самом хл эта картинка кормилась 2D-ускорителю, которому пофиг на размер текстур, но в ксаше такое не прокатит, поскольку меню там рисуется в 3д-режиме.
Поэтому картинку такого размера надлежит аккуратно разрезать на множество меленьких текстурок.
Алгоритм таков: пишем прямо в меню загрузчик bmp (в принципе я могу вывести из движка готовый загрузчик картинок, но с собственным будет удобнее). Далее мы режем картинку по вертикали через каждые 80 пикселей (может больше, может меньше, я навскидку). Почему через 80?
Очень просто. Нам не требуется каждую кнопочку сохранять в отдельную текстуру, достаточно сохранить туда три вида одной и той же кнопки: неактивную, мышко-наведенную и нажатую. В дальнейшем мы сможем определить расстояния между кнопками и кормить полученные результаты функции PIC_DrawAdditive через wrect_t. Это достаточно просто. Если некоторым товарищам этот способ покажется недостаточно оптимальным, то они могут замутить атлас текстур, на манер SCRAP_AllocBlock из первокваки. Это будет сделать немного сложнее, но безусловно кол-во текстур значительно уменьшится.
Далее - создаем новый тип кнопки (просто для удобства) на основе QMTYPE_BITMAP. Как сделать, чтобы кнопка реагировала на наведение мышкой можно подглядеть в кнопках Minimize и Quit.
Далее - заменить все текстовые кнопки на на наши новые.
И в заключение - пару слов о том, как загрузить наши порезанные текстуры в OpenGL. Для этого в меню есть хитрая функция
HIMAGE (*pfnPIC_Load)( const char *szPicName, const byte *ucRawImage, long ulRawImageSize );
Которая, как вы видите может принимать картинки прямо из памяти.
Суть такова: выделяем статичный буффер 156х80 пикселей RGB + хидер.
bmp-хидер берем прямо из btns_main делаем его копию и меняем biHeight на 80 или -80, что-то такое. Вниз дописываем кусочек картинки с кнопками, в названии файла пишем что-то, типа #btns_main1.bmp и кормим ксашу. Если всё прошло отлично, то вы сможете увидеть вашу загруженную текстуру при помощи команды r_showtextures 2.
Данная задача безусловно разовъет ваши кодерские способности, к тому же вы окажете вполне реальную помощь проекту не только поиском багов но и вполне реальным делом

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено CrazyRussian 04-03-2011 в 18:40:

Первый пошел!
http://rghost.ru/4628294 - сорцы mainui.dll
сильно не пинайте если не компиляться, хотя должны компилиться.
Все места где побывали мои шаловливые ручонки отмечены комментариями

__________________
Трагическая новость: Пятеро инженеров Casio умерли от смеха, узнав что Samsung анонсировали часы с заявленным временем работы в 25 часов


Отправлено GuNsHiP 05-03-2011 в 11:32:

А кнопочки работают!

__________________
Gunship Stuff


Отправлено Дядя Миша 06-03-2011 в 10:58:

Скоро будут еще более другие кнопки =)

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено SiPlus 29-03-2011 в 17:30:

А под WinAPI меню не проще переделать? Или вы там HL кроссплатформенным делаете?


Отправлено Дядя Миша 29-03-2011 в 17:45:

SiPlus ну ты бы еще года два для верности выждал. Чтоб уж наверняка.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Временная зона GMT. Текущее время 18:38.
Показать все 6 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024