From 77a335bacc10f88a00f3c34b68350cc40a2af127 Mon Sep 17 00:00:00 2001 From: XProger Date: Mon, 7 Jan 2019 02:52:55 +0300 Subject: [PATCH] fix muzzle flash lighting for the second player --- src/cache.h | 2 +- src/controller.h | 2 +- src/level.h | 51 ++++++++++++++++++++++++++++++++++++------------ 3 files changed, 41 insertions(+), 14 deletions(-) diff --git a/src/cache.h b/src/cache.h index f666fb6..438eb80 100644 --- a/src/cache.h +++ b/src/cache.h @@ -957,7 +957,7 @@ struct WaterCache { // render reflections frame float sign = underwater ? -1.0f : 1.0f; game->setClipParams(sign, waterLevel * sign); - game->renderView(TR::NO_ROOM, false, false, roomsCount, roomsList); + game->renderView(TR::NO_ROOM, false, roomsCount, roomsList); } game->setClipParams(1.0f, NO_CLIP_PLANE); diff --git a/src/controller.h b/src/controller.h index 905d60e..630174b 100644 --- a/src/controller.h +++ b/src/controller.h @@ -74,7 +74,7 @@ struct IGame { virtual void getVisibleRooms(int *roomsList, int &roomsCount, int from, int to, const vec4 &viewPort, bool water, int count = 0) {} virtual void renderEnvironment(int roomIndex, const vec3 &pos, Texture **targets, int stride = 0, Core::Pass pass = Core::passAmbient) {} virtual void renderCompose(int roomIndex) {} - virtual void renderView(int roomIndex, bool water, bool showUI, int roomsCount = 0, int *roomsList = NULL) {} + virtual void renderView(int roomIndex, bool water, int roomsCount = 0, int *roomsList = NULL) {} virtual void renderGame(bool showUI) {} virtual void setEffect(Controller *controller, TR::Effect::Type effect) {} diff --git a/src/level.h b/src/level.h index b739d2e..c0143e2 100644 --- a/src/level.h +++ b/src/level.h @@ -574,7 +574,7 @@ struct Level : IGame { Core::pass = pass; Texture *target = (targets[0]->opt & OPT_CUBEMAP) ? targets[0] : targets[i * stride]; Core::setTarget(target, RT_CLEAR_COLOR | RT_CLEAR_DEPTH | RT_STORE_COLOR, i); - renderView(rIndex, false, false); + renderView(rIndex, false); } Core::pass = tmpPass; @@ -2070,7 +2070,7 @@ struct Level : IGame { Core::fogParams = oldFog; } - virtual void renderView(int roomIndex, bool water, bool showUI, int roomsCount = 0, int *roomsList = NULL) { + virtual void renderView(int roomIndex, bool water, int roomsCount = 0, int *roomsList = NULL) { PROFILE_MARKER("VIEW"); if (water && waterCache) @@ -2174,9 +2174,6 @@ struct Level : IGame { waterCache->blitTexture(screen); } - if (showUI) - renderUI(); - Core::pass = pass; } @@ -2225,7 +2222,7 @@ struct Level : IGame { camera->frustum->calcPlanes(Core::mViewProj); setup(); - renderView(roomIndex, false, false); + renderView(roomIndex, false); } /* void renderShadowEntity(int index, Controller *controller, Controller *player) { @@ -2597,12 +2594,13 @@ struct Level : IGame { if (Core::settings.detail.stereo != Core::Settings::STEREO_VR) { switch (eye) { - case -1 : vp = Viewport(vX + vp.x - vp.x / 2, vY + vp.y, vp.width / 2, vp.height); break; + case -1 : vp = Viewport(vX + vp.x - vp.x / 2, vY + vp.y, vp.width / 2, vp.height); break; case +1 : vp = Viewport(vX + vW / 2 + vp.x / 2, vY + vp.y, vp.width / 2, vp.height); break; } } Core::eye = float(eye); + Core::setViewport(vp.x, vp.y, vp.width, vp.height); if (isUI) UI::updateAspect(aspect); @@ -2684,14 +2682,14 @@ struct Level : IGame { Core::setTarget(NULL, CLEAR_ALL); Core::eye = -1.0f; setup(); - renderView(camera->getRoomIndex(), true, false); + renderView(camera->getRoomIndex(), true); Core::defaultTarget = Core::eyeTex[1]; Core::viewportDef = vec4(0, 0, float(Core::defaultTarget->width), float(Core::defaultTarget->height)); Core::setTarget(NULL, CLEAR_ALL); Core::eye = 1.0f; setup(); - renderView(camera->getRoomIndex(), true, false); + renderView(camera->getRoomIndex(), true); Core::settings.detail.vr = false; @@ -2705,20 +2703,49 @@ struct Level : IGame { setViewport(view, -1, false); setup(); - renderView(camera->getRoomIndex(), true, showUI); + renderView(camera->getRoomIndex(), true); setViewport(view, 1, false); setup(); - renderView(camera->getRoomIndex(), true, showUI); + renderView(camera->getRoomIndex(), true); Core::eye = oldEye; } else { setViewport(view, int(Core::eye), false); setup(); - renderView(camera->getRoomIndex(), true, showUI); + renderView(camera->getRoomIndex(), true); } } + if (showUI) { + Core::Pass pass = Core::pass; + + for (int view = 0; view < viewsCount; view++) { + player = players[view]; + camera = player->camera; + + setClipParams(1.0f, NO_CLIP_PLANE); + params->waterHeight = params->clipHeight; + + if (Core::settings.detail.stereo == Core::Settings::STEREO_ON) { // left/right SBS stereo + float oldEye = Core::eye; + + setViewport(view, -1, false); + renderUI(); + + setViewport(view, 1, false); + renderUI(); + + Core::eye = oldEye; + } else { + setViewport(view, int(Core::eye), false); + renderUI(); + } + } + + Core::pass = pass; + } + Core::viewportDef = vp; player = players[0];