3DS: See if this helps with system freezes

GameCube: Invert vertical joystick direction for bettera camera movement (Thanks GK6475)
This commit is contained in:
UnknownShadow200 2023-07-31 21:57:44 +10:00
parent 736d28946d
commit 522fc17f68
4 changed files with 104 additions and 28 deletions

View File

@ -14,6 +14,9 @@ extern const u32 _3DS_coloured_shbin_size;
extern const u8 _3DS_textured_shbin[];
extern const u32 _3DS_textured_shbin_size;
extern const u8 _3DS_offset_shbin[];
extern const u32 _3DS_offset_shbin_size;
#define DISPLAY_TRANSFER_FLAGS \
(GX_TRANSFER_FLIP_VERT(0) | GX_TRANSFER_OUT_TILED(0) | GX_TRANSFER_RAW_COPY(0) | \
GX_TRANSFER_IN_FORMAT(GX_TRANSFER_FMT_RGBA8) | GX_TRANSFER_OUT_FORMAT(GX_TRANSFER_FMT_RGB8) | \
@ -587,6 +590,8 @@ static void SetVertexBuffer(int startVertex) {
void Gfx_DrawVb_IndexedTris_Range(int verticesCount, int startVertex) {
SetVertexBuffer(startVertex);
C3D_DrawElements(GPU_TRIANGLES, ICOUNT(verticesCount), C3D_UNSIGNED_SHORT, gfx_indices);
// this doesn't work properly, because (index buffer + offset) must be aligned to 16 bytes
// C3D_DrawElements(GPU_TRIANGLES, ICOUNT(verticesCount), C3D_UNSIGNED_SHORT, gfx_indices + startVertex);
}
void Gfx_DrawVb_IndexedTris(int verticesCount) {
@ -599,17 +604,86 @@ void Gfx_DrawIndexedTris_T2fC4b(int verticesCount, int startVertex) {
C3D_DrawElements(GPU_TRIANGLES, ICOUNT(verticesCount), C3D_UNSIGNED_SHORT, gfx_indices);
}
// TODO: Temp hack
void Gfx_Draw2DFlat(int x, int y, int width, int height, PackedCol color) {
struct VertexColoured v1, v2, v3, v4;
v1.X = (float)x; v1.Y = (float)y;
v2.X = (float)(x + width); v2.Y = (float)y;
v3.X = (float)(x + width); v3.Y = (float)(y + height);
v4.X = (float)x; v4.Y = (float)(y + height);
Gfx_SetVertexFormat(VERTEX_FORMAT_COLOURED);
// this doesn't work properly, because (index buffer + offset) must be aligned to 16 bytes
/*void Gfx_DrawVb_IndexedTris_Range(int verticesCount, int startVertex) {
C3D_DrawElements(GPU_TRIANGLES, ICOUNT(verticesCount), C3D_UNSIGNED_SHORT, gfx_indices + startVertex);
C3D_ImmDrawBegin(GPU_TRIANGLES);
C3D_ImmSendAttrib(v1.X, v1.Y, 0.0f, 1.0f);
C3D_ImmSendAttrib(PackedCol_R(color), PackedCol_G(color), PackedCol_B(color), PackedCol_A(color));
C3D_ImmSendAttrib(v2.X, v2.Y, 0.0f, 1.0f);
C3D_ImmSendAttrib(PackedCol_R(color), PackedCol_G(color), PackedCol_B(color), PackedCol_A(color));
C3D_ImmSendAttrib(v3.X, v3.Y, 0.0f, 1.0f);
C3D_ImmSendAttrib(PackedCol_R(color), PackedCol_G(color), PackedCol_B(color), PackedCol_A(color));
C3D_ImmSendAttrib(v3.X, v3.Y, 0.0f, 1.0f);
C3D_ImmSendAttrib(PackedCol_R(color), PackedCol_G(color), PackedCol_B(color), PackedCol_A(color));
C3D_ImmSendAttrib(v4.X, v4.Y, 0.0f, 1.0f);
C3D_ImmSendAttrib(PackedCol_R(color), PackedCol_G(color), PackedCol_B(color), PackedCol_A(color));
C3D_ImmSendAttrib(v1.X, v1.Y, 0.0f, 1.0f);
C3D_ImmSendAttrib(PackedCol_R(color), PackedCol_G(color), PackedCol_B(color), PackedCol_A(color));
C3D_ImmDrawEnd();
}
void Gfx_DrawVb_IndexedTris(int verticesCount) {
C3D_DrawElements(GPU_TRIANGLES, ICOUNT(verticesCount), C3D_UNSIGNED_SHORT, gfx_indices);
void Gfx_Draw2DGradient(int x, int y, int width, int height, PackedCol top, PackedCol bottom) {
struct VertexColoured v1, v2, v3, v4;
v1.X = (float)x; v1.Y = (float)y;
v2.X = (float)(x + width); v2.Y = (float)y;
v3.X = (float)(x + width); v3.Y = (float)(y + height);
v4.X = (float)x; v4.Y = (float)(y + height);
Gfx_SetVertexFormat(VERTEX_FORMAT_COLOURED);
C3D_ImmDrawBegin(GPU_TRIANGLES);
C3D_ImmSendAttrib(v1.X, v1.Y, 0.0f, 1.0f);
C3D_ImmSendAttrib(PackedCol_R(top), PackedCol_G(top), PackedCol_B(top), PackedCol_A(top));
C3D_ImmSendAttrib(v2.X, v2.Y, 0.0f, 1.0f);
C3D_ImmSendAttrib(PackedCol_R(top), PackedCol_G(top), PackedCol_B(top), PackedCol_A(top));
C3D_ImmSendAttrib(v3.X, v3.Y, 0.0f, 1.0f);
C3D_ImmSendAttrib(PackedCol_R(bottom), PackedCol_G(bottom), PackedCol_B(bottom), PackedCol_A(bottom));
C3D_ImmSendAttrib(v3.X, v3.Y, 0.0f, 1.0f);
C3D_ImmSendAttrib(PackedCol_R(bottom), PackedCol_G(bottom), PackedCol_B(bottom), PackedCol_A(bottom));
C3D_ImmSendAttrib(v4.X, v4.Y, 0.0f, 1.0f);
C3D_ImmSendAttrib(PackedCol_R(bottom), PackedCol_G(bottom), PackedCol_B(bottom), PackedCol_A(bottom));
C3D_ImmSendAttrib(v1.X, v1.Y, 0.0f, 1.0f);
C3D_ImmSendAttrib(PackedCol_R(top), PackedCol_G(top), PackedCol_B(top), PackedCol_A(top));
C3D_ImmDrawEnd();
}
void Gfx_DrawIndexedTris_T2fC4b(int verticesCount, int startVertex) {
C3D_DrawElements(GPU_TRIANGLES, ICOUNT(verticesCount), C3D_UNSIGNED_SHORT, gfx_indices + startVertex);
}*/
void Gfx_Draw2DTexture(const struct Texture* tex, PackedCol color) {
struct VertexTextured v[4];
struct VertexTextured* ptr = v;
Gfx_Make2DQuad(tex, color, &ptr);
Gfx_SetVertexFormat(VERTEX_FORMAT_TEXTURED);
C3D_ImmDrawBegin(GPU_TRIANGLES);
C3D_ImmSendAttrib(v[0].X, v[0].Y, 0.0f, 1.0f);
C3D_ImmSendAttrib(PackedCol_R(color), PackedCol_G(color), PackedCol_B(color), PackedCol_A(color));
C3D_ImmSendAttrib(v[0].U, v[0].V, 0.0f, 0.0f);
C3D_ImmSendAttrib(v[1].X, v[1].Y, 0.0f, 1.0f);
C3D_ImmSendAttrib(PackedCol_R(color), PackedCol_G(color), PackedCol_B(color), PackedCol_A(color));
C3D_ImmSendAttrib(v[1].U, v[1].V, 0.0f, 0.0f);
C3D_ImmSendAttrib(v[2].X, v[2].Y, 0.0f, 1.0f);
C3D_ImmSendAttrib(PackedCol_R(color), PackedCol_G(color), PackedCol_B(color), PackedCol_A(color));
C3D_ImmSendAttrib(v[2].U, v[2].V, 0.0f, 0.0f);
C3D_ImmSendAttrib(v[2].X, v[2].Y, 0.0f, 1.0f);
C3D_ImmSendAttrib(PackedCol_R(color), PackedCol_G(color), PackedCol_B(color), PackedCol_A(color));
C3D_ImmSendAttrib(v[2].U, v[2].V, 0.0f, 0.0f);
C3D_ImmSendAttrib(v[3].X, v[3].Y, 0.0f, 1.0f);
C3D_ImmSendAttrib(PackedCol_R(color), PackedCol_G(color), PackedCol_B(color), PackedCol_A(color));
C3D_ImmSendAttrib(v[3].U, v[3].V, 0.0f, 0.0f);
C3D_ImmSendAttrib(v[0].X, v[0].Y, 0.0f, 1.0f);
C3D_ImmSendAttrib(PackedCol_R(color), PackedCol_G(color), PackedCol_B(color), PackedCol_A(color));
C3D_ImmSendAttrib(v[0].U, v[0].V, 0.0f, 0.0f);
C3D_ImmDrawEnd();
}
#endif

View File

@ -106,7 +106,7 @@ static void ProcessPAD_Game(PADStatus* pad) {
if (Math_AbsI(dx) <= 4) dx = 0;
if (Math_AbsI(dy) <= 4) dy = 0;
Event_RaiseRawMove(&PointerEvents.RawMoved, dx / 8.0f, dy / 8.0f);
Event_RaiseRawMove(&PointerEvents.RawMoved, dx / 8.0f, -dy / 8.0f);
}
Input_SetNonRepeatable(KeyBinds[KEYBIND_PLACE_BLOCK], mods & PAD_TRIGGER_L);

View File

@ -147,6 +147,7 @@ void Gfx_UpdateDynamicVb_IndexedTris(GfxResourceID vb, void* vertices, int vCoun
Gfx_DrawVb_IndexedTris(vCount);
}
#ifndef CC_BUILD_3DS
void Gfx_Draw2DFlat(int x, int y, int width, int height, PackedCol color) {
struct VertexColoured verts[4];
struct VertexColoured* v = verts;
@ -180,6 +181,7 @@ void Gfx_Draw2DTexture(const struct Texture* tex, PackedCol color) {
Gfx_SetVertexFormat(VERTEX_FORMAT_TEXTURED);
Gfx_UpdateDynamicVb_IndexedTris(Gfx_texVb, texVerts, 4);
}
#endif
void Gfx_Make2DQuad(const struct Texture* tex, PackedCol color, struct VertexTextured** vertices) {
float x1 = (float)tex->X, x2 = (float)(tex->X + tex->Width);

View File

@ -275,11 +275,11 @@ static void UpdateMouseButtons(int buttons) {
// TODO move logic to UpdateMouseButton instead?
if (changed & B_PRIMARY_MOUSE_BUTTON)
UpdateMouseButton(IPT_LMOUSE, buttons & B_PRIMARY_MOUSE_BUTTON);
UpdateMouseButton(CCMOUSE_L, buttons & B_PRIMARY_MOUSE_BUTTON);
if (changed & B_SECONDARY_MOUSE_BUTTON)
UpdateMouseButton(IPT_RMOUSE, buttons & B_SECONDARY_MOUSE_BUTTON);
UpdateMouseButton(CCMOUSE_R, buttons & B_SECONDARY_MOUSE_BUTTON);
if (changed & B_TERTIARY_MOUSE_BUTTON)
UpdateMouseButton(IPT_MMOUSE, buttons & B_TERTIARY_MOUSE_BUTTON);
UpdateMouseButton(CCMOUSE_M, buttons & B_TERTIARY_MOUSE_BUTTON);
last_buttons = buttons;
}
@ -516,20 +516,20 @@ void Window_Close(void) {
}
static const cc_uint8 key_map[] = {
/* 0x00 */ 0,IPT_ESCAPE,IPT_F1,IPT_F2, IPT_F3,IPT_F4,IPT_F5,IPT_F6,
/* 0x08 */ IPT_F7,IPT_F8,IPT_F9,IPT_F10, IPT_F11,IPT_F12,IPT_PRINTSCREEN,IPT_SCROLLLOCK,
/* 0x10 */ IPT_PAUSE,IPT_TILDE,'1','2', '3','4','5','6',
/* 0x18 */ '7','8','9','0', IPT_MINUS,IPT_EQUALS,IPT_BACKSPACE,IPT_INSERT,
/* 0x20 */ IPT_HOME,IPT_PAGEUP,IPT_NUMLOCK,IPT_KP_DIVIDE, IPT_KP_MULTIPLY,IPT_KP_MINUS,IPT_TAB,'Q',
/* 0x00 */ 0,CCKEY_ESCAPE,CCKEY_F1,CCKEY_F2, CCKEY_F3,CCKEY_F4,CCKEY_F5,CCKEY_F6,
/* 0x08 */ CCKEY_F7,CCKEY_F8,CCKEY_F9,CCKEY_F10, CCKEY_F11,CCKEY_F12,CCKEY_PRINTSCREEN,CCKEY_SCROLLLOCK,
/* 0x10 */ CCKEY_PAUSE,CCKEY_TILDE,'1','2', '3','4','5','6',
/* 0x18 */ '7','8','9','0', CCKEY_MINUS,CCKEY_EQUALS,CCKEY_BACKSPACE,CCKEY_INSERT,
/* 0x20 */ CCKEY_HOME,CCKEY_PAGEUP,CCKEY_NUMLOCK,CCKEY_KP_DIVIDE, CCKEY_KP_MULTIPLY,CCKEY_KP_MINUS,CCKEY_TAB,'Q',
/* 0x28 */ 'W','E','R','T', 'Y','U','I','O',
/* 0x30 */ 'P',IPT_LBRACKET,IPT_RBRACKET,IPT_BACKSLASH, IPT_DELETE,IPT_END,IPT_PAGEDOWN,IPT_KP7,
/* 0x38 */ IPT_KP8,IPT_KP9,IPT_KP_PLUS,IPT_CAPSLOCK, 'A','S','D','F',
/* 0x40 */ 'G','H','J','K', 'L',IPT_SEMICOLON,IPT_QUOTE,IPT_ENTER,
/* 0x48 */ IPT_KP4,IPT_KP5,IPT_KP6,IPT_LSHIFT, 'Z','X','C','V',
/* 0x50 */ 'B','N','M',IPT_COMMA, IPT_PERIOD,IPT_SLASH,IPT_RSHIFT,IPT_UP,
/* 0x58 */ IPT_KP1,IPT_KP2,IPT_KP3,IPT_KP_ENTER, IPT_LCTRL,IPT_LALT,IPT_SPACE,IPT_RALT,
/* 0x60 */ IPT_RCTRL,IPT_LEFT,IPT_DOWN,IPT_RIGHT, IPT_KP0,IPT_KP_DECIMAL,IPT_LWIN,0,
/* 0x68 */ IPT_RWIN,0,0,0, 0,0,0,0,
/* 0x30 */ 'P',CCKEY_LBRACKET,CCKEY_RBRACKET,CCKEY_BACKSLASH, CCKEY_DELETE,CCKEY_END,CCKEY_PAGEDOWN,CCKEY_KP7,
/* 0x38 */ CCKEY_KP8,CCKEY_KP9,CCKEY_KP_PLUS,CCKEY_CAPSLOCK, 'A','S','D','F',
/* 0x40 */ 'G','H','J','K', 'L',CCKEY_SEMICOLON,CCKEY_QUOTE,CCKEY_ENTER,
/* 0x48 */ CCKEY_KP4,CCKEY_KP5,CCKEY_KP6,CCKEY_LSHIFT, 'Z','X','C','V',
/* 0x50 */ 'B','N','M',CCKEY_COMMA, CCKEY_PERIOD,CCKEY_SLASH,CCKEY_RSHIFT,CCKEY_UP,
/* 0x58 */ CCKEY_KP1,CCKEY_KP2,CCKEY_KP3,CCKEY_KP_ENTER, CCKEY_LCTRL,CCKEY_LALT,CCKEY_SPACE,CCKEY_RALT,
/* 0x60 */ CCKEY_RCTRL,CCKEY_LEFT,CCKEY_DOWN,CCKEY_RIGHT, CCKEY_KP0,CCKEY_KP_DECIMAL,CCKEY_LWIN,0,
/* 0x68 */ CCKEY_RWIN,0,0,0, 0,0,0,0,
};
static int MapNativeKey(int raw) {