Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Gif player #2833

Open
wants to merge 99 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
99 commits
Select commit Hold shift + click to select a range
c259f7d
Add new display type `DISPLAY_GIF`
MobinYengejehi Dec 16, 2022
e762bf2
Add `Gif` entity class
MobinYengejehi Dec 16, 2022
562b87f
Load Gif functions on startup
MobinYengejehi Dec 16, 2022
45c77e0
Load Gif class on startup
MobinYengejehi Dec 16, 2022
a363cae
Add `Gif` class type name
MobinYengejehi Dec 16, 2022
66c7f7b
Create CLuaGifDefs.h
MobinYengejehi Dec 16, 2022
5af7c4c
Create CLuaGifDefs.cpp
MobinYengejehi Dec 16, 2022
3f33535
Create CClientGif.h
MobinYengejehi Dec 16, 2022
ce4fcd2
Create CClientGif.cpp
MobinYengejehi Dec 16, 2022
56399ae
Create CClientGifDisplay.h
MobinYengejehi Dec 16, 2022
304b7cd
Create CClientGifDisplay.cpp
MobinYengejehi Dec 16, 2022
ea85709
Add `CreateGif` function
MobinYengejehi Dec 16, 2022
4f21b9a
Add `CreateGif` function
MobinYengejehi Dec 16, 2022
494e4ba
Add `Gif` render item
MobinYengejehi Dec 16, 2022
595f40e
Create CRenderItem.Gif.cpp
MobinYengejehi Dec 16, 2022
6cedb9f
Add `Gif` render item creator
MobinYengejehi Dec 16, 2022
9915258
Add `Gif` render item creator
MobinYengejehi Dec 16, 2022
564029b
check if rect locked to surface
MobinYengejehi Dec 16, 2022
6ed1853
Erase GetTickCount64 and add it inside constructor
MobinYengejehi Dec 16, 2022
0c6a575
Update tick inside constructor
MobinYengejehi Dec 16, 2022
c11b623
Change CClientGif::Register definition
MobinYengejehi Dec 16, 2022
39ca727
Change CClientGif::Register definition
MobinYengejehi Dec 16, 2022
1998dab
Move frames and delays instead of copying them
MobinYengejehi Dec 16, 2022
c661315
Use move inside Gif_Register for frames and delays
MobinYengejehi Dec 16, 2022
9769a55
fix a tiny problem
MobinYengejehi Dec 16, 2022
85a5765
Missing space fixed!
MobinYengejehi Dec 16, 2022
d6ed7fb
Missing space fixed!
MobinYengejehi Dec 16, 2022
a7ae18c
Add const for all getters
MobinYengejehi Dec 16, 2022
ec49804
Fix setting Gif frame count
MobinYengejehi Dec 16, 2022
6b5ea31
Change code style
MobinYengejehi Dec 16, 2022
e33d2c3
Change code style
MobinYengejehi Dec 16, 2022
d9907af
Using vector arrays instead of raw pointer
MobinYengejehi Dec 16, 2022
1870a31
Using vector arrays instread of raw pointers
MobinYengejehi Dec 16, 2022
b4d4aed
Using vector arrays instead of raw pointer
MobinYengejehi Dec 16, 2022
c150dac
Merge branch 'master' into gifPlayer
MobinYengejehi Dec 19, 2022
954ae0b
Merge branch 'master' into gifPlayer
MobinYengejehi Dec 20, 2022
04711f4
Merge branch 'master' into gifPlayer
MobinYengejehi Dec 21, 2022
3c59864
Merge branch 'master' into gifPlayer
MobinYengejehi Dec 24, 2022
0318a90
Merge branch 'master' into gifPlayer
MobinYengejehi Dec 26, 2022
e3e06dc
Remove useless functions
MobinYengejehi Jan 13, 2023
1e5cea0
Remove useless functions (2)
MobinYengejehi Jan 13, 2023
074c82b
Remove useless functions
MobinYengejehi Jan 13, 2023
572e498
Merge branch 'master' into gifPlayer
MobinYengejehi Jan 13, 2023
bbbfcbe
Change `IsGifPlaying` to `GifIsplaying`
MobinYengejehi Jan 14, 2023
2f8eff3
Change `IsGifPlaying` to `GifIsPlaying`
MobinYengejehi Jan 14, 2023
dc4ec82
Add `SetFrame` function
MobinYengejehi Jan 14, 2023
60a3c99
Add `GifSetProperty` & `GifGetProperty`
MobinYengejehi Jan 14, 2023
798c5bc
Add `GifSetProperty` & `GifGetProperty`
MobinYengejehi Jan 14, 2023
515ccfe
Using new lua parser
MobinYengejehi Jan 14, 2023
d1189a4
Using new lua parser
MobinYengejehi Jan 14, 2023
d2729be
Merge branch 'master' into gifPlayer
MobinYengejehi Jan 16, 2023
8952264
Merge branch 'master' into gifPlayer
MobinYengejehi Jan 18, 2023
b08af8a
Merge branch 'master' into gifPlayer
MobinYengejehi Jan 22, 2023
ddd88a7
Merge branch 'master' into gifPlayer
MobinYengejehi Jan 24, 2023
788b2f8
Merge branch 'master' into gifPlayer
MobinYengejehi Feb 6, 2023
c525835
Merge branch 'master' into gifPlayer
MobinYengejehi Feb 7, 2023
e1131f7
Merge branch 'master' into gifPlayer
MobinYengejehi Feb 9, 2023
67f1eb0
Merge branch 'master' into gifPlayer
MobinYengejehi Feb 11, 2023
7d9701f
Merge branch 'master' into gifPlayer
MobinYengejehi Feb 13, 2023
9b7ef2f
Merge branch 'master' into gifPlayer
MobinYengejehi Feb 15, 2023
1e9ff06
Merge branch 'master' into gifPlayer
MobinYengejehi Feb 19, 2023
3eb734f
Merge branch 'master' into gifPlayer
MobinYengejehi Feb 20, 2023
ac0bc9a
Merge branch 'master' into gifPlayer
MobinYengejehi Feb 21, 2023
4d70017
Merge branch 'master' into gifPlayer
MobinYengejehi Feb 25, 2023
03cadff
Merge branch 'master' into gifPlayer
MobinYengejehi Feb 25, 2023
c46dcea
change `pVectorItem` to `pGifItem`
MobinYengejehi Mar 1, 2023
97e65e2
change `p_GifItem` to `pGifItem`
MobinYengejehi Mar 1, 2023
dd6296b
change format
MobinYengejehi Mar 1, 2023
ea35b68
change format
MobinYengejehi Mar 1, 2023
07331b9
change format
MobinYengejehi Mar 1, 2023
a372ff5
change format
MobinYengejehi Mar 1, 2023
ced6474
change format
MobinYengejehi Mar 1, 2023
f5752a3
change format
MobinYengejehi Mar 1, 2023
f8ca3b7
change format
MobinYengejehi Mar 1, 2023
63882ac
Merge branch 'master' into gifPlayer
MobinYengejehi Mar 1, 2023
a2aadc7
Merge branch 'master' into gifPlayer
MobinYengejehi Mar 1, 2023
ec999ed
Merge branch 'master' into gifPlayer
MobinYengejehi Mar 6, 2023
0d892e0
Merge branch 'master' into gifPlayer
MobinYengejehi Mar 15, 2023
83a6add
Merge branch 'master' into gifPlayer
MobinYengejehi Mar 18, 2023
4ec8f89
Merge branch 'master' into gifPlayer
MobinYengejehi Mar 23, 2023
2f120ad
Merge branch 'master' into gifPlayer
MobinYengejehi Apr 3, 2023
e59644b
Merge branch 'master' into gifPlayer
MobinYengejehi Apr 8, 2023
c2cc8c5
Merge branch 'master' into gifPlayer
MobinYengejehi Apr 11, 2023
6bfa573
Merge branch 'master' into gifPlayer
MobinYengejehi Apr 11, 2023
e82ad60
Merge branch 'master' into gifPlayer
MobinYengejehi Apr 13, 2023
719e733
Merge branch 'master' into gifPlayer
MobinYengejehi Apr 15, 2023
9193aab
Merge branch 'master' into gifPlayer
MobinYengejehi Apr 17, 2023
b16a5a6
Merge branch 'master' into gifPlayer
MobinYengejehi Apr 18, 2023
bf6d7d3
Merge branch 'master' into gifPlayer
MobinYengejehi Apr 19, 2023
992ac81
Merge branch 'master' into gifPlayer
MobinYengejehi Apr 22, 2023
24c1a3a
Merge branch 'master' into gifPlayer
MobinYengejehi Apr 29, 2023
19fe68b
Merge branch 'master' into gifPlayer
MobinYengejehi May 2, 2023
0e2d293
Merge branch 'master' into gifPlayer
MobinYengejehi May 16, 2023
58f761d
Merge branch 'master' into gifPlayer
MobinYengejehi May 23, 2023
fd6aebc
Merge branch 'master' into gifPlayer
MobinYengejehi Jun 1, 2023
2880a32
Merge branch 'master' into gifPlayer
MobinYengejehi Jun 13, 2023
1079d1b
Merge branch 'master' into gifPlayer
MobinYengejehi Jun 21, 2023
80d0947
Merge branch 'master' into gifPlayer
MobinYengejehi Jul 22, 2023
62e8d31
Merge branch 'master' into gifPlayer
MobinYengejehi Apr 23, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
140 changes: 140 additions & 0 deletions Client/core/Graphics/CRenderItem.Gif.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
/*****************************************************************************
*
* PROJECT: Multi Theft Auto
* LICENSE: See LICENSE in the top level directory
*
* Multi Theft Auto is available from https://www.multitheftauto.com/
*
*****************************************************************************/

#include "StdInc.h"

////////////////////////////////////////////////////////////////
//
// CGifItem::PostConstruct
//
//
//
////////////////////////////////////////////////////////////////
void CGifItem::PostConstruct(CRenderItemManager* pManager, uint width, uint height)
{
Super::PostConstruct(pManager);

m_uiSizeX = width;
m_uiSizeY = height;
m_uiSurfaceSizeX = width;
m_uiSurfaceSizeY = height;

CreateUnderlyingData();
}

////////////////////////////////////////////////////////////////
//
// CGifItem::PreDestruct
//
//
//
////////////////////////////////////////////////////////////////
void CGifItem::PreDestruct()
{
ReleaseUnderlyingData();
Super::PreDestruct();
}

////////////////////////////////////////////////////////////////
//
// CGifItem::IsValid
//
// Check underlying data is present
//
////////////////////////////////////////////////////////////////
bool CGifItem::IsValid()
{
return m_pD3DTexture != nullptr;
}

////////////////////////////////////////////////////////////////
//
// CGifItem::OnLostDevice
//
// Release device stuff
//
////////////////////////////////////////////////////////////////
void CGifItem::OnLostDevice()
{
// Nothing required for CGifItem
}

////////////////////////////////////////////////////////////////
//
// CGifItem::OnResetDevice
//
// Recreate device stuff
//
////////////////////////////////////////////////////////////////
void CGifItem::OnResetDevice()
{
// Nothing required for CGifItem
}

////////////////////////////////////////////////////////////////
//
// CGifItem::CreateUnderlyingData
//
// From file
//
////////////////////////////////////////////////////////////////
void CGifItem::CreateUnderlyingData()
{
assert(!m_pD3DRenderTargetSurface);
assert(!m_pD3DTexture);

D3DXCreateTexture(m_pDevice, m_uiSizeX, m_uiSizeY, 1, 0, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, (IDirect3DTexture9**)&m_pD3DTexture);

// Check texture created
if (!m_pD3DTexture)
return;

// D3DXCreateTexture sets width and height to 1 if the argument value was 0
// See: https://docs.microsoft.com/en-us/windows/desktop/direct3d9/d3dxcreatetexture
if (m_uiSizeX == 0)
m_uiSizeX = 1;

if (m_uiSizeY == 0)
m_uiSizeY = 1;

// Get the render target surface here for convenience
((IDirect3DTexture9*)m_pD3DTexture)->GetSurfaceLevel(0, &m_pD3DRenderTargetSurface);

// Update surface size, although it probably will be unchanged | Todo: Remove this
D3DSURFACE_DESC desc;
m_pD3DRenderTargetSurface->GetDesc(&desc);
m_uiSurfaceSizeX = desc.Width;
m_uiSurfaceSizeY = desc.Height;

m_iMemoryKBUsed = CRenderItemManager::CalcD3DResourceMemoryKBUsage(m_pD3DRenderTargetSurface);
}

////////////////////////////////////////////////////////////////
//
// CGifItem::ReleaseUnderlyingData
//
//
//
////////////////////////////////////////////////////////////////
void CGifItem::ReleaseUnderlyingData()
{
SAFE_RELEASE(m_pD3DRenderTargetSurface);
SAFE_RELEASE(m_pD3DTexture);
}

void CGifItem::Resize(const CVector2D& size)
{
// Update size
m_uiSizeX = static_cast<uint>(size.fX);
m_uiSizeY = static_cast<uint>(size.fY);

// Recreate texture
ReleaseUnderlyingData();
CreateUnderlyingData();
}
26 changes: 26 additions & 0 deletions Client/core/Graphics/CRenderItemManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,32 @@ CVectorGraphicItem* CRenderItemManager::CreateVectorGraphic(uint width, uint hei
return pVectorItem;
}

////////////////////////////////////////////////////////////////
//
// CRenderItemManager::CreateGif
//
//
//
////////////////////////////////////////////////////////////////
CGifItem* CRenderItemManager::CreateGif(uint width, uint height)
{
if (!CanCreateRenderItem(CGifItem::GetClassId()))
return nullptr;

CGifItem* pGifItem = new CGifItem;
pGifItem->PostConstruct(this, width, height);

if (!pGifItem->IsValid())
{
SAFE_RELEASE(pGifItem);
return nullptr;
}

UpdateMemoryUsage();

return pGifItem;
}

////////////////////////////////////////////////////////////////
//
// CRenderItemManager::CreateRenderTarget
Expand Down
1 change: 1 addition & 0 deletions Client/core/Graphics/CRenderItemManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ class CRenderItemManager : public CRenderItemManagerInterface
bool bForce = false);
virtual CScreenSourceItem* CreateScreenSource(uint uiSizeX, uint uiSizeY);
virtual CVectorGraphicItem* CreateVectorGraphic(uint width, uint height);
virtual CGifItem* CreateGif(uint width,uint height);
virtual CWebBrowserItem* CreateWebBrowser(uint uiSizeX, uint uiSizeY);
virtual bool SetRenderTarget(CRenderTargetItem* pItem, bool bClear);
virtual void EnableSetRenderTargetOldVer(bool bEnable);
Expand Down
1 change: 1 addition & 0 deletions Client/mods/deathmatch/logic/CClientDisplay.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ enum eDisplayType
{
DISPLAY_TEXT,
DISPLAY_VECTORGRAPHIC,
DISPLAY_GIF
};

class CClientDisplay
Expand Down
2 changes: 2 additions & 0 deletions Client/mods/deathmatch/logic/CClientEntity.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ enum eClientEntityType
CCLIENTBROWSER,
CCLIENTSEARCHLIGHT,
CCLIENTIFP,
CCLIENTGIF,
CCLIENTVECTORGRAPHIC,
CCLIENTUNKNOWN,
CCLIENTIMG,
Expand Down Expand Up @@ -139,6 +140,7 @@ enum eCClientEntityClassTypes
CLASS_CClientScreenSource,
CLASS_CClientWebBrowser,
CLASS_CClientVectorGraphic,
CLASS_CClientGif,
CLASS_CClientWeapon,
CLASS_CClientEffect,
CLASS_CClientPointLights,
Expand Down