[Scummvm-git-logs] scummvm master -> 295f7e38596383d11e8e56e3f756dda0209c7886
mgerhardy
martin.gerhardy at gmail.com
Wed Feb 17 21:09:22 UTC 2021
This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
04ac02c1e1 TWINE: convert to int32
e6fcdc0dbb TWINE: casting cleanup
833b276e08 TWINE: minor cleanup
295f7e3859 TWINE: assert to check for buffer overflows
Commit: 04ac02c1e1b54b7a05648ed1f0e86dd7c6bd1573
https://github.com/scummvm/scummvm/commit/04ac02c1e1b54b7a05648ed1f0e86dd7c6bd1573
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-02-17T21:45:44+01:00
Commit Message:
TWINE: convert to int32
Changed paths:
engines/twine/renderer/renderer.cpp
engines/twine/renderer/renderer.h
diff --git a/engines/twine/renderer/renderer.cpp b/engines/twine/renderer/renderer.cpp
index c3e6943936..60c0631db7 100644
--- a/engines/twine/renderer/renderer.cpp
+++ b/engines/twine/renderer/renderer.cpp
@@ -1538,14 +1538,14 @@ static const int hmPolyOffset4 = 180; /* 0x00b4 */
static const int hmPolyOffset5 = 240; /* 0x00f0 */
static const int hmPolyOffset6 = 300; /* 0x012c */
-void Renderer::fillHolomapPolygons(const Vertex &vertex1, const Vertex &vertex2, const Vertex &vertex3, const Vertex &vertex4, uint32 &top, uint32 &bottom) {
- const uint32 yBottom = (uint32)(uint16)vertex1.y;
- const uint32 yTop = (uint32)(uint16)vertex2.y;
+void Renderer::fillHolomapPolygons(const Vertex &vertex1, const Vertex &vertex2, const Vertex &vertex3, const Vertex &vertex4, int32 &top, int32 &bottom) {
+ const int32 yBottom = (int32)(uint16)vertex1.y;
+ const int32 yTop = (int32)(uint16)vertex2.y;
if (yBottom < yTop) {
- if ((int32)yBottom <= (int32)top) {
+ if (yBottom <= top) {
top = yBottom;
}
- if ((int32)bottom <= (int32)yTop) {
+ if (bottom <= yTop) {
bottom = yTop;
}
computeHolomapPolygon(yTop, (uint32)(uint16)vertex2.x, yBottom,
@@ -1555,10 +1555,10 @@ void Renderer::fillHolomapPolygons(const Vertex &vertex1, const Vertex &vertex2,
computeHolomapPolygon(yTop, (uint32)vertex4.y,
yBottom, (uint32)vertex3.y, _polyTab + hmPolyOffset4);
} else if (yTop < yBottom) {
- if ((int32)yTop <= (int32)top) {
+ if (yTop <= top) {
top = yTop;
}
- if ((int32)bottom <= (int32)yBottom) {
+ if (bottom <= yBottom) {
bottom = yBottom;
}
computeHolomapPolygon(yTop, (uint32)(uint16)vertex2.x, yBottom,
@@ -1571,17 +1571,17 @@ void Renderer::fillHolomapPolygons(const Vertex &vertex1, const Vertex &vertex2,
}
void Renderer::renderHolomapVertices(const Vertex vertexCoordinates[3], const Vertex vertexCoordinates2[3]) {
- uint32 top = 32000;
- uint32 bottom = (uint32)-32000;
+ int32 top = 32000;
+ int32 bottom = -32000;
fillHolomapPolygons(vertexCoordinates[0], vertexCoordinates[1], vertexCoordinates2[0], vertexCoordinates2[1], top, bottom);
fillHolomapPolygons(vertexCoordinates[1], vertexCoordinates[2], vertexCoordinates2[1], vertexCoordinates2[2], top, bottom);
fillHolomapPolygons(vertexCoordinates[2], vertexCoordinates[0], vertexCoordinates2[2], vertexCoordinates2[0], top, bottom);
renderHolomapPolygons(top, bottom);
}
-void Renderer::renderHolomapPolygons(int32 top, int16 bottom) {
+void Renderer::renderHolomapPolygons(int32 top, int32 bottom) {
uint8 *out = (uint8 *)_engine->frontVideoBuffer.getBasePtr(0, top);
- int16 vsize = (int16)(bottom - (int16)top) + 1;
+ int32 vsize = bottom - top + 1;
const int16 *polyTabPtr = &_polyTab[top];
int32 currentLine = top;
const void* pixelBegin = _engine->frontVideoBuffer.getBasePtr(0, 0);
diff --git a/engines/twine/renderer/renderer.h b/engines/twine/renderer/renderer.h
index a4624f641e..477e2f0241 100644
--- a/engines/twine/renderer/renderer.h
+++ b/engines/twine/renderer/renderer.h
@@ -384,9 +384,9 @@ private:
void baseMatrixTranspose();
- void renderHolomapPolygons(int32 top, int16 bottom);
+ void renderHolomapPolygons(int32 top, int32 bottom);
void computeHolomapPolygon(int32 y1, int32 x1, int32 y2, int32 x2, int16 *polygonTabPtr);
- void fillHolomapPolygons(const Vertex &vertex1, const Vertex &vertex2, const Vertex &vertex3, const Vertex &vertex4, uint32 &top, uint32 &bottom);
+ void fillHolomapPolygons(const Vertex &vertex1, const Vertex &vertex2, const Vertex &vertex3, const Vertex &vertex4, int32 &top, int32 &bottom);
public:
Renderer(TwinEEngine *engine);
Commit: e6fcdc0dbbbca1cc0626b97d0496ecb2fea48542
https://github.com/scummvm/scummvm/commit/e6fcdc0dbbbca1cc0626b97d0496ecb2fea48542
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-02-17T21:49:12+01:00
Commit Message:
TWINE: casting cleanup
Changed paths:
engines/twine/renderer/renderer.cpp
diff --git a/engines/twine/renderer/renderer.cpp b/engines/twine/renderer/renderer.cpp
index 60c0631db7..407a5329e2 100644
--- a/engines/twine/renderer/renderer.cpp
+++ b/engines/twine/renderer/renderer.cpp
@@ -1548,12 +1548,9 @@ void Renderer::fillHolomapPolygons(const Vertex &vertex1, const Vertex &vertex2,
if (bottom <= yTop) {
bottom = yTop;
}
- computeHolomapPolygon(yTop, (uint32)(uint16)vertex2.x, yBottom,
- (uint32)(uint16)vertex1.x, _polyTab + hmPolyOffset1);
- computeHolomapPolygon(yTop, (uint32)vertex4.x,
- yBottom, (uint32)vertex3.x, _polyTab + hmPolyOffset3);
- computeHolomapPolygon(yTop, (uint32)vertex4.y,
- yBottom, (uint32)vertex3.y, _polyTab + hmPolyOffset4);
+ computeHolomapPolygon(yTop, (uint16)vertex2.x, yBottom, (uint16)vertex1.x, _polyTab + hmPolyOffset1);
+ computeHolomapPolygon(yTop, (uint16)vertex4.x, yBottom, (uint16)vertex3.x, _polyTab + hmPolyOffset3);
+ computeHolomapPolygon(yTop, (uint16)vertex4.y, yBottom, (uint16)vertex3.y, _polyTab + hmPolyOffset4);
} else if (yTop < yBottom) {
if (yTop <= top) {
top = yTop;
@@ -1561,12 +1558,9 @@ void Renderer::fillHolomapPolygons(const Vertex &vertex1, const Vertex &vertex2,
if (bottom <= yBottom) {
bottom = yBottom;
}
- computeHolomapPolygon(yTop, (uint32)(uint16)vertex2.x, yBottom,
- (uint32)(uint16)vertex1.x, _polyTab + hmPolyOffset2);
- computeHolomapPolygon(yTop, (uint32)vertex4.x,
- yBottom, (uint32)vertex3.x, _polyTab + hmPolyOffset5);
- computeHolomapPolygon(yTop, (uint32)vertex4.y,
- yBottom, (uint32)vertex3.y, _polyTab + hmPolyOffset6);
+ computeHolomapPolygon(yTop, (uint16)vertex2.x, yBottom, (uint16)vertex1.x, _polyTab + hmPolyOffset2);
+ computeHolomapPolygon(yTop, (uint16)vertex4.x, yBottom, (uint16)vertex3.x, _polyTab + hmPolyOffset5);
+ computeHolomapPolygon(yTop, (uint16)vertex4.y, yBottom, (uint16)vertex3.y, _polyTab + hmPolyOffset6);
}
}
Commit: 833b276e084434096d549ff887e501780e62dd29
https://github.com/scummvm/scummvm/commit/833b276e084434096d549ff887e501780e62dd29
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-02-17T21:58:15+01:00
Commit Message:
TWINE: minor cleanup
Changed paths:
engines/twine/renderer/renderer.cpp
diff --git a/engines/twine/renderer/renderer.cpp b/engines/twine/renderer/renderer.cpp
index 407a5329e2..95110429bc 100644
--- a/engines/twine/renderer/renderer.cpp
+++ b/engines/twine/renderer/renderer.cpp
@@ -1542,25 +1542,17 @@ void Renderer::fillHolomapPolygons(const Vertex &vertex1, const Vertex &vertex2,
const int32 yBottom = (int32)(uint16)vertex1.y;
const int32 yTop = (int32)(uint16)vertex2.y;
if (yBottom < yTop) {
- if (yBottom <= top) {
- top = yBottom;
- }
- if (bottom <= yTop) {
- bottom = yTop;
- }
- computeHolomapPolygon(yTop, (uint16)vertex2.x, yBottom, (uint16)vertex1.x, _polyTab + hmPolyOffset1);
- computeHolomapPolygon(yTop, (uint16)vertex4.x, yBottom, (uint16)vertex3.x, _polyTab + hmPolyOffset3);
- computeHolomapPolygon(yTop, (uint16)vertex4.y, yBottom, (uint16)vertex3.y, _polyTab + hmPolyOffset4);
+ top = MIN<int32>(yBottom, top);
+ bottom = MAX<int32>(yTop, bottom);
+ computeHolomapPolygon(yTop, (uint16)vertex2.x, yBottom, (uint16)vertex1.x, &_polyTab[hmPolyOffset1]);
+ computeHolomapPolygon(yTop, (uint16)vertex4.x, yBottom, (uint16)vertex3.x, &_polyTab[hmPolyOffset3]);
+ computeHolomapPolygon(yTop, (uint16)vertex4.y, yBottom, (uint16)vertex3.y, &_polyTab[hmPolyOffset4]);
} else if (yTop < yBottom) {
- if (yTop <= top) {
- top = yTop;
- }
- if (bottom <= yBottom) {
- bottom = yBottom;
- }
- computeHolomapPolygon(yTop, (uint16)vertex2.x, yBottom, (uint16)vertex1.x, _polyTab + hmPolyOffset2);
- computeHolomapPolygon(yTop, (uint16)vertex4.x, yBottom, (uint16)vertex3.x, _polyTab + hmPolyOffset5);
- computeHolomapPolygon(yTop, (uint16)vertex4.y, yBottom, (uint16)vertex3.y, _polyTab + hmPolyOffset6);
+ top = MIN<int32>(yTop, top);
+ bottom = MAX<int32>(yBottom, bottom);
+ computeHolomapPolygon(yTop, (uint16)vertex2.x, yBottom, (uint16)vertex1.x, &_polyTab[hmPolyOffset2]);
+ computeHolomapPolygon(yTop, (uint16)vertex4.x, yBottom, (uint16)vertex3.x, &_polyTab[hmPolyOffset5]);
+ computeHolomapPolygon(yTop, (uint16)vertex4.y, yBottom, (uint16)vertex3.y, &_polyTab[hmPolyOffset6]);
}
}
Commit: 295f7e38596383d11e8e56e3f756dda0209c7886
https://github.com/scummvm/scummvm/commit/295f7e38596383d11e8e56e3f756dda0209c7886
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-02-17T22:02:38+01:00
Commit Message:
TWINE: assert to check for buffer overflows
Changed paths:
engines/twine/holomap.cpp
engines/twine/holomap.h
diff --git a/engines/twine/holomap.cpp b/engines/twine/holomap.cpp
index d444a3b48a..dc2ff09bdb 100644
--- a/engines/twine/holomap.cpp
+++ b/engines/twine/holomap.cpp
@@ -169,7 +169,7 @@ void Holomap::prepareHolomapPolygons() {
Common::MemoryReadStream stream(_engine->_resources->holomapSurfacePtr, _engine->_resources->holomapSurfaceSize);
int holomapSortArrayIdx = 0;
int holomapSurfaceArrayIdx = 0;
- uint16 projectedIndex = 0;
+ _projectedSurfaceIndex = 0;
_engine->_renderer->setBaseRotation(0, 0, 0);
for (int32 angle = -ANGLE_90; angle <= ANGLE_90; angle += ANGLE_11_25) {
int rotation = 0;
@@ -178,26 +178,26 @@ void Holomap::prepareHolomapPolygons() {
_engine->_renderer->getBaseRotationPosition(vec->x, vec->y, vec->z);
if (angle != ANGLE_90) {
_holomapSort[holomapSortArrayIdx].z = _engine->_renderer->destZ;
- _holomapSort[holomapSortArrayIdx].projectedPosIdx = projectedIndex;
+ _holomapSort[holomapSortArrayIdx].projectedPosIdx = _projectedSurfaceIndex;
++holomapSortArrayIdx;
}
_engine->_renderer->projectPositionOnScreen(_engine->_renderer->destX, _engine->_renderer->destY, _engine->_renderer->destZ);
- _projectedSurfacePositions[projectedIndex].x = _engine->_renderer->projPosX;
- _projectedSurfacePositions[projectedIndex].y = _engine->_renderer->projPosY;
+ _projectedSurfacePositions[_projectedSurfaceIndex].x = _engine->_renderer->projPosX;
+ _projectedSurfacePositions[_projectedSurfaceIndex].y = _engine->_renderer->projPosY;
rotation += ANGLE_11_25;
- ++projectedIndex;
+ ++_projectedSurfaceIndex;
}
HolomapSurface* vec = &_holomapSurface[holomapSurfaceArrayIdx++];
_engine->_renderer->getBaseRotationPosition(vec->x, vec->y, vec->z);
_engine->_renderer->projectPositionOnScreen(_engine->_renderer->destX, _engine->_renderer->destY, _engine->_renderer->destZ);
- _projectedSurfacePositions[projectedIndex].x = _engine->_renderer->projPosX;
- _projectedSurfacePositions[projectedIndex].y = _engine->_renderer->projPosY;
+ _projectedSurfacePositions[_projectedSurfaceIndex].x = _engine->_renderer->projPosX;
+ _projectedSurfacePositions[_projectedSurfaceIndex].y = _engine->_renderer->projPosY;
rotation += ANGLE_11_25;
- ++projectedIndex;
+ ++_projectedSurfaceIndex;
}
assert(holomapSortArrayIdx <= ARRAYSIZE(_holomapSort));
assert(holomapSurfaceArrayIdx <= ARRAYSIZE(_holomapSurface));
- assert(projectedIndex <= ARRAYSIZE(_projectedSurfacePositions));
+ assert(_projectedSurfaceIndex <= ARRAYSIZE(_projectedSurfacePositions));
qsort(_holomapSort, ARRAYSIZE(_holomapSort), sizeof(HolomapSort), sortHolomapSurfaceCoordsByDepth);
}
@@ -219,6 +219,7 @@ bool Holomap::isTriangleVisible(const Vertex *vertices) const {
void Holomap::renderHolomapSurfacePolygons() {
prepareHolomapPolygons();
for (int32 i = 0; i < ARRAYSIZE(_holomapSort); ++i) {
+ assert(_holomapSort[i].projectedPosIdx + 34 < _projectedSurfaceIndex);
const HolomapProjectedPos &pos1 = _projectedSurfacePositions[_holomapSort[i].projectedPosIdx + 0];
const HolomapProjectedPos &pos2 = _projectedSurfacePositions[_holomapSort[i].projectedPosIdx + 33];
const HolomapProjectedPos &pos3 = _projectedSurfacePositions[_holomapSort[i].projectedPosIdx + 1];
diff --git a/engines/twine/holomap.h b/engines/twine/holomap.h
index dd5cc67946..16db4ca05f 100644
--- a/engines/twine/holomap.h
+++ b/engines/twine/holomap.h
@@ -82,6 +82,7 @@ private:
uint16 unk2 = 0;
};
HolomapProjectedPos _projectedSurfacePositions[2048];
+ int _projectedSurfaceIndex = 0;
struct TrajectoryData {
int16 locationIdx;
More information about the Scummvm-git-logs
mailing list