Nanosaur I

AmigaOne X5000 platform specific issues related to Linux only.
User avatar
xeno74
Posts: 9319
Joined: Fri Mar 23, 2012 7:58 am

Nanosaur I

Post by xeno74 »

Image

Hi All,

I compiled Nanosaur 1.4.4 with Void PPC on my X5000 today.

Commands:

Code: Select all

git clone --recurse-submodules https://github.com/jorio/Nanosaur

Code: Select all

cd Nanosaur

Code: Select all

cmake -S . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo

Code: Select all

cmake --build build
Output:

Code: Select all

[amigaone@void-ppc Nanosaur]$ cmake -S . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo
-- The C compiler identification is GNU 10.2.1
-- The CXX compiler identification is GNU 10.2.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
Sanitizers disabled (pass -DSANITIZE=1 to enable)
-- Found SDL2: /usr/include/SDL2  
-- Found OpenGL: /usr/lib/libOpenGL.so   
-- Configuring done
-- Generating done
-- Build files have been written to: /home/amigaone/Downloads/Nanosaur/build
[amigaone@void-ppc Nanosaur]$ cmake --build build
[  1%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/Pomme.cpp.o
[  2%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/PommeDebug.cpp.o
[  3%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/Files/Files.cpp.o
[  4%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/Files/HostVolume.cpp.o
[  5%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/Files/Resources.cpp.o
[  7%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/Memory/Memory.cpp.o
[  8%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/Text/TextUtilities.cpp.o
[  9%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/Time/TimeManager.cpp.o
[ 10%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/Utilities/bigendianstreams.cpp.o
[ 11%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/Utilities/IEEEExtended.cpp.o
[ 12%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/Utilities/memstream.cpp.o
[ 14%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/Utilities/StringUtils.cpp.o
[ 15%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/Utilities/structpack.cpp.o
[ 16%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/SoundFormats/AIFF.cpp.o
[ 17%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/SoundFormats/IMA4.cpp.o
[ 18%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/SoundFormats/MACE.cpp.o
[ 20%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/SoundFormats/Midi.cpp.o
[ 21%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/SoundFormats/SoundFormats.cpp.o
[ 22%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/SoundFormats/xlaw.cpp.o
[ 23%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/SoundMixer/ChannelImpl.cpp.o
[ 24%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/SoundMixer/cmixer.cpp.o
[ 25%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/SoundMixer/SoundManager.cpp.o
[ 27%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/Graphics/ARGBPixmap.cpp.o
[ 28%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/Graphics/Color.cpp.o
[ 29%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/Graphics/ColorManager.cpp.o
[ 30%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/Graphics/Graphics.cpp.o
[ 31%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/Graphics/Icons.cpp.o
[ 32%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/Graphics/PICT.cpp.o
[ 34%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/Graphics/SystemPalettes.cpp.o
[ 35%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/Video/Cinepak.cpp.o
[ 36%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/Video/moov.cpp.o
[ 37%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/QD3D/3DMFParser.cpp.o
[ 38%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/QD3D/QD3D.cpp.o
[ 40%] Building CXX object extern/Pomme/CMakeFiles/Pomme.dir/src/QD3D/QD3DMath.cpp.o
[ 41%] Linking CXX static library libPomme.a
[ 41%] Built target Pomme
[ 42%] Building CXX object CMakeFiles/Nanosaur.dir/src/Boot.cpp.o
[ 43%] Building C object CMakeFiles/Nanosaur.dir/src/Enemies/Enemy.c.o
[ 44%] Building C object CMakeFiles/Nanosaur.dir/src/Enemies/Enemy_Ptera.c.o
[ 45%] Building C object CMakeFiles/Nanosaur.dir/src/Enemies/Enemy_Rex.c.o
[ 47%] Building C object CMakeFiles/Nanosaur.dir/src/Enemies/Enemy_Spitter.c.o
[ 48%] Building C object CMakeFiles/Nanosaur.dir/src/Enemies/Enemy_Stego.c.o
[ 49%] Building C object CMakeFiles/Nanosaur.dir/src/Enemies/Enemy_TriCer.c.o
[ 50%] Building C object CMakeFiles/Nanosaur.dir/src/Items/Effects.c.o
[ 51%] Building C object CMakeFiles/Nanosaur.dir/src/Items/Items.c.o
[ 52%] Building C object CMakeFiles/Nanosaur.dir/src/Items/Pickups.c.o
[ 54%] Building C object CMakeFiles/Nanosaur.dir/src/Items/TimePortal.c.o
[ 55%] Building C object CMakeFiles/Nanosaur.dir/src/Items/Traps.c.o
[ 56%] Building C object CMakeFiles/Nanosaur.dir/src/Items/Triggers.c.o
[ 57%] Building C object CMakeFiles/Nanosaur.dir/src/Player/MyGuy.c.o
[ 58%] Building C object CMakeFiles/Nanosaur.dir/src/Player/Player_Control.c.o
[ 60%] Building C object CMakeFiles/Nanosaur.dir/src/Player/Weapons.c.o
[ 61%] Building C object CMakeFiles/Nanosaur.dir/src/QD3D/3DMF.c.o
[ 62%] Building C object CMakeFiles/Nanosaur.dir/src/QD3D/3DMath.c.o
[ 63%] Building C object CMakeFiles/Nanosaur.dir/src/QD3D/Camera.c.o
[ 64%] Building C object CMakeFiles/Nanosaur.dir/src/QD3D/EnvironmentMap.c.o
[ 65%] Building C object CMakeFiles/Nanosaur.dir/src/QD3D/FrustumCulling.c.o
[ 67%] Building C object CMakeFiles/Nanosaur.dir/src/QD3D/QD3D_Geometry.c.o
[ 68%] Building C object CMakeFiles/Nanosaur.dir/src/QD3D/QD3D_Support.c.o
[ 69%] Building C object CMakeFiles/Nanosaur.dir/src/QD3D/Renderer.c.o
[ 70%] Building C object CMakeFiles/Nanosaur.dir/src/Screens/HighScores.c.o
[ 71%] Building C object CMakeFiles/Nanosaur.dir/src/Screens/Infobar.c.o
[ 72%] Building C object CMakeFiles/Nanosaur.dir/src/Screens/MainMenu.c.o
[ 74%] Building CXX object CMakeFiles/Nanosaur.dir/src/Screens/Movie.cpp.o
[ 75%] Building C object CMakeFiles/Nanosaur.dir/src/Screens/SettingsScreen.c.o
[ 76%] Building C object CMakeFiles/Nanosaur.dir/src/Screens/Title.c.o
[ 77%] Building C object CMakeFiles/Nanosaur.dir/src/Skeleton/Bones.c.o
[ 78%] Building C object CMakeFiles/Nanosaur.dir/src/Skeleton/SkeletonAnim.c.o
[ 80%] Building C object CMakeFiles/Nanosaur.dir/src/Skeleton/SkeletonJoints.c.o
[ 81%] Building C object CMakeFiles/Nanosaur.dir/src/Skeleton/SkeletonObj.c.o
[ 82%] Building C object CMakeFiles/Nanosaur.dir/src/System/Collision.c.o
[ 83%] Building C object CMakeFiles/Nanosaur.dir/src/System/File.c.o
[ 84%] Building C object CMakeFiles/Nanosaur.dir/src/System/Main.c.o
[ 85%] Building C object CMakeFiles/Nanosaur.dir/src/System/Misc.c.o
[ 87%] Building C object CMakeFiles/Nanosaur.dir/src/System/Objects.c.o
[ 88%] Building C object CMakeFiles/Nanosaur.dir/src/System/Objects2.c.o
[ 89%] Building C object CMakeFiles/Nanosaur.dir/src/System/Pool.c.o
[ 90%] Building C object CMakeFiles/Nanosaur.dir/src/System/ProMode.c.o
[ 91%] Building C object CMakeFiles/Nanosaur.dir/src/System/Sound.c.o
[ 92%] Building C object CMakeFiles/Nanosaur.dir/src/System/Sprites.c.o
[ 94%] Building C object CMakeFiles/Nanosaur.dir/src/System/TGA.c.o
[ 95%] Building C object CMakeFiles/Nanosaur.dir/src/System/Window.c.o
[ 96%] Building C object CMakeFiles/Nanosaur.dir/src/System/input.c.o
[ 97%] Building C object CMakeFiles/Nanosaur.dir/src/Terrain/Terrain.c.o
[ 98%] Building C object CMakeFiles/Nanosaur.dir/src/Terrain/Terrain2.c.o
[100%] Linking CXX executable Nanosaur

Code: Select all

cd build

Code: Select all

./Nanosaur
Unfortunately it doesn't start.

Error messages:

Code: Select all

NANOSAUR ASSERTION FAILED: in + packetBytes <= eod - DecompressRLE:58

X Error of failed request:  BadWindow (invalid Window parameter)
  Major opcode of failed request:  40 (X_TranslateCoords)
  Resource id in failed request:  0x1400247
  Serial number of failed request:  244
  Current serial number in output stream:  0

Code: Select all

cd ..
grep -i DecompressRLE . -r

Code: Select all

./src/System/TGA.c:static void DecompressRLE(short refNum, TGAHeader* header, uint8_t* out)
./src/System/TGA.c:		DecompressRLE(refNum, &header, pixelData);
I think, it is an endian issue. It isn't ported to Big Endian.

I created a ticket. Link: Is Nanosaur big endian compatible? #37

Christian
http://www.amigalinux.org
http://www.supertuxkart-amiga.de

Running Linux on AmigaONEs can require some tinkering.
User avatar
xeno74
Posts: 9319
Joined: Fri Mar 23, 2012 7:58 am

Re: Nanosaur I

Post by xeno74 »

Iliyas Jorio wrote: In ReadTGA (TGA.c), try to add the line marked 'ADD THIS' below (untested, let me know if it works):

Code: Select all

        /* ... */

	// Read header
	readCount = sizeof(TGAHeader);
	err = FSRead(refNum, &readCount, (Ptr) &header);
	if (err != noErr || readCount != sizeof(TGAHeader))
	{
		FSClose(refNum);
		return err;
	}

	UnpackStructs("<8B4H2B", sizeof(TGAHeader), 1, &header); // <---------- ADD THIS

	// Make sure we support the format
	switch (header.imageType)

        /* ... */
Link: Is Nanosaur big endian compatible? #37 -- github.com
http://www.amigalinux.org
http://www.supertuxkart-amiga.de

Running Linux on AmigaONEs can require some tinkering.
User avatar
xeno74
Posts: 9319
Joined: Fri Mar 23, 2012 7:58 am

Re: Nanosaur I

Post by xeno74 »

It starts with the patch above and I see the Nanosaur title screen in wrong colors and after pressing the key SPACE, the Credits screen in wrong colors either. Then after the pressing the key SPACE again, I see the Pangea logo with the correct colors. After that it crashes with the error message "Segmentation fault".

Debugging with GDB (backtrace):
  1. Code: Select all

    sudo xbps-install gdb
  2. Code: Select all

    gdb Nanosaur
    Output:

    Code: Select all

    GNU gdb (GDB) 12.1
    Copyright (C) 2022 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
    Type "show copying" and "show warranty" for details.
    This GDB was configured as "powerpc-linux-gnu".
    Type "show configuration" for configuration details.
    For bug reporting instructions, please see:
    <https://www.gnu.org/software/gdb/bugs/>.
    Find the GDB manual and other documentation resources online at:
        <http://www.gnu.org/software/gdb/documentation/>.
    
    For help, type "help".
    Type "apropos word" to search for commands related to "word"...
    Reading symbols from Nanosaur...
    
  3. Code: Select all

    (gdb) run
    Output:

    Code: Select all

    Starting program: /home/amigaone/Downloads/Nanosaur/build/Nanosaur 
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/usr/lib32/libthread_db.so.1".
    [New Thread 0xe6df03c0 (LWP 7279)]
    [New Thread 0xd6bff3c0 (LWP 7280)]
    [New Thread 0xcf3ee3c0 (LWP 7284)]
    [New Thread 0xce8be3c0 (LWP 7285)]
    
    Thread 1 "Nanosaur" received signal SIGSEGV, Segmentation fault.
    0x00427dc8 in UpdateSkinnedGeometry_Recurse (skelNode=skelNode@entry=0x518478 <gObjNodeMemory+944>, joint=joint@entry=0) at /home/amigaone/Downloads/Nanosaur/src/Skeleton/Bones.c:331
    331			numRefs = decomposedPointList[i].numRefs;									// get # times this point is referenced
    
  4. Code: Select all

    bt
    Output:

    Code: Select all

    #0  0x00427dc8 in UpdateSkinnedGeometry_Recurse (skelNode=skelNode@entry=0x518478 <gObjNodeMemory+944>, joint=joint@entry=0)
        at /home/amigaone/Downloads/Nanosaur/src/Skeleton/Bones.c:331
    #1  0x00428628 in UpdateSkinnedGeometry (theNode=theNode@entry=0x518478 <gObjNodeMemory+944>) at /home/amigaone/Downloads/Nanosaur/src/Skeleton/Bones.c:206
    #2  0x0042a490 in MakeNewSkeletonObject (newObjDef=0x5900ec <gNewObjectDefinition>) at /home/amigaone/Downloads/Nanosaur/src/Skeleton/SkeletonObj.c:154
    Backtrace stopped: Cannot access memory at address 0xffffe424
    
http://www.amigalinux.org
http://www.supertuxkart-amiga.de

Running Linux on AmigaONEs can require some tinkering.
User avatar
xeno74
Posts: 9319
Joined: Fri Mar 23, 2012 7:58 am

Re: Nanosaur I

Post by xeno74 »

Iliyas Jorio wrote: In src/System/File.c, try to comment out all calls to ByteswapInts.
Link: Is Nanosaur big endian compatible? #37 -- github.com
http://www.amigalinux.org
http://www.supertuxkart-amiga.de

Running Linux on AmigaONEs can require some tinkering.
User avatar
xeno74
Posts: 9319
Joined: Fri Mar 23, 2012 7:58 am

Re: Nanosaur I

Post by xeno74 »

It starts. The title and credits screen has wrong colors. The Pangea logo has correct colors. After the logo, the menu appears with correct colors. The game itself has correct colors but the edge not.

Image

Image
http://www.amigalinux.org
http://www.supertuxkart-amiga.de

Running Linux on AmigaONEs can require some tinkering.
User avatar
xeno74
Posts: 9319
Joined: Fri Mar 23, 2012 7:58 am

Re: Nanosaur I

Post by xeno74 »

Iliyas Jorio wrote: Try to replace GL_UNSIGNED_INT_8_8_8_8 with GL_UNSIGNED_INT_8_8_8_8_REV in:
  • src/QD3D/Renderer.c
  • src/QD3D/QD3D_Support.c
  • src/Screens/Infobar.c
Link: Is Nanosaur big endian compatible? #37 -- github.com

VIM/VI:

Code: Select all

:%s/GL_UNSIGNED_INT_8_8_8_8/GL_UNSIGNED_INT_8_8_8_8_REV/g
http://www.amigalinux.org
http://www.supertuxkart-amiga.de

Running Linux on AmigaONEs can require some tinkering.
User avatar
xeno74
Posts: 9319
Joined: Fri Mar 23, 2012 7:58 am

Re: Nanosaur I

Post by xeno74 »

It works with the correct colors! :-)

Image

Download: Nanosaur_1.4.4-linux-powerpc.tar.gz

Please test it.
http://www.amigalinux.org
http://www.supertuxkart-amiga.de

Running Linux on AmigaONEs can require some tinkering.
User avatar
Skateman
Posts: 858
Joined: Thu Aug 10, 2017 8:36 pm
Location: The Netherlands

Re: Nanosaur I

Post by Skateman »

PS Nanosaur on my X1900 has broken textures... just like Bugdom.

Image

My hardware is ok as i tested Billy Frontier to see if textures are still intact.

Image

Weird...

.....
AmigaOne X5000 -> 2GHz / 16GB RAM / Radeon RX 570 / Radeon X1950 / M-Audio 5.1 -> AmigaOS / Linux
Amiga 1200 -> Recapped / 68ec020 ACA 1221ec / CF HDD / RetroNET connected to the world
Vampire 4SA - RPi4 Running AmiKitXE Full
User avatar
xeno74
Posts: 9319
Joined: Fri Mar 23, 2012 7:58 am

Re: Nanosaur I

Post by xeno74 »

FYI:
Iliyas Jorio wrote: The big-endian fixes have been pushed to master. Feel free to reopen this issue if anything's missing.
BeWorld2018 wrote: Working fine on MorphOS (PPC), thanks
Skateman wrote: Hi Iliyas,

First of all thanks for the great games and work you have done.
I ia running into an issue with several games regarding the way textures are displayed.

I have created a movie to show you what i mean.
the link can be found here https://youtu.be/4T7bUCM808w
Around minute 5 i start testing some games, and at minute 8 with the game Nanosaur you can see the issue.

Do you have any clue how this can be fixed?.
The machine in use is an AmigaOne X5000
PPC based P5020 cpu
Fienix Linux
ATI X1900 GPU

Looking forward to hearing from you
thanks in advance
Iliyas Jorio wrote: Hi Dave,

It looks like vertex indices in triangle arrays are somehow shifted,
causing these gaps in the meshes while still retaining the overall shape
of the meshes.

One major difference in the rendering code between Nanosaur 1 and Otto
Matic is that glDrawElements sends triangle arrays to the GPU as
GL_UNSIGNED_SHORT in Nano vs. GL_UNSIGNED_INT in Otto.

My hunch is your GPU driver is handling 16-bit triangle arrays incorrectly.

Attached is a patch to make Nanosaur use 32-bit triangle arrays. The
patch should apply to Nanosaur's current master branch (commit c975364).
Let me know if it works.

Thanks,

Iliyas Jorio
nanosaur-32bit-triangles.patch:

Code: Select all

Submodule extern/Pomme contains modified content
diff --git a/extern/Pomme/src/QD3D/3DMFParser.cpp b/extern/Pomme/src/QD3D/3DMFParser.cpp
index 75be008..0bbba75 100644
--- a/extern/Pomme/src/QD3D/3DMFParser.cpp
+++ b/extern/Pomme/src/QD3D/3DMFParser.cpp
@@ -328,9 +328,7 @@ void Q3MetaFileParser::Parse_tmsh(uint32_t chunkSize)
 	}
 	else
 	{
-		static_assert(sizeof(TQ3TriMeshTriangleData::pointIndices[0]) == 2);
-		Assert(false, "Meshes exceeding 65535 vertices are not supported");
-		//ReadTriangleVertexIndices<uint32_t>(f, numTriangles, currentMesh);
+		ReadTriangleVertexIndices<uint32_t>(f, numTriangles, currentMesh);
 	}
 
 	// Ensure all vertex indices are in the expected range
diff --git a/extern/Pomme/src/QD3D/QD3D.cpp b/extern/Pomme/src/QD3D/QD3D.cpp
index 0b21fe6..8c53a45 100644
--- a/extern/Pomme/src/QD3D/QD3D.cpp
+++ b/extern/Pomme/src/QD3D/QD3D.cpp
@@ -232,9 +232,9 @@ void Q3TriMeshData_SubdivideTriangles(TQ3TriMeshData* mesh)
 {
 	struct Edge
 	{
-		int a;
-		int b;
-		int midpoint;
+		TQ3PointIndex a;
+		TQ3PointIndex b;
+		TQ3PointIndex midpoint;
 	};
 
 	std::map<uint32_t, Edge> edges;
@@ -254,8 +254,8 @@ void Q3TriMeshData_SubdivideTriangles(TQ3TriMeshData* mesh)
 
 		for (int e = 0; e < 3; e++)
 		{
-			int edgeP0 = triangle.pointIndices[e];
-			int edgeP1 = triangle.pointIndices[(e+1) % 3];
+			TQ3PointIndex edgeP0 = triangle.pointIndices[e];
+			TQ3PointIndex edgeP1 = triangle.pointIndices[(e+1) % 3];
 			if (edgeP0 > edgeP1)
 			{
 				int swap = edgeP0;
@@ -271,7 +271,7 @@ void Q3TriMeshData_SubdivideTriangles(TQ3TriMeshData* mesh)
 			}
 			else
 			{
-				edges[edgeHash] = { edgeP0, edgeP1, -1 };
+				edges[edgeHash] = { edgeP0, edgeP1, (TQ3PointIndex) -1 };
 				triangleEdges[t*3 + e] = &edges[edgeHash];
 				numDistinctEdges++;
 			}
@@ -281,8 +281,8 @@ void Q3TriMeshData_SubdivideTriangles(TQ3TriMeshData* mesh)
 	//-------------------------------------------------------------------------
 	// Reallocate mesh
 
-	int numPointsWritten		= oldNumPoints;
-	int numTrianglesWritten		= oldNumTriangles;
+	TQ3PointIndex numPointsWritten	= oldNumPoints;
+	int numTrianglesWritten			= oldNumTriangles;
 
 	mesh->numTriangles *= 4;
 	mesh->numPoints += numDistinctEdges;
@@ -353,12 +353,12 @@ void Q3TriMeshData_SubdivideTriangles(TQ3TriMeshData* mesh)
 		   A        ^        C
 		*/
 
-		uint16_t A		= triangle.pointIndices[0];
-		uint16_t B		= triangle.pointIndices[1];
-		uint16_t C		= triangle.pointIndices[2];
-		uint16_t A2B	= triangleEdges[t*3 + 0]->midpoint;
-		uint16_t B2C	= triangleEdges[t*3 + 1]->midpoint;
-		uint16_t C2A	= triangleEdges[t*3 + 2]->midpoint;
+		TQ3PointIndex A		= triangle.pointIndices[0];
+		TQ3PointIndex B		= triangle.pointIndices[1];
+		TQ3PointIndex C		= triangle.pointIndices[2];
+		TQ3PointIndex A2B	= triangleEdges[t*3 + 0]->midpoint;
+		TQ3PointIndex B2C	= triangleEdges[t*3 + 1]->midpoint;
+		TQ3PointIndex C2A	= triangleEdges[t*3 + 2]->midpoint;
 
 		mesh->triangles[numTrianglesWritten++]	= {{A2B, B, B2C} };
 		mesh->triangles[numTrianglesWritten++]	= {{B2C, C, C2A} };
diff --git a/extern/Pomme/src/QD3D/QD3D.h b/extern/Pomme/src/QD3D/QD3D.h
index 295f631..2022a94 100644
--- a/extern/Pomme/src/QD3D/QD3D.h
+++ b/extern/Pomme/src/QD3D/QD3D.h
@@ -266,10 +266,12 @@ typedef struct TQ3PlaneEquation
 	float                                       constant;
 } TQ3PlaneEquation;
 
+typedef uint32_t TQ3PointIndex;
+
 // WARNING: this structure differs from QD3D (indices were originally 32-bit)
 typedef struct TQ3TriMeshTriangleData
 {
-	uint16_t									pointIndices[3];
+	TQ3PointIndex								pointIndices[3];
 } TQ3TriMeshTriangleData;
 
 // This structure differs from QD3D.
diff --git a/src/QD3D/QD3D_Geometry.c b/src/QD3D/QD3D_Geometry.c
index 449349b..482d5ee 100644
--- a/src/QD3D/QD3D_Geometry.c
+++ b/src/QD3D/QD3D_Geometry.c
@@ -220,7 +220,7 @@ TQ3Point3D			centerPt = {0,0,0};
 		ShardType* shard = &gShardMemory[shardIndex];
 		TQ3TriMeshData* sMesh = shard->mesh;
 
-		const uint16_t* ind = inMesh->triangles[t].pointIndices;						// get indices of 3 points
+		const TQ3PointIndex* ind = inMesh->triangles[t].pointIndices;		// get indices of 3 points
 
 				/*********************/
 				/* INIT TRIMESH DATA */
diff --git a/src/QD3D/Renderer.c b/src/QD3D/Renderer.c
index c0d01ed..580a7eb 100644
--- a/src/QD3D/Renderer.c
+++ b/src/QD3D/Renderer.c
@@ -704,7 +704,7 @@ static void DrawMeshList(int renderPass, const MeshQueueEntry* entry)
 		}
 
 		// Draw the mesh
-		glDrawElements(GL_TRIANGLES, mesh->numTriangles * 3, GL_UNSIGNED_SHORT, mesh->triangles);
+		glDrawElements(GL_TRIANGLES, mesh->numTriangles * 3, GL_UNSIGNED_INT, mesh->triangles);
 		CHECK_GL_ERROR();
 
 		// Pass 2 to draw transparent meshes without face culling (see above for an explanation)
@@ -714,7 +714,7 @@ static void DrawMeshList(int renderPass, const MeshQueueEntry* entry)
 			// We've restored glCullFace to GL_BACK, which is the default for all other meshes.
 			
 			// Draw the mesh again
-			glDrawElements(GL_TRIANGLES, mesh->numTriangles * 3, GL_UNSIGNED_SHORT, mesh->triangles);
+			glDrawElements(GL_TRIANGLES, mesh->numTriangles * 3, GL_UNSIGNED_INT, mesh->triangles);
 			CHECK_GL_ERROR();
 		}
 

http://www.amigalinux.org
http://www.supertuxkart-amiga.de

Running Linux on AmigaONEs can require some tinkering.
User avatar
xeno74
Posts: 9319
Joined: Fri Mar 23, 2012 7:58 am

Re: Nanosaur I

Post by xeno74 »

Hi Skateman,

Many thanks for reporting the issue with the ATi X19XX graphics cards to Jorio.

I was able to patch with Jorio's new patch and compile Nanosaur I today.

Here are the instructions for patching and compiling:
  1. Code: Select all

    git clone --recurse-submodules https://github.com/jorio/Nanosaur
  2. Code: Select all

    mv Nanosaur a
  3. Code: Select all

    patch -p0 < nanosaur-32bit-triangles.patch
    Output:

    Code: Select all

    patching file a/extern/Pomme/src/QD3D/3DMFParser.cpp
    patching file a/extern/Pomme/src/QD3D/QD3D.cpp
    patching file a/extern/Pomme/src/QD3D/QD3D.h
    patching file a/src/QD3D/QD3D_Geometry.c
    patching file a/src/QD3D/Renderer.c
    
  4. Code: Select all

    cd a
  5. Code: Select all

    cmake -S . -B build
  6. Code: Select all

    cmake --build build
  7. Code: Select all

    cd build
  8. Code: Select all

    ./Nanosaur
Download: Nanosaur_1.4.4-2-linux-powerpc.tar.gz

Please test it,

Christian
http://www.amigalinux.org
http://www.supertuxkart-amiga.de

Running Linux on AmigaONEs can require some tinkering.
Post Reply