Описываю задачу вкратце:
Текстура с кнопками сильно большая и поэтому загрузить её втупую и скормить 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.
Данная задача безусловно разовъет ваши кодерские способности, к тому же вы окажете вполне реальную помощь проекту не только поиском багов но и вполне реальным делом
Первый пошел! http://rghost.ru/4628294 - сорцы mainui.dll
сильно не пинайте если не компиляться, хотя должны компилиться.
Все места где побывали мои шаловливые ручонки отмечены комментариями
__________________
Трагическая новость: Пятеро инженеров Casio умерли от смеха, узнав что Samsung анонсировали часы с заявленным временем работы в 25 часов