summaryrefslogtreecommitdiffstatshomepage
path: root/hlsl
diff options
context:
space:
mode:
Diffstat (limited to 'hlsl')
-rw-r--r--hlsl/artwork_support/post.fx26
-rw-r--r--hlsl/post.fx26
2 files changed, 32 insertions, 20 deletions
diff --git a/hlsl/artwork_support/post.fx b/hlsl/artwork_support/post.fx
index 9a3b693cd61..7547d109788 100644
--- a/hlsl/artwork_support/post.fx
+++ b/hlsl/artwork_support/post.fx
@@ -152,7 +152,7 @@ VS_OUTPUT vs_main(VS_INPUT Input)
// Scanline, Shadowmask & Distortion Pixel Shader
//-----------------------------------------------------------------------------
-uniform float HumBarHertzRate = 60.0f / 59.94f - 1.0f; // difference between the 59.94 Hz field rate and 60 Hz line frequency (NTSC)
+uniform float HumBarDesync = 60.0f / 59.94f - 1.0f; // difference between the 59.94 Hz field rate and 60 Hz line frequency (NTSC)
uniform float HumBarAlpha = 0.0f;
uniform float TimeMilliseconds = 0.0f;
@@ -464,21 +464,27 @@ float4 ps_main(PS_INPUT Input) : COLOR
// Scanline Simulation (may not affect vector screen)
if (!PrepareVector && ScanlineAlpha > 0.0f)
{
- float ScanCoord = BaseCoord.y * SourceDims.y * ScanlineScale * PI;
- float ScanCoordJitter = ScanlineOffset * PHI;
- float ScanSine = sin(ScanCoord + ScanCoordJitter);
- float ScanSineScaled = pow(ScanSine * ScanSine, ScanlineHeight);
- float ScanBrightness = ScanSineScaled * ScanlineBrightScale + 1.0f + ScanlineBrightOffset;
+ float BrightnessOffset = (ScanlineBrightOffset * ScanlineAlpha);
+ float BrightnessScale = (ScanlineBrightScale * ScanlineAlpha) + (1.0f - ScanlineAlpha);
- BaseColor.rgb *= lerp(1.0f, ScanBrightness * 0.5f, ScanlineAlpha);
+ float ColorBrightness = 0.299f * BaseColor.r + 0.587f * BaseColor.g + 0.114 * BaseColor.b;
+
+ float ScanlineCoord = BaseCoord.y * SourceDims.y * ScanlineScale * PI;
+ float ScanlineCoordJitter = ScanlineOffset * PHI;
+ float ScanlineSine = sin(ScanlineCoord + ScanlineCoordJitter);
+ float ScanlineWide = ScanlineHeight + max(1.0f, ScanlineHeight) * (1.0f - ColorBrightness);
+ float ScanlineAmount = pow(ScanlineSine * ScanlineSine, ScanlineWide);
+ float ScanlineBrightness = ScanlineAmount * BrightnessScale + BrightnessOffset * BrightnessScale;
+
+ BaseColor.rgb *= lerp(1.0f, ScanlineBrightness, ScanlineAlpha);
}
// Hum Bar Simulation (may not affect vector screen)
if (!PrepareVector && HumBarAlpha > 0.0f)
{
- float HumTimeStep = frac(TimeMilliseconds * HumBarHertzRate);
- float HumBrightness = 1.0 - frac(BaseCoord.y / SourceRect.y + HumTimeStep) * HumBarAlpha;
- BaseColor.rgb *= HumBrightness;
+ float HumBarStep = frac(TimeMilliseconds * HumBarDesync);
+ float HumBarBrightness = 1.0 - frac(BaseCoord.y / SourceRect.y + HumBarStep) * HumBarAlpha;
+ BaseColor.rgb *= HumBarBrightness;
}
}
diff --git a/hlsl/post.fx b/hlsl/post.fx
index deec349e2fc..7bd698c4bb6 100644
--- a/hlsl/post.fx
+++ b/hlsl/post.fx
@@ -119,7 +119,7 @@ VS_OUTPUT vs_main(VS_INPUT Input)
// Scanline & Shadowmask Pixel Shader
//-----------------------------------------------------------------------------
-uniform float HumBarHertzRate = 60.0f / 59.94f - 1.0f; // difference between the 59.94 Hz field rate and 60 Hz line frequency (NTSC)
+uniform float HumBarDesync = 60.0f / 59.94f - 1.0f; // difference between the 59.94 Hz field rate and 60 Hz line frequency (NTSC)
uniform float HumBarAlpha = 0.0f;
uniform float TimeMilliseconds = 0.0f;
@@ -244,21 +244,27 @@ float4 ps_main(PS_INPUT Input) : COLOR
// Scanline Simulation (may not affect vector screen)
if (!PrepareVector && ScanlineAlpha > 0.0f)
{
- float ScanCoord = BaseCoord.y * SourceDims.y * ScanlineScale * PI;
- float ScanCoordJitter = ScanlineOffset * PHI;
- float ScanSine = sin(ScanCoord + ScanCoordJitter);
- float ScanSineScaled = pow(ScanSine * ScanSine, ScanlineHeight);
- float ScanBrightness = ScanSineScaled * ScanlineBrightScale + 1.0f + ScanlineBrightOffset;
+ float BrightnessOffset = (ScanlineBrightOffset * ScanlineAlpha);
+ float BrightnessScale = (ScanlineBrightScale * ScanlineAlpha) + (1.0f - ScanlineAlpha);
- BaseColor.rgb *= lerp(1.0f, ScanBrightness * 0.5f, ScanlineAlpha);
+ float ColorBrightness = 0.299f * BaseColor.r + 0.587f * BaseColor.g + 0.114 * BaseColor.b;
+
+ float ScanlineCoord = BaseCoord.y * SourceDims.y * ScanlineScale * PI;
+ float ScanlineCoordJitter = ScanlineOffset * PHI;
+ float ScanlineSine = sin(ScanlineCoord + ScanlineCoordJitter);
+ float ScanlineWide = ScanlineHeight + max(1.0f, ScanlineHeight) * (1.0f - ColorBrightness);
+ float ScanlineAmount = pow(ScanlineSine * ScanlineSine, ScanlineWide);
+ float ScanlineBrightness = ScanlineAmount * BrightnessScale + BrightnessOffset * BrightnessScale;
+
+ BaseColor.rgb *= lerp(1.0f, ScanlineBrightness, ScanlineAlpha);
}
// Hum Bar Simulation (may not affect vector screen)
if (!PrepareVector && HumBarAlpha > 0.0f)
{
- float HumTimeStep = frac(TimeMilliseconds * HumBarHertzRate);
- float HumBrightness = 1.0 - frac(BaseCoord.y / SourceRect.y + HumTimeStep) * HumBarAlpha;
- BaseColor.rgb *= HumBrightness;
+ float HumBarStep = frac(TimeMilliseconds * HumBarDesync);
+ float HumBarBrightness = 1.0 - frac(BaseCoord.y / SourceRect.y + HumBarStep) * HumBarAlpha;
+ BaseColor.rgb *= HumBarBrightness;
}
}
pan class="cp">#ifndef MODULES_RECURSIVE #define MODULES_RECURSIVE /* step 1: declare all external references */ #define MODULE(name) extern void name##_get_info(const imgtool_class *imgclass, uint32_t state, union imgtoolinfo *info); #include "modules.cpp" #undef MODULE /* step 2: define the modules[] array */ #define MODULE(name) name##_get_info, static void (*const modules[])(const imgtool_class *imgclass, uint32_t state, union imgtoolinfo *info) = { #include "modules.cpp" }; /* step 3: declare imgtool_create_cannonical_library() */ imgtoolerr_t imgtool_create_cannonical_library(bool omit_untested, std::unique_ptr<imgtool::library> &library) { size_t i; /* list of modules that we drop */ static const char *const irrelevant_modules[] = { "coco_os9_rsdos" }; library.reset(new imgtool::library()); if (!library) return IMGTOOLERR_OUTOFMEMORY; // create all modules for (i = 0; i < ARRAY_LENGTH(modules); i++) library->add(modules[i]); // remove irrelevant modules for (i = 0; i < ARRAY_LENGTH(irrelevant_modules); i++) { library->unlink(irrelevant_modules[i]); } // if we are omitting untested, go through and block out the functionality in question if (omit_untested) { for (auto &module : library->modules()) { if (module->writing_untested) { module->write_sector = nullptr; } if (module->creation_untested) { module->create = nullptr; module->createimage_optguide = nullptr; module->createimage_optspec = nullptr; } } } return IMGTOOLERR_SUCCESS; } #else /* MODULES_RECURSIVE */ MODULE(amiga_floppy) MODULE(concept) MODULE(mac_mfs) MODULE(mac_hfs) MODULE(hd) MODULE(rsdos) MODULE(vzdos) MODULE(os9) MODULE(ti99_old) MODULE(ti99_v9t9) MODULE(ti99_pc99fm) MODULE(ti99_pc99mfm) MODULE(ti99_ti99hd) MODULE(ti990) MODULE(pc_floppy) MODULE(pc_chd) MODULE(prodos_525) MODULE(prodos_35) MODULE(thom_fd_basic) MODULE(thom_qd_basic) MODULE(thom_sap_basic) MODULE(cybiko) MODULE(cybikoxt) MODULE(psion) MODULE(bml3) MODULE(hp48) MODULE(hp9845_tape) MODULE(hp85_tape) #endif /* MODULES_RECURSIVE */