[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