diff --git a/Utils/Libs/GLib/Frame.cpp b/Utils/Libs/GLib/Frame.cpp
index a626d9014..a16d77689 100644
--- a/Utils/Libs/GLib/Frame.cpp
+++ b/Utils/Libs/GLib/Frame.cpp
@@ -663,6 +663,28 @@ void Frame::MakeRGBA(u8 * Dest,bool ZeroIsTrans)
}
}
+/*----------------------------------------------------------------------
+ Function:
+ Purpose:
+ Params:
+ Returns:
+ ---------------------------------------------------------------------- */
+void Frame::MakeRGB(u8 * Dest)
+{
+ if (Buffa)
+ {
+ int Area;
+ Area=Width*Height;
+
+ for (int f=0;f TexInfo;
};
diff --git a/Utils/Libs/TexGrab/sprset.cpp b/Utils/Libs/TexGrab/sprset.cpp
index c9e78c0d5..7ecf819ae 100644
--- a/Utils/Libs/TexGrab/sprset.cpp
+++ b/Utils/Libs/TexGrab/sprset.cpp
@@ -210,7 +210,7 @@ void SprSet::AddAnm(FileInfo const & ThisInfo)
AddFrame(ThisAnim[f],TempFileInfo);
}
- cout<<"Added anim file "<GetActualFileName()<Width;
+ MapHeight=LayerHdr->Height;
}
/*****************************************************************************/
CLayerTile::~CLayerTile()
{
- if (TileMap2d[0].List) MemFree(TileMap2d[0].List);
- if (TileMap2d[1].List) MemFree(TileMap2d[1].List);
+ if (TileTable[0].Table) MemFree(TileTable[0].Table);
+ if (TileTable[1].Table) MemFree(TileTable[1].Table);
}
/*****************************************************************************/
-sTileMap2d &CLayerTile::GetTileMap()
+sTileTable &CLayerTile::GetTileTable()
{
- return(TileMap2d[FrameFlipFlag]);
+ return(TileTable[FrameFlipFlag]);
}
/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************/
-// NEED TO UPDATE FOR DIFF MAP POS's
void CLayerTile::init(VECTOR &MapPos,int Shift,int Width,int Height)
{
int Size=Width*Height;
-int MapWidth=GetWidth();
-int MapHeight=GetWidth();
ASSERT(Width>=SCREEN_TILE_WIDTH);
ASSERT(Height>=SCREEN_TILE_HEIGHT);
- MapShift=Shift;
- TileMapWidth=Width;
- TileMapHeight=Height;
+ MapXYShift=Shift;
+ TileTableWidth=Width;
+ TileTableHeight=Height;
for (int Buffer=0; Buffer<2; Buffer++)
{
- sTileMap2dElem *List=(sTileMap2dElem*) MemAlloc(Size*sizeof(sTileMap2dElem),"2d TileMap");
- TileMap2d[Buffer].List=List;
- TileMap2d[Buffer].MapX=0;
- TileMap2d[Buffer].MapY=0;
+ sTileTableElem *Table=(sTileTableElem*) MemAlloc(Size*sizeof(sTileTableElem),"2d TileTable");
+ TileTable[Buffer].Table=Table;
+ TileTable[Buffer].MapX=0;
+ TileTable[Buffer].MapY=0;
for (int Y=0; YTile;
- sTile *SrcTile=&TileList[MapPtr->Tile];
- setTSprt16(ThisTile);
- setTSprtTPage(ThisTile,SrcTile->TPage);
- ThisTile->r0=128;
- ThisTile->g0=128;
- ThisTile->b0=128;
- ThisTile->clut=SrcTile->Clut;
- ThisTile->u0=SrcTile->uv0[0];
- ThisTile->v0=SrcTile->uv0[1];
- if (!MapPtr->Tile)
- ThisTile->clut=0;
-
+ TSPRT_16 *Prim=&ThisElem->Prim;
+ setTSprt16(Prim);
+ setTSetShadeTex(Prim,1);
// Table
int TableR=(X+1) % Width;
int TableD=(Y+1) % Height;
- ThisElem->Right=&List[TableR+(Y*Width)];
- ThisElem->Down=&List[X+(TableD*Width)];
-
-// MapPtr++;
+ ThisElem->Right=&Table[TableR+(Y*Width)];
+ ThisElem->Down=&Table[X+(TableD*Width)];
}
}
+ UpdateWholeMap(TileTable[Buffer]);
}
-
+}
+
+/*****************************************************************************/
+void CLayerTile::UpdateWholeMap(sTileTable &ThisTable)
+{
+sTileTableElem *Table=ThisTable.Table;
+sTileMapElem *MapPtr=Map;
+
+// Calc (wrapped) Map/Table pos
+ Table+=CalcTableOfs(ThisTable.MapX,ThisTable.MapY);
+ MapPtr+=CalcMapOfs(ThisTable.MapX,ThisTable.MapY);
+
+ for (int Y=0; YDown;
+ sTileMapElem *MapDown=MapPtr+MapWidth;
+
+ for (int X=0; XPrim;
+/**/ sTile *Tile=&TileList[MapPtr->Tile];
+ setTSprtTPage(Prim,Tile->TPage);
+ *(u32*)&Prim->u0=*(u32*)&Tile->u0; // copy uv AND clut
+ Table->Tile=Tile;
+ Table->TileFlags=Tile->TriCount;
+ Table++;
+ MapPtr++;
+ }
+ Table=TableDown;
+ MapPtr=MapDown;
+ }
+
}
/*****************************************************************************/
@@ -108,18 +126,16 @@ void CLayerTile::shutdown()
/*****************************************************************************/
int CLayerTile::CalcTableOfs(int X,int Y)
{
-/**/ X%=TileMapWidth;
-/**/ Y%=TileMapHeight;
+/**/ X%=TileTableWidth;
+/**/ Y%=TileTableHeight;
-/**/ return(X+(Y*TileMapWidth));
+/**/ return(X+(Y*TileTableWidth));
}
/*****************************************************************************/
int CLayerTile::CalcMapOfs(int X,int Y)
{
-int MapWidth=GetWidth();
-int MapHeight=GetHeight();
/**/ X%=MapWidth;
/**/ Y%=MapHeight;
@@ -133,9 +149,9 @@ int MapHeight=GetHeight();
void CLayerTile::think(VECTOR &MapPos)
{
// Update rows and Columns :o)
-sTileMap2d &ThisTable=TileMap2d[FrameFlipFlag];
-int XPos=MapPos.vx>>MapShift;
-int YPos=MapPos.vy>>MapShift;
+sTileTable &ThisTable=TileTable[FrameFlipFlag];
+int XPos=MapPos.vx>>MapXYShift;
+int YPos=MapPos.vy>>MapXYShift;
int ShiftX=15-(XPos&15);
int ShiftY=15-(YPos&15);
@@ -158,7 +174,7 @@ int OldY=ThisTable.MapY;
if (NewY>OldY)
{ // update bottom row
- UpdateRow(NewX,NewY+SCREEN_TILE_HEIGHT-1,ThisTable);
+ UpdateRow(NewX,NewY+SCREEN_TILE_HEIGHT-2,ThisTable);
}
else
if (NewYTile;
- sTile *SrcTile=&TileList[MapPtr->Tile];
-
- setTSprtTPage(ThisTile,SrcTile->TPage);
- ThisTile->clut=SrcTile->Clut;
- ThisTile->u0=SrcTile->uv0[0];
- ThisTile->v0=SrcTile->uv0[1];
-
+ TSPRT_16 *Prim=&Table->Prim;
+/**/ sTile *Tile=&TileList[MapPtr->Tile];
+/**/ setTSprtTPage(Prim,Tile->TPage);
+ *(u32*)&Prim->u0=*(u32*)&Tile->u0; // copy uv AND clut
+ Table->Tile=Tile;
+ Table->TileFlags=Tile->TriCount;
MapPtr+=1;
Table=Table->Right;
}
@@ -200,12 +216,10 @@ sTileMapElem *MapPtr=Map;
}
/*****************************************************************************/
-// As column is smaller than row, it takes the corner tiles on, to balance the flow
-void CLayerTile::UpdateColumn(int MapX,int MapY,sTileMap2d &ThisTable)
+void CLayerTile::UpdateColumn(int MapX,int MapY,sTileTable &ThisTable)
{
-sTileMap2dElem *Table=ThisTable.List;
+sTileTableElem *Table=ThisTable.Table;
sTileMapElem *MapPtr=Map;
-int MapWidth=GetWidth();
// Calc (wrapped) Map/Table pos
Table+=CalcTableOfs(MapX,MapY);
@@ -214,13 +228,13 @@ int MapWidth=GetWidth();
for (int i=0; iTile;
- sTile *SrcTile=&TileList[MapPtr->Tile];
+ TSPRT_16 *Prim=&Table->Prim;
+/**/ sTile *Tile=&TileList[MapPtr->Tile];
+/**/ setTSprtTPage(Prim,Tile->TPage);
+ *(u32*)&Prim->u0=*(u32*)&Tile->u0; // copy uv AND clut
+ Table->Tile=Tile;
+ Table->TileFlags=Tile->TriCount;
- setTSprtTPage(ThisTile,SrcTile->TPage);
- ThisTile->clut=SrcTile->Clut;
- ThisTile->u0=SrcTile->uv0[0];
- ThisTile->v0=SrcTile->uv0[1];
MapPtr+=MapWidth;
Table=Table->Down;
@@ -232,8 +246,8 @@ int MapWidth=GetWidth();
/*****************************************************************************/
void CLayerTile::render()
{
-sTileMap2d &ThisTable=TileMap2d[FrameFlipFlag];
-sTileMap2dElem *Table=ThisTable.List;
+sTileTable &ThisTable=TileTable[FrameFlipFlag];
+sTileTableElem *Table=ThisTable.Table;
u32 XYPos;
// Setup shift bits of pos
@@ -245,15 +259,15 @@ u32 XYPos;
// Render it!!
for (int TileY=0; TileYDown;
+ sTileTableElem *TableDown=Table->Down;
u32 XYPosDown=XYPos+YInc;
for (int TileX=0; TileXTile;
- if (Tile->clut)
+ TSPRT_16 *Prim=&Table->Prim;
+ if (Prim->clut)
{
- *(u32*)&Tile->x0=XYPos;
-/**/ AddPrim(OtPtr,Tile);
+ *(u32*)&Prim->x0=XYPos;
+/**/ AddPrim(OtPtr,Prim);
}
Table=Table->Right;
XYPos+=XInc;
@@ -266,8 +280,8 @@ u32 XYPos;
/*****************************************************************************/
void CLayerTile::renderSolid()
{
-sTileMap2d &ThisTable=TileMap2d[FrameFlipFlag];
-sTileMap2dElem *Table=ThisTable.List;
+sTileTable &ThisTable=TileTable[FrameFlipFlag];
+sTileTableElem *Table=ThisTable.Table;
u32 XYPos;
// Setup shift bits of pos
@@ -279,13 +293,64 @@ u32 XYPos;
// Render it!!
for (int TileY=0; TileYDown;
+ sTileTableElem *TableDown=Table->Down;
u32 XYPosDown=XYPos+YInc;
for (int TileX=0; TileXTile;
- *(u32*)&Tile->x0=XYPos;
-/**/ AddPrim(OtPtr,Tile);
+ TSPRT_16 *Prim=&Table->Prim;
+ *(u32*)&Prim->x0=XYPos;
+/**/ AddPrim(OtPtr,Prim);
+ Table=Table->Right;
+ XYPos+=XInc;
+ }
+ Table=TableDown;
+ XYPos=XYPosDown;
+ }
+}
+
+
+/*****************************************************************************/
+VECTOR asd={0,0,512};
+
+void CLayerTile::render3d()
+{
+sTileTable &ThisTable=TileTable[FrameFlipFlag];
+sTileTableElem *Table=ThisTable.Table;
+u32 XYPos,XYPos3d;
+MATRIX _Mtx,*Mtx=&_Mtx;
+
+ SetIdent(Mtx);
+ Mtx->t[2]=asd.vz;
+ gte_SetRotMatrix(Mtx);
+
+// Setup shift bits of pos
+ XYPos=ThisTable.ShiftXY;
+
+// Calc (wrapped) Start pos
+ Table+=CalcTableOfs(ThisTable.MapX,ThisTable.MapY);
+
+// Render it!!
+ for (int TileY=0; TileYDown;
+ u32 XYPosDown=XYPos+YInc;
+ for (int TileX=0; TileXPrim;
+ if (Prim->clut)
+ { // 2d tile
+ *(u32*)&Prim->x0=XYPos;
+/**/ AddPrim(OtPtr,Prim);
+ }
+ if (Table->TileFlags)
+ { // 3d tile
+ u32 SX=(ThisTable.ShiftXY &15);
+ u32 SY=(ThisTable.ShiftXY>>16);
+ Mtx->t[0]=((TileX-15)*16)+SX;
+ Mtx->t[1]=((TileY-10)*16)+SY;
+ gte_SetTransMatrix(Mtx);
+ RenderBlock(Table->Tile,Table->TileFlags);
+ }
Table=Table->Right;
XYPos+=XInc;
}
@@ -295,3 +360,41 @@ u32 XYPos;
}
/*****************************************************************************/
+// NOTE: Tiles will be sorted by z order (cos they 'should' be simple objects
+// NOTE: Tiles will be split into facing strips, to reduce overdraw :o)
+// NOTE: Matrix already setup for tile
+void CLayerTile::RenderBlock(sTile *Tile,u32 Flags)
+{
+sVtx *P0,*P1,*P2;
+s32 ClipZ=0;
+POLY_FT3 *TPrimPtr=(POLY_FT3*)GetPrimPtr();
+int TriCount=Tile->TriCount;
+sTri *TList=TriList+Tile->TriList;
+u32 T0,T1,T2;
+
+//--- Tris ---------------------------------------------------------------------------
+
+ while (TriCount--)
+ {
+ P0=&VtxList[TList->P0]; P1=&VtxList[TList->P1]; P2=&VtxList[TList->P2];
+ gte_ldv3(P0,P1,P2);
+ setPolyFT3(TPrimPtr);
+ setShadeTex(TPrimPtr,1);
+ setlen( TPrimPtr, GPU_PolyFT3Tag);
+ gte_rtpt_b();
+
+ T0=*(u32*)&TList->uv0; // Get UV0 & TPage
+ T1=*(u32*)&TList->uv1; // Get UV1 & Clut
+ T2=*(u16*)&TList->uv2; // Get UV2
+ *(u32*)&TPrimPtr->u0=T0; // Set UV0
+ *(u32*)&TPrimPtr->u1=T1; // Set UV1
+ *(u16*)&TPrimPtr->u2=T2; // Set UV2
+
+ TList++;
+ addPrim(OtPtr,TPrimPtr);
+ gte_stsxy3_ft3(TPrimPtr);
+ TPrimPtr++;
+ }
+
+ SetPrimPtr((u8*)TPrimPtr);
+}
diff --git a/source/level/layertile.h b/source/level/layertile.h
index 275d3fb2a..b8de40c29 100644
--- a/source/level/layertile.h
+++ b/source/level/layertile.h
@@ -7,18 +7,20 @@
/*****************************************************************************/
-struct sTileMap2dElem
+struct sTileTableElem
{
- TSPRT_16 Tile;
- sTileMap2dElem *Right;
- sTileMap2dElem *Down;
+ TSPRT_16 Prim;
+ sTile *Tile;
+ u32 TileFlags;
+ sTileTableElem *Right;
+ sTileTableElem *Down;
};
-struct sTileMap2d
+struct sTileTable
{
int MapX,MapY;
u32 ShiftXY;
- sTileMap2dElem *List;
+ sTileTableElem *Table;
};
/*****************************************************************************/
@@ -52,19 +54,18 @@ virtual void shutdown();
virtual void think(VECTOR &MapPos);
virtual void render();
- void SetMapShift(int Shift) {MapShift=Shift;}
- int GetWidth() {return(LayerHdr->Width);}
- int GetHeight() {return(LayerHdr->Height);}
-
protected:
- sTileMap2d &GetTileMap();
+ void UpdateWholeMap(sTileTable &ThisMap);
+ sTileTable &GetTileTable();
int CalcTableOfs(int X,int Y);
int CalcMapOfs(int X,int Y);
- void UpdateRow(int MapX,int MapY,sTileMap2d &ThisMap);
- void UpdateColumn(int MapX,int MapY,sTileMap2d &ThisMap);
+ void UpdateRow(int MapX,int MapY,sTileTable &ThisMap);
+ void UpdateColumn(int MapX,int MapY,sTileTable &ThisMap);
void renderSolid();
+ void render3d();
+ void RenderBlock(sTile *Tile,u32 Flags);
sLayerHdr *LayerHdr;
sTile *TileList;
@@ -73,9 +74,9 @@ protected:
sVtx *VtxList;
sTileMapElem *Map;
- int MapShift;
- int TileMapWidth,TileMapHeight;
- sTileMap2d TileMap2d[2]; // Double Buffered
+ int MapWidth,MapHeight,MapXYShift;
+ int TileTableWidth,TileTableHeight;
+ sTileTable TileTable[2]; // Double Buffered
};
diff --git a/source/level/layertile3d.cpp b/source/level/layertile3d.cpp
index 12fa96604..818068f0b 100644
--- a/source/level/layertile3d.cpp
+++ b/source/level/layertile3d.cpp
@@ -1,6 +1,6 @@
-/*******************************/
-/*** Action Tile Layer Class ***/
-/*******************************/
+/***************************/
+/*** 3d Tile Layer Class ***/
+/***************************/
#include "system\global.h"
#include
@@ -9,18 +9,18 @@
#include "LayerTile.h"
-#include "LayerAction.h"
+#include "LayerTile3d.h"
/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************/
-CLayerAction::CLayerAction(sLayerHdr *Hdr,sTile *TileList,sTri *TriList,sQuad *QuadList,sVtx *VtxList) : CLayerTile(Hdr,TileList,TriList,QuadList,VtxList)
+CLayerTile3d::CLayerTile3d(sLayerHdr *Hdr,sTile *TileList,sTri *TriList,sQuad *QuadList,sVtx *VtxList) : CLayerTile(Hdr,TileList,TriList,QuadList,VtxList)
{
}
/*****************************************************************************/
-CLayerAction::~CLayerAction()
+CLayerTile3d::~CLayerTile3d()
{
}
@@ -28,18 +28,18 @@ CLayerAction::~CLayerAction()
/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************/
-void CLayerAction::init(VECTOR &MapPos,int Shift,int Width,int Height)
+void CLayerTile3d::init(VECTOR &MapPos,int Shift,int Width,int Height)
{
CLayerTile::init(MapPos,Shift);
}
/*****************************************************************************/
-void CLayerAction::shutdown()
+void CLayerTile3d::shutdown()
{
}
/*****************************************************************************/
-void CLayerAction::render()
+void CLayerTile3d::render()
{
// CLayerTile::render();
CLayerTile::render3d();
diff --git a/source/level/layertile3d.h b/source/level/layertile3d.h
index 6527baf40..111d620fc 100644
--- a/source/level/layertile3d.h
+++ b/source/level/layertile3d.h
@@ -1,17 +1,17 @@
-/*******************************/
-/*** Action Tile Layer Class ***/
-/*******************************/
+/***************************/
+/*** 3d Tile Layer Class ***/
+/***************************/
-#ifndef __LAYER_ACTION_H__
-#define __LAYER_ACTION_H__
+#ifndef __LAYER_TILE_3D_H__
+#define __LAYER_TILE_3D_H__
/*****************************************************************************/
-class CLayerAction : public CLayerTile
+class CLayerTile3d : public CLayerTile
{
public:
- CLayerAction(sLayerHdr *Hdr,sTile *TileList,sTri *TriList,sQuad *QuadList,sVtx *VtxList);
- ~CLayerAction();
+ CLayerTile3d(sLayerHdr *Hdr,sTile *TileList,sTri *TriList,sQuad *QuadList,sVtx *VtxList);
+ ~CLayerTile3d();
void init(VECTOR &MapPos,int Shift,int Width,int Height);
void shutdown();
diff --git a/source/level/level.cpp b/source/level/level.cpp
index a0320c935..1d77b424e 100644
--- a/source/level/level.cpp
+++ b/source/level/level.cpp
@@ -11,7 +11,8 @@
#include "level\level.h"
#include "level\layertile.h"
-#include "level\layerback.h"
+#include "level\layertilesolid.h"
+#include "level\layertile3d.h"
#include "pad\pads.h"
@@ -22,8 +23,7 @@ CLevel::CLevel()
{
TileLayers[i]=0;
}
- DAVE_DBGMSG("sizeof(POLY_FT4)=%i",sizeof(POLY_FT4));
- DAVE_DBGMSG("sizeof(TSPRT)=%i",sizeof(TSPRT));
+
MapPos.vx=0;
MapPos.vy=0;
}
@@ -58,7 +58,7 @@ sTile *TileList=(sTile*)MakePtr(LevelHdr,LevelHdr->TileList);
if (LevelHdr->BackLayer)
{
sLayerHdr *Layer=(sLayerHdr*)MakePtr(LevelHdr,LevelHdr->BackLayer);
- CLayerTile *NewLayer=new ("Back Layer") CLayerBack(Layer, TileList, TriList, QuadList, VtxList);
+ CLayerTile *NewLayer=new ("Back Layer") CLayerTileSolid(Layer, TileList, TriList, QuadList, VtxList);
NewLayer->init(MapPos,3);
TileLayers[CLayerTile::LAYER_TILE_TYPE_BACK]=NewLayer;
}
@@ -71,16 +71,17 @@ sTile *TileList=(sTile*)MakePtr(LevelHdr,LevelHdr->TileList);
NewLayer->init(MapPos,2);
TileLayers[CLayerTile::LAYER_TILE_TYPE_MID]=NewLayer;
}
-/*
+
// Action
if (LevelHdr->ActionLayer)
{
sLayerHdr *Layer=(sLayerHdr*)MakePtr(LevelHdr,LevelHdr->ActionLayer);
- CLayerTile *NewLayer=new ("Action Layer") CLayerTile(Layer, TileList, TriList, QuadList, VtxList);
- NewLayer->init();
- NewLayer->SetMapShift(0);
+ CLayerTile *NewLayer=new ("Action Layer") CLayerTile3d(Layer, TileList, TriList, QuadList, VtxList);
+ NewLayer->init(MapPos,0);
TileLayers[CLayerTile::LAYER_TILE_TYPE_ACTION]=NewLayer;
}
+
+/*
// Fore
if (LevelHdr->ForeLayer)
{
diff --git a/tools/Data/bin/MkLevel.exe b/tools/Data/bin/MkLevel.exe
index 44d115232..59cd2bd42 100644
Binary files a/tools/Data/bin/MkLevel.exe and b/tools/Data/bin/MkLevel.exe differ
diff --git a/tools/Data/include/dstructs.h b/tools/Data/include/dstructs.h
index c239b3ad1..84bee3583 100644
--- a/tools/Data/include/dstructs.h
+++ b/tools/Data/include/dstructs.h
@@ -82,12 +82,14 @@ struct sMat
//***************************************************************************
struct sTri
{
- u16 P0,P1,P2; // 6
- u16 TPage; // 2
+ u16 P0; // 2
+ u16 P1; // 2
u8 uv0[2]; // 2
- u8 uv1[2]; // 2
- u8 uv2[2]; // 2
u16 Clut; // 2
+ u8 uv1[2]; // 2
+ u16 TPage; // 2
+ u8 uv2[2]; // 2
+ u16 P2; // 2
}; // 16
// u8 r0, g0, b0, code; // 4
@@ -137,7 +139,7 @@ struct sBone
struct sTileMapElem
{
- u16 Tile;
+ u16 Tile;
};
struct sTile
@@ -148,14 +150,10 @@ struct sTile
u16 QuadList;
u16 QuadCount;
// 2d Tile
-// s16 Mat2d;
-// s8 XOfs,YOfs;
- u16 TPage;
+ u8 u0,v0;
u16 Clut;
- u8 uv0[2];
- u8 uv1[2];
- u8 uv2[2];
- u8 uv3[2];
+ u16 TPage;
+ u16 Pad; // :o( need this?
#ifdef WIN32
bool operator==(sTile const &v1)
@@ -166,15 +164,8 @@ bool operator==(sTile const &v1)
// if (QuadList!=v1.QuadList) return(false);
if (TPage!=v1.TPage) return(false);
-// if (Mat!=v1.Mat) return(false);
- if (uv0[0]!=v1.uv0[0]) return(false);
- if (uv0[1]!=v1.uv0[1]) return(false);
- if (uv1[0]!=v1.uv1[0]) return(false);
- if (uv1[1]!=v1.uv1[1]) return(false);
- if (uv2[0]!=v1.uv2[0]) return(false);
- if (uv2[1]!=v1.uv2[1]) return(false);
- if (uv3[0]!=v1.uv3[0]) return(false);
- if (uv3[1]!=v1.uv3[1]) return(false);
+ if (u0!=v1.u0) return(false);
+ if (v0!=v1.v0) return(false);
return(TRUE);
}
#endif