![]() |
GifPlayer - DX9 враппер для либы gifdec. Использовать его можно в любой dx9 игре, а не только в GTA.
КлассGifPlayer explicit GifPlayer( const char *file_name );Конструктор. В конструкторе из файла загружаются фреймы. Для каждого фрейма аллоцируется отдельная память, что бы не считывать файл повторно.void Initialize( class IDirect3DDevice9 *pD3Ddev ) noexcept;Инициализация текстур DX9. Должно каждый раз вызываться из OnResetDevice, и 1 раз после создания объектаvoid Invalidate() noexcept;Удаление текстур DX9 из видеопамяти. Должно каждый раз вызываться из OnLostDeviceclass IDirect3DTexture9 *ProcessPlay( eFrameOrder order ) const noexcept;Функция проигрывания gif-анимации. Сама функция ничего не рисует, она возвращает DX9 текстуру для рендераvoid ResetLoop() const noexcept;Сброс циклов воспроизведения, для воспроизведения анимации с началаbool IsLoopEnded() const noexcept;Проверка, закончилась ли анимация.bool IsDrawBg() const noexcept;Проверка, рисуется ли для этой gif задний план. По умолчанию рисовать ли задник определяется в конструктореvoid ToggleBg( bool state ) noexcept;Переключить отрисовку заднего плана.void ToggleBgNoUpdate( bool state ) noexcept;То же самое, что и выше, но текстуры не изменятся, пока не наступит событие OnResetDevice или не будет вызвано принудительное обновлениеvoid Update() noexcept;Принудительное обновление текстур анимацииuint16_t GetWidth() const noexcept;Ширина изображения GIFuint16_t GetHeight() const noexcept;Высота изображения GIF Внутренние типы eFrameOrder kRenderAllFramesВсе кадры анимации выводятся по очереди, даже если с момента прошлого кадра прошло времени больше, чем должен выводиться следующий кадрkSkipTimedOutFramesКадры, которые не успевают вывестись вовремя будут проигнорированы frame_t Это внутренняя структура для хранения кадра анимации Пример использования Пример основан на моемшаблоне аси плагинов Полный код примера: https://gitlab.com/prime-hack/samp/plugins/gifrender C++: Код:
#include "main.h"Здесь на 13 строке создается объект плеера для проигрывания файла anim.gif, после чего в потоке рендера, на 38 строке, я получаю от плеера текстуру для рендера и чуть ниже рисую ее на экране. При изменении разрешения игры или сворачивании/разворачивании окна, вызываются события onLostDevice и onResetDevice, в которых обновляются текстуры плеера (строки 46 и 51). Без обновления текстур игра будет зависать при изменении разрешения и сворачивании/разворачивании окна Исходникки плеера:https://gitlab.com/SR_team/gifplayer В приложении архив со скомпилированным примером и gif-файлом |
С ImGui можно использовать так:
C++: Код:
ImGuiЭто создаст в окне анимированное изображение размером 180*200. Вместо 180*200 можно использовать Код:
player->GetWidth()Код:
player->GetHeight() |
эхх, появилась бы эта тема год назад :(
|
ну я изсиняюсь, всегда почти оффтоп пишу, но правда я любитель таких фишек, ответь пожалуйста. как сделать винду выглядеть так, или что это ваще? яблоко что ли?
|
Цитата:
|
Цитата:
Собственно все. В таком конфиге SAMP работает отлично. Для остальных программ использую Wine 6.12 потому что там WinAPI больше совпадает с виндой. |
| Время: 02:26 |