Skip to content

Commit

Permalink
Extract CGraphics_Threaded::FindFreeTextureIndex function
Browse files Browse the repository at this point in the history
To reduce duplicate code.
  • Loading branch information
Robyt3 committed Jul 20, 2023
1 parent 51b6514 commit 8986f15
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 55 deletions.
81 changes: 26 additions & 55 deletions src/engine/client/graphics_threaded.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,25 @@ void CGraphics_Threaded::LinesDraw(const CLineItem *pArray, int Num)
AddVertices(2 * Num);
}

IGraphics::CTextureHandle CGraphics_Threaded::FindFreeTextureIndex()
{
int Tex = m_FirstFreeTexture;
if(Tex == -1)
{
const size_t CurSize = m_vTextureIndices.size();
m_vTextureIndices.resize(CurSize * 2);
for(size_t i = 0; i < CurSize - 1; ++i)
{
m_vTextureIndices[CurSize + i] = CurSize + i + 1;
}
m_vTextureIndices.back() = -1;
Tex = CurSize;
}
m_FirstFreeTexture = m_vTextureIndices[Tex];
m_vTextureIndices[Tex] = -1;
return CreateTextureHandle(Tex);
}

void CGraphics_Threaded::FreeTextureIndex(CTextureHandle *pIndex)
{
dbg_assert(pIndex->IsValid(), "Cannot free invalid texture index");
Expand Down Expand Up @@ -449,25 +468,10 @@ IGraphics::CTextureHandle CGraphics_Threaded::LoadTextureRaw(size_t Width, size_
if(Width == 0 || Height == 0)
return IGraphics::CTextureHandle();

// grab texture
int Tex = m_FirstFreeTexture;
if(Tex == -1)
{
size_t CurSize = m_vTextureIndices.size();
m_vTextureIndices.resize(CurSize * 2);
for(size_t i = 0; i < CurSize - 1; ++i)
{
m_vTextureIndices[CurSize + i] = CurSize + i + 1;
}
m_vTextureIndices.back() = -1;

Tex = CurSize;
}
m_FirstFreeTexture = m_vTextureIndices[Tex];
m_vTextureIndices[Tex] = -1;
IGraphics::CTextureHandle TextureHandle = FindFreeTextureIndex();

CCommandBuffer::SCommand_Texture_Create Cmd;
Cmd.m_Slot = Tex;
Cmd.m_Slot = TextureHandle.Id();
Cmd.m_Width = Width;
Cmd.m_Height = Height;
Cmd.m_PixelSize = 4;
Expand Down Expand Up @@ -501,7 +505,7 @@ IGraphics::CTextureHandle CGraphics_Threaded::LoadTextureRaw(size_t Width, size_
AddCmd(
Cmd, [] { return true; }, "failed to load raw texture.");

return CreateTextureHandle(Tex);
return TextureHandle;
}

// simple uncompressed RGBA loaders
Expand Down Expand Up @@ -535,42 +539,12 @@ bool CGraphics_Threaded::LoadTextTextures(size_t Width, size_t Height, CTextureH
if(Width == 0 || Height == 0)
return false;

// grab texture
int Tex = m_FirstFreeTexture;
if(Tex == -1)
{
size_t CurSize = m_vTextureIndices.size();
m_vTextureIndices.resize(CurSize * 2);
for(size_t i = 0; i < CurSize - 1; ++i)
{
m_vTextureIndices[CurSize + i] = CurSize + i + 1;
}
m_vTextureIndices.back() = -1;

Tex = CurSize;
}
m_FirstFreeTexture = m_vTextureIndices[Tex];
m_vTextureIndices[Tex] = -1;

int Tex2 = m_FirstFreeTexture;
if(Tex2 == -1)
{
size_t CurSize = m_vTextureIndices.size();
m_vTextureIndices.resize(CurSize * 2);
for(size_t i = 0; i < CurSize - 1; ++i)
{
m_vTextureIndices[CurSize + i] = CurSize + i + 1;
}
m_vTextureIndices.back() = -1;

Tex2 = CurSize;
}
m_FirstFreeTexture = m_vTextureIndices[Tex2];
m_vTextureIndices[Tex2] = -1;
TextTexture = FindFreeTextureIndex();
TextOutlineTexture = FindFreeTextureIndex();

CCommandBuffer::SCommand_TextTextures_Create Cmd;
Cmd.m_Slot = Tex;
Cmd.m_SlotOutline = Tex2;
Cmd.m_Slot = TextTexture.Id();
Cmd.m_SlotOutline = TextOutlineTexture.Id();
Cmd.m_Width = Width;
Cmd.m_Height = Height;

Expand All @@ -580,9 +554,6 @@ bool CGraphics_Threaded::LoadTextTextures(size_t Width, size_t Height, CTextureH
AddCmd(
Cmd, [] { return true; }, "failed to load text textures.");

TextTexture = CreateTextureHandle(Tex);
TextOutlineTexture = CreateTextureHandle(Tex2);

return true;
}

Expand Down
1 change: 1 addition & 0 deletions src/engine/client/graphics_threaded.h
Original file line number Diff line number Diff line change
Expand Up @@ -966,6 +966,7 @@ class CGraphics_Threaded : public IEngineGraphics
void LinesEnd() override;
void LinesDraw(const CLineItem *pArray, int Num) override;

IGraphics::CTextureHandle FindFreeTextureIndex();
void FreeTextureIndex(CTextureHandle *pIndex);
int UnloadTexture(IGraphics::CTextureHandle *pIndex) override;
IGraphics::CTextureHandle LoadTextureRaw(size_t Width, size_t Height, int Format, const void *pData, int StoreFormat, int Flags, const char *pTexName = NULL) override;
Expand Down

0 comments on commit 8986f15

Please sign in to comment.