mirror of
https://github.com/whoahq/whoa.git
synced 2026-02-02 16:52:45 +03:00
fix(gx): fix buffer overruns in TEXTLINETEXTURE::WriteGeometry
This commit is contained in:
parent
1352f0ba50
commit
84b16f2aeb
@ -37,17 +37,13 @@ void TEXTLINETEXTURE::WriteGeometry(CGxVertexPCT* buffer, const CImVector& fontC
|
||||
? this->m_colors.Count()
|
||||
: 0;
|
||||
|
||||
if (vertexOffset >= this->m_vert.Count()) {
|
||||
return;
|
||||
}
|
||||
|
||||
uint32_t v24 = this->m_vert.Count() - vertexOffset;
|
||||
|
||||
if (vertexCount >= v24) {
|
||||
vertexCount = v24;
|
||||
}
|
||||
// Drop shadows
|
||||
|
||||
if (hasShadow) {
|
||||
if (vertexOffset < this->m_vert.Count()) {
|
||||
int32_t availableVertexCount = this->m_vert.Count() - vertexOffset;
|
||||
int32_t shadowVertexCount = vertexCount >= availableVertexCount ? availableVertexCount : vertexCount;
|
||||
|
||||
C3Vector shadowTranslation = {
|
||||
viewTranslation.x + floor(ScreenToPixelWidth(0, shadowOffset.x)),
|
||||
viewTranslation.y + floor(ScreenToPixelHeight(0, shadowOffset.y)),
|
||||
@ -56,7 +52,7 @@ void TEXTLINETEXTURE::WriteGeometry(CGxVertexPCT* buffer, const CImVector& fontC
|
||||
|
||||
auto color = colorCount ? this->m_colors[vertexOffset] : fontColor;
|
||||
|
||||
for (int32_t i = 0; i < vertexCount; i++) {
|
||||
for (int32_t i = 0; i < shadowVertexCount; i++) {
|
||||
auto& vertex = this->m_vert[vertexOffset + i];
|
||||
|
||||
C3Vector p = {
|
||||
@ -79,13 +75,27 @@ void TEXTLINETEXTURE::WriteGeometry(CGxVertexPCT* buffer, const CImVector& fontC
|
||||
|
||||
buffer++;
|
||||
}
|
||||
|
||||
vertexCount -= shadowVertexCount;
|
||||
if (vertexOffset + shadowVertexCount >= this->m_vert.Count()) {
|
||||
vertexOffset = 0;
|
||||
}
|
||||
} else {
|
||||
vertexOffset -= this->m_vert.Count();
|
||||
}
|
||||
}
|
||||
|
||||
// Characters
|
||||
|
||||
if (vertexCount && vertexOffset < this->m_vert.Count()) {
|
||||
int32_t availableVertexCount = this->m_vert.Count() - vertexOffset;
|
||||
int32_t characterVertexCount = vertexCount >= availableVertexCount ? availableVertexCount : vertexCount;
|
||||
|
||||
// if (BATCHEDRENDERFONTDESC::s_billboarded) {
|
||||
// // TODO
|
||||
// }
|
||||
|
||||
for (int32_t i = 0; i < vertexCount; i++) {
|
||||
for (int32_t i = 0; i < characterVertexCount; i++) {
|
||||
auto& vertex = this->m_vert[vertexOffset + i];
|
||||
|
||||
auto color = colorCount ? this->m_colors[vertexOffset + i] : fontColor;
|
||||
@ -110,6 +120,7 @@ void TEXTLINETEXTURE::WriteGeometry(CGxVertexPCT* buffer, const CImVector& fontC
|
||||
buffer++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CGxString* CGxString::GetNewString(int32_t linkOnList) {
|
||||
CGxString* string = g_freeStrings.Head();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user