Arachnoid GLESv1.1 plugin. Compile and run (a bit glitchy and no frameskip) on the...
[mupen64plus-pandora.git] / source / mupen64plus-video-arachnoid / src / ucodes / UCode4.cpp
CommitLineData
22726e4d 1/******************************************************************************
2 * Arachnoid Graphics Plugin for Mupen64Plus
3 * http://bitbucket.org/wahrhaft/mupen64plus-video-arachnoid/
4 *
5 * Copyright (C) 2007 Kristofer Karlsson, Rickard Niklasson
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 *****************************************************************************/
21
22#include "UCode4.h"
23#include "UCode0.h"
24#include "GBI.h"
25#include "RSP.h"
26#include "UCodeDefs.h"
27#include "GBIDefs.h"
28#include "Logger.h"
29
30#define F3DWRUS_TRI2 0xB1
31
32//-----------------------------------------------------------------------------
33// Static Variables
34//-----------------------------------------------------------------------------
35GBI* UCode4::m_gbi = 0;
36RSP* UCode4::m_rsp = 0; //!< Pointer to Reality Signal Processor
37
38//-----------------------------------------------------------------------------
39//! Constructor
40//-----------------------------------------------------------------------------
41UCode4::UCode4()
42{
43}
44
45//-----------------------------------------------------------------------------
46//! Destructor
47//-----------------------------------------------------------------------------
48UCode4::~UCode4()
49{
50}
51
52//-----------------------------------------------------------------------------
53//! Initialize
54//-----------------------------------------------------------------------------
55void UCode4::initialize(GBI* gbi, RSP* rsp)
56{
57 m_gbi = gbi;
58 m_rsp = rsp;
59}
60
61//-----------------------------------------------------------------------------
62//! Initialize GBI
63//-----------------------------------------------------------------------------
64void UCode4::initializeGBI()
65{
66 UCode0::initializeGBI(m_gbi);
67
68 //Init special Wave Race functions
69 GBI_SetGBI( GBI::G_VTX, F3D_VTX, m_gbi->m_cmds, WaveRace64_Vertex );
70 GBI_SetGBI( GBI::G_TRI1, F3D_TRI1, m_gbi->m_cmds, WaveRace64_Tri1 );
71 GBI_SetGBI( GBI::G_QUAD, F3D_QUAD, m_gbi->m_cmds, WaveRace64_Quad );
72 GBI_SetGBI( GBI::G_TRI2, F3DWRUS_TRI2, m_gbi->m_cmds, WaveRace64_Tri2 );
73}
74
75//-----------------------------------------------------------------------------
76//! Add Vertices
77//! @param ucode instruction from displaylist with input data
78//-----------------------------------------------------------------------------
79void UCode4::WaveRace64_Vertex(MicrocodeArgument* ucode)
80{
81 Logger::getSingleton().printMsg("WaveRace64_Vertex", M64MSG_VERBOSE);
82 RSPUCodeAddVerticesWaveRace64* temp = (RSPUCodeAddVerticesWaveRace64*)ucode;
83
84 //Add Vertices
85 m_rsp->RSP_Vertex(temp->segmentAddress, temp->numVertices, temp->firstVertexIndex/5);
86}
87
88//-----------------------------------------------------------------------------
89//! Add one Triangle
90//! @param ucode instruction from displaylist with input data
91//-----------------------------------------------------------------------------
92void UCode4::WaveRace64_Tri1(MicrocodeArgument* ucode)
93{
94 Logger::getSingleton().printMsg("WaveRace64_Tri1", M64MSG_VERBOSE);
95 RSPUCodeAddOneTriangleF3D* temp = (RSPUCodeAddOneTriangleF3D*)ucode;
96
97 //Add triangle
98 m_rsp->RSP_1Triangle(temp->index0 / 5, temp->index1 / 5, temp->index2 / 5 /*,temp->flag,*/ );
99}
100
101//-----------------------------------------------------------------------------
102//! Add 2 Triangles
103//! @param ucode instruction from displaylist with input data
104//-----------------------------------------------------------------------------
105void UCode4::WaveRace64_Tri2(MicrocodeArgument* ucode)
106{
107 Logger::getSingleton().printMsg("WaveRace64_Tri2", M64MSG_VERBOSE);
108 RSPUCodeAddTwoTrianglesWaveRace64* temp = (RSPUCodeAddTwoTrianglesWaveRace64*)ucode;
109
110 //Add Two triangles
111 m_rsp->RSP_2Triangles( temp->v0 / 5, temp->v1 / 5, temp->v2 / 5, 0,
112 temp->v3 / 5, temp->v4 / 5, temp->v5 / 5, 0);
113}
114
115//-----------------------------------------------------------------------------
116//! Add Quad
117//! @param ucode instruction from displaylist with input data
118//-----------------------------------------------------------------------------
119void UCode4::WaveRace64_Quad(MicrocodeArgument* ucode)
120{
121 Logger::getSingleton().printMsg("WaveRace64_Quad", M64MSG_VERBOSE);
122 RSPUCodeAddOneQuadF3D* temp = (RSPUCodeAddOneQuadF3D*)ucode;
123
124 //Add Quad
125 m_rsp->RSP_1Quadrangle(temp->index0/5, temp->index1/5, temp->index2/5, temp->index3/5);
126}