1
0
mirror of https://github.com/XProger/OpenLara.git synced 2025-08-11 23:54:09 +02:00

3DS fix UI rendering, turn off MSAA for stereo renderer (bad performance)

This commit is contained in:
XProger
2019-06-24 02:57:19 +03:00
parent 7dd02f914c
commit 5bba4e53b5
4 changed files with 23 additions and 28 deletions

View File

@@ -13,7 +13,7 @@
#define DISPLAY_BUFFER_COUNT 2 #define DISPLAY_BUFFER_COUNT 2
#define DISPLAY_TRANSFER_FLAGS (\ #define DISPLAY_TRANSFER_FLAGS (\
GX_TRANSFER_SCALING(GX_TRANSFER_SCALE_XY) \ GX_TRANSFER_SCALING(GX_TRANSFER_SCALE_NO) \
| GX_TRANSFER_FLIP_VERT(0) \ | GX_TRANSFER_FLIP_VERT(0) \
| GX_TRANSFER_OUT_TILED(0) \ | GX_TRANSFER_OUT_TILED(0) \
| GX_TRANSFER_RAW_COPY(0) \ | GX_TRANSFER_RAW_COPY(0) \
@@ -328,7 +328,7 @@ namespace GAPI {
vCount *= COUNT(chunks); vCount *= COUNT(chunks);
} }
VAO = new C3D_BufInfo[aCount + 1]; VAO = new C3D_BufInfo[aCount];
iBuffer = (Index*) linearAlloc(iCount * sizeof(Index)); iBuffer = (Index*) linearAlloc(iCount * sizeof(Index));
vBuffer = (Vertex*) linearAlloc(vCount * sizeof(Vertex)); vBuffer = (Vertex*) linearAlloc(vCount * sizeof(Vertex));
@@ -382,16 +382,12 @@ namespace GAPI {
} }
void bind(const MeshRange &range) { void bind(const MeshRange &range) {
C3D_BufInfo *vao = VAO; ASSERT(range.aIndex > -1);
C3D_BufInfo *vao = VAO + range.aIndex;
if (range.aIndex == -1) { if (dynamic) {
vao += aCount - 1; initVAO(vao, vBuffer + getChunk().vStart + range.vStart);
initVAO(vao, vBuffer + range.vStart + getChunk().vStart);
// workaround for passing "info != &ctx->bufInfo" check inside C3D_SetBufInfo for the same VAO pointers
C3D_BufInfo dummyBufInfo;
C3D_SetBufInfo(&dummyBufInfo);
} else { } else {
vao += range.aIndex;
if (Core::active.VAO == vao) { if (Core::active.VAO == vao) {
return; return;
} }
@@ -420,12 +416,11 @@ namespace GAPI {
LOG("Version : %s\n", "1.0"); LOG("Version : %s\n", "1.0");
gfxInitDefault(); gfxInitDefault();
gfxSet3D(true);
consoleInit(GFX_BOTTOM, NULL); consoleInit(GFX_BOTTOM, NULL);
C3D_Init(C3D_DEFAULT_CMDBUF_SIZE); C3D_Init(C3D_DEFAULT_CMDBUF_SIZE);
defTarget[0] = C3D_RenderTargetCreate(240 * 2, 400 * 2, GPU_RB_RGBA8, GPU_RB_DEPTH24_STENCIL8); defTarget[0] = C3D_RenderTargetCreate(240, 400, GPU_RB_RGBA8, GPU_RB_DEPTH24_STENCIL8);
defTarget[1] = C3D_RenderTargetCreate(240 * 2, 400 * 2, GPU_RB_RGBA8, GPU_RB_DEPTH24_STENCIL8); defTarget[1] = C3D_RenderTargetCreate(240, 400, GPU_RB_RGBA8, GPU_RB_DEPTH24_STENCIL8);
C3D_RenderTargetSetOutput(defTarget[0], GFX_TOP, GFX_LEFT, DISPLAY_TRANSFER_FLAGS); C3D_RenderTargetSetOutput(defTarget[0], GFX_TOP, GFX_LEFT, DISPLAY_TRANSFER_FLAGS);
C3D_RenderTargetSetOutput(defTarget[1], GFX_TOP, GFX_RIGHT, DISPLAY_TRANSFER_FLAGS); C3D_RenderTargetSetOutput(defTarget[1], GFX_TOP, GFX_RIGHT, DISPLAY_TRANSFER_FLAGS);
curTarget = defTarget[0]; curTarget = defTarget[0];
@@ -455,7 +450,7 @@ namespace GAPI {
//C3D_TexEnvSrc(env, C3D_Both, GPU_PRIMARY_COLOR); //C3D_TexEnvSrc(env, C3D_Both, GPU_PRIMARY_COLOR);
//C3D_TexEnvFunc(env, C3D_Both, GPU_REPLACE); //C3D_TexEnvFunc(env, C3D_Both, GPU_REPLACE);
clearColor = 0x68B0D8FF; clearColor = 0; //0x68B0D8FF;
colorMask = GPU_WRITE_COLOR; colorMask = GPU_WRITE_COLOR;
depthMask = GPU_WRITE_DEPTH; depthMask = GPU_WRITE_DEPTH;

View File

@@ -1328,8 +1328,7 @@ struct MeshBuilder {
} }
void renderBuffer(Index *indices, int iCount, Vertex *vertices, int vCount) { void renderBuffer(Index *indices, int iCount, Vertex *vertices, int vCount) {
if (!iCount) return; if (iCount <= 0) return;
ASSERT(vCount > 0);
dynRange.iStart = 0; dynRange.iStart = 0;
dynRange.iCount = iCount; dynRange.iCount = iCount;

View File

@@ -57,7 +57,8 @@ void inputUpdate() {
hidScanInput(); hidScanInput();
u64 mask = hidKeysDown() | hidKeysHeld(); u64 down = hidKeysDown();
u64 mask = down | hidKeysHeld();
for (int i = 1; i < jkMAX; i++) { for (int i = 1; i < jkMAX; i++) {
Input::setJoyDown(0, JoyKey(jkNone + i), (mask & keys[i]) != 0); Input::setJoyDown(0, JoyKey(jkNone + i), (mask & keys[i]) != 0);
@@ -71,20 +72,24 @@ void inputUpdate() {
if (fabsf(stickL.x) < 0.3f && fabsf(stickL.y) < 0.3f) stickL = vec2(0.0f); if (fabsf(stickL.x) < 0.3f && fabsf(stickL.y) < 0.3f) stickL = vec2(0.0f);
Input::setJoyPos(0, jkL, stickL); Input::setJoyPos(0, jkL, stickL);
if (hidKeysDown() & KEY_TOUCH) { if (down & KEY_TOUCH) {
bottomScreenOn = !bottomScreenOn;
gspLcdInit(); gspLcdInit();
if (bottomScreenOn) { if (bottomScreenOn) {
GSPLCD_PowerOffBacklight(GSPLCD_SCREEN_BOTTOM); GSPLCD_PowerOffBacklight(GSPLCD_SCREEN_BOTTOM);
bottomScreenOn = false;
} else { } else {
GSPLCD_PowerOnBacklight(GSPLCD_SCREEN_BOTTOM); GSPLCD_PowerOnBacklight(GSPLCD_SCREEN_BOTTOM);
bottomScreenOn = true;
} }
gspLcdExit(); gspLcdExit();
} }
} }
void inputFree() { void inputFree() {
if (!bottomScreenOn) {
gspLcdInit();
GSPLCD_PowerOnBacklight(GSPLCD_SCREEN_BOTTOM);
gspLcdExit();
}
hidExit(); hidExit();
} }
@@ -180,7 +185,7 @@ int main() {
osStartTime = Core::getTime(); osStartTime = Core::getTime();
Game::init("PSXDATA/LEVEL1.PSX"); Game::init();
while (aptMainLoop() && !Core::isQuit) { while (aptMainLoop() && !Core::isQuit) {
inputUpdate(); inputUpdate();
@@ -196,11 +201,6 @@ int main() {
inputFree(); inputFree();
sndFree(); sndFree();
if (!bottomScreenOn) {
gspLcdInit();
GSPLCD_PowerOnBacklight(GSPLCD_SCREEN_BOTTOM);
gspLcdExit();
}
Game::deinit(); Game::deinit();
return 0; return 0;

View File

@@ -652,8 +652,8 @@ struct mat4 {
if (rotate90) { if (rotate90) {
e00 = e11 = 0.0f; e00 = e11 = 0.0f;
e01 = 2.0f / (r - l); e10 = 2.0f / (l - r);
e10 = 2.0f / (b - t); e01 = 2.0f / (t - b);
} else { } else {
e00 = 2.0f / (r - l); e00 = 2.0f / (r - l);
e11 = 2.0f / (t - b); e11 = 2.0f / (t - b);
@@ -670,6 +670,7 @@ struct mat4 {
case PROJ_NEG_ZERO : case PROJ_NEG_ZERO :
e22 = 1.0f / (znear - zfar); e22 = 1.0f / (znear - zfar);
e23 = (znear + zfar) / (znear - zfar) * 0.5f - 0.5f; e23 = (znear + zfar) / (znear - zfar) * 0.5f - 0.5f;
e03 = -e03;
break; break;
case PROJ_ZERO_POS : case PROJ_ZERO_POS :
e22 = 2.0f / (znear - zfar); e22 = 2.0f / (znear - zfar);