1
0
mirror of https://github.com/XProger/OpenLara.git synced 2025-08-11 15:45:05 +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_TRANSFER_FLAGS (\
GX_TRANSFER_SCALING(GX_TRANSFER_SCALE_XY) \
GX_TRANSFER_SCALING(GX_TRANSFER_SCALE_NO) \
| GX_TRANSFER_FLIP_VERT(0) \
| GX_TRANSFER_OUT_TILED(0) \
| GX_TRANSFER_RAW_COPY(0) \
@@ -328,7 +328,7 @@ namespace GAPI {
vCount *= COUNT(chunks);
}
VAO = new C3D_BufInfo[aCount + 1];
VAO = new C3D_BufInfo[aCount];
iBuffer = (Index*) linearAlloc(iCount * sizeof(Index));
vBuffer = (Vertex*) linearAlloc(vCount * sizeof(Vertex));
@@ -382,16 +382,12 @@ namespace GAPI {
}
void bind(const MeshRange &range) {
C3D_BufInfo *vao = VAO;
ASSERT(range.aIndex > -1);
C3D_BufInfo *vao = VAO + range.aIndex;
if (range.aIndex == -1) {
vao += aCount - 1;
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);
if (dynamic) {
initVAO(vao, vBuffer + getChunk().vStart + range.vStart);
} else {
vao += range.aIndex;
if (Core::active.VAO == vao) {
return;
}
@@ -420,12 +416,11 @@ namespace GAPI {
LOG("Version : %s\n", "1.0");
gfxInitDefault();
gfxSet3D(true);
consoleInit(GFX_BOTTOM, NULL);
C3D_Init(C3D_DEFAULT_CMDBUF_SIZE);
defTarget[0] = C3D_RenderTargetCreate(240 * 2, 400 * 2, GPU_RB_RGBA8, GPU_RB_DEPTH24_STENCIL8);
defTarget[1] = 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, 400, GPU_RB_RGBA8, GPU_RB_DEPTH24_STENCIL8);
C3D_RenderTargetSetOutput(defTarget[0], GFX_TOP, GFX_LEFT, DISPLAY_TRANSFER_FLAGS);
C3D_RenderTargetSetOutput(defTarget[1], GFX_TOP, GFX_RIGHT, DISPLAY_TRANSFER_FLAGS);
curTarget = defTarget[0];
@@ -455,7 +450,7 @@ namespace GAPI {
//C3D_TexEnvSrc(env, C3D_Both, GPU_PRIMARY_COLOR);
//C3D_TexEnvFunc(env, C3D_Both, GPU_REPLACE);
clearColor = 0x68B0D8FF;
clearColor = 0; //0x68B0D8FF;
colorMask = GPU_WRITE_COLOR;
depthMask = GPU_WRITE_DEPTH;

View File

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

View File

@@ -57,7 +57,8 @@ void inputUpdate() {
hidScanInput();
u64 mask = hidKeysDown() | hidKeysHeld();
u64 down = hidKeysDown();
u64 mask = down | hidKeysHeld();
for (int i = 1; i < jkMAX; i++) {
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);
Input::setJoyPos(0, jkL, stickL);
if (hidKeysDown() & KEY_TOUCH) {
if (down & KEY_TOUCH) {
bottomScreenOn = !bottomScreenOn;
gspLcdInit();
if (bottomScreenOn) {
GSPLCD_PowerOffBacklight(GSPLCD_SCREEN_BOTTOM);
bottomScreenOn = false;
} else {
GSPLCD_PowerOnBacklight(GSPLCD_SCREEN_BOTTOM);
bottomScreenOn = true;
}
gspLcdExit();
}
}
void inputFree() {
if (!bottomScreenOn) {
gspLcdInit();
GSPLCD_PowerOnBacklight(GSPLCD_SCREEN_BOTTOM);
gspLcdExit();
}
hidExit();
}
@@ -180,7 +185,7 @@ int main() {
osStartTime = Core::getTime();
Game::init("PSXDATA/LEVEL1.PSX");
Game::init();
while (aptMainLoop() && !Core::isQuit) {
inputUpdate();
@@ -196,11 +201,6 @@ int main() {
inputFree();
sndFree();
if (!bottomScreenOn) {
gspLcdInit();
GSPLCD_PowerOnBacklight(GSPLCD_SCREEN_BOTTOM);
gspLcdExit();
}
Game::deinit();
return 0;

View File

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