[Video] Move vertex definition into Renderer/types.h

This commit is contained in:
zilmar 2017-08-17 08:18:19 +10:00
parent 90dcbd4f3f
commit f5b0dee53e
25 changed files with 180 additions and 181 deletions

View File

@ -22,7 +22,7 @@ extern "C" {
#include "3dmath.h" #include "3dmath.h"
#include "trace.h" #include "trace.h"
void calc_light(VERTEX &v) void calc_light(gfxVERTEX &v)
{ {
float light_intensity = 0.0f; float light_intensity = 0.0f;
register float color[3] = { rdp.light[rdp.num_lights].r, rdp.light[rdp.num_lights].g, rdp.light[rdp.num_lights].b }; register float color[3] = { rdp.light[rdp.num_lights].r, rdp.light[rdp.num_lights].g, rdp.light[rdp.num_lights].b };
@ -47,7 +47,7 @@ void calc_light(VERTEX &v)
v.b = (uint8_t)(color[2] * 255.0f); v.b = (uint8_t)(color[2] * 255.0f);
} }
void calc_linear(VERTEX &v) void calc_linear(gfxVERTEX &v)
{ {
if (g_settings->force_calc_sphere()) if (g_settings->force_calc_sphere())
{ {
@ -90,7 +90,7 @@ void calc_linear(VERTEX &v)
WriteTrace(TraceRDP, TraceVerbose, "calc linear u: %f, v: %f", v.ou, v.ov); WriteTrace(TraceRDP, TraceVerbose, "calc linear u: %f, v: %f", v.ou, v.ov);
} }
void calc_sphere(VERTEX &v) void calc_sphere(gfxVERTEX &v)
{ {
WriteTrace(TraceRDP, TraceDebug, "calc_sphere"); WriteTrace(TraceRDP, TraceDebug, "calc_sphere");
DECLAREALIGN16VAR(vec[3]); DECLAREALIGN16VAR(vec[3]);

View File

@ -11,9 +11,9 @@
* version 2 of the License, or (at your option) any later version. * * version 2 of the License, or (at your option) any later version. *
* * * *
****************************************************************************/ ****************************************************************************/
void calc_light(VERTEX &v); void calc_light(gfxVERTEX &v);
void calc_linear(VERTEX &v); void calc_linear(gfxVERTEX &v);
void calc_sphere(VERTEX &v); void calc_sphere(gfxVERTEX &v);
void math_init(); void math_init();

View File

@ -37,7 +37,7 @@ void output(float x, float y, int scale, const char *fmt, ...)
{ {
c = ((out_buf[i] - 32) & 0x1F) * 8;//<< 3; c = ((out_buf[i] - 32) & 0x1F) * 8;//<< 3;
r = (((out_buf[i] - 32) & 0xE0) >> 5) * 16;//<< 4; r = (((out_buf[i] - 32) & 0xE0) >> 5) * 16;//<< 4;
VERTEX v[4] = { { x * scale_1024, (768 - y) * scale_768, 1, 1, (float)c, r + 16.0f, 0, 0,{ 0, 0, 0, 0 } }, gfxVERTEX v[4] = { { x * scale_1024, (768 - y) * scale_768, 1, 1, (float)c, r + 16.0f, 0, 0,{ 0, 0, 0, 0 } },
{ (x + 8) * scale_1024, (768 - y) * scale_768, 1, 1, c + 8.0f, r + 16.0f, 0, 0,{ 0, 0, 0, 0 } }, { (x + 8) * scale_1024, (768 - y) * scale_768, 1, 1, c + 8.0f, r + 16.0f, 0, 0,{ 0, 0, 0, 0 } },
{ x * scale_1024, (768 - y - 16) * scale_768, 1, 1, (float)c, (float)r, 0, 0,{ 0, 0, 0, 0 } }, { x * scale_1024, (768 - y - 16) * scale_768, 1, 1, (float)c, (float)r, 0, 0,{ 0, 0, 0, 0 } },
{ (x + 8) * scale_1024, (768 - y - 16) * scale_768, 1, 1, c + 8.0f, (float)r, 0, 0,{ 0, 0, 0, 0 } } { (x + 8) * scale_1024, (768 - y - 16) * scale_768, 1, 1, c + 8.0f, (float)r, 0, 0,{ 0, 0, 0, 0 } }

View File

@ -95,7 +95,7 @@ static void DrawRE2Video(FB_TO_SCREEN_INFO & fb_info, float scale)
float lr_x = g_scr_res_x - 1.0f; float lr_x = g_scr_res_x - 1.0f;
float lr_u = (fb_info.width - 1)*scale; float lr_u = (fb_info.width - 1)*scale;
float lr_v = (fb_info.height - 1)*scale; float lr_v = (fb_info.height - 1)*scale;
VERTEX v[4] = { gfxVERTEX v[4] = {
{ ul_x, ul_y, 1, 1, 0.5f, 0.5f, 0.5f, 0.5f, { 0.5f, 0.5f, 0.5f, 0.5f } }, { ul_x, ul_y, 1, 1, 0.5f, 0.5f, 0.5f, 0.5f, { 0.5f, 0.5f, 0.5f, 0.5f } },
{ lr_x, ul_y, 1, 1, lr_u, 0.5f, lr_u, 0.5f, { lr_u, 0.5f, lr_u, 0.5f } }, { lr_x, ul_y, 1, 1, lr_u, 0.5f, lr_u, 0.5f, { lr_u, 0.5f, lr_u, 0.5f } },
{ ul_x, lr_y, 1, 1, 0.5f, lr_v, 0.5f, lr_v, { 0.5f, lr_v, 0.5f, lr_v } }, { ul_x, lr_y, 1, 1, 0.5f, lr_v, 0.5f, lr_v, { 0.5f, lr_v, 0.5f, lr_v } },
@ -248,7 +248,7 @@ static void DrawFrameBufferToScreen256(FB_TO_SCREEN_INFO & fb_info)
float lr_u = (float)(cur_width - 1); float lr_u = (float)(cur_width - 1);
float lr_v = (float)(cur_height - 1); float lr_v = (float)(cur_height - 1);
// Make the vertices // Make the vertices
VERTEX v[4] = { gfxVERTEX v[4] = {
{ ul_x, ul_y, 1, 1, 0.5f, 0.5f, 0.5f, 0.5f, { 0.5f, 0.5f, 0.5f, 0.5f } }, { ul_x, ul_y, 1, 1, 0.5f, 0.5f, 0.5f, 0.5f, { 0.5f, 0.5f, 0.5f, 0.5f } },
{ lr_x, ul_y, 1, 1, lr_u, 0.5f, lr_u, 0.5f, { lr_u, 0.5f, lr_u, 0.5f } }, { lr_x, ul_y, 1, 1, lr_u, 0.5f, lr_u, 0.5f, { lr_u, 0.5f, lr_u, 0.5f } },
{ ul_x, lr_y, 1, 1, 0.5f, lr_v, 0.5f, lr_v, { 0.5f, lr_v, 0.5f, lr_v } }, { ul_x, lr_y, 1, 1, 0.5f, lr_v, 0.5f, lr_v, { 0.5f, lr_v, 0.5f, lr_v } },
@ -368,7 +368,7 @@ bool DrawFrameBufferToScreen(FB_TO_SCREEN_INFO & fb_info)
float lr_u = (width - 1)*scale; float lr_u = (width - 1)*scale;
float lr_v = (height - 1)*scale; float lr_v = (height - 1)*scale;
// Make the vertices // Make the vertices
VERTEX v[4] = { gfxVERTEX v[4] = {
{ ul_x, ul_y, 1, 1, 0.5f, 0.5f, 0.5f, 0.5f, { 0.5f, 0.5f, 0.5f, 0.5f } }, { ul_x, ul_y, 1, 1, 0.5f, 0.5f, 0.5f, 0.5f, { 0.5f, 0.5f, 0.5f, 0.5f } },
{ lr_x, ul_y, 1, 1, lr_u, 0.5f, lr_u, 0.5f, { lr_u, 0.5f, lr_u, 0.5f } }, { lr_x, ul_y, 1, 1, lr_u, 0.5f, lr_u, 0.5f, { lr_u, 0.5f, lr_u, 0.5f } },
{ ul_x, lr_y, 1, 1, 0.5f, lr_v, 0.5f, lr_v, { 0.5f, lr_v, 0.5f, lr_v } }, { ul_x, lr_y, 1, 1, 0.5f, lr_v, 0.5f, lr_v, { 0.5f, lr_v, 0.5f, lr_v } },
@ -440,7 +440,7 @@ static void DrawDepthBufferToScreen256(FB_TO_SCREEN_INFO & fb_info)
float lr_u = (float)(cur_width - 1); float lr_u = (float)(cur_width - 1);
float lr_v = (float)(cur_height - 1); float lr_v = (float)(cur_height - 1);
// Make the vertices // Make the vertices
VERTEX v[4] = { gfxVERTEX v[4] = {
{ ul_x, ul_y, 1, 1, 0.5f, 0.5f, 0.5f, 0.5f, { 0.5f, 0.5f, 0.5f, 0.5f } }, { ul_x, ul_y, 1, 1, 0.5f, 0.5f, 0.5f, 0.5f, { 0.5f, 0.5f, 0.5f, 0.5f } },
{ lr_x, ul_y, 1, 1, lr_u, 0.5f, lr_u, 0.5f, { lr_u, 0.5f, lr_u, 0.5f } }, { lr_x, ul_y, 1, 1, lr_u, 0.5f, lr_u, 0.5f, { lr_u, 0.5f, lr_u, 0.5f } },
{ ul_x, lr_y, 1, 1, 0.5f, lr_v, 0.5f, lr_v, { 0.5f, lr_v, 0.5f, lr_v } }, { ul_x, lr_y, 1, 1, 0.5f, lr_v, 0.5f, lr_v, { 0.5f, lr_v, 0.5f, lr_v } },
@ -509,7 +509,7 @@ static void DrawHiresDepthBufferToScreen(FB_TO_SCREEN_INFO & fb_info)
float lr_u = (float)rdp.scissor.lr_x * scale; float lr_u = (float)rdp.scissor.lr_x * scale;
float lr_v = (float)rdp.scissor.lr_y * scale; float lr_v = (float)rdp.scissor.lr_y * scale;
// Make the vertices // Make the vertices
VERTEX v[4] = { gfxVERTEX v[4] = {
{ ul_x, ul_y, 1, 1, ul_u, ul_v, ul_u, ul_v, { ul_u, ul_v, ul_u, ul_v } }, { ul_x, ul_y, 1, 1, ul_u, ul_v, ul_u, ul_v, { ul_u, ul_v, ul_u, ul_v } },
{ lr_x, ul_y, 1, 1, lr_u, ul_v, lr_u, ul_v, { lr_u, ul_v, lr_u, ul_v } }, { lr_x, ul_y, 1, 1, lr_u, ul_v, lr_u, ul_v, { lr_u, ul_v, lr_u, ul_v } },
{ ul_x, lr_y, 1, 1, ul_u, lr_v, ul_u, lr_v, { ul_u, lr_v, ul_u, lr_v } }, { ul_x, lr_y, 1, 1, ul_u, lr_v, ul_u, lr_v, { ul_u, lr_v, ul_u, lr_v } },
@ -594,7 +594,7 @@ void DrawDepthBufferToScreen(FB_TO_SCREEN_INFO & fb_info)
float lr_v = (height - 1)*scale; float lr_v = (height - 1)*scale;
float zero = scale*0.5f; float zero = scale*0.5f;
// Make the vertices // Make the vertices
VERTEX v[4] = { gfxVERTEX v[4] = {
{ ul_x, ul_y, 1, 1, zero, zero, zero, zero, { zero, zero, zero, zero } }, { ul_x, ul_y, 1, 1, zero, zero, zero, zero, { zero, zero, zero, zero } },
{ lr_x, ul_y, 1, 1, lr_u, zero, lr_u, zero, { lr_u, zero, lr_u, zero } }, { lr_x, ul_y, 1, 1, lr_u, zero, lr_u, zero, { lr_u, zero, lr_u, zero } },
{ ul_x, lr_y, 1, 1, zero, lr_v, zero, lr_v, { zero, lr_v, zero, lr_v } }, { ul_x, lr_y, 1, 1, zero, lr_v, zero, lr_v, { zero, lr_v, zero, lr_v } },

View File

@ -22,14 +22,14 @@
#include <Project64-video/trace.h> #include <Project64-video/trace.h>
#define Z_MAX (65536.0f) #define Z_MAX (65536.0f)
#define VERTEX_SIZE sizeof(VERTEX) //Size of vertex struct #define VERTEX_SIZE sizeof(gfxVERTEX) //Size of vertex struct
int w_buffer_mode; int w_buffer_mode;
int inverted_culling; int inverted_culling;
gfxCullMode_t culling_mode; gfxCullMode_t culling_mode;
#define VERTEX_BUFFER_SIZE 1500 //Max amount of vertices to buffer, this seems large enough. #define VERTEX_BUFFER_SIZE 1500 //Max amount of vertices to buffer, this seems large enough.
static VERTEX vertex_buffer[VERTEX_BUFFER_SIZE]; static gfxVERTEX vertex_buffer[VERTEX_BUFFER_SIZE];
static int vertex_buffer_count = 0; static int vertex_buffer_count = 0;
static GLenum vertex_draw_mode; static GLenum vertex_draw_mode;
static bool vertex_buffer_enabled = false; static bool vertex_buffer_enabled = false;
@ -262,7 +262,7 @@ void gfxDepthBiasLevel(int32_t level)
} }
// draw // draw
void gfxDrawTriangle(const void *a, const void *b, const void *c) void gfxDrawTriangle(const gfxVERTEX *a, const gfxVERTEX *b, const gfxVERTEX *c)
{ {
WriteTrace(TraceGlitch, TraceDebug, "start"); WriteTrace(TraceGlitch, TraceDebug, "start");
vbo_enable(); vbo_enable();
@ -289,7 +289,7 @@ void gfxDrawTriangle(const void *a, const void *b, const void *c)
WriteTrace(TraceGlitch, TraceDebug, "Done"); WriteTrace(TraceGlitch, TraceDebug, "Done");
} }
void gfxDrawLine(const void *a, const void *b) void gfxDrawLine(const gfxVERTEX *a, const gfxVERTEX *b)
{ {
} }

View File

@ -23,13 +23,13 @@
#define Z_MAX (65536.0f) #define Z_MAX (65536.0f)
static int xy_off = offsetof(VERTEX, x); static int xy_off = offsetof(gfxVERTEX, x);
static int z_off = offsetof(VERTEX, z); static int z_off = offsetof(gfxVERTEX, z);
static int q_off = offsetof(VERTEX, q); static int q_off = offsetof(gfxVERTEX, q);
static int pargb_off = offsetof(VERTEX, b); static int pargb_off = offsetof(gfxVERTEX, b);
static int st0_off = offsetof(VERTEX, coord[0]); static int st0_off = offsetof(gfxVERTEX, coord[0]);
static int st1_off = offsetof(VERTEX, coord[2]); static int st1_off = offsetof(gfxVERTEX, coord[2]);
static int fog_ext_off = offsetof(VERTEX, f); static int fog_ext_off = offsetof(gfxVERTEX, f);
int w_buffer_mode; int w_buffer_mode;
int inverted_culling; int inverted_culling;
@ -261,7 +261,7 @@ void gfxDepthBiasLevel(int32_t level)
} }
// draw // draw
void gfxDrawTriangle(const void *a, const void *b, const void *c) void gfxDrawTriangle(const gfxVERTEX *a, const gfxVERTEX *b, const gfxVERTEX *c)
{ {
float *a_x = (float*)a + xy_off / sizeof(float); float *a_x = (float*)a + xy_off / sizeof(float);
float *a_y = (float*)a + xy_off / sizeof(float) + 1; float *a_y = (float*)a + xy_off / sizeof(float) + 1;
@ -376,7 +376,7 @@ void gfxDrawTriangle(const void *a, const void *b, const void *c)
grDisplayGLError("gfxDrawTriangle"); grDisplayGLError("gfxDrawTriangle");
} }
void gfxDrawLine(const void *a, const void *b) void gfxDrawLine(const gfxVERTEX *a, const gfxVERTEX *b)
{ {
float *a_x = (float*)a + xy_off / sizeof(float); float *a_x = (float*)a + xy_off / sizeof(float);
float *a_y = (float*)a + xy_off / sizeof(float) + 1; float *a_y = (float*)a + xy_off / sizeof(float) + 1;

View File

@ -43,9 +43,9 @@ void gfxCullMode(gfxCullMode_t mode);
void gfxDepthBufferMode(gfxDepthBufferMode_t mode); void gfxDepthBufferMode(gfxDepthBufferMode_t mode);
void gfxDepthBufferFunction(gfxCmpFnc_t function); void gfxDepthBufferFunction(gfxCmpFnc_t function);
void gfxDepthMask(bool mask); void gfxDepthMask(bool mask);
void gfxDrawTriangle(const void *a, const void *b, const void *c); void gfxDrawTriangle(const gfxVERTEX *a, const gfxVERTEX *b, const gfxVERTEX *c);
void gfxDepthBiasLevel(int32_t level); void gfxDepthBiasLevel(int32_t level);
void gfxDrawLine(const void *a, const void *b); void gfxDrawLine(const gfxVERTEX *a, const gfxVERTEX *b);
void gfxDrawVertexArray(gfxDrawMode_t mode, uint32_t Count, void *pointers2); void gfxDrawVertexArray(gfxDrawMode_t mode, uint32_t Count, void *pointers2);
void gfxDrawVertexArrayContiguous(gfxDrawMode_t mode, uint32_t Count, void *pointers, uint32_t stride); void gfxDrawVertexArrayContiguous(gfxDrawMode_t mode, uint32_t Count, void *pointers, uint32_t stride);

View File

@ -374,3 +374,35 @@ typedef struct {
gfxLfbWriteMode_t writeMode; gfxLfbWriteMode_t writeMode;
gfxOriginLocation_t origin; gfxOriginLocation_t origin;
} gfxLfbInfo_t; } gfxLfbInfo_t;
typedef struct
{
float x, y, z, q;
float u0, v0, u1, v1;
float coord[4];
float w;
uint16_t flags;
uint8_t b; // These values are arranged like this so that *(uint32_t*)(gfxVERTEX+?) is
uint8_t g; // ARGB format that glide can use.
uint8_t r;
uint8_t a;
float f; //fog
float vec[3]; // normal vector
float sx, sy, sz;
float x_w, y_w, z_w, u0_w, v0_w, u1_w, v1_w, oow;
uint8_t not_zclipped;
uint8_t screen_translated;
uint8_t uv_scaled;
uint32_t uv_calculated; // like crc
uint32_t shade_mod;
uint32_t color_backup;
float ou, ov;
int number; // way to identify it
int scr_off, z_off; // off the screen?
} gfxVERTEX;

View File

@ -419,7 +419,7 @@ int CloseTextureBuffer(int draw)
WriteTrace(TraceRDP, TraceDebug, "lr_x: %f, lr_y: %f, lr_u: %f, lr_v: %f", lr_x, lr_y, lr_u, lr_v); WriteTrace(TraceRDP, TraceDebug, "lr_x: %f, lr_y: %f, lr_u: %f, lr_v: %f", lr_x, lr_y, lr_u, lr_v);
// Make the vertices // Make the vertices
VERTEX v[4] = { gfxVERTEX v[4] = {
{ ul_x, ul_y, 1, 1, zero, zero, zero, zero, { zero, zero, zero, zero } }, { ul_x, ul_y, 1, 1, zero, zero, zero, zero, { zero, zero, zero, zero } },
{ lr_x, ul_y, 1, 1, lr_u, zero, lr_u, zero, { lr_u, zero, lr_u, zero } }, { lr_x, ul_y, 1, 1, lr_u, zero, lr_u, zero, { lr_u, zero, lr_u, zero } },
{ ul_x, lr_y, 1, 1, zero, lr_v, zero, lr_v, { zero, lr_v, zero, lr_v } }, { ul_x, lr_y, 1, 1, zero, lr_v, zero, lr_v, { zero, lr_v, zero, lr_v } },
@ -474,7 +474,7 @@ int CopyTextureBuffer(COLOR_IMAGE & fb_from, COLOR_IMAGE & fb_to)
WriteTrace(TraceRDP, TraceDebug, "lr_x: %f, lr_y: %f", lr_x, lr_y); WriteTrace(TraceRDP, TraceDebug, "lr_x: %f, lr_y: %f", lr_x, lr_y);
// Make the vertices // Make the vertices
VERTEX v[4] = { gfxVERTEX v[4] = {
{ ul_x, ul_y, 1, 1, zero, zero, zero, zero, { zero, zero, zero, zero } }, { ul_x, ul_y, 1, 1, zero, zero, zero, zero, { zero, zero, zero, zero } },
{ lr_x, ul_y, 1, 1, lr_u, zero, lr_u, zero, { lr_u, zero, lr_u, zero } }, { lr_x, ul_y, 1, 1, lr_u, zero, lr_u, zero, { lr_u, zero, lr_u, zero } },
{ ul_x, lr_y, 1, 1, zero, lr_v, zero, lr_v, { zero, lr_v, zero, lr_v } }, { ul_x, lr_y, 1, 1, zero, lr_v, zero, lr_v, { zero, lr_v, zero, lr_v } },
@ -530,7 +530,7 @@ int CopyDepthBuffer()
WriteTrace(TraceRDP, TraceDebug, "lr_x: %f, lr_y: %f", lr_x, lr_y); WriteTrace(TraceRDP, TraceDebug, "lr_x: %f, lr_y: %f", lr_x, lr_y);
// Make the vertices // Make the vertices
VERTEX v[4] = { gfxVERTEX v[4] = {
{ ul_x, ul_y, 1, 1, zero, zero, zero, zero, { zero, zero, zero, zero } }, { ul_x, ul_y, 1, 1, zero, zero, zero, zero, { zero, zero, zero, zero } },
{ lr_x, ul_y, 1, 1, lr_u, zero, lr_u, zero, { lr_u, zero, lr_u, zero } }, { lr_x, ul_y, 1, 1, lr_u, zero, lr_u, zero, { lr_u, zero, lr_u, zero } },
{ ul_x, lr_y, 1, 1, zero, lr_v, zero, lr_v, { zero, lr_v, zero, lr_v } }, { ul_x, lr_y, 1, 1, zero, lr_v, zero, lr_v, { zero, lr_v, zero, lr_v } },
@ -585,7 +585,7 @@ int SwapTextureBuffer()
float lr_v = rdp.tbuff_tex->lr_v; float lr_v = rdp.tbuff_tex->lr_v;
// Make the vertices // Make the vertices
VERTEX v[4] = { gfxVERTEX v[4] = {
{ ul_x, ul_y, 1, 1, zero, zero, zero, zero, { zero, zero, zero, zero } }, { ul_x, ul_y, 1, 1, zero, zero, zero, zero, { zero, zero, zero, zero } },
{ lr_x, ul_y, 1, 1, lr_u, zero, lr_u, zero, { lr_u, zero, lr_u, zero } }, { lr_x, ul_y, 1, 1, lr_u, zero, lr_u, zero, { lr_u, zero, lr_u, zero } },
{ ul_x, lr_y, 1, 1, zero, lr_v, zero, lr_v, { zero, lr_v, zero, lr_v } }, { ul_x, lr_y, 1, 1, zero, lr_v, zero, lr_v, { zero, lr_v, zero, lr_v } },

View File

@ -27,8 +27,8 @@
#define Vj rdp.vtxbuf2[j] #define Vj rdp.vtxbuf2[j]
#define Vi rdp.vtxbuf2[i] #define Vi rdp.vtxbuf2[i]
VERTEX *vtx_list1[32]; // vertex indexing gfxVERTEX *vtx_list1[32]; // vertex indexing
VERTEX *vtx_list2[32]; gfxVERTEX *vtx_list2[32];
// //
// util_init - initialize data for the functions in this file // util_init - initialize data for the functions in this file
@ -47,7 +47,7 @@ static uint32_t u_cull_mode = 0;
//software backface culling. Gonetz //software backface culling. Gonetz
// mega modifications by Dave2001 // mega modifications by Dave2001
int cull_tri(VERTEX **v) // type changed to VERTEX** [Dave2001] int cull_tri(gfxVERTEX **v) // type changed to gfxVERTEX** [Dave2001]
{ {
int i; int i;
@ -138,7 +138,7 @@ int cull_tri(VERTEX **v) // type changed to VERTEX** [Dave2001]
return FALSE; return FALSE;
} }
void apply_shade_mods(VERTEX *v) void apply_shade_mods(gfxVERTEX *v)
{ {
float col[4]; float col[4];
uint32_t mod; uint32_t mod;
@ -259,9 +259,9 @@ void apply_shade_mods(VERTEX *v)
static int dzdx = 0; static int dzdx = 0;
static int deltaZ = 0; static int deltaZ = 0;
VERTEX **org_vtx; gfxVERTEX **org_vtx;
void draw_tri(VERTEX **vtx, uint16_t linew) void draw_tri(gfxVERTEX **vtx, uint16_t linew)
{ {
deltaZ = dzdx = 0; deltaZ = dzdx = 0;
if (linew == 0 && (g_settings->fb_depth_render_enabled() || (rdp.rm & 0xC00) == 0xC00)) if (linew == 0 && (g_settings->fb_depth_render_enabled() || (rdp.rm & 0xC00) == 0xC00))
@ -302,11 +302,11 @@ void draw_tri(VERTEX **vtx, uint16_t linew)
for (int i = 0; i < 3; i++) for (int i = 0; i < 3; i++)
{ {
VERTEX *v = vtx[i]; gfxVERTEX *v = vtx[i];
if (v->uv_calculated != rdp.tex_ctr) if (v->uv_calculated != rdp.tex_ctr)
{ {
WriteTrace(TraceRDP, TraceVerbose, " * CALCULATING VERTEX U/V: %d", v->number); WriteTrace(TraceRDP, TraceVerbose, " * CALCULATING gfxVERTEX U/V: %d", v->number);
v->uv_calculated = rdp.tex_ctr; v->uv_calculated = rdp.tex_ctr;
if (!(rdp.geom_mode & 0x00020000)) if (!(rdp.geom_mode & 0x00020000))
@ -434,7 +434,7 @@ void draw_tri(VERTEX **vtx, uint16_t linew)
v->u1_w = v->u1 / v->w; v->u1_w = v->u1 / v->w;
v->v1_w = v->v1 / v->w; v->v1_w = v->v1 / v->w;
} }
// WriteTrace(TraceRDP, TraceDebug, " * CALCULATING VERTEX U/V: %d u0: %f, v0: %f, u1: %f, v1: %f", v->number, v->u0, v->v0, v->u1, v->v1); // WriteTrace(TraceRDP, TraceDebug, " * CALCULATING gfxVERTEX U/V: %d u0: %f, v0: %f, u1: %f, v1: %f", v->number, v->u0, v->v0, v->u1, v->v1);
} }
WriteTrace(TraceRDP, TraceVerbose, "draw_tri. v[%d] ou=%f, ov = %f", i, v->ou, v->ov); WriteTrace(TraceRDP, TraceVerbose, "draw_tri. v[%d] ou=%f, ov = %f", i, v->ou, v->ov);
if (v->shade_mod != cmb.shade_mod_hash) if (v->shade_mod != cmb.shade_mod_hash)
@ -479,8 +479,8 @@ void draw_tri(VERTEX **vtx, uint16_t linew)
j = i + 1; j = i + 1;
if (j == 3) j = 0; if (j == 3) j = 0;
VERTEX *v1 = vtx[i]; gfxVERTEX *v1 = vtx[i];
VERTEX *v2 = vtx[j]; gfxVERTEX *v2 = vtx[j];
if (v1->u0 >= left_256) if (v1->u0 >= left_256)
{ {
@ -549,8 +549,8 @@ void draw_tri(VERTEX **vtx, uint16_t linew)
j = i + 1; j = i + 1;
if (j == rdp.n_global) j = 0; if (j == rdp.n_global) j = 0;
VERTEX *v1 = &rdp.vtxbuf2[i]; gfxVERTEX *v1 = &rdp.vtxbuf2[i];
VERTEX *v2 = &rdp.vtxbuf2[j]; gfxVERTEX *v2 = &rdp.vtxbuf2[j];
// ** Right plane ** // ** Right plane **
if (v1->u0 <= right_256) if (v1->u0 <= right_256)
@ -633,7 +633,7 @@ void draw_tri(VERTEX **vtx, uint16_t linew)
#define interp2p(a, b, r) (a + (b - a) * r) #define interp2p(a, b, r) (a + (b - a) * r)
//* //*
static void InterpolateColors(VERTEX & va, VERTEX & vb, VERTEX & res, float percent) static void InterpolateColors(gfxVERTEX & va, gfxVERTEX & vb, gfxVERTEX & res, float percent)
{ {
res.b = (uint8_t)interp2p(va.b, vb.b, percent); res.b = (uint8_t)interp2p(va.b, vb.b, percent);
res.g = (uint8_t)interp2p(va.g, vb.g, percent);; res.g = (uint8_t)interp2p(va.g, vb.g, percent);;
@ -650,7 +650,7 @@ static void clip_w(int interpolate_colors)
int i, j, index, n = rdp.n_global; int i, j, index, n = rdp.n_global;
float percent; float percent;
// Swap vertex buffers // Swap vertex buffers
VERTEX *tmp = rdp.vtxbuf2; gfxVERTEX *tmp = rdp.vtxbuf2;
rdp.vtxbuf2 = rdp.vtxbuf; rdp.vtxbuf2 = rdp.vtxbuf;
rdp.vtxbuf = tmp; rdp.vtxbuf = tmp;
rdp.vtx_buffer ^= 1; rdp.vtx_buffer ^= 1;
@ -811,7 +811,7 @@ __inline uint8_t real_to_char(double x)
} }
//* //*
static void InterpolateColors2(VERTEX & va, VERTEX & vb, VERTEX & res, float percent) static void InterpolateColors2(gfxVERTEX & va, gfxVERTEX & vb, gfxVERTEX & res, float percent)
{ {
float w = 1.0f / (va.oow + (vb.oow - va.oow) * percent); float w = 1.0f / (va.oow + (vb.oow - va.oow) * percent);
// res.oow = va.oow + (vb.oow-va.oow) * percent; // res.oow = va.oow + (vb.oow-va.oow) * percent;
@ -859,7 +859,7 @@ static double EvaLine(LineEuqationType &li, double x, double y)
return li.x*x + li.y*y + li.d; return li.x*x + li.y*y + li.d;
} }
static void Create1LineEq(LineEuqationType &l, VERTEX &v1, VERTEX &v2, VERTEX &v3) static void Create1LineEq(LineEuqationType &l, gfxVERTEX &v1, gfxVERTEX &v2, gfxVERTEX &v3)
{ {
// Line between (x1,y1) to (x2,y2) // Line between (x1,y1) to (x2,y2)
l.x = v2.sy - v1.sy; l.x = v2.sy - v1.sy;
@ -882,7 +882,7 @@ __inline double interp3p(float a, float b, float c, double r1, double r2)
(a+(((b)+((c)-(b))*(r2))-(a))*(r1)) (a+(((b)+((c)-(b))*(r2))-(a))*(r1))
*/ */
static void InterpolateColors3(VERTEX &v1, VERTEX &v2, VERTEX &v3, VERTEX &out) static void InterpolateColors3(gfxVERTEX &v1, gfxVERTEX &v2, gfxVERTEX &v3, gfxVERTEX &out)
{ {
LineEuqationType line; LineEuqationType line;
Create1LineEq(line, v2, v3, v1); Create1LineEq(line, v2, v3, v1);
@ -923,7 +923,7 @@ static void InterpolateColors3(VERTEX &v1, VERTEX &v2, VERTEX &v3, VERTEX &out)
*/ */
} }
static void CalculateLOD(VERTEX *v, int n) static void CalculateLOD(gfxVERTEX *v, int n)
{ {
float deltaS, deltaT; float deltaS, deltaT;
float deltaX, deltaY; float deltaX, deltaY;
@ -998,7 +998,7 @@ float ScaleZ(float z)
return z; return z;
} }
static void DepthBuffer(VERTEX * vtx, int n) static void DepthBuffer(gfxVERTEX * vtx, int n)
{ {
if (g_settings->fb_depth_render_enabled() && !g_settings->hacks(CSettings::hack_RE2) && dzdx && (rdp.flags & ZBUF_UPDATE)) if (g_settings->fb_depth_render_enabled() && !g_settings->hacks(CSettings::hack_RE2) && dzdx && (rdp.flags & ZBUF_UPDATE))
{ {
@ -1036,7 +1036,7 @@ void clip_tri(int interpolate_colors)
if (rdp.clip & CLIP_XMAX) // right of the screen if (rdp.clip & CLIP_XMAX) // right of the screen
{ {
// Swap vertex buffers // Swap vertex buffers
VERTEX *tmp = rdp.vtxbuf2; gfxVERTEX *tmp = rdp.vtxbuf2;
rdp.vtxbuf2 = rdp.vtxbuf; rdp.vtxbuf2 = rdp.vtxbuf;
rdp.vtxbuf = tmp; rdp.vtxbuf = tmp;
rdp.vtx_buffer ^= 1; rdp.vtx_buffer ^= 1;
@ -1100,7 +1100,7 @@ void clip_tri(int interpolate_colors)
if (rdp.clip & CLIP_XMIN) // left of the screen if (rdp.clip & CLIP_XMIN) // left of the screen
{ {
// Swap vertex buffers // Swap vertex buffers
VERTEX *tmp = rdp.vtxbuf2; gfxVERTEX *tmp = rdp.vtxbuf2;
rdp.vtxbuf2 = rdp.vtxbuf; rdp.vtxbuf2 = rdp.vtxbuf;
rdp.vtxbuf = tmp; rdp.vtxbuf = tmp;
rdp.vtx_buffer ^= 1; rdp.vtx_buffer ^= 1;
@ -1164,7 +1164,7 @@ void clip_tri(int interpolate_colors)
if (rdp.clip & CLIP_YMAX) // top of the screen if (rdp.clip & CLIP_YMAX) // top of the screen
{ {
// Swap vertex buffers // Swap vertex buffers
VERTEX *tmp = rdp.vtxbuf2; gfxVERTEX *tmp = rdp.vtxbuf2;
rdp.vtxbuf2 = rdp.vtxbuf; rdp.vtxbuf2 = rdp.vtxbuf;
rdp.vtxbuf = tmp; rdp.vtxbuf = tmp;
rdp.vtx_buffer ^= 1; rdp.vtx_buffer ^= 1;
@ -1228,7 +1228,7 @@ void clip_tri(int interpolate_colors)
if (rdp.clip & CLIP_YMIN) // bottom of the screen if (rdp.clip & CLIP_YMIN) // bottom of the screen
{ {
// Swap vertex buffers // Swap vertex buffers
VERTEX *tmp = rdp.vtxbuf2; gfxVERTEX *tmp = rdp.vtxbuf2;
rdp.vtxbuf2 = rdp.vtxbuf; rdp.vtxbuf2 = rdp.vtxbuf;
rdp.vtxbuf = tmp; rdp.vtxbuf = tmp;
rdp.vtx_buffer ^= 1; rdp.vtx_buffer ^= 1;
@ -1292,7 +1292,7 @@ void clip_tri(int interpolate_colors)
if (rdp.clip & CLIP_ZMAX) // far plane if (rdp.clip & CLIP_ZMAX) // far plane
{ {
// Swap vertex buffers // Swap vertex buffers
VERTEX *tmp = rdp.vtxbuf2; gfxVERTEX *tmp = rdp.vtxbuf2;
rdp.vtxbuf2 = rdp.vtxbuf; rdp.vtxbuf2 = rdp.vtxbuf;
rdp.vtxbuf = tmp; rdp.vtxbuf = tmp;
rdp.vtx_buffer ^= 1; rdp.vtx_buffer ^= 1;
@ -1358,7 +1358,7 @@ void clip_tri(int interpolate_colors)
if (rdp.clip & CLIP_ZMIN) // near Z if (rdp.clip & CLIP_ZMIN) // near Z
{ {
// Swap vertex buffers // Swap vertex buffers
VERTEX *tmp = rdp.vtxbuf2; gfxVERTEX *tmp = rdp.vtxbuf2;
rdp.vtxbuf2 = rdp.vtxbuf; rdp.vtxbuf2 = rdp.vtxbuf;
rdp.vtxbuf = tmp; rdp.vtxbuf = tmp;
rdp.vtx_buffer ^= 1; rdp.vtx_buffer ^= 1;
@ -1458,7 +1458,7 @@ static void render_tri(uint16_t linew, int old_interpolate)
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
{ {
float percent = 101.0f; float percent = 101.0f;
VERTEX * v1 = 0, *v2 = 0; gfxVERTEX * v1 = 0, *v2 = 0;
switch (rdp.vtxbuf[i].number & 7) switch (rdp.vtxbuf[i].number & 7)
{ {
case 1: case 1:
@ -1550,13 +1550,13 @@ static void render_tri(uint16_t linew, int old_interpolate)
{ {
if (linew > 0) if (linew > 0)
{ {
VERTEX *V0 = &rdp.vtxbuf[0]; gfxVERTEX *V0 = &rdp.vtxbuf[0];
VERTEX *V1 = &rdp.vtxbuf[1]; gfxVERTEX *V1 = &rdp.vtxbuf[1];
if (fabs(V0->x - V1->x) < 0.01 && fabs(V0->y - V1->y) < 0.01) if (fabs(V0->x - V1->x) < 0.01 && fabs(V0->y - V1->y) < 0.01)
V1 = &rdp.vtxbuf[2]; V1 = &rdp.vtxbuf[2];
V0->z = ScaleZ(V0->z); V0->z = ScaleZ(V0->z);
V1->z = ScaleZ(V1->z); V1->z = ScaleZ(V1->z);
VERTEX v[4]; gfxVERTEX v[4];
v[0] = *V0; v[0] = *V0;
v[1] = *V0; v[1] = *V0;
v[2] = *V1; v[2] = *V1;

View File

@ -19,11 +19,11 @@
void util_init(); void util_init();
int cull_tri(VERTEX **v); int cull_tri(gfxVERTEX **v);
void draw_tri(VERTEX **v, uint16_t linew = 0); void draw_tri(gfxVERTEX **v, uint16_t linew = 0);
void do_triangle_stuff(uint16_t linew = 0, int old_interpolate = TRUE); void do_triangle_stuff(uint16_t linew = 0, int old_interpolate = TRUE);
void do_triangle_stuff_2(uint16_t linew = 0); void do_triangle_stuff_2(uint16_t linew = 0);
void apply_shade_mods(VERTEX *v); void apply_shade_mods(gfxVERTEX *v);
void update(); void update();
void update_scissor(); void update_scissor();

View File

@ -167,20 +167,20 @@ bool CRDP::init()
return true; return true;
} }
vtx1 = new VERTEX[256]; vtx1 = new gfxVERTEX[256];
if (vtx1 == NULL) if (vtx1 == NULL)
{ {
free(); free();
return false; return false;
} }
memset(vtx1, 0, sizeof(VERTEX) * 256); memset(vtx1, 0, sizeof(gfxVERTEX) * 256);
vtx2 = new VERTEX[256]; vtx2 = new gfxVERTEX[256];
if (vtx2 == NULL) if (vtx2 == NULL)
{ {
free(); free();
return false; return false;
} }
memset(vtx2, 0, sizeof(VERTEX) * 256); memset(vtx2, 0, sizeof(gfxVERTEX) * 256);
for (int i = 0; i < MAX_TMU; i++) for (int i = 0; i < MAX_TMU; i++)
{ {
@ -191,13 +191,13 @@ bool CRDP::init()
return false; return false;
} }
}; };
m_vtx = new VERTEX[MAX_VTX]; m_vtx = new gfxVERTEX[MAX_VTX];
if (m_vtx == NULL) if (m_vtx == NULL)
{ {
free(); free();
return false; return false;
} }
memset(m_vtx, 0, sizeof(VERTEX)*MAX_VTX); memset(m_vtx, 0, sizeof(gfxVERTEX)*MAX_VTX);
// set all vertex numbers // set all vertex numbers
for (int i = 0; i < MAX_VTX; i++) for (int i = 0; i < MAX_VTX; i++)
{ {
@ -1422,7 +1422,7 @@ void rdp_texrect()
WriteTrace(TraceRDP, TraceDebug, " draw at: (%f, %f) -> (%f, %f)", s_ul_x, s_ul_y, s_lr_x, s_lr_y); WriteTrace(TraceRDP, TraceDebug, " draw at: (%f, %f) -> (%f, %f)", s_ul_x, s_ul_y, s_lr_x, s_lr_y);
VERTEX vstd[4] = { gfxVERTEX vstd[4] = {
{ s_ul_x, s_ul_y, Z, 1.0f, texUV[0].ul_u, texUV[0].ul_v, texUV[1].ul_u, texUV[1].ul_v, { 0, 0, 0, 0 }, 255 }, { s_ul_x, s_ul_y, Z, 1.0f, texUV[0].ul_u, texUV[0].ul_v, texUV[1].ul_u, texUV[1].ul_v, { 0, 0, 0, 0 }, 255 },
{ s_lr_x, s_ul_y, Z, 1.0f, texUV[0].lr_u, texUV[0].ul_v, texUV[1].lr_u, texUV[1].ul_v, { 0, 0, 0, 0 }, 255 }, { s_lr_x, s_ul_y, Z, 1.0f, texUV[0].lr_u, texUV[0].ul_v, texUV[1].lr_u, texUV[1].ul_v, { 0, 0, 0, 0 }, 255 },
{ s_ul_x, s_lr_y, Z, 1.0f, texUV[0].ul_u, texUV[0].lr_v, texUV[1].ul_u, texUV[1].lr_v, { 0, 0, 0, 0 }, 255 }, { s_ul_x, s_lr_y, Z, 1.0f, texUV[0].ul_u, texUV[0].lr_v, texUV[1].ul_u, texUV[1].lr_v, { 0, 0, 0, 0 }, 255 },
@ -1441,10 +1441,10 @@ void rdp_texrect()
vstd[2].v1 = texUV[1].ul_v; vstd[2].v1 = texUV[1].ul_v;
} }
VERTEX *vptr = vstd; gfxVERTEX *vptr = vstd;
int n_vertices = 4; int n_vertices = 4;
VERTEX *vnew = 0; gfxVERTEX *vnew = 0;
// for (int j =0; j < 4; j++) // for (int j =0; j < 4; j++)
// WriteTrace(TraceRDP, TraceDebug, "v[%d] u0: %f, v0: %f, u1: %f, v1: %f", j, vstd[j].u0, vstd[j].v0, vstd[j].u1, vstd[j].v1); // WriteTrace(TraceRDP, TraceDebug, "v[%d] u0: %f, v0: %f, u1: %f, v1: %f", j, vstd[j].u0, vstd[j].v0, vstd[j].u1, vstd[j].v1);
@ -1477,7 +1477,7 @@ void rdp_texrect()
int num_verts_line = 2 + ((end_u_256 - start_u_256) << 1); int num_verts_line = 2 + ((end_u_256 - start_u_256) << 1);
n_vertices = num_verts_line << 1; n_vertices = num_verts_line << 1;
vnew = new VERTEX[n_vertices]; vnew = new gfxVERTEX[n_vertices];
vptr = vnew; vptr = vnew;
vnew[0] = vstd[0]; vnew[0] = vstd[0];
@ -1586,7 +1586,7 @@ void rdp_texrect()
} }
else else
{ {
gfxDrawVertexArrayContiguous(GFX_TRIANGLE_STRIP, n_vertices, vptr, sizeof(VERTEX)); gfxDrawVertexArrayContiguous(GFX_TRIANGLE_STRIP, n_vertices, vptr, sizeof(gfxVERTEX));
} }
rdp.tri_n += 2; rdp.tri_n += 2;
@ -2476,7 +2476,7 @@ void rdp_fillrect()
const float Z = (rdp.cycle_mode == 3) ? 0.0f : set_sprite_combine_mode(); const float Z = (rdp.cycle_mode == 3) ? 0.0f : set_sprite_combine_mode();
// Draw the rectangle // Draw the rectangle
VERTEX v[4] = { gfxVERTEX v[4] = {
{ (float)s_ul_x, (float)s_ul_y, Z, 1.0f, 0, 0, 0, 0, { 0, 0, 0, 0 }, 0, 0, 0, 0, 0, 0 }, { (float)s_ul_x, (float)s_ul_y, Z, 1.0f, 0, 0, 0, 0, { 0, 0, 0, 0 }, 0, 0, 0, 0, 0, 0 },
{ (float)s_lr_x, (float)s_ul_y, Z, 1.0f, 0, 0, 0, 0, { 0, 0, 0, 0 }, 0, 0, 0, 0, 0, 0 }, { (float)s_lr_x, (float)s_ul_y, Z, 1.0f, 0, 0, 0, 0, { 0, 0, 0, 0 }, 0, 0, 0, 0, 0, 0 },
{ (float)s_ul_x, (float)s_lr_y, Z, 1.0f, 0, 0, 0, 0, { 0, 0, 0, 0 }, 0, 0, 0, 0, 0, 0 }, { (float)s_ul_x, (float)s_lr_y, Z, 1.0f, 0, 0, 0, 0, { 0, 0, 0, 0 }, 0, 0, 0, 0, 0, 0 },
@ -3707,8 +3707,8 @@ void lle_triangle(uint32_t w1, uint32_t w2, int shade, int texture, int zbuffer,
#define TSCALE(s, w) (rdp.Persp_en? float(PERSP(s, w))/(1 << 10) : float(s)/(1<<21)) #define TSCALE(s, w) (rdp.Persp_en? float(PERSP(s, w))/(1 << 10) : float(s)/(1<<21))
int nbVtxs = 0; int nbVtxs = 0;
VERTEX vtxbuf[12]; gfxVERTEX vtxbuf[12];
VERTEX * vtx = &vtxbuf[nbVtxs++]; gfxVERTEX * vtx = &vtxbuf[nbVtxs++];
xleft = xm; xleft = xm;
xright = xh; xright = xh;
@ -3889,7 +3889,7 @@ void lle_triangle(uint32_t w1, uint32_t w2, int shade, int texture, int zbuffer,
update(); update();
for (int k = 0; k < nbVtxs - 1; k++) for (int k = 0; k < nbVtxs - 1; k++)
{ {
VERTEX * v = &vtxbuf[k]; gfxVERTEX * v = &vtxbuf[k];
v->x = v->x * rdp.scale_x + rdp.offset_x; v->x = v->x * rdp.scale_x + rdp.offset_x;
v->y = v->y * rdp.scale_y + rdp.offset_y; v->y = v->y * rdp.scale_y + rdp.offset_y;
// v->z = 1.0f;///v->w; // v->z = 1.0f;///v->w;
@ -3949,7 +3949,7 @@ void lle_triangle(uint32_t w1, uint32_t w2, int shade, int texture, int zbuffer,
} }
ConvertCoordsConvert(vtxbuf, nbVtxs); ConvertCoordsConvert(vtxbuf, nbVtxs);
gfxCullMode(GFX_CULL_DISABLE); gfxCullMode(GFX_CULL_DISABLE);
gfxDrawVertexArrayContiguous(GFX_TRIANGLE_STRIP, nbVtxs - 1, vtxbuf, sizeof(VERTEX)); gfxDrawVertexArrayContiguous(GFX_TRIANGLE_STRIP, nbVtxs - 1, vtxbuf, sizeof(gfxVERTEX));
} }
void rdp_triangle(int shade, int texture, int zbuffer) void rdp_triangle(int shade, int texture, int zbuffer)

View File

@ -99,39 +99,6 @@ const unsigned int maxCMDMask = MAXCMD - 1;
#define DECLAREALIGN16VAR(var) float (var) __attribute__ ((aligned(16))) #define DECLAREALIGN16VAR(var) float (var) __attribute__ ((aligned(16)))
#endif #endif
// Vertex structure
typedef struct
{
float x, y, z, q;
float u0, v0, u1, v1;
float coord[4];
float w;
uint16_t flags;
uint8_t b; // These values are arranged like this so that *(uint32_t*)(VERTEX+?) is
uint8_t g; // ARGB format that glide can use.
uint8_t r;
uint8_t a;
float f; //fog
float vec[3]; // normal vector
float sx, sy, sz;
float x_w, y_w, z_w, u0_w, v0_w, u1_w, v1_w, oow;
uint8_t not_zclipped;
uint8_t screen_translated;
uint8_t uv_scaled;
uint32_t uv_calculated; // like crc
uint32_t shade_mod;
uint32_t color_backup;
float ou, ov;
int number; // way to identify it
int scr_off, z_off; // off the screen?
} VERTEX;
// Clipping (scissors) // Clipping (scissors)
typedef struct typedef struct
{ {
@ -358,14 +325,14 @@ public:
bool init(); bool init();
void free(); void free();
inline VERTEX & vtx(int index) const { return m_vtx[index]; } inline gfxVERTEX & vtx(int index) const { return m_vtx[index]; }
inline TILE & tiles(int index) { return m_tiles[index]; } inline TILE & tiles(int index) { return m_tiles[index]; }
// Clipping // Clipping
int clip; // clipping flags int clip; // clipping flags
VERTEX *vtx1; //[256] copy vertex buffer #1 (used for clipping) gfxVERTEX *vtx1; //[256] copy vertex buffer #1 (used for clipping)
VERTEX *vtx2; //[256] copy vertex buffer #2 gfxVERTEX *vtx2; //[256] copy vertex buffer #2
VERTEX *vtxbuf; // current vertex buffer (reset to vtx, used to determine current vertex buffer) gfxVERTEX *vtxbuf; // current vertex buffer (reset to vtx, used to determine current vertex buffer)
VERTEX *vtxbuf2; gfxVERTEX *vtxbuf2;
int n_global; // Used to pass the number of vertices from clip_z to clip_tri int n_global; // Used to pass the number of vertices from clip_z to clip_tri
int vtx_buffer; int vtx_buffer;
@ -376,7 +343,7 @@ public:
// Vertices // Vertices
private: private:
VERTEX * m_vtx; //[MAX_VTX] gfxVERTEX * m_vtx; //[MAX_VTX]
public: public:
int v0, vn; int v0, vn;
@ -645,7 +612,7 @@ extern const char *CIStatus[];
#endif #endif
// Convert from u0/v0/u1/v1 to the real coordinates without regard to tmu // Convert from u0/v0/u1/v1 to the real coordinates without regard to tmu
__inline void ConvertCoordsKeep(VERTEX *v, int n) __inline void ConvertCoordsKeep(gfxVERTEX *v, int n)
{ {
for (int i = 0; i < n; i++) for (int i = 0; i < n; i++)
{ {
@ -657,7 +624,7 @@ __inline void ConvertCoordsKeep(VERTEX *v, int n)
} }
// Convert from u0/v0/u1/v1 to the real coordinates based on the tmu they are on // Convert from u0/v0/u1/v1 to the real coordinates based on the tmu they are on
__inline void ConvertCoordsConvert(VERTEX *v, int n) __inline void ConvertCoordsConvert(gfxVERTEX *v, int n)
{ {
for (int i = 0; i < n; i++) for (int i = 0; i < n; i++)
{ {
@ -668,7 +635,7 @@ __inline void ConvertCoordsConvert(VERTEX *v, int n)
} }
} }
__inline void AllowShadeMods(VERTEX *v, int n) __inline void AllowShadeMods(gfxVERTEX *v, int n)
{ {
for (int i = 0; i < n; i++) for (int i = 0; i < n; i++)
{ {
@ -676,7 +643,7 @@ __inline void AllowShadeMods(VERTEX *v, int n)
} }
} }
__inline void AddOffset(VERTEX *v, int n) __inline void AddOffset(gfxVERTEX *v, int n)
{ {
for (int i = 0; i < n; i++) for (int i = 0; i < n; i++)
{ {
@ -685,7 +652,7 @@ __inline void AddOffset(VERTEX *v, int n)
} }
} }
__inline void CalculateFog(VERTEX &v) __inline void CalculateFog(gfxVERTEX &v)
{ {
if (rdp.flags & FOG_ENABLED) if (rdp.flags & FOG_ENABLED)
{ {

View File

@ -121,7 +121,7 @@ static void t3d_vertex(uint32_t addr, uint32_t v0, uint32_t n)
for (uint32_t i = 0; i < n; i += 16) for (uint32_t i = 0; i < n; i += 16)
{ {
VERTEX &v = rdp.vtx(v0 + (i >> 4)); gfxVERTEX &v = rdp.vtx(v0 + (i >> 4));
x = (float)((short*)gfx.RDRAM)[(((addr + i) >> 1) + 0) ^ 1]; x = (float)((short*)gfx.RDRAM)[(((addr + i) >> 1) + 0) ^ 1];
y = (float)((short*)gfx.RDRAM)[(((addr + i) >> 1) + 1) ^ 1]; y = (float)((short*)gfx.RDRAM)[(((addr + i) >> 1) + 1) ^ 1];
z = (float)((short*)gfx.RDRAM)[(((addr + i) >> 1) + 2) ^ 1]; z = (float)((short*)gfx.RDRAM)[(((addr + i) >> 1) + 2) ^ 1];
@ -206,7 +206,7 @@ static void t3dLoadObject(uint32_t pstate, uint32_t pvtx, uint32_t ptri)
t3dTriN * tri = (t3dTriN*)&gfx.RDRAM[a]; t3dTriN * tri = (t3dTriN*)&gfx.RDRAM[a];
a += 4; a += 4;
WriteTrace(TraceRDP, TraceDebug, "tri #%d - %d, %d, %d", t, tri->v0, tri->v1, tri->v2); WriteTrace(TraceRDP, TraceDebug, "tri #%d - %d, %d, %d", t, tri->v0, tri->v1, tri->v2);
VERTEX *vtx[3] = { &rdp.vtx(tri->v0), &rdp.vtx(tri->v1), &rdp.vtx(tri->v2) }; gfxVERTEX *vtx[3] = { &rdp.vtx(tri->v0), &rdp.vtx(tri->v1), &rdp.vtx(tri->v2) };
if (cull_tri(vtx)) if (cull_tri(vtx))
rdp.tri_n++; rdp.tri_n++;
else else

View File

@ -54,7 +54,7 @@ void rsp_vertex(int v0, int n)
for (i = 0; i < (n << 4); i += 16) for (i = 0; i < (n << 4); i += 16)
{ {
VERTEX &v = rdp.vtx(v0 + (i >> 4)); gfxVERTEX &v = rdp.vtx(v0 + (i >> 4));
x = (float)((short*)gfx.RDRAM)[(((addr + i) >> 1) + 0) ^ 1]; x = (float)((short*)gfx.RDRAM)[(((addr + i) >> 1) + 0) ^ 1];
y = (float)((short*)gfx.RDRAM)[(((addr + i) >> 1) + 1) ^ 1]; y = (float)((short*)gfx.RDRAM)[(((addr + i) >> 1) + 1) ^ 1];
z = (float)((short*)gfx.RDRAM)[(((addr + i) >> 1) + 2) ^ 1]; z = (float)((short*)gfx.RDRAM)[(((addr + i) >> 1) + 2) ^ 1];
@ -114,7 +114,7 @@ void rsp_vertex(int v0, int n)
} }
} }
void rsp_tri1(VERTEX **v, uint16_t linew = 0) void rsp_tri1(gfxVERTEX **v, uint16_t linew = 0)
{ {
if (cull_tri(v)) if (cull_tri(v))
rdp.tri_n++; rdp.tri_n++;
@ -126,7 +126,7 @@ void rsp_tri1(VERTEX **v, uint16_t linew = 0)
} }
} }
void rsp_tri2(VERTEX **v) void rsp_tri2(gfxVERTEX **v)
{ {
int updated = 0; int updated = 0;
@ -500,7 +500,7 @@ void uc0_tri1()
((rdp.cmd1 >> 8) & 0xFF) / 10, ((rdp.cmd1 >> 8) & 0xFF) / 10,
(rdp.cmd1 & 0xFF) / 10); (rdp.cmd1 & 0xFF) / 10);
VERTEX *vtx[3] = { gfxVERTEX *vtx[3] = {
&rdp.vtx(((rdp.cmd1 >> 16) & 0xFF) / 10), &rdp.vtx(((rdp.cmd1 >> 16) & 0xFF) / 10),
&rdp.vtx(((rdp.cmd1 >> 8) & 0xFF) / 10), &rdp.vtx(((rdp.cmd1 >> 8) & 0xFF) / 10),
&rdp.vtx((rdp.cmd1 & 0xFF) / 10) &rdp.vtx((rdp.cmd1 & 0xFF) / 10)
@ -549,7 +549,7 @@ void uc0_culldl()
if (vEnd < vStart) return; if (vEnd < vStart) return;
for (uint16_t i = vStart; i <= vEnd; i++) for (uint16_t i = vStart; i <= vEnd; i++)
{ {
VERTEX &v = rdp.vtx(i); gfxVERTEX &v = rdp.vtx(i);
// Check if completely off the screen (quick frustrum clipping for 90 FOV) // Check if completely off the screen (quick frustrum clipping for 90 FOV)
if (v.x >= -v.w) if (v.x >= -v.w)
cond |= 0x01; cond |= 0x01;
@ -594,7 +594,7 @@ void uc6_obj_sprite();
void uc0_modifyvtx(uint8_t where, uint16_t vtx, uint32_t val) void uc0_modifyvtx(uint8_t where, uint16_t vtx, uint32_t val)
{ {
VERTEX &v = rdp.vtx(vtx); gfxVERTEX &v = rdp.vtx(vtx);
switch (where) switch (where)
{ {
@ -1001,7 +1001,7 @@ void uc0_line3d()
uint32_t v1 = ((rdp.cmd1 >> 8) & 0xff) / 10; uint32_t v1 = ((rdp.cmd1 >> 8) & 0xff) / 10;
uint16_t width = (uint16_t)(rdp.cmd1 & 0xFF) + 3; uint16_t width = (uint16_t)(rdp.cmd1 & 0xFF) + 3;
VERTEX *vtx[3] = { gfxVERTEX *vtx[3] = {
&rdp.vtx(v1), &rdp.vtx(v1),
&rdp.vtx(v0), &rdp.vtx(v0),
&rdp.vtx(v0) &rdp.vtx(v0)
@ -1037,7 +1037,7 @@ void uc0_tri4()
(rdp.cmd0 >> 0) & 0xF, (rdp.cmd0 >> 0) & 0xF,
(rdp.cmd1 >> 0) & 0xF); (rdp.cmd1 >> 0) & 0xF);
VERTEX *vtx[12] = { gfxVERTEX *vtx[12] = {
&rdp.vtx((rdp.cmd1 >> 28) & 0xF), &rdp.vtx((rdp.cmd1 >> 28) & 0xF),
&rdp.vtx((rdp.cmd0 >> 12) & 0xF), &rdp.vtx((rdp.cmd0 >> 12) & 0xF),
&rdp.vtx((rdp.cmd1 >> 24) & 0xF), &rdp.vtx((rdp.cmd1 >> 24) & 0xF),

View File

@ -40,8 +40,8 @@ void modelview_load_push(float m[4][4]);
void projection_load(float m[4][4]); void projection_load(float m[4][4]);
void projection_mul(float m[4][4]); void projection_mul(float m[4][4]);
void rsp_tri1(VERTEX **v, uint16_t linew = 0); void rsp_tri1(gfxVERTEX **v, uint16_t linew = 0);
void rsp_tri2(VERTEX **v); void rsp_tri2(gfxVERTEX **v);
void rsp_vertex(int v0, int n); void rsp_vertex(int v0, int n);
void load_matrix(float m[4][4], uint32_t addr); void load_matrix(float m[4][4], uint32_t addr);

View File

@ -45,7 +45,7 @@ void uc1_tri1()
((rdp.cmd1 >> 9) & 0x7F), ((rdp.cmd1 >> 9) & 0x7F),
((rdp.cmd1 >> 1) & 0x7F), rdp.cmd0, rdp.cmd1); ((rdp.cmd1 >> 1) & 0x7F), rdp.cmd0, rdp.cmd1);
VERTEX *vtx[3] = { gfxVERTEX *vtx[3] = {
&rdp.vtx((rdp.cmd1 >> 17) & 0x7F), &rdp.vtx((rdp.cmd1 >> 17) & 0x7F),
&rdp.vtx((rdp.cmd1 >> 9) & 0x7F), &rdp.vtx((rdp.cmd1 >> 9) & 0x7F),
&rdp.vtx((rdp.cmd1 >> 1) & 0x7F) &rdp.vtx((rdp.cmd1 >> 1) & 0x7F)
@ -71,7 +71,7 @@ void uc1_tri2()
((rdp.cmd1 >> 9) & 0x7F), ((rdp.cmd1 >> 9) & 0x7F),
((rdp.cmd1 >> 1) & 0x7F)); ((rdp.cmd1 >> 1) & 0x7F));
VERTEX *vtx[6] = { gfxVERTEX *vtx[6] = {
&rdp.vtx((rdp.cmd0 >> 17) & 0x7F), &rdp.vtx((rdp.cmd0 >> 17) & 0x7F),
&rdp.vtx((rdp.cmd0 >> 9) & 0x7F), &rdp.vtx((rdp.cmd0 >> 9) & 0x7F),
&rdp.vtx((rdp.cmd0 >> 1) & 0x7F), &rdp.vtx((rdp.cmd0 >> 1) & 0x7F),
@ -93,7 +93,7 @@ void uc1_line3d()
(rdp.cmd1 >> 17) & 0x7F, (rdp.cmd1 >> 17) & 0x7F,
(rdp.cmd1 >> 9) & 0x7F); (rdp.cmd1 >> 9) & 0x7F);
VERTEX *vtx[3] = { gfxVERTEX *vtx[3] = {
&rdp.vtx((rdp.cmd1 >> 17) & 0x7F), &rdp.vtx((rdp.cmd1 >> 17) & 0x7F),
&rdp.vtx((rdp.cmd1 >> 9) & 0x7F), &rdp.vtx((rdp.cmd1 >> 9) & 0x7F),
&rdp.vtx((rdp.cmd1 >> 9) & 0x7F) &rdp.vtx((rdp.cmd1 >> 9) & 0x7F)
@ -110,7 +110,7 @@ void uc1_line3d()
{ {
WriteTrace(TraceRDP, TraceDebug, "uc1:quad3d #%d, #%d", rdp.tri_n, rdp.tri_n + 1); WriteTrace(TraceRDP, TraceDebug, "uc1:quad3d #%d, #%d", rdp.tri_n, rdp.tri_n + 1);
VERTEX *vtx[6] = { gfxVERTEX *vtx[6] = {
&rdp.vtx((rdp.cmd1 >> 25) & 0x7F), &rdp.vtx((rdp.cmd1 >> 25) & 0x7F),
&rdp.vtx((rdp.cmd1 >> 17) & 0x7F), &rdp.vtx((rdp.cmd1 >> 17) & 0x7F),
&rdp.vtx((rdp.cmd1 >> 9) & 0x7F), &rdp.vtx((rdp.cmd1 >> 9) & 0x7F),

View File

@ -19,7 +19,7 @@
#include "3dmath.h" #include "3dmath.h"
#include "ucode00.h" #include "ucode00.h"
static void calc_point_light(VERTEX & v, float * vpos) static void calc_point_light(gfxVERTEX & v, float * vpos)
{ {
float light_intensity = 0.0f; float light_intensity = 0.0f;
register float color[3] = { rdp.light[rdp.num_lights].r, rdp.light[rdp.num_lights].g, rdp.light[rdp.num_lights].b }; register float color[3] = { rdp.light[rdp.num_lights].r, rdp.light[rdp.num_lights].g, rdp.light[rdp.num_lights].b };
@ -112,7 +112,7 @@ void uc2_vertex()
} }
for (i = 0; i < (n << 4); i += 16) for (i = 0; i < (n << 4); i += 16)
{ {
VERTEX & v = rdp.vtx(v0 + (i >> 4)); gfxVERTEX & v = rdp.vtx(v0 + (i >> 4));
x = (float)((short*)gfx.RDRAM)[(((addr + i) >> 1) + 0) ^ 1]; x = (float)((short*)gfx.RDRAM)[(((addr + i) >> 1) + 0) ^ 1];
y = (float)((short*)gfx.RDRAM)[(((addr + i) >> 1) + 1) ^ 1]; y = (float)((short*)gfx.RDRAM)[(((addr + i) >> 1) + 1) ^ 1];
z = (float)((short*)gfx.RDRAM)[(((addr + i) >> 1) + 2) ^ 1]; z = (float)((short*)gfx.RDRAM)[(((addr + i) >> 1) + 2) ^ 1];
@ -209,7 +209,7 @@ void uc2_culldl()
if (vEnd < vStart) return; if (vEnd < vStart) return;
for (uint16_t i = vStart; i <= vEnd; i++) for (uint16_t i = vStart; i <= vEnd; i++)
{ {
VERTEX & v = rdp.vtx(i); gfxVERTEX & v = rdp.vtx(i);
/* /*
// Check if completely off the screen (quick frustrum clipping for 90 FOV) // Check if completely off the screen (quick frustrum clipping for 90 FOV)
if (v.x >= -v.w) if (v.x >= -v.w)
@ -260,7 +260,7 @@ void uc2_tri1()
((rdp.cmd0 >> 9) & 0x7F), ((rdp.cmd0 >> 9) & 0x7F),
((rdp.cmd0 >> 1) & 0x7F)); ((rdp.cmd0 >> 1) & 0x7F));
VERTEX *vtx[3] = { gfxVERTEX *vtx[3] = {
&rdp.vtx((rdp.cmd0 >> 17) & 0x7F), &rdp.vtx((rdp.cmd0 >> 17) & 0x7F),
&rdp.vtx((rdp.cmd0 >> 9) & 0x7F), &rdp.vtx((rdp.cmd0 >> 9) & 0x7F),
&rdp.vtx((rdp.cmd0 >> 1) & 0x7F) &rdp.vtx((rdp.cmd0 >> 1) & 0x7F)
@ -305,7 +305,7 @@ void uc2_quad()
((rdp.cmd1 >> 9) & 0x7F), ((rdp.cmd1 >> 9) & 0x7F),
((rdp.cmd1 >> 1) & 0x7F)); ((rdp.cmd1 >> 1) & 0x7F));
VERTEX *vtx[6] = gfxVERTEX *vtx[6] =
{ {
&rdp.vtx((rdp.cmd0 >> 17) & 0x7F), &rdp.vtx((rdp.cmd0 >> 17) & 0x7F),
&rdp.vtx((rdp.cmd0 >> 9) & 0x7F), &rdp.vtx((rdp.cmd0 >> 9) & 0x7F),
@ -330,7 +330,7 @@ void uc2_line3d()
(rdp.cmd0 >> 17) & 0x7F, (rdp.cmd0 >> 17) & 0x7F,
(rdp.cmd0 >> 9) & 0x7F); (rdp.cmd0 >> 9) & 0x7F);
VERTEX *vtx[3] = gfxVERTEX *vtx[3] =
{ {
&rdp.vtx((rdp.cmd0 >> 17) & 0x7F), &rdp.vtx((rdp.cmd0 >> 17) & 0x7F),
&rdp.vtx((rdp.cmd0 >> 9) & 0x7F), &rdp.vtx((rdp.cmd0 >> 9) & 0x7F),

View File

@ -46,7 +46,7 @@ void uc3_tri1()
((rdp.cmd1 >> 8) & 0xFF) / 5, ((rdp.cmd1 >> 8) & 0xFF) / 5,
((rdp.cmd1) & 0xFF) / 5, rdp.cmd0, rdp.cmd1); ((rdp.cmd1) & 0xFF) / 5, rdp.cmd0, rdp.cmd1);
VERTEX *vtx[3] = { gfxVERTEX *vtx[3] = {
&rdp.vtx(((rdp.cmd1 >> 16) & 0xFF) / 5), &rdp.vtx(((rdp.cmd1 >> 16) & 0xFF) / 5),
&rdp.vtx(((rdp.cmd1 >> 8) & 0xFF) / 5), &rdp.vtx(((rdp.cmd1 >> 8) & 0xFF) / 5),
&rdp.vtx((rdp.cmd1 & 0xFF) / 5) &rdp.vtx((rdp.cmd1 & 0xFF) / 5)
@ -65,7 +65,7 @@ void uc3_tri2()
((rdp.cmd1 >> 8) & 0xFF) / 5, ((rdp.cmd1 >> 8) & 0xFF) / 5,
((rdp.cmd1) & 0xFF) / 5); ((rdp.cmd1) & 0xFF) / 5);
VERTEX *vtx[6] = { gfxVERTEX *vtx[6] = {
&rdp.vtx(((rdp.cmd0 >> 16) & 0xFF) / 5), &rdp.vtx(((rdp.cmd0 >> 16) & 0xFF) / 5),
&rdp.vtx(((rdp.cmd0 >> 8) & 0xFF) / 5), &rdp.vtx(((rdp.cmd0 >> 8) & 0xFF) / 5),
&rdp.vtx((rdp.cmd0 & 0xFF) / 5), &rdp.vtx((rdp.cmd0 & 0xFF) / 5),
@ -81,7 +81,7 @@ void uc3_quad3d()
{ {
WriteTrace(TraceRDP, TraceDebug, "uc3:quad3d #%d, #%d", rdp.tri_n, rdp.tri_n + 1); WriteTrace(TraceRDP, TraceDebug, "uc3:quad3d #%d, #%d", rdp.tri_n, rdp.tri_n + 1);
VERTEX *vtx[6] = { gfxVERTEX *vtx[6] = {
&rdp.vtx(((rdp.cmd1 >> 24) & 0xFF) / 5), &rdp.vtx(((rdp.cmd1 >> 24) & 0xFF) / 5),
&rdp.vtx(((rdp.cmd1 >> 16) & 0xFF) / 5), &rdp.vtx(((rdp.cmd1 >> 16) & 0xFF) / 5),
&rdp.vtx(((rdp.cmd1 >> 8) & 0xFF) / 5), &rdp.vtx(((rdp.cmd1 >> 8) & 0xFF) / 5),

View File

@ -36,7 +36,7 @@ void uc4_tri1()
WriteTrace(TraceRDP, TraceDebug, "uc4:tri1 #%d - %d, %d, %d", rdp.tri_n, WriteTrace(TraceRDP, TraceDebug, "uc4:tri1 #%d - %d, %d, %d", rdp.tri_n,
v1, v2, v3); v1, v2, v3);
VERTEX *vtx[3] = { gfxVERTEX *vtx[3] = {
&rdp.vtx(v1), &rdp.vtx(v1),
&rdp.vtx(v2), &rdp.vtx(v2),
&rdp.vtx(v3) &rdp.vtx(v3)
@ -49,7 +49,7 @@ void uc4_quad3d()
{ {
WriteTrace(TraceRDP, TraceDebug, "uc4:quad3d #%d, #%d", rdp.tri_n, rdp.tri_n + 1); WriteTrace(TraceRDP, TraceDebug, "uc4:quad3d #%d, #%d", rdp.tri_n, rdp.tri_n + 1);
VERTEX *vtx[6] = { gfxVERTEX *vtx[6] = {
&rdp.vtx(((rdp.cmd1 >> 24) & 0xFF) / 5), &rdp.vtx(((rdp.cmd1 >> 24) & 0xFF) / 5),
&rdp.vtx(((rdp.cmd1 >> 16) & 0xFF) / 5), &rdp.vtx(((rdp.cmd1 >> 16) & 0xFF) / 5),
&rdp.vtx(((rdp.cmd1 >> 8) & 0xFF) / 5), &rdp.vtx(((rdp.cmd1 >> 8) & 0xFF) / 5),

View File

@ -119,7 +119,7 @@ void uc5_vertex()
for (int i = first; i < first + n; i++) for (int i = first; i < first + n; i++)
{ {
start = (i - first) * 10; start = (i - first) * 10;
VERTEX &v = rdp.vtx(i); gfxVERTEX &v = rdp.vtx(i);
x = (float)((short*)gfx.RDRAM)[(((addr + start) >> 1) + 0) ^ 1]; x = (float)((short*)gfx.RDRAM)[(((addr + start) >> 1) + 0) ^ 1];
y = (float)((short*)gfx.RDRAM)[(((addr + start) >> 1) + 1) ^ 1]; y = (float)((short*)gfx.RDRAM)[(((addr + start) >> 1) + 1) ^ 1];
z = (float)((short*)gfx.RDRAM)[(((addr + start) >> 1) + 2) ^ 1]; z = (float)((short*)gfx.RDRAM)[(((addr + start) >> 1) + 2) ^ 1];
@ -194,7 +194,7 @@ void uc5_tridma()
WriteTrace(TraceRDP, TraceDebug, "tri #%d - %d, %d, %d", rdp.tri_n, v0, v1, v2); WriteTrace(TraceRDP, TraceDebug, "tri #%d - %d, %d, %d", rdp.tri_n, v0, v1, v2);
VERTEX *vtx[3] = { gfxVERTEX *vtx[3] = {
&rdp.vtx(v0), &rdp.vtx(v0),
&rdp.vtx(v1), &rdp.vtx(v1),
&rdp.vtx(v2) &rdp.vtx(v2)

View File

@ -152,7 +152,7 @@ void DrawHiresDepthImage(const DRAWIMAGE & d)
float lr_y = (float)d.imageH * rdp.scale_y; float lr_y = (float)d.imageH * rdp.scale_y;
float lr_u = (float)d.imageW * 0.5f;// - 0.5f; float lr_u = (float)d.imageW * 0.5f;// - 0.5f;
float lr_v = (float)d.imageH * 0.5f;// - 0.5f; float lr_v = (float)d.imageH * 0.5f;// - 0.5f;
VERTEX v[4] = { gfxVERTEX v[4] = {
{ 0, 0, 1.0f, 1.0f, 0, 0, 0, 0 }, { 0, 0, 1.0f, 1.0f, 0, 0, 0, 0 },
{ lr_x, 0, 1.0f, 1.0f, lr_u, 0, lr_u, 0 }, { lr_x, 0, 1.0f, 1.0f, lr_u, 0, lr_u, 0 },
{ 0, lr_y, 1.0f, 1.0f, 0, lr_v, 0, lr_v }, { 0, lr_y, 1.0f, 1.0f, 0, lr_v, 0, lr_v },
@ -464,7 +464,7 @@ void DrawImage(DRAWIMAGE & d)
if ((flr_x <= rdp.scissor.lr_x) || (ful_x < rdp.scissor.lr_x)) if ((flr_x <= rdp.scissor.lr_x) || (ful_x < rdp.scissor.lr_x))
{ {
VERTEX v[4] = { gfxVERTEX v[4] = {
{ ful_x, ful_y, Z, 1.0f, ful_u, ful_v }, { ful_x, ful_y, Z, 1.0f, ful_u, ful_v },
{ flr_x, ful_y, Z, 1.0f, flr_u, ful_v }, { flr_x, ful_y, Z, 1.0f, flr_u, ful_v },
{ ful_x, flr_y, Z, 1.0f, ful_u, flr_v }, { ful_x, flr_y, Z, 1.0f, ful_u, flr_v },
@ -474,7 +474,7 @@ void DrawImage(DRAWIMAGE & d)
apply_shade_mods(&(v[s])); apply_shade_mods(&(v[s]));
ConvertCoordsConvert(v, 4); ConvertCoordsConvert(v, 4);
gfxDrawVertexArrayContiguous(GFX_TRIANGLE_STRIP, 4, v, sizeof(VERTEX)); gfxDrawVertexArrayContiguous(GFX_TRIANGLE_STRIP, 4, v, sizeof(gfxVERTEX));
rdp.tri_n += 2; rdp.tri_n += 2;
} }
else else
@ -576,7 +576,7 @@ void DrawHiresImage(DRAWIMAGE & d, int screensize)
if (lr_y > rdp.scissor.lr_y) lr_y = (float)rdp.scissor.lr_y; if (lr_y > rdp.scissor.lr_y) lr_y = (float)rdp.scissor.lr_y;
} }
// Make the vertices // Make the vertices
VERTEX v[4] = { gfxVERTEX v[4] = {
{ ul_x, ul_y, Z, 1.0f, ul_u, ul_v, ul_u, ul_v }, { ul_x, ul_y, Z, 1.0f, ul_u, ul_v, ul_u, ul_v },
{ lr_x, ul_y, Z, 1.0f, lr_u, ul_v, lr_u, ul_v }, { lr_x, ul_y, Z, 1.0f, lr_u, ul_v, lr_u, ul_v },
{ ul_x, lr_y, Z, 1.0f, ul_u, lr_v, ul_u, lr_v }, { ul_x, lr_y, Z, 1.0f, ul_u, lr_v, ul_u, lr_v },
@ -687,7 +687,7 @@ void uc6_bg_copy()
uc6_bg(false); uc6_bg(false);
} }
static void draw_split_triangle(VERTEX **vtx) static void draw_split_triangle(gfxVERTEX **vtx)
{ {
vtx[0]->not_zclipped = vtx[1]->not_zclipped = vtx[2]->not_zclipped = 1; vtx[0]->not_zclipped = vtx[1]->not_zclipped = vtx[2]->not_zclipped = 1;
@ -718,8 +718,8 @@ static void draw_split_triangle(VERTEX **vtx)
j = i + 1; j = i + 1;
if (j == 3) j = 0; if (j == 3) j = 0;
VERTEX *v1 = vtx[i]; gfxVERTEX *v1 = vtx[i];
VERTEX *v2 = vtx[j]; gfxVERTEX *v2 = vtx[j];
if (v1->u0 >= left_256) if (v1->u0 >= left_256)
{ {
@ -782,8 +782,8 @@ static void draw_split_triangle(VERTEX **vtx)
j = i + 1; j = i + 1;
if (j == rdp.n_global) j = 0; if (j == rdp.n_global) j = 0;
VERTEX *v1 = &rdp.vtxbuf2[i]; gfxVERTEX *v1 = &rdp.vtxbuf2[i];
VERTEX *v2 = &rdp.vtxbuf2[j]; gfxVERTEX *v2 = &rdp.vtxbuf2[j];
// ** Right plane ** // ** Right plane **
if (v1->u0 <= 256.0f) if (v1->u0 <= 256.0f)
@ -835,7 +835,7 @@ static void draw_split_triangle(VERTEX **vtx)
} }
} }
static void uc6_draw_polygons(VERTEX v[4]) static void uc6_draw_polygons(gfxVERTEX v[4])
{ {
AllowShadeMods(v, 4); AllowShadeMods(v, 4);
for (int s = 0; s < 4; s++) for (int s = 0; s < 4; s++)
@ -845,7 +845,7 @@ static void uc6_draw_polygons(VERTEX v[4])
// Set vertex buffers // Set vertex buffers
if (rdp.cur_cache[0] && rdp.cur_cache[0]->splits > 1) if (rdp.cur_cache[0] && rdp.cur_cache[0]->splits > 1)
{ {
VERTEX *vptr[3]; gfxVERTEX *vptr[3];
int i; int i;
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
vptr[i] = &v[i]; vptr[i] = &v[i];
@ -863,7 +863,7 @@ static void uc6_draw_polygons(VERTEX v[4])
rdp.vtxbuf2 = rdp.vtx2; rdp.vtxbuf2 = rdp.vtx2;
rdp.vtx_buffer = 0; rdp.vtx_buffer = 0;
rdp.n_global = 3; rdp.n_global = 3;
memcpy(rdp.vtxbuf, v, sizeof(VERTEX) * 3); memcpy(rdp.vtxbuf, v, sizeof(gfxVERTEX) * 3);
do_triangle_stuff_2(); do_triangle_stuff_2();
rdp.tri_n++; rdp.tri_n++;
@ -871,7 +871,7 @@ static void uc6_draw_polygons(VERTEX v[4])
rdp.vtxbuf2 = rdp.vtx2; rdp.vtxbuf2 = rdp.vtx2;
rdp.vtx_buffer = 0; rdp.vtx_buffer = 0;
rdp.n_global = 3; rdp.n_global = 3;
memcpy(rdp.vtxbuf, v + 1, sizeof(VERTEX) * 3); memcpy(rdp.vtxbuf, v + 1, sizeof(gfxVERTEX) * 3);
do_triangle_stuff_2(); do_triangle_stuff_2();
rdp.tri_n++; rdp.tri_n++;
} }
@ -991,7 +991,7 @@ void uc6_obj_rectangle()
ul_v = 0.5f; ul_v = 0.5f;
// Make the vertices // Make the vertices
VERTEX v[4] = { gfxVERTEX v[4] = {
{ ul_x, ul_y, Z, 1, ul_u, ul_v }, { ul_x, ul_y, Z, 1, ul_u, ul_v },
{ lr_x, ul_y, Z, 1, lr_u, ul_v }, { lr_x, ul_y, Z, 1, lr_u, ul_v },
{ ul_x, lr_y, Z, 1, ul_u, lr_v }, { ul_x, lr_y, Z, 1, ul_u, lr_v },
@ -1050,7 +1050,7 @@ void uc6_obj_sprite()
// Make the vertices // Make the vertices
// WriteTrace(TraceRDP, TraceDebug, "scale_x: %f, scale_y: %f", rdp.cur_cache[0]->scale_x, rdp.cur_cache[0]->scale_y); // WriteTrace(TraceRDP, TraceDebug, "scale_x: %f, scale_y: %f", rdp.cur_cache[0]->scale_x, rdp.cur_cache[0]->scale_y);
VERTEX v[4] = { gfxVERTEX v[4] = {
{ ul_x, ul_y, Z, 1, ul_u, ul_v }, { ul_x, ul_y, Z, 1, ul_u, ul_v },
{ lr_x, ul_y, Z, 1, lr_u, ul_v }, { lr_x, ul_y, Z, 1, lr_u, ul_v },
{ ul_x, lr_y, Z, 1, ul_u, lr_v }, { ul_x, lr_y, Z, 1, ul_u, lr_v },
@ -1221,7 +1221,7 @@ void uc6_obj_rectangle_r()
ul_v = 0.5f; ul_v = 0.5f;
// Make the vertices // Make the vertices
VERTEX v[4] = { gfxVERTEX v[4] = {
{ ul_x, ul_y, Z, 1, ul_u, ul_v }, { ul_x, ul_y, Z, 1, ul_u, ul_v },
{ lr_x, ul_y, Z, 1, lr_u, ul_v }, { lr_x, ul_y, Z, 1, lr_u, ul_v },
{ ul_x, lr_y, Z, 1, ul_u, lr_v }, { ul_x, lr_y, Z, 1, ul_u, lr_v },
@ -1533,7 +1533,7 @@ void uc6_sprite2d()
} }
// Make the vertices // Make the vertices
VERTEX v[4] = { gfxVERTEX v[4] = {
{ ul_x, ul_y, Z, 1, 0.5f, 0.5f }, { ul_x, ul_y, Z, 1, 0.5f, 0.5f },
{ lr_x, ul_y, Z, 1, lr_u, 0.5f }, { lr_x, ul_y, Z, 1, lr_u, 0.5f },
{ ul_x, lr_y, Z, 1, 0.5f, lr_v }, { ul_x, lr_y, Z, 1, 0.5f, lr_v },
@ -1554,7 +1554,7 @@ void uc6_sprite2d()
// Set vertex buffers // Set vertex buffers
if (rdp.cur_cache[0]->splits > 1) if (rdp.cur_cache[0]->splits > 1)
{ {
VERTEX *vptr[3]; gfxVERTEX *vptr[3];
int i; int i;
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
vptr[i] = &v[i]; vptr[i] = &v[i];
@ -1572,7 +1572,7 @@ void uc6_sprite2d()
rdp.vtxbuf2 = rdp.vtx2; rdp.vtxbuf2 = rdp.vtx2;
rdp.vtx_buffer = 0; rdp.vtx_buffer = 0;
rdp.n_global = 3; rdp.n_global = 3;
memcpy(rdp.vtxbuf, v, sizeof(VERTEX) * 3); memcpy(rdp.vtxbuf, v, sizeof(gfxVERTEX) * 3);
do_triangle_stuff_2(); do_triangle_stuff_2();
rdp.tri_n++; rdp.tri_n++;
@ -1580,7 +1580,7 @@ void uc6_sprite2d()
rdp.vtxbuf2 = rdp.vtx2; rdp.vtxbuf2 = rdp.vtx2;
rdp.vtx_buffer = 0; rdp.vtx_buffer = 0;
rdp.n_global = 3; rdp.n_global = 3;
memcpy(rdp.vtxbuf, v + 1, sizeof(VERTEX) * 3); memcpy(rdp.vtxbuf, v + 1, sizeof(gfxVERTEX) * 3);
do_triangle_stuff_2(); do_triangle_stuff_2();
rdp.tri_n++; rdp.tri_n++;
} }

View File

@ -72,7 +72,7 @@ void uc7_vertex()
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
{ {
VERTEX &v = rdp.vtx(v0 + i); gfxVERTEX &v = rdp.vtx(v0 + i);
x = (float)vertex->x; x = (float)vertex->x;
y = (float)vertex->y; y = (float)vertex->y;
z = (float)vertex->z; z = (float)vertex->z;

View File

@ -61,7 +61,7 @@ void uc8_vertex()
//*/ //*/
for (i = 0; i < (n << 4); i += 16) for (i = 0; i < (n << 4); i += 16)
{ {
VERTEX & v = rdp.vtx(v0 + (i >> 4)); gfxVERTEX & v = rdp.vtx(v0 + (i >> 4));
x = (float)((short*)gfx.RDRAM)[(((addr + i) >> 1) + 0) ^ 1]; x = (float)((short*)gfx.RDRAM)[(((addr + i) >> 1) + 0) ^ 1];
y = (float)((short*)gfx.RDRAM)[(((addr + i) >> 1) + 1) ^ 1]; y = (float)((short*)gfx.RDRAM)[(((addr + i) >> 1) + 1) ^ 1];
z = (float)((short*)gfx.RDRAM)[(((addr + i) >> 1) + 2) ^ 1]; z = (float)((short*)gfx.RDRAM)[(((addr + i) >> 1) + 2) ^ 1];
@ -424,7 +424,7 @@ void uc8_tri4() //by Gugaman Apr 19 2002
((rdp.cmd1 >> 5) & 0x1F), ((rdp.cmd1 >> 5) & 0x1F),
((rdp.cmd1 >> 0) & 0x1F)); ((rdp.cmd1 >> 0) & 0x1F));
VERTEX *v[12] = { gfxVERTEX *v[12] = {
&rdp.vtx((rdp.cmd0 >> 23) & 0x1F), &rdp.vtx((rdp.cmd0 >> 23) & 0x1F),
&rdp.vtx((rdp.cmd0 >> 18) & 0x1F), &rdp.vtx((rdp.cmd0 >> 18) & 0x1F),
&rdp.vtx(((((rdp.cmd0 >> 15) & 0x7) << 2) | ((rdp.cmd1 >> 30) & 0x3))), &rdp.vtx(((((rdp.cmd0 >> 15) & 0x7) << 2) | ((rdp.cmd1 >> 30) & 0x3))),

View File

@ -109,10 +109,10 @@ static void uc9_draw_object(uint8_t * addr, uint32_t type)
textured = vnum = vsize = 0; textured = vnum = vsize = 0;
break; break;
} }
VERTEX vtx[4]; gfxVERTEX vtx[4];
for (uint32_t i = 0; i < vnum; i++) for (uint32_t i = 0; i < vnum; i++)
{ {
VERTEX &v = vtx[i]; gfxVERTEX &v = vtx[i];
v.sx = zSortRdp.scale_x * ((short*)addr)[0 ^ 1]; v.sx = zSortRdp.scale_x * ((short*)addr)[0 ^ 1];
v.sy = zSortRdp.scale_y * ((short*)addr)[1 ^ 1]; v.sy = zSortRdp.scale_y * ((short*)addr)[1 ^ 1];
v.sz = 1.0f; v.sz = 1.0f;
@ -142,7 +142,7 @@ static void uc9_draw_object(uint8_t * addr, uint32_t type)
addr += vsize; addr += vsize;
} }
//* //*
VERTEX *pV[4] = { gfxVERTEX *pV[4] = {
&vtx[0], &vtx[0],
&vtx[1], &vtx[1],
&vtx[2], &vtx[2],
@ -310,7 +310,7 @@ void uc9_light()
int use_material = (csrs != 0x0ff0); int use_material = (csrs != 0x0ff0);
tdest >>= 1; tdest >>= 1;
WriteTrace(TraceRDP, TraceDebug, "uc9:light n: %d, colsrs: %04lx, normales: %04lx, coldst: %04lx, texdst: %04lx", num, csrs, nsrs, cdest, tdest); WriteTrace(TraceRDP, TraceDebug, "uc9:light n: %d, colsrs: %04lx, normales: %04lx, coldst: %04lx, texdst: %04lx", num, csrs, nsrs, cdest, tdest);
VERTEX v; gfxVERTEX v;
for (uint32_t i = 0; i < num; i++) for (uint32_t i = 0; i < num; i++)
{ {
v.vec[0] = ((char*)gfx.DMEM)[(nsrs++) ^ 3]; v.vec[0] = ((char*)gfx.DMEM)[(nsrs++) ^ 3];