[Scummvm-git-logs] scummvm master -> bed47375bcd78a1497e6bd5fb8219614b667217a
mgerhardy
noreply at scummvm.org
Mon Dec 27 20:40:28 UTC 2021
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
14177d7144 TWINE: boat window rendering is broken (renderPolygonsCopper
bed47375bc TWINE: fixed mixing of render types and material types
Commit: 14177d71448dedf16089fe04a48bba239d82eb10
https://github.com/scummvm/scummvm/commit/14177d71448dedf16089fe04a48bba239d82eb10
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-12-27T21:38:28+01:00
Commit Message:
TWINE: boat window rendering is broken (renderPolygonsCopper
https://bugs.scummvm.org/ticket/12820
Changed paths:
engines/twine/renderer/renderer.cpp
diff --git a/engines/twine/renderer/renderer.cpp b/engines/twine/renderer/renderer.cpp
index 678306f7e3f..4142511274d 100644
--- a/engines/twine/renderer/renderer.cpp
+++ b/engines/twine/renderer/renderer.cpp
@@ -524,7 +524,7 @@ void Renderer::renderPolygonsCopper(int vtop, int32 vsize, uint16 color) const {
color += sens;
}
}
- pDest += screenWidth;
+ out += screenWidth;
}
}
Commit: bed47375bcd78a1497e6bd5fb8219614b667217a
https://github.com/scummvm/scummvm/commit/bed47375bcd78a1497e6bd5fb8219614b667217a
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-12-27T21:40:00+01:00
Commit Message:
TWINE: fixed mixing of render types and material types
Changed paths:
engines/twine/parser/body.cpp
engines/twine/parser/bodytypes.h
engines/twine/renderer/renderer.cpp
engines/twine/renderer/renderer.h
engines/twine/scene/grid.h
diff --git a/engines/twine/parser/body.cpp b/engines/twine/parser/body.cpp
index 1015cf1c791..6ad0c3550ce 100644
--- a/engines/twine/parser/body.cpp
+++ b/engines/twine/parser/body.cpp
@@ -115,19 +115,19 @@ void BodyData::loadPolygons(Common::SeekableReadStream &stream) {
_polygons.reserve(numPolygons);
for (uint16 i = 0; i < numPolygons; ++i) {
BodyPolygon poly;
- poly.renderType = stream.readByte();
+ poly.materialType = stream.readByte();
const uint8 numVertices = stream.readByte();
poly.color = stream.readSint16LE();
int16 intensity = -1;
- if (poly.renderType == POLYGONTYPE_GOURAUD || poly.renderType == POLYGONTYPE_DITHER) {
+ if (poly.materialType == MAT_FLAT || poly.materialType == MAT_GRANIT) {
intensity = stream.readSint16LE();
}
poly.indices.reserve(numVertices);
poly.intensities.reserve(numVertices);
for (int k = 0; k < numVertices; ++k) {
- if (poly.renderType >= POLYGONTYPE_UNKNOWN) {
+ if (poly.materialType >= MAT_GOURAUD) {
intensity = stream.readSint16LE();
}
const uint16 vertexIndex = stream.readUint16LE() / 6;
diff --git a/engines/twine/parser/bodytypes.h b/engines/twine/parser/bodytypes.h
index d060489dea0..5afc9ae4bf7 100644
--- a/engines/twine/parser/bodytypes.h
+++ b/engines/twine/parser/bodytypes.h
@@ -74,7 +74,7 @@ struct BodyShade {
struct BodyPolygon {
Common::Array<uint16> indices;
Common::Array<uint16> intensities;
- int8 renderType = 0;
+ int8 materialType = 0;
int16 color = 0;
};
diff --git a/engines/twine/renderer/renderer.cpp b/engines/twine/renderer/renderer.cpp
index 4142511274d..28f16cf4672 100644
--- a/engines/twine/renderer/renderer.cpp
+++ b/engines/twine/renderer/renderer.cpp
@@ -64,8 +64,8 @@ void Renderer::init(int32 w, int32 h) {
IVec3 &Renderer::projectPositionOnScreen(int32 cX, int32 cY, int32 cZ) {
if (_isUsingOrthoProjection) {
- _projPos.x = ((cX - cZ) * 24) / BRICK_SIZE + _orthoProjPos.x;
- _projPos.y = (((cX + cZ) * 12) - cY * 30) / BRICK_SIZE + _orthoProjPos.y;
+ _projPos.x = ((cX - cZ) * 24) / ISO_SCALE + _orthoProjPos.x;
+ _projPos.y = (((cX + cZ) * 12) - cY * 30) / ISO_SCALE + _orthoProjPos.y;
_projPos.z = cZ - cY - cX;
return _projPos;
}
@@ -1184,7 +1184,7 @@ uint8 *Renderer::preparePolygons(const Common::Array<BodyPolygon> &polygons, int
const int16 maxWidth = _engine->width() - 1;
for (const BodyPolygon &polygon : polygons) {
- const uint8 renderType = polygon.renderType;
+ const uint8 materialType = polygon.materialType;
const uint8 numVertices = polygon.indices.size();
assert(numVertices <= 16);
const int16 colorIndex = polygon.color;
@@ -1203,9 +1203,8 @@ uint8 *Renderer::preparePolygons(const Common::Array<BodyPolygon> &polygons, int
Vertex *vertex = vertices;
- // TODO: RECHECK coordinates axis
- if (renderType >= POLYGONTYPE_UNKNOWN) {
- destinationPolygon->renderType = polygon.renderType - 2;
+ if (materialType >= MAT_GOURAUD) {
+ destinationPolygon->renderType = polygon.materialType - (MAT_GOURAUD - POLYGONTYPE_GOURAUD);
destinationPolygon->colorIndex = polygon.color;
for (int16 idx = 0; idx < numVertices; ++idx) {
@@ -1223,15 +1222,15 @@ uint8 *Renderer::preparePolygons(const Common::Array<BodyPolygon> &polygons, int
++vertex;
}
} else {
- if (renderType >= POLYGONTYPE_GOURAUD) {
+ if (materialType >= MAT_FLAT) {
// only 1 shade value is used
- destinationPolygon->renderType = renderType - POLYGONTYPE_GOURAUD;
+ destinationPolygon->renderType = materialType - MAT_FLAT;
const int16 shadeEntry = polygon.intensities[0];
const int16 shadeValue = colorIndex + modelData->shadeTable[shadeEntry];
destinationPolygon->colorIndex = shadeValue;
} else {
// no shade is used
- destinationPolygon->renderType = renderType;
+ destinationPolygon->renderType = materialType;
destinationPolygon->colorIndex = colorIndex;
}
@@ -1304,7 +1303,7 @@ bool Renderer::renderModelElements(int32 numOfPrimitives, const BodyData &bodyDa
if (_isUsingOrthoProjection) {
// * sqrt(sx+sy) / 512 (isometric scale)
- radius = (radius * 34) / 512;
+ radius = (radius * 34) / ISO_SCALE;
} else {
int32 delta = _cameraDepthOffset + sphere->z;
if (delta == 0) {
@@ -1393,8 +1392,8 @@ bool Renderer::renderAnimatedModel(ModelData *modelData, const BodyData &bodyDat
const int32 coZ = -(pointPtr->z + renderPos.z);
// TODO: use projectPositionOnScreen()
- pointPtrDest->x = (coX + coZ) * 24 / BRICK_SIZE + _orthoProjPos.x;
- pointPtrDest->y = (((coX - coZ) * 12) - coY * 30) / BRICK_SIZE + _orthoProjPos.y;
+ pointPtrDest->x = (coX + coZ) * 24 / ISO_SCALE + _orthoProjPos.x;
+ pointPtrDest->y = (((coX - coZ) * 12) - coY * 30) / ISO_SCALE + _orthoProjPos.y;
pointPtrDest->z = coZ - coX - coY;
if (pointPtrDest->x < modelRect.left) {
diff --git a/engines/twine/renderer/renderer.h b/engines/twine/renderer/renderer.h
index 467d821484e..da37363a4e6 100644
--- a/engines/twine/renderer/renderer.h
+++ b/engines/twine/renderer/renderer.h
@@ -38,7 +38,19 @@
#define POLYGONTYPE_TRAME 6
#define POLYGONTYPE_GOURAUD 7
#define POLYGONTYPE_DITHER 8
-#define POLYGONTYPE_UNKNOWN 9
+#define POLYGONTYPE_OUTLINE 9
+
+#define MAT_TRISTE 0
+#define MAT_PIERRE 1
+#define MAT_COPPER 2
+#define MAT_BOPPER 3
+#define MAT_MARBRE 4
+#define MAT_TRANS 5
+#define MAT_TRAME 6
+#define MAT_FLAT 7
+#define MAT_GRANIT 8
+#define MAT_GOURAUD 9
+#define MAT_DITHER 10
namespace TwinE {
diff --git a/engines/twine/scene/grid.h b/engines/twine/scene/grid.h
index f2b8c24ef1f..4f30522f267 100644
--- a/engines/twine/scene/grid.h
+++ b/engines/twine/scene/grid.h
@@ -74,6 +74,7 @@ struct BrickEntry {
/** Grip Z size */
#define GRID_SIZE_Z GRID_SIZE_X
+#define ISO_SCALE 512
#define BRICK_SIZE 512
#define BRICK_HEIGHT 256
More information about the Scummvm-git-logs
mailing list