Skip to content

Commit

Permalink
- fix some crashes in the Shape2D VBO code due to unsound pointer usa…
Browse files Browse the repository at this point in the history
…ge (#1318)
  • Loading branch information
Gutawer committed Feb 25, 2021
1 parent d6987ff commit 73dc528
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 14 deletions.
11 changes: 4 additions & 7 deletions src/common/2d/v_2ddrawer.cpp
Expand Up @@ -565,7 +565,7 @@ void F2DDrawer::AddShape(FGameTexture* img, DShape2D* shape, DrawParms& parms)
if (!shape->uploadedOnce) {
shape->bufIndex = -1;
shape->buffers.Clear();
shape->lastCommand = nullptr;
shape->lastCommand = -1;
}
delete shape->lastParms;
shape->lastParms = new DrawParms(parms);
Expand Down Expand Up @@ -647,12 +647,9 @@ void F2DDrawer::AddShape(FGameTexture* img, DShape2D* shape, DrawParms& parms)
shape->uploadedOnce = true;
}
dg.shape2DBufIndex = shape->bufIndex;
dg.shapeLastCmd = true;
if (shape->lastCommand != nullptr) {
shape->lastCommand->shapeLastCmd = false;
}
auto c = AddCommand(&dg);
shape->lastCommand = &mData[c];
shape->lastCommand += 1;
dg.shape2DCommandCounter = shape->lastCommand;
AddCommand(&dg);
offset = osave;
}

Expand Down
4 changes: 2 additions & 2 deletions src/common/2d/v_2ddrawer.h
Expand Up @@ -125,7 +125,7 @@ class F2DDrawer
DShape2D* shape2D;
int shape2DBufIndex;
int shape2DIndexCount;
bool shapeLastCmd;
int shape2DCommandCounter;

RenderCommand()
{
Expand Down Expand Up @@ -262,7 +262,7 @@ class DShape2D : public DObject
TArray<F2DVertexBuffer> buffers;
bool needsVertexUpload = true;
int bufIndex = -1;
F2DDrawer::RenderCommand* lastCommand = nullptr;
int lastCommand = -1;

bool uploadedOnce = false;
DrawParms* lastParms;
Expand Down
13 changes: 8 additions & 5 deletions src/common/rendering/hwrenderer/hw_draw2d.cpp
Expand Up @@ -183,12 +183,15 @@ void Draw2D(F2DDrawer *drawer, FRenderState &state)
state.SetVertexBuffer(&cmd.shape2D->buffers[cmd.shape2DBufIndex]);
state.DrawIndexed(DT_Triangles, 0, cmd.shape2DIndexCount);
state.SetVertexBuffer(&vb);
if (cmd.shape2D->bufIndex > 0 && cmd.shapeLastCmd)
if (cmd.shape2DCommandCounter == cmd.shape2D->lastCommand)
{
cmd.shape2D->needsVertexUpload = true;
cmd.shape2D->buffers.Clear();
cmd.shape2D->lastCommand = nullptr;
cmd.shape2D->bufIndex = -1;
cmd.shape2D->lastCommand = -1;
if (cmd.shape2D->bufIndex > 0)
{
cmd.shape2D->needsVertexUpload = true;
cmd.shape2D->buffers.Clear();
cmd.shape2D->bufIndex = -1;
}
}
cmd.shape2D->uploadedOnce = false;
}
Expand Down

0 comments on commit 73dc528

Please sign in to comment.