Исходник GifPlayerLua

SR_team

like pancake
Автор темы
BH Team
4,707
6,347
GifPlayerLua - враппер для DX9 враппера для либы gifdec. Использовать его можно только в GTA SA, т.к. захардкожены хуки для событий OnLostDevice и OnResetDevice.


Класс GifPlayer
new( string )Конструктор. В конструкторе из файла загружаются фреймы. Для каждого фрейма аллоцируется отдельная память, что бы не считывать файл повторно.
ProcessPlayФункция проигрывания gif-анимации. Сама функция ничего не рисует, она возвращает DX9 текстуру для рендера
ResetLoopСброс циклов воспроизведения, для воспроизведения анимации с начала
IsLoopEndedПроверка, закончилась ли анимация.
IsDrawBgПроверка, рисуется ли для этой gif задний план. По умолчанию рисовать ли задник определяется в конструкторе
ToggleBg( bool )Переключить отрисовку заднего плана.
ToggleBgNoUpdate( bool )То же самое, что и выше, но текстуры не изменятся, пока не наступит событие OnResetDevice или не будет вызвано принудительное обновление
UpdateПринудительное обновление текстур анимации
GetWidthШирина изображения GIF
GetHeightВысота изображения GIF

Пример использования
Абстрактный пример написанный на коленке. Он в приведенном виде не работает и вообще lua-враппер не тестировался
Lua:
local gif = require 'GifPlayerLua'
local player = gif.GifPlayer.new("anim.gif")

function event:onDraw()
    local dx9tex = player:ProcessPlay()
    local x = 0
    local y = 0
    drawTexture(dx9tex, x, y, player:GetWidth(), player:GetHeight())

    if player:IsLoopEnded() then
        player:ResetLoop()
    end
end

Здесь event:onDraw - вымышленное событие, которое вызывается в момент рендера изображения на экране, а drawTexture - вымышленная функция для рисования dx9 текстур.
При изменении разрешения игры или сворачивании/разворачивании окна плагин сам вызывает методы Invalidate и Initialize при наступлении событий onLostDevice и onResetDevice, так что в lua даже нет этих функций.






Исходники плеера: https://gitlab.com/SR_team/gifplayerlua

В приложении скомпилированная библиотека для муна
 

Вложения

  • GifPlayerLua.zip
    52.2 KB · Просмотры: 104

SR_team

like pancake
Автор темы
BH Team
4,707
6,347
Ах да, ImGui. Примерно так будет выглядеть, если lua'шный ImGui поддерживает Image:
Lua:
ImGui.Image(player:ProcessPlay(), 180, 120)
 
  • Нравится
Реакции: AnWu

Cosmo

Известный
Друг
644
2,581
Вылетает игра при подключении библиотеки. Что делать?
Я так понимаю одной твоей библиотеки мало?
 
Последнее редактирование:

SR_team

like pancake
Автор темы
BH Team
4,707
6,347
Вылетает игра при подключении библиотеки. Что делать?
Я так понимаю одной твоей библиотеки мало?
Чекни с этим. Создание не будет работать - удалил регистрацию класса. Просто проверб грузится ли либа
 

Вложения

  • GifPlayerLua_1.zip
    619.4 KB · Просмотры: 7

SR_team

like pancake
Автор темы
BH Team
4,707
6,347
Нет, так же вылетает при открытии игры
Карш-лог если надо: http://crash.sr.team/index.php?uid=...-9cfa8ef2-480b7fe6-eac613bd-10a8f5af-bb0e3abb
Не смотрел второй краш, но первый был в lua_pushvalue. Давай попробуем тогда еще и хуки оффнуть, что бы либа чисто версию о себе возвращала и более ничего не умела
 

Вложения

  • GifPlayerLua_2.zip
    611.8 KB · Просмотры: 5

SR_team

like pancake
Автор темы
BH Team
4,707
6,347
Ну тогда я не ебу, почему это не работает
1626828098971.png



А это работает
1626828121873.png
 

SR_team

like pancake
Автор темы
BH Team
4,707
6,347
предположу что ABI отличается, тогда враппер надо скомпилировать в VS