Skip to content
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
build/combined_shader_fpo.h
build/combined_shader_vpo.h
*.o
*.d
*.self
*.map
*.elf
4 changes: 2 additions & 2 deletions fileBrowser/fileBrowser-ps3.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,14 @@
#include "fileBrowser.h"

fileBrowser_file topLevel_ps3_Default =
{ "/dev_usb/wii64/roms", // file name
{ "/dev_usb000/wii64/roms", // file name
0, // offset
0, // size
FILE_BROWSER_ATTR_DIR
};

fileBrowser_file saveDir_ps3_Default =
{ "/dev_usb/wii64/saves",
{ "/dev_usb000/wii64/saves",
0,
0,
FILE_BROWSER_ATTR_DIR
Expand Down
259 changes: 187 additions & 72 deletions glN64_GX/OpenGL.cpp

Large diffs are not rendered by default.

137 changes: 76 additions & 61 deletions glN64_GX/OpenGL.h
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
/**
* glN64_GX - OpenGL.h
* Copyright (C) 2003 Orkin
* Copyright (C) 2008, 2009, 2010 sepp256 (Port to Wii/Gamecube/PS3)
*
* glN64 homepage: http://gln64.emulation64.com
* Wii64 homepage: http://www.emulatemii.com
* email address: sepp256@gmail.com
*
**/
/**
* glN64_GX - OpenGL.h
* Copyright (C) 2003 Orkin
* Copyright (C) 2008, 2009, 2010 sepp256 (Port to Wii/Gamecube/PS3)
*
* glN64 homepage: http://gln64.emulation64.com
* Wii64 homepage: http://www.emulatemii.com
* email address: sepp256@gmail.com
*
**/

#ifndef OPENGL_H
#define OPENGL_H

Expand All @@ -34,32 +34,46 @@
#include "glATI.h"
#include "gSP.h"

#define GXprojZScale 0.5 //0.25 //0.5
#define GXprojZOffset -0.5 //-0.5
#define GXpolyOffsetFactor 5.0e-4 //Tweaked for co-planar polygons. Interestingly, Z resolution should be 5.96e-8.
#define GXprojZScale 0.5 //0.25 //0.5
#define GXprojZOffset -0.5 //-0.5
#define GXpolyOffsetFactor 5.0e-4 //Tweaked for co-planar polygons. Interestingly, Z resolution should be 5.96e-8.

#ifdef PS3
#include <rsx/rsx.h>
#include <sysutil/video.h>
#include "../main/rsxutil.h"
#ifdef SHOW_DEBUG
#include "../main/debug/DEBUG.h"
#endif

#include <rsx/rsx.h>
#if __has_include(<sysutil/video_out.h>)
#include <sysutil/video_out.h>
Comment thread
Fancy2209 marked this conversation as resolved.
#else
// Compatibility for non PS3Aqua PSL1GHT
#include <sysutil/video.h>
#define videoOutState videoState
#define videoOutResolution videoResolution
#define videoOutConfiguration videoConfiguration

#define videoOutGetState videoGetState
#define videoOutGetResolution videoGetResolution
#define videoOutConfigure videoConfigure

#define VIDEO_OUT_BUFFER_FORMAT_XRGB VIDEO_BUFFER_FORMAT_XRGB
#endif
#include "../main/rsxutil.h"
#ifdef SHOW_DEBUG
#include "../main/debug/DEBUG.h"
#endif

extern "C" void dbg_printf(const char *fmt,...);
#include <vectormath/cpp/vectormath_aos.h>
using namespace Vectormath::Aos;
#include "combined_shader_vpo.h"
#include "combined_shader_fpo.h"
enum Shaders
{
SHADER_PASSTEX=1,
SHADER_PASSCOLOR,
SHADER_MODULATE
};

#include <vectormath/cpp/vectormath_aos.h>
using namespace Vectormath::Aos;

#include "combined_shader_vpo.h"
#include "combined_shader_fpo.h"

enum Shaders
{
SHADER_PASSTEX=1,
SHADER_PASSCOLOR,
SHADER_MODULATE
};
#endif // PS3

struct GLVertex
Expand Down Expand Up @@ -136,28 +150,29 @@ struct GLInfo
BYTE combiner;

#ifdef PS3
u32 fpsize;
u32 fp_offset;
u32 *fp_buffer;

s32 projMatrix_id;
s32 modelViewMatrix_id;
s32 vertexPosition_id;
s32 vertexColor0_id;
s32 vertexTexcoord_id;
s32 textureUnit_id;
s32 mode_id;
f32 shader_mode;

void *vp_ucode;
rsxVertexProgram *vpo;
void *fp_ucode;
rsxFragmentProgram *fpo;

Matrix4 projMatrix, modelViewMatrix;
//Temporary
u32 finish_ref;
u16* FBtex;
u32 fpsize;
u32 vpsize;
u32 fp_offset;
u32 *fp_buffer;

rsxProgramConst *projMatrix_id;
rsxProgramConst *modelViewMatrix_id;
rsxProgramAttrib *vertexPosition_id;
rsxProgramAttrib *vertexColor0_id;
rsxProgramAttrib *vertexTexcoord_id;
rsxProgramAttrib *textureUnit_id;
rsxProgramConst *mode_id;
f32 shader_mode;

void *vp_ucode;
rsxVertexProgram *vpo;
void *fp_ucode;
rsxFragmentProgram *fpo;

Matrix4 projMatrix, modelViewMatrix;
//Temporary
u32 finish_ref;
u16* FBtex;
#endif //PS3
#if defined(__GX__)||defined(PS3) //Variables specific to GX
int GXorigX, GXorigY;
Expand All @@ -166,11 +181,11 @@ struct GLInfo
#ifdef __GX__
float GXscaleX, GXscaleY;
float GXzPrimeScale, GXzPrimeTranslate;
Mtx44 GXcombW;
Mtx44 GXprojWnear;
Mtx44 GXprojIdent;
Mtx44 GXprojTemp;
Mtx GXmodelViewIdent;
Mtx44 GXcombW;
Mtx44 GXprojWnear;
Mtx44 GXprojIdent;
Mtx44 GXprojTemp;
Mtx GXmodelViewIdent;
BOOL GXuseCombW;
BOOL GXuseProjWnear;
BOOL GXupdateMtx;
Expand Down
42 changes: 21 additions & 21 deletions glN64_GX/Textures.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -479,10 +479,10 @@ void TextureCache_Init()
(GCM_TEXTURE_REMAP_TYPE_REMAP << GCM_TEXTURE_REMAP_TYPE_G_SHIFT) |
(GCM_TEXTURE_REMAP_TYPE_REMAP << GCM_TEXTURE_REMAP_TYPE_R_SHIFT) |
(GCM_TEXTURE_REMAP_TYPE_REMAP << GCM_TEXTURE_REMAP_TYPE_A_SHIFT) |
(GCM_TEXTURE_REMAP_COLOR_B << GCM_TEXTURE_REMAP_COLOR_B_SHIFT) |
(GCM_TEXTURE_REMAP_COLOR_G << GCM_TEXTURE_REMAP_COLOR_G_SHIFT) |
(GCM_TEXTURE_REMAP_COLOR_R << GCM_TEXTURE_REMAP_COLOR_R_SHIFT) |
(GCM_TEXTURE_REMAP_COLOR_A << GCM_TEXTURE_REMAP_COLOR_A_SHIFT));
(GCM_TEXTURE_REMAP_COLOR_B << GCM_TEXTURE_REMAP_COLOR_A_SHIFT) |
(GCM_TEXTURE_REMAP_COLOR_G << GCM_TEXTURE_REMAP_COLOR_B_SHIFT) |
(GCM_TEXTURE_REMAP_COLOR_R << GCM_TEXTURE_REMAP_COLOR_G_SHIFT) |
(GCM_TEXTURE_REMAP_COLOR_A << GCM_TEXTURE_REMAP_COLOR_R_SHIFT));
cache.dummy->rsxTex.width = cache.dummy->width;
cache.dummy->rsxTex.height = cache.dummy->height;
cache.dummy->rsxTex.depth = 1;
Expand Down Expand Up @@ -1026,10 +1026,10 @@ void TextureCache_LoadBackground( CachedTexture *texInfo )
(GCM_TEXTURE_REMAP_TYPE_REMAP << GCM_TEXTURE_REMAP_TYPE_G_SHIFT) |
(GCM_TEXTURE_REMAP_TYPE_REMAP << GCM_TEXTURE_REMAP_TYPE_R_SHIFT) |
(GCM_TEXTURE_REMAP_TYPE_REMAP << GCM_TEXTURE_REMAP_TYPE_A_SHIFT) |
(GCM_TEXTURE_REMAP_COLOR_B << GCM_TEXTURE_REMAP_COLOR_B_SHIFT) |
(GCM_TEXTURE_REMAP_COLOR_G << GCM_TEXTURE_REMAP_COLOR_G_SHIFT) |
(GCM_TEXTURE_REMAP_COLOR_R << GCM_TEXTURE_REMAP_COLOR_R_SHIFT) |
(GCM_TEXTURE_REMAP_COLOR_A << GCM_TEXTURE_REMAP_COLOR_A_SHIFT));
(GCM_TEXTURE_REMAP_COLOR_B << GCM_TEXTURE_REMAP_COLOR_A_SHIFT) |
(GCM_TEXTURE_REMAP_COLOR_G << GCM_TEXTURE_REMAP_COLOR_B_SHIFT) |
(GCM_TEXTURE_REMAP_COLOR_R << GCM_TEXTURE_REMAP_COLOR_G_SHIFT) |
(GCM_TEXTURE_REMAP_COLOR_A << GCM_TEXTURE_REMAP_COLOR_R_SHIFT));
texInfo->rsxTex.width = texInfo->realWidth;
texInfo->rsxTex.height = texInfo->realHeight;
texInfo->rsxTex.depth = 1;
Expand Down Expand Up @@ -1422,10 +1422,10 @@ void TextureCache_Load( CachedTexture *texInfo )
(GCM_TEXTURE_REMAP_TYPE_REMAP << GCM_TEXTURE_REMAP_TYPE_G_SHIFT) |
(GCM_TEXTURE_REMAP_TYPE_REMAP << GCM_TEXTURE_REMAP_TYPE_R_SHIFT) |
(GCM_TEXTURE_REMAP_TYPE_REMAP << GCM_TEXTURE_REMAP_TYPE_A_SHIFT) |
(GCM_TEXTURE_REMAP_COLOR_B << GCM_TEXTURE_REMAP_COLOR_B_SHIFT) |
(GCM_TEXTURE_REMAP_COLOR_G << GCM_TEXTURE_REMAP_COLOR_G_SHIFT) |
(GCM_TEXTURE_REMAP_COLOR_R << GCM_TEXTURE_REMAP_COLOR_R_SHIFT) |
(GCM_TEXTURE_REMAP_COLOR_A << GCM_TEXTURE_REMAP_COLOR_A_SHIFT));
(GCM_TEXTURE_REMAP_COLOR_B << GCM_TEXTURE_REMAP_COLOR_A_SHIFT) |
(GCM_TEXTURE_REMAP_COLOR_G << GCM_TEXTURE_REMAP_COLOR_B_SHIFT) |
(GCM_TEXTURE_REMAP_COLOR_R << GCM_TEXTURE_REMAP_COLOR_G_SHIFT) |
(GCM_TEXTURE_REMAP_COLOR_A << GCM_TEXTURE_REMAP_COLOR_R_SHIFT));
texInfo->rsxTex.width = texInfo->realWidth;
texInfo->rsxTex.height = texInfo->realHeight;
texInfo->rsxTex.depth = 1;
Expand Down Expand Up @@ -1514,15 +1514,15 @@ void TextureCache_ActivateTexture( u32 t, CachedTexture *texture )
// rsxFlushBuffer(context);
rsxInvalidateTextureCache(context,GCM_INVALIDATE_TEXTURE); //needed?

rsxLoadTexture(context,OGL.textureUnit_id,&texture->rsxTex);
rsxTextureControl(context,OGL.textureUnit_id,GCM_TRUE,0<<8,12<<8,GCM_TEXTURE_MAX_ANISO_1);
rsxLoadTexture(context,OGL.textureUnit_id->index,&texture->rsxTex);
rsxTextureControl(context,OGL.textureUnit_id->index,GCM_TRUE,0<<8,12<<8,GCM_TEXTURE_MAX_ANISO_1);
// Set filter mode. Almost always bilinear, but check anyways
if ((gDP.otherMode.textureFilter == G_TF_BILERP) || (gDP.otherMode.textureFilter == G_TF_AVERAGE) || (OGL.forceBilinear))
rsxTextureFilter(context,OGL.textureUnit_id,GCM_TEXTURE_LINEAR,GCM_TEXTURE_LINEAR,GCM_TEXTURE_CONVOLUTION_QUINCUNX);
rsxTextureFilter(context,OGL.textureUnit_id->index,0,GCM_TEXTURE_LINEAR,GCM_TEXTURE_LINEAR,GCM_TEXTURE_CONVOLUTION_QUINCUNX);
else
rsxTextureFilter(context,OGL.textureUnit_id,GCM_TEXTURE_NEAREST,GCM_TEXTURE_NEAREST,GCM_TEXTURE_CONVOLUTION_QUINCUNX);
rsxTextureFilter(context,OGL.textureUnit_id->index,0,GCM_TEXTURE_NEAREST,GCM_TEXTURE_NEAREST,GCM_TEXTURE_CONVOLUTION_QUINCUNX);
// Set clamping modes
rsxTextureWrapMode(context,OGL.textureUnit_id,texture->clampS ? GCM_TEXTURE_CLAMP_TO_EDGE : GCM_TEXTURE_REPEAT,
rsxTextureWrapMode(context,OGL.textureUnit_id->index,texture->clampS ? GCM_TEXTURE_CLAMP_TO_EDGE : GCM_TEXTURE_REPEAT,
texture->clampT ? GCM_TEXTURE_CLAMP_TO_EDGE : GCM_TEXTURE_REPEAT,GCM_TEXTURE_CLAMP_TO_EDGE,0,GCM_TEXTURE_ZFUNC_LESS,0);
// dbg_printf("TextureCache_ActivateTexture %d\r\n", t);
#elif defined(__GX__)
Expand Down Expand Up @@ -1586,10 +1586,10 @@ void TextureCache_ActivateDummy( u32 t )
// rsxFlushBuffer(context);
rsxInvalidateTextureCache(context,GCM_INVALIDATE_TEXTURE); //needed?

rsxLoadTexture(context,OGL.textureUnit_id,&cache.dummy->rsxTex);
rsxTextureControl(context,OGL.textureUnit_id,GCM_TRUE,0<<8,12<<8,GCM_TEXTURE_MAX_ANISO_1);
rsxTextureFilter(context,OGL.textureUnit_id,GCM_TEXTURE_NEAREST,GCM_TEXTURE_NEAREST,GCM_TEXTURE_CONVOLUTION_QUINCUNX);
rsxTextureWrapMode(context,OGL.textureUnit_id,GCM_TEXTURE_REPEAT,GCM_TEXTURE_REPEAT,GCM_TEXTURE_CLAMP_TO_EDGE,0,GCM_TEXTURE_ZFUNC_LESS,0);
rsxLoadTexture(context,OGL.textureUnit_id->index,&cache.dummy->rsxTex);
rsxTextureControl(context,OGL.textureUnit_id->index,GCM_TRUE,0<<8,12<<8,GCM_TEXTURE_MAX_ANISO_1);
rsxTextureFilter(context,OGL.textureUnit_id->index,0,GCM_TEXTURE_NEAREST,GCM_TEXTURE_NEAREST,GCM_TEXTURE_CONVOLUTION_QUINCUNX);
rsxTextureWrapMode(context,OGL.textureUnit_id->index,GCM_TEXTURE_REPEAT,GCM_TEXTURE_REPEAT,GCM_TEXTURE_CLAMP_TO_EDGE,0,GCM_TEXTURE_ZFUNC_LESS,0);
// dbg_printf("TextureCache_ActivateDummy %d\r\n", t);
#elif defined(__GX__)
if (cache.dummy->GXtexture != NULL)
Expand Down
113 changes: 113 additions & 0 deletions glN64_GX/convert.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
/**
* glN64_GX - Convert.h
* Copyright (C) 2003 Orkin
* Copyright (C) 2008, 2009 sepp256 (Port to Wii/Gamecube/PS3)
*
* glN64 homepage: http://gln64.emulation64.com
* Wii64 homepage: http://www.emulatemii.com
* email address: sepp256@gmail.com
*
**/
#include "convert.h"
#include "Types.h"

#if !(defined(X86_ASM) && defined(__LINUX__))
const volatile unsigned char Five2Eight[32] =
{
0, // 00000 = 00000000
8, // 00001 = 00001000
16, // 00010 = 00010000
25, // 00011 = 00011001
33, // 00100 = 00100001
41, // 00101 = 00101001
49, // 00110 = 00110001
58, // 00111 = 00111010
66, // 01000 = 01000010
74, // 01001 = 01001010
82, // 01010 = 01010010
90, // 01011 = 01011010
99, // 01100 = 01100011
107, // 01101 = 01101011
115, // 01110 = 01110011
123, // 01111 = 01111011
132, // 10000 = 10000100
140, // 10001 = 10001100
148, // 10010 = 10010100
156, // 10011 = 10011100
165, // 10100 = 10100101
173, // 10101 = 10101101
181, // 10110 = 10110101
189, // 10111 = 10111101
197, // 11000 = 11000101
206, // 11001 = 11001110
214, // 11010 = 11010110
222, // 11011 = 11011110
230, // 11100 = 11100110
239, // 11101 = 11101111
247, // 11110 = 11110111
255 // 11111 = 11111111
};

const volatile unsigned char Four2Eight[16] =
{
0, // 0000 = 00000000
17, // 0001 = 00010001
34, // 0010 = 00100010
51, // 0011 = 00110011
68, // 0100 = 01000100
85, // 0101 = 01010101
102, // 0110 = 01100110
119, // 0111 = 01110111
136, // 1000 = 10001000
153, // 1001 = 10011001
170, // 1010 = 10101010
187, // 1011 = 10111011
204, // 1100 = 11001100
221, // 1101 = 11011101
238, // 1110 = 11101110
255 // 1111 = 11111111
};

const volatile unsigned char Three2Four[8] =
{
0, // 000 = 0000
2, // 001 = 0010
4, // 010 = 0100
6, // 011 = 0110
9, // 100 = 1001
11, // 101 = 1011
13, // 110 = 1101
15, // 111 = 1111
};

const volatile unsigned char Three2Eight[8] =
{
0, // 000 = 00000000
36, // 001 = 00100100
73, // 010 = 01001001
109, // 011 = 01101101
146, // 100 = 10010010
182, // 101 = 10110110
219, // 110 = 11011011
255, // 111 = 11111111
};
const volatile unsigned char Two2Eight[4] =
{
0, // 00 = 00000000
85, // 01 = 01010101
170, // 10 = 10101010
255 // 11 = 11111111
};

const volatile unsigned char One2Four[2] =
{
0, // 0 = 0000
15, // 1 = 1111
};

const volatile unsigned char One2Eight[2] =
{
0, // 0 = 00000000
255, // 1 = 11111111
};
#endif
Loading