From 6009bd7d259a0db06ddbdacda837b23d206c4e3d Mon Sep 17 00:00:00 2001 From: XProger Date: Mon, 16 Oct 2017 08:48:06 +0300 Subject: [PATCH] #15 fix jump to the next level for original game owners; #23 experimental caustics blur (disabled) --- src/cache.h | 26 ++++++++++++++++++++++++++ src/level.h | 10 ++++++++++ src/trigger.h | 2 +- 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/cache.h b/src/cache.h index 5eac336..b83004c 100644 --- a/src/cache.h +++ b/src/cache.h @@ -369,6 +369,9 @@ struct WaterCache { vec3 pos, size; Texture *mask; Texture *caustics; + #ifdef BLUR_CAUSTICS + Texture *caustics_tmp; + #endif Texture *data[2]; Item() { @@ -434,6 +437,9 @@ struct WaterCache { data[0] = new Texture(w * 64, h * 64, Texture::RGBA_HALF); data[1] = new Texture(w * 64, h * 64, Texture::RGBA_HALF); caustics = Core::settings.detail.water > Core::Settings::MEDIUM ? new Texture(512, 512, Texture::RGBA) : NULL; + #ifdef BLUR_CAUSTICS + caustics_tmp = Core::settings.detail.water > Core::Settings::MEDIUM ? new Texture(512, 512, Texture::RGBA) : NULL; + #endif mask = new Texture(w, h, Texture::RGB16, false, m, false); delete[] m; @@ -449,6 +455,9 @@ struct WaterCache { delete data[0]; delete data[1]; delete caustics; + #ifdef BLUR_CAUSTICS + delete caustics_tmp; + #endif delete mask; mask = caustics = data[0] = data[1] = NULL; } @@ -614,6 +623,23 @@ struct WaterCache { Core::setTarget(item.caustics, true); game->getMesh()->renderPlane(); Core::invalidateTarget(false, true); + #ifdef BLUR_CAUSTICS + // v blur + Core::setTarget(item.caustics_tmp, true); + game->setShader(Core::passFilter, Shader::FILTER_BLUR, false, false); + Core::active.shader->setParam(uParam, vec4(0, 1, 1.0f / item.caustics->width, 0));; + item.caustics->bind(sDiffuse); + game->getMesh()->renderQuad(); + Core::invalidateTarget(false, true); + + // h blur + Core::setTarget(item.caustics, true); + game->setShader(Core::passFilter, Shader::FILTER_BLUR, false, false); + Core::active.shader->setParam(uParam, vec4(1, 0, 1.0f / item.caustics->width, 0));; + item.caustics_tmp->bind(sDiffuse); + game->getMesh()->renderQuad(); + Core::invalidateTarget(false, true); + #endif } void renderMask() { diff --git a/src/level.h b/src/level.h index 8cadd23..d9301a7 100644 --- a/src/level.h +++ b/src/level.h @@ -62,14 +62,24 @@ struct Level : IGame { buf[0] = 0; strcat(buf, "level/"); strcat(buf, TR::LEVEL_INFO[id].name); + #ifdef __EMSCRIPTEN__ + strcat(buf, ".PSX"); + #else switch (level.version) { case TR::VER_TR1_PC : strcat(buf, ".PHD"); break; case TR::VER_TR1_PSX : strcat(buf, ".PSX"); break; } + #endif new Stream(buf, loadAsync); } virtual void loadNextLevel() { + #ifdef __EMSCRIPTEN__ + if (level.id == TR::LEVEL_2 && level.version != TR::VER_TR1_PC) { + loadLevel(TR::TITLE); + return; + } + #endif loadLevel(level.id == TR::LEVEL_10C ? TR::TITLE : TR::LevelID(level.id + 1)); } diff --git a/src/trigger.h b/src/trigger.h index f436f6f..358603e 100644 --- a/src/trigger.h +++ b/src/trigger.h @@ -680,7 +680,7 @@ struct Drawbridge : Controller { #define CRYSTAL_LIGHT_RADIUS 1024.0f -#define CRYSTAL_LIGHT_COLOR vec4(0.1, 0.1, 3.0, 1.0f / CRYSTAL_LIGHT_RADIUS) +#define CRYSTAL_LIGHT_COLOR vec4(0.1f, 0.1f, 3.0f, 1.0f / CRYSTAL_LIGHT_RADIUS) struct Crystal : Controller { Texture *environment;