415 lines
8.9 KiB
C++
415 lines
8.9 KiB
C++
/***********************************************************************************************
|
|
*
|
|
* Copyright © DreamWorks Interactive. 1996
|
|
*
|
|
* Implementation of TestMath.hpp.
|
|
*
|
|
* Bugs:
|
|
*
|
|
* To do:
|
|
*
|
|
***********************************************************************************************
|
|
*
|
|
* $Log:: /JP2_PC/Source/Test/PolyTest.cpp $
|
|
*
|
|
* 31 96/10/28 14:53 Speter
|
|
* Changed AppShell:: to CAppShell::.
|
|
*
|
|
* 30 8/23/96 10:38a Gstull
|
|
* Changed prasvReadBMP() back to prasReadBMP(). Now creates a CRasterVid only if D3D support
|
|
* exists.
|
|
*
|
|
* 29 96/08/22 18:27 Speter
|
|
* Changed, expanded render flag definitions.
|
|
*
|
|
* 28 96/08/15 19:03 Speter
|
|
* Call new prasvReadBMP function.
|
|
*
|
|
* 27 7/31/96 3:25p Pkeet
|
|
* Finished tests.
|
|
*
|
|
* 26 7/31/96 12:40p Pkeet
|
|
* Updated for new object 2d definitions.
|
|
*
|
|
* 25 96/07/23 17:23 Speter
|
|
* Fixed for new object structures.
|
|
*
|
|
* 24 7/19/96 11:22a Pkeet
|
|
* Fixed shell problem.
|
|
*
|
|
* 23 96/07/18 17:19 Speter
|
|
* Changes affecting zillions of files:
|
|
* Changed SRenderCoord to SRenderVertex.
|
|
* Added SRenderTriangle type, changed drawing primitives to accept it.
|
|
*
|
|
* 22 96/07/18 16:56 Speter
|
|
*
|
|
* 21 7/18/96 3:29p Pkeet
|
|
* Converted to 'CRender'-style shell.
|
|
*
|
|
* 20 96/07/15 19:19 Speter
|
|
* Changed calls to DrawTriangle to new interface.
|
|
*
|
|
* 19 7/15/96 7:12p Pkeet
|
|
* More changes.
|
|
*
|
|
* 18 96/07/12 17:44 Speter
|
|
* Made preliminary changes to object structure and render flags.
|
|
*
|
|
* 17 7/12/96 4:59p Pkeet
|
|
* Finished debugging texture mapper and gouraud shader.
|
|
*
|
|
* 16 7/09/96 3:28p Pkeet
|
|
* Added test data for gouraud shading and linear texture mapping primitive.
|
|
*
|
|
* 15 7/08/96 3:31p Pkeet
|
|
* Changed for Scott's code review.
|
|
*
|
|
* 14 96/07/03 13:02 Speter
|
|
* Moved several files to new directories, and changed corresponding include statements.
|
|
*
|
|
* 13 6/25/96 2:34p Pkeet
|
|
* Finished tests.
|
|
*
|
|
* 12 6/24/96 6:25p Pkeet
|
|
* Finished series of tests.
|
|
*
|
|
* 11 6/18/96 3:00p Pkeet
|
|
*
|
|
* 10 6/17/96 6:48p Pkeet
|
|
* Test conversion functions.
|
|
*
|
|
* 9 6/13/96 3:10p Pkeet
|
|
*
|
|
* 8 6/06/96 7:58p Pkeet
|
|
* Changed to run test for DrawTriangle instead of DrawPolygon.
|
|
*
|
|
* 7 96/05/31 12:48 Speter
|
|
* Moved Clear from Winshell to Paint handlers.
|
|
*
|
|
* 6 5/29/96 7:54p Pkeet
|
|
* Fixed tear bug.
|
|
*
|
|
* 5 5/29/96 4:42p Pkeet
|
|
*
|
|
* 4 96/05/23 17:27 Speter
|
|
* Removed erroneous include files.
|
|
*
|
|
* 3 5/23/96 9:30a Pkeet
|
|
*
|
|
* 2 5/17/96 10:22a Pkeet
|
|
*
|
|
* 1 5/09/96 7:00p Pkeet
|
|
* Empty initial version.
|
|
*
|
|
**********************************************************************************************/
|
|
|
|
#include "Lib/W95/WinInclude.hpp"
|
|
#include "gblinc/common.hpp"
|
|
#include "Lib/Sys/Textout.hpp"
|
|
#include "Lib/Sys/W95/Render.hpp"
|
|
#include "Shell/winshell.hpp"
|
|
#include "Shell/AppShell.hpp"
|
|
#include "Shell/WinEvent.hpp"
|
|
#include "Test/PolyData.hpp"
|
|
#include "Lib/View/ColourBase.hpp"
|
|
#include "Lib/Renderer/Texture.hpp"
|
|
#include "Lib/Renderer/ScreenRender.hpp"
|
|
#include "PolyTest.hpp"
|
|
#include "Lib/Sys/ConIO.hpp"
|
|
#include "Lib/Sys/W95/Render.hpp"
|
|
|
|
SRenderTriangle rtTestTriangle
|
|
(
|
|
&arvTestVertices[0],
|
|
&arvTestVertices[1],
|
|
&arvTestVertices[2]
|
|
);
|
|
|
|
SRenderTriangle rtTestTriangle2
|
|
(
|
|
&arvTestVertices[0],
|
|
&arvTestVertices[2],
|
|
&arvTestVertices[3]
|
|
);
|
|
|
|
float fMoveBy()
|
|
{
|
|
if (GetAsyncKeyState(VK_SHIFT) == 0)
|
|
return 8.0F;
|
|
else
|
|
return 0.3F;
|
|
}
|
|
|
|
bool bShow[5] = { true, false, false, false, false };
|
|
|
|
bool bShowPal = false;
|
|
|
|
int iChangeVertex = 1;//4;
|
|
|
|
int iStyle = 2;
|
|
|
|
void DoKey(uint u_key_code)
|
|
{
|
|
int i_temp;
|
|
|
|
switch (u_key_code)
|
|
{
|
|
case '1':
|
|
bShow[0] = !bShow[0];
|
|
break;
|
|
case '2':
|
|
bShow[1] = !bShow[1];
|
|
break;
|
|
case '3':
|
|
bShow[2] = !bShow[2];
|
|
break;
|
|
case '4':
|
|
bShow[3] = !bShow[3];
|
|
break;
|
|
case '5':
|
|
bShow[4] = !bShow[4];
|
|
break;
|
|
case VK_UP:
|
|
arvTestVertices[iChangeVertex].v3Screen.tY += fMoveBy();
|
|
break;
|
|
case VK_DOWN:
|
|
arvTestVertices[iChangeVertex].v3Screen.tY -= fMoveBy();
|
|
break;
|
|
case VK_LEFT:
|
|
arvTestVertices[iChangeVertex].v3Screen.tX += fMoveBy();
|
|
break;
|
|
case VK_RIGHT:
|
|
arvTestVertices[iChangeVertex].v3Screen.tX -= fMoveBy();
|
|
break;
|
|
|
|
case VK_F5:
|
|
iStyle = (iStyle + 1) % 4;
|
|
break;
|
|
|
|
case VK_F6:
|
|
TerminateShell(false);
|
|
break;
|
|
case VK_F7:
|
|
i_temp = aiPoly3[0];
|
|
aiPoly3[0] = aiPoly3[1];
|
|
aiPoly3[1] = aiPoly3[2];
|
|
aiPoly3[2] = i_temp;
|
|
break;
|
|
case VK_F8:
|
|
iChangeVertex = (iChangeVertex + 1) % 6;
|
|
break;
|
|
case VK_F11:
|
|
RollTestVertices();
|
|
break;
|
|
|
|
case VK_F3:
|
|
arvTestVertices[6].fInvZ *= 1.08f;
|
|
break;
|
|
case VK_F4:
|
|
arvTestVertices[6].fInvZ /= 1.08f;
|
|
break;
|
|
|
|
case VK_F2:
|
|
return;
|
|
|
|
case VK_F1:
|
|
bShowPal = !bShowPal;
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
CAppShell::Repaint();
|
|
}
|
|
|
|
uint32 GetColour(CRaster* pras, int i_red, int i_green, int i_blue)
|
|
{
|
|
switch (pras->iPixelBits)
|
|
{
|
|
case 8:
|
|
Assert(pcdbMain.pceMainPalClut);
|
|
Assert(pcdbMain.pceMainPalClut->ppalPalette);
|
|
return pcdbMain.pceMainPalClut->ppalPalette->u1MatchEntry(CColour(i_red, i_green, i_blue));
|
|
break;
|
|
case 16:
|
|
return ((i_red >> 3) << 10) | ((i_green >> 3) << 5) | (i_blue >> 3);
|
|
break;
|
|
case 24:
|
|
return (i_red << 16) | (i_green << 8) | (i_blue);
|
|
break;
|
|
default:
|
|
Assert(false);
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
uint32 u4MakeColour(int i_r, int i_g, int i_b, int i_depth = 0)
|
|
{
|
|
Assert(psrMain);
|
|
Assert(psrMain->prasScreen);
|
|
|
|
int i_pal_index;
|
|
CPalClut* ppce = pcdbMain.ppceFindColourMatch(CColour(i_r, i_g, i_b), i_pal_index);
|
|
|
|
Assert(ppce);
|
|
Assert(ppce->pclutClut);
|
|
|
|
uint32 u4_ret_data = ppce->pclutClut->u4GetGouraudAddress(i_pal_index, i_depth);
|
|
Assert(u4_ret_data);
|
|
return u4_ret_data;
|
|
}
|
|
|
|
|
|
void WindowsEvent(uint u_message, WPARAM wp_param, LPARAM lp_param)
|
|
{
|
|
switch (u_message)
|
|
{
|
|
case WM_DESTROY:
|
|
// Destroy the test bitmap.
|
|
// ptexTexture is a const pointer and should be deleted elsewhere.
|
|
// delete rtTestTriangle.ptexTexture;
|
|
break;
|
|
|
|
case AM_NEWRASTER:
|
|
CAppShell::SetContinuous(false);
|
|
if (rtTestTriangle.ptexTexture == 0)
|
|
{
|
|
if (*strCommandArg)
|
|
{
|
|
rtTestTriangle.ptexTexture = new CTexture(prasReadBMP(strCommandArg));
|
|
}
|
|
else
|
|
{
|
|
rtTestTriangle.ptexTexture = new CTexture(prasReadBMP("BinData\\Palettes\\Standard.bmp"));
|
|
}
|
|
}
|
|
if (rtTestTriangle2.ptexTexture == 0)
|
|
{
|
|
if (*strCommandArg)
|
|
{
|
|
rtTestTriangle2.ptexTexture = new CTexture(prasReadBMP(strCommandArg));
|
|
}
|
|
else
|
|
{
|
|
rtTestTriangle2.ptexTexture = new CTexture(prasReadBMP("BinData\\Palettes\\Standard.bmp"));
|
|
}
|
|
}
|
|
Assert(prasMainScreen);
|
|
Assert(rtTestTriangle.ptexTexture);
|
|
break;
|
|
case WM_KEYDOWN:
|
|
DoKey(wp_param);
|
|
break;
|
|
case AM_PAINT:
|
|
Assert(psrMain);
|
|
Assert(rtTestTriangle.ptexTexture);
|
|
Assert(rtTestTriangle.ptexTexture->prasTexture);
|
|
Assert(rtTestTriangle.ptexTexture->ppcePalClut);
|
|
Assert(rtTestTriangle2.ptexTexture);
|
|
Assert(rtTestTriangle2.ptexTexture->prasTexture);
|
|
Assert(rtTestTriangle2.ptexTexture->ppcePalClut);
|
|
|
|
if (rtTestTriangle.ptexTexture->ppcePalClut->pclutClut == 0)
|
|
pcdbMain.UpdateCluts(prasMainScreen);
|
|
if (rtTestTriangle2.ptexTexture->ppcePalClut->pclutClut == 0)
|
|
pcdbMain.UpdateCluts(prasMainScreen);
|
|
|
|
conStd.OpenFileSession("x.txt");
|
|
conStd.ClearScreen();
|
|
|
|
prasMainScreen->Clear(0);
|
|
psrMain->ResetZBuffer();
|
|
|
|
//
|
|
// Draw test polygons on the screen.
|
|
//
|
|
/*
|
|
psrMain->DrawTriangle
|
|
(
|
|
&arvTestVertices[5],
|
|
&arvTestVertices[6],
|
|
&arvTestVertices[7],
|
|
GetColour(prasMainScreen, 0, 255, 0),
|
|
eFLAT_SHADED_Z
|
|
);
|
|
*/
|
|
switch (iStyle)
|
|
{
|
|
case 0:
|
|
if (bShow[0])
|
|
{
|
|
((CTexture*)rtTestTriangle.ptexTexture)->tpSolid
|
|
= rtTestTriangle.ptexTexture->prasTexture->pixFromColour(CColour(0, 255, 0));
|
|
psrMain->DrawTriangle
|
|
(
|
|
rtTestTriangle,
|
|
Set(erfZ_BUFFER)
|
|
);
|
|
}
|
|
if (bShow[0])
|
|
{
|
|
((CTexture*)rtTestTriangle2.ptexTexture)->tpSolid
|
|
= rtTestTriangle.ptexTexture->prasTexture->pixFromColour(CColour(255, 255, 255));
|
|
psrMain->DrawTriangle
|
|
(
|
|
rtTestTriangle2,
|
|
Set(erfZ_BUFFER)
|
|
);
|
|
}
|
|
break;
|
|
case 1:
|
|
if (bShow[0])
|
|
{
|
|
((CTexture*)rtTestTriangle.ptexTexture)->tpSolid
|
|
= rtTestTriangle.ptexTexture->prasTexture->pixFromColour(CColour(255, 255, 255));
|
|
psrMain->DrawTriangle
|
|
(
|
|
rtTestTriangle,
|
|
Set(erfZ_BUFFER) + erfLIGHT_SHADE
|
|
);
|
|
}
|
|
break;
|
|
case 2:
|
|
if (bShow[0])
|
|
psrMain->DrawTriangle
|
|
(
|
|
rtTestTriangle,
|
|
Set(erfZ_BUFFER) + erfTEXTURE
|
|
);
|
|
break;
|
|
case 3:
|
|
if (bShow[0])
|
|
psrMain->DrawTriangle
|
|
(
|
|
rtTestTriangle,
|
|
Set(erfZ_BUFFER) + erfTEXTURE + erfLIGHT_SHADE
|
|
);
|
|
break;
|
|
default:
|
|
Assert(0);
|
|
break;
|
|
}
|
|
|
|
if (bShowPal)
|
|
{
|
|
psrMain->DrawPalette();
|
|
}
|
|
|
|
conStd.Show();
|
|
conStd.CloseFileSession();
|
|
break;
|
|
}
|
|
};
|
|
|
|
class CCl
|
|
{
|
|
public:
|
|
~CCl()
|
|
{
|
|
conStd.CloseFileSession();
|
|
};
|
|
};
|
|
|
|
CCl Cl;
|
|
|