1
0
mirror of https://github.com/XProger/OpenLara.git synced 2025-08-12 16:14:25 +02:00

fix muzzle flash lighting for the second player

This commit is contained in:
XProger
2019-01-07 02:52:55 +03:00
parent cd2778adcf
commit 77a335bacc
3 changed files with 41 additions and 14 deletions

View File

@@ -957,7 +957,7 @@ struct WaterCache {
// render reflections frame // render reflections frame
float sign = underwater ? -1.0f : 1.0f; float sign = underwater ? -1.0f : 1.0f;
game->setClipParams(sign, waterLevel * sign); 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); game->setClipParams(1.0f, NO_CLIP_PLANE);

View File

@@ -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 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 renderEnvironment(int roomIndex, const vec3 &pos, Texture **targets, int stride = 0, Core::Pass pass = Core::passAmbient) {}
virtual void renderCompose(int roomIndex) {} 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 renderGame(bool showUI) {}
virtual void setEffect(Controller *controller, TR::Effect::Type effect) {} virtual void setEffect(Controller *controller, TR::Effect::Type effect) {}

View File

@@ -574,7 +574,7 @@ struct Level : IGame {
Core::pass = pass; Core::pass = pass;
Texture *target = (targets[0]->opt & OPT_CUBEMAP) ? targets[0] : targets[i * stride]; 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); Core::setTarget(target, RT_CLEAR_COLOR | RT_CLEAR_DEPTH | RT_STORE_COLOR, i);
renderView(rIndex, false, false); renderView(rIndex, false);
} }
Core::pass = tmpPass; Core::pass = tmpPass;
@@ -2070,7 +2070,7 @@ struct Level : IGame {
Core::fogParams = oldFog; 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"); PROFILE_MARKER("VIEW");
if (water && waterCache) if (water && waterCache)
@@ -2174,9 +2174,6 @@ struct Level : IGame {
waterCache->blitTexture(screen); waterCache->blitTexture(screen);
} }
if (showUI)
renderUI();
Core::pass = pass; Core::pass = pass;
} }
@@ -2225,7 +2222,7 @@ struct Level : IGame {
camera->frustum->calcPlanes(Core::mViewProj); camera->frustum->calcPlanes(Core::mViewProj);
setup(); setup();
renderView(roomIndex, false, false); renderView(roomIndex, false);
} }
/* /*
void renderShadowEntity(int index, Controller *controller, Controller *player) { void renderShadowEntity(int index, Controller *controller, Controller *player) {
@@ -2603,6 +2600,7 @@ struct Level : IGame {
} }
Core::eye = float(eye); Core::eye = float(eye);
Core::setViewport(vp.x, vp.y, vp.width, vp.height);
if (isUI) if (isUI)
UI::updateAspect(aspect); UI::updateAspect(aspect);
@@ -2684,14 +2682,14 @@ struct Level : IGame {
Core::setTarget(NULL, CLEAR_ALL); Core::setTarget(NULL, CLEAR_ALL);
Core::eye = -1.0f; Core::eye = -1.0f;
setup(); setup();
renderView(camera->getRoomIndex(), true, false); renderView(camera->getRoomIndex(), true);
Core::defaultTarget = Core::eyeTex[1]; Core::defaultTarget = Core::eyeTex[1];
Core::viewportDef = vec4(0, 0, float(Core::defaultTarget->width), float(Core::defaultTarget->height)); Core::viewportDef = vec4(0, 0, float(Core::defaultTarget->width), float(Core::defaultTarget->height));
Core::setTarget(NULL, CLEAR_ALL); Core::setTarget(NULL, CLEAR_ALL);
Core::eye = 1.0f; Core::eye = 1.0f;
setup(); setup();
renderView(camera->getRoomIndex(), true, false); renderView(camera->getRoomIndex(), true);
Core::settings.detail.vr = false; Core::settings.detail.vr = false;
@@ -2705,20 +2703,49 @@ struct Level : IGame {
setViewport(view, -1, false); setViewport(view, -1, false);
setup(); setup();
renderView(camera->getRoomIndex(), true, showUI); renderView(camera->getRoomIndex(), true);
setViewport(view, 1, false); setViewport(view, 1, false);
setup(); setup();
renderView(camera->getRoomIndex(), true, showUI); renderView(camera->getRoomIndex(), true);
Core::eye = oldEye; Core::eye = oldEye;
} else { } else {
setViewport(view, int(Core::eye), false); setViewport(view, int(Core::eye), false);
setup(); 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; Core::viewportDef = vp;
player = players[0]; player = players[0];