mirror of https://github.com/bsnes-emu/bsnes.git
Add monochrome LCD shader
This commit is contained in:
parent
046b09052c
commit
99d2c0258c
|
@ -32,6 +32,7 @@
|
||||||
@"NearestNeighbor",
|
@"NearestNeighbor",
|
||||||
@"Bilinear",
|
@"Bilinear",
|
||||||
@"SmoothBilinear",
|
@"SmoothBilinear",
|
||||||
|
@"MonoLCD",
|
||||||
@"LCD",
|
@"LCD",
|
||||||
@"CRT",
|
@"CRT",
|
||||||
@"Scale2x",
|
@"Scale2x",
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13771" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14868" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13771"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14868"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
|
@ -17,7 +17,7 @@
|
||||||
</customObject>
|
</customObject>
|
||||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||||
<window title="Preferences" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="QvC-M9-y7g" customClass="GBPreferencesWindow">
|
<window title="Preferences" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="QvC-M9-y7g" customClass="GBPreferencesWindow">
|
||||||
<windowStyleMask key="styleMask" titled="YES" closable="YES"/>
|
<windowStyleMask key="styleMask" titled="YES" closable="YES"/>
|
||||||
<windowCollectionBehavior key="collectionBehavior" fullScreenAuxiliary="YES"/>
|
<windowCollectionBehavior key="collectionBehavior" fullScreenAuxiliary="YES"/>
|
||||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||||
|
@ -104,7 +104,8 @@
|
||||||
</menuItem>
|
</menuItem>
|
||||||
<menuItem title="Bilinear (Blurry)" id="iDe-si-atu"/>
|
<menuItem title="Bilinear (Blurry)" id="iDe-si-atu"/>
|
||||||
<menuItem title="Smooth Bilinear (Less blurry)" id="1jN-pO-1iD"/>
|
<menuItem title="Smooth Bilinear (Less blurry)" id="1jN-pO-1iD"/>
|
||||||
<menuItem title="LCD Display" id="b8u-LZ-UQf"/>
|
<menuItem title="Monochrome LCD Display" id="b8u-LZ-UQf"/>
|
||||||
|
<menuItem title="LCD Display" id="pj3-Jt-bNU"/>
|
||||||
<menuItem title="CRT Display" id="FT9-FT-RZu"/>
|
<menuItem title="CRT Display" id="FT9-FT-RZu"/>
|
||||||
<menuItem title="Scale2x" id="C1I-L2-Up1"/>
|
<menuItem title="Scale2x" id="C1I-L2-Up1"/>
|
||||||
<menuItem title="Scale4x" id="uWA-Zp-JY9"/>
|
<menuItem title="Scale4x" id="uWA-Zp-JY9"/>
|
||||||
|
@ -428,7 +429,7 @@
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
<clipView key="contentView" focusRingType="none" ambiguous="YES" drawsBackground="NO" id="AMs-PO-nid">
|
<clipView key="contentView" focusRingType="none" ambiguous="YES" drawsBackground="NO" id="AMs-PO-nid">
|
||||||
<rect key="frame" x="1" y="1" width="238" height="209"/>
|
<rect key="frame" x="1" y="1" width="238" height="209"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<tableView focusRingType="none" appearanceType="vibrantLight" verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnReordering="NO" columnResizing="NO" multipleSelection="NO" emptySelection="NO" autosaveColumns="NO" typeSelect="NO" id="UDd-IJ-fxX">
|
<tableView focusRingType="none" appearanceType="vibrantLight" verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnReordering="NO" columnResizing="NO" multipleSelection="NO" emptySelection="NO" autosaveColumns="NO" typeSelect="NO" id="UDd-IJ-fxX">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="238" height="209"/>
|
<rect key="frame" x="0.0" y="0.0" width="238" height="209"/>
|
||||||
|
@ -472,11 +473,11 @@
|
||||||
</subviews>
|
</subviews>
|
||||||
<nil key="backgroundColor"/>
|
<nil key="backgroundColor"/>
|
||||||
</clipView>
|
</clipView>
|
||||||
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="31h-at-Znm">
|
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="31h-at-Znm">
|
||||||
<rect key="frame" x="-100" y="-100" width="210" height="16"/>
|
<rect key="frame" x="-100" y="-100" width="210" height="16"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
</scroller>
|
</scroller>
|
||||||
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="JkP-U1-jdy">
|
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="JkP-U1-jdy">
|
||||||
<rect key="frame" x="-100" y="-100" width="15" height="102"/>
|
<rect key="frame" x="-100" y="-100" width="15" height="102"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
</scroller>
|
</scroller>
|
||||||
|
|
|
@ -501,6 +501,7 @@ struct shader_name {
|
||||||
{"NearestNeighbor", "Nearest Neighbor"},
|
{"NearestNeighbor", "Nearest Neighbor"},
|
||||||
{"Bilinear", "Bilinear"},
|
{"Bilinear", "Bilinear"},
|
||||||
{"SmoothBilinear", "Smooth Bilinear"},
|
{"SmoothBilinear", "Smooth Bilinear"},
|
||||||
|
{"MonoLCD", "Monochrome LCD"},
|
||||||
{"LCD", "LCD Display"},
|
{"LCD", "LCD Display"},
|
||||||
{"CRT", "CRT Display"},
|
{"CRT", "CRT Display"},
|
||||||
{"Scale2x", "Scale2x"},
|
{"Scale2x", "Scale2x"},
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
#define SCANLINE_DEPTH 0.25
|
||||||
|
#define BLOOM 0.4
|
||||||
|
|
||||||
|
STATIC vec4 scale(sampler2D image, vec2 position, vec2 input_resolution, vec2 output_resolution)
|
||||||
|
{
|
||||||
|
vec2 pixel = position * input_resolution - vec2(0.5, 0.5);
|
||||||
|
|
||||||
|
vec4 q11 = texture(image, (floor(pixel) + 0.5) / input_resolution);
|
||||||
|
vec4 q12 = texture(image, (vec2(floor(pixel.x), ceil(pixel.y)) + 0.5) / input_resolution);
|
||||||
|
vec4 q21 = texture(image, (vec2(ceil(pixel.x), floor(pixel.y)) + 0.5) / input_resolution);
|
||||||
|
vec4 q22 = texture(image, (ceil(pixel) + 0.5) / input_resolution);
|
||||||
|
|
||||||
|
vec2 s = smoothstep(0., 1., fract(pixel));
|
||||||
|
|
||||||
|
vec4 r1 = mix(q11, q21, s.x);
|
||||||
|
vec4 r2 = mix(q12, q22, s.x);
|
||||||
|
|
||||||
|
vec2 pos = fract(position * input_resolution);
|
||||||
|
vec2 sub_pos = fract(position * input_resolution * 6);
|
||||||
|
|
||||||
|
float multiplier = 1.0;
|
||||||
|
|
||||||
|
if (pos.y < 1.0 / 6.0) {
|
||||||
|
multiplier *= sub_pos.y * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH);
|
||||||
|
}
|
||||||
|
else if (pos.y > 5.0 / 6.0) {
|
||||||
|
multiplier *= (1.0 - sub_pos.y) * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pos.x < 1.0 / 6.0) {
|
||||||
|
multiplier *= sub_pos.x * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH);
|
||||||
|
}
|
||||||
|
else if (pos.x > 5.0 / 6.0) {
|
||||||
|
multiplier *= (1.0 - sub_pos.x) * SCANLINE_DEPTH + (1 - SCANLINE_DEPTH);
|
||||||
|
}
|
||||||
|
|
||||||
|
return mix(texture(image, position) * multiplier, mix(r1, r2, s.y), BLOOM);
|
||||||
|
}
|
Loading…
Reference in New Issue