1
0
mirror of https://github.com/XProger/OpenLara.git synced 2025-08-11 15:45:05 +02:00

fix scissor and viewport for split screen modes

This commit is contained in:
XProger
2019-12-22 04:01:53 +03:00
parent df9b2a8adc
commit 26bb1cbf08

View File

@@ -1850,10 +1850,23 @@ struct Level : IGame {
//vec4 s = vec4(v.x, -v.w, v.z, -v.y);
vec4 s = v;
s = (s * 0.5 + 0.5) * vec4(float(vp.z), float(vp.w), float(vp.z), float(vp.w));
// expand
s.x -= 2.0f;
s.y -= 2.0f;
s.z += 2.0f;
s.w += 2.0f;
s.z -= s.x;
s.w -= s.y;
s.x += vp.x;
s.y += vp.y;
s.x = max(s.x, (float)vp.x);
s.y = max(s.y, (float)vp.y);
s.z = min(s.z, (float)vp.z);
s.w = min(s.w, (float)vp.w);
s.x = clamp(s.x, -16383.0f, 16383.0f);
s.y = clamp(s.y, -16383.0f, 16383.0f);
s.z = clamp(s.z, -16383.0f, 16383.0f);
@@ -3065,7 +3078,6 @@ struct Level : IGame {
void renderEye(int eye, bool showUI, bool invBG) {
float oldEye = Core::eye;
short4 oldViewport = Core::viewportDef;
GAPI::Texture *oldTarget = Core::defaultTarget;
Core::eye = float(eye);
@@ -3080,6 +3092,8 @@ struct Level : IGame {
Core::pass = Core::passCompose;
short4 oldViewport = Core::viewportDef;
setDefaultTarget(eye, view, invBG);
if (Core::settings.detail.stereo == Core::Settings::STEREO_SPLIT) {
@@ -3090,6 +3104,8 @@ struct Level : IGame {
setup();
renderView(camera->getRoomIndex(), true, showUI);
Core::viewportDef = oldViewport;
}
}
@@ -3103,9 +3119,11 @@ struct Level : IGame {
}
Core::defaultTarget = oldTarget;
Core::viewportDef = oldViewport;
Core::eye = oldEye;
Core::setViewport(Core::viewportDef);
Core::setScissor(Core::viewportDef);
player = players[0];
if (player) {
camera = player->camera;
@@ -3245,6 +3263,8 @@ struct Level : IGame {
}
void renderInventoryEye(int eye, int view) {
short4 oldViewport = Core::viewportDef;
setDefaultTarget(eye, view, false);
Core::setTarget(NULL, NULL, RT_CLEAR_DEPTH | RT_STORE_COLOR);
@@ -3283,6 +3303,8 @@ struct Level : IGame {
UI::end();
Core::popLights();
Core::viewportDef = oldViewport;
}
void render() {