PPSSPP : v1.12.2
This commit is contained in:
@@ -223,6 +223,22 @@ ULUS10070 = true
|
||||
ULES00719 = true
|
||||
# No US release, it seems
|
||||
|
||||
# Star Wars: Lethal Alliance (#11551)
|
||||
ULES00599 = true
|
||||
ULUS10188 = true
|
||||
|
||||
# Digimon World Re:Digitize
|
||||
ULJS00496 = true
|
||||
NPJH50588 = true
|
||||
ULAS42319 = true
|
||||
|
||||
# NOVA: Near Orbit Vanguard Alliance
|
||||
NPUZ00179 = true
|
||||
NPEZ00222 = true
|
||||
|
||||
# Street Riders (only region found. See #14746)
|
||||
ULES00276 = true
|
||||
|
||||
[ClearToRAM]
|
||||
# SOCOM Navy Seals games require this. See issue #8973.
|
||||
# Navy Seals : Tactical Strike
|
||||
@@ -244,10 +260,16 @@ UCUS98645 = true
|
||||
# Fireteam Bravo 2 Demo
|
||||
UCUS98677 = true
|
||||
UCUS98691 = true
|
||||
# Fireteam Bravo 3
|
||||
NPHG00032 = true
|
||||
UCUS98716 = true
|
||||
UCES01242 = true
|
||||
|
||||
# DBZ Tenkaichi Tag Team, see issue #14283
|
||||
ULJS00311 = true
|
||||
ULAS42247 = true
|
||||
ULUS10537 = true
|
||||
ULUS10737 = true
|
||||
ULJS19067 = true
|
||||
ULAS42318 = true
|
||||
NPUH90087 = true # demo
|
||||
NPEH90042 = true # demo
|
||||
|
||||
[Force04154000Download]
|
||||
# This applies a hack to Dangan Ronpa, its demo, and its sequel.
|
||||
@@ -356,9 +378,6 @@ ULJM05359 = true
|
||||
ULJM05885 = true
|
||||
NPJH50825 = true
|
||||
ULKS46157 = true
|
||||
# GOW : JP/Korean
|
||||
UCJS10114 = true
|
||||
UCKS45084 = true
|
||||
# GOW : Ghost of Sparta
|
||||
UCUS98737 = true
|
||||
UCAS40323 = true
|
||||
@@ -526,6 +545,10 @@ ULJM05091 = true
|
||||
# GachiTora! Abarenbou Kyoushi in High School need it to render shadows properly (see #14136)
|
||||
ULJS00355 = true
|
||||
NPJH50409 = true
|
||||
# MegaMan Maverick Hunter X (see #10085)
|
||||
ULES00251 = true
|
||||
ULUS10068 = true
|
||||
ULJM05043 = true
|
||||
|
||||
[DisableAccurateDepth]
|
||||
# Midnight Club: LA Remix
|
||||
@@ -619,12 +642,12 @@ UCES00373 = true
|
||||
ULJS00078 = true
|
||||
UCAS40104 = true
|
||||
|
||||
# Ys Seven
|
||||
ULUS10551 = true
|
||||
ULJM05475 = true
|
||||
ULJM05475 = true
|
||||
NPEH00065 = true
|
||||
NPJH50350 = true
|
||||
# Ys Seven disabled (caused glitches, see #13529)
|
||||
# ULUS10551 = true
|
||||
# ULJM05475 = true
|
||||
# ULJM05475 = true
|
||||
# NPEH00065 = true
|
||||
# NPJH50350 = true
|
||||
|
||||
# Burnout Legends
|
||||
ULES00125 = true
|
||||
@@ -681,6 +704,11 @@ UCAS40347 = true
|
||||
UCJS10038 = true
|
||||
UCJS18013 = true
|
||||
|
||||
# Megaman Maverick Hunter X (see #10085)
|
||||
ULES00251 = true
|
||||
ULUS10068 = true
|
||||
ULJM05043 = true
|
||||
|
||||
# Note! This whole flag is disabled temporarily by appending "Disabled" to its name). See 7914
|
||||
[YugiohSaveFixDisabled]
|
||||
# The cause of Yu-gi-oh series 's bad save (cannot save) are load "save status" and use cwcheat,
|
||||
@@ -745,8 +773,6 @@ NPJH50017 = true
|
||||
# The GOW games are very heavy and render as fast as they can. They benefit greatly from
|
||||
# capping the framerate at 60fps.
|
||||
|
||||
UCJS10114 = true
|
||||
UCKS45084 = true
|
||||
# GOW : Ghost of Sparta
|
||||
UCUS98737 = true
|
||||
UCAS40323 = true
|
||||
@@ -847,6 +873,26 @@ ULES01495 = true
|
||||
# Atari Classics Evolved
|
||||
ULUS10325 = true
|
||||
|
||||
# Kurohyou 2: Ryu ga Gotoku Ashura Hen (Japan)
|
||||
NPJH50562 = true
|
||||
NPJH50333 = true
|
||||
|
||||
# Silent Hill Origin
|
||||
ULUS10285 = true
|
||||
ULES00869 = true
|
||||
|
||||
# Resistance Retribution
|
||||
UCES01184 = true
|
||||
UCUS98668 = true
|
||||
|
||||
# Spider-Man 3
|
||||
ULES00938 = true
|
||||
ULUS10317 = true
|
||||
|
||||
# NBA 2K13
|
||||
ULUS10598 = true
|
||||
ULES01578 = true
|
||||
|
||||
[JitInvalidationHack]
|
||||
# This is an absolutely awful hack that somehow prevents issues when clearing the JIT,
|
||||
# if the game has copied code with EmuHack opcodes or something. Hopefully will be able
|
||||
@@ -859,6 +905,7 @@ ULES00034 = true
|
||||
ULES00035 = true
|
||||
# MTX MotoTrax
|
||||
ULUS10138 = true
|
||||
ULES00581 = true
|
||||
|
||||
[HideISOFiles]
|
||||
# DJ Max Portable has some crude copy-protection functionality where it looks for ISO/CSO files
|
||||
@@ -989,12 +1036,6 @@ ULJM05533 = true
|
||||
NPJH50006 = true
|
||||
ULES01301 = true
|
||||
|
||||
[DoublePrecisionSinCos]
|
||||
# Hitman Reborn Battle Arena 2 (#12900)
|
||||
ULJS00218 = true
|
||||
# Hitman Reborn Battle Arena
|
||||
ULJS00157 = true
|
||||
|
||||
[DisableFirstFrameReadback]
|
||||
# Wipeout Pure: Temporary workaround for lens flare flicker. See #13344
|
||||
UCUS98612 = true
|
||||
@@ -1003,6 +1044,15 @@ UCES00001 = true
|
||||
UCKS45008 = true
|
||||
NPJG00059 = true
|
||||
|
||||
#Socom FireTeam Bravo 3 / Navy Seals Portable. See issue #11814
|
||||
UCES01242 = true
|
||||
UCUS98716 = true
|
||||
NPHG00032 = true
|
||||
NPJG00035 = true
|
||||
UCJS10102 = true
|
||||
NPEG90024 = true # demo
|
||||
NPJG90068 = true # demo
|
||||
|
||||
[MpegAvcWarmUp]
|
||||
# God Eater issue #13527 ,It is custom mpeg library that required sceMpegGetAvcAu return ERROR_MPEG_NO_DATA but break FIFA 14 issue #14086
|
||||
# God Eater 1
|
||||
@@ -1027,3 +1077,8 @@ NPJH50352 = true
|
||||
ULUS10563FV = true
|
||||
ULJS19081 = true
|
||||
NPJH50352 = true
|
||||
|
||||
# Field Commander, see issue #10209
|
||||
ULUS10088 = true
|
||||
ULES00335 = true
|
||||
ULKS46070 = true
|
||||
|
||||
Binary file not shown.
@@ -1,200 +1,202 @@
|
||||
# Windows - DINPUT
|
||||
8f0e1200000000000000504944564944,Acme,platform:Windows,x:b2,a:b0,b:b1,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,
|
||||
341a3608000000000000504944564944,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
|
||||
ffff0000000000000000504944564944,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
|
||||
6d0416c2000000000000504944564944,Generic DirectInput Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
|
||||
0d0f6e00000000000000504944564944,HORIPAD 4,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Windows,
|
||||
6d0419c2000000000000504944564944,Logitech F710 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
|
||||
88880803000000000000504944564944,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.8,dpleft:h0.4,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b9,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b0,y:b3,platform:Windows,
|
||||
4c056802000000000000504944564944,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Windows,
|
||||
25090500000000000000504944564944,PS3 DualShock,a:b2,b:b1,back:b9,dpdown:h0.8,dpleft:h0.4,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b0,y:b3,platform:Windows,
|
||||
4c05c405000000000000504944564944,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
|
||||
6d0418c2000000000000504944564944,Logitech RumblePad 2 USB,platform:Windows,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,
|
||||
36280100000000000000504944564944,OUYA Controller,platform:Windows,a:b0,b:b3,y:b2,x:b1,start:b14,guide:b15,leftstick:b6,rightstick:b7,leftshoulder:b4,rightshoulder:b5,dpup:b8,dpleft:b10,dpdown:b9,dpright:b11,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:b12,righttrigger:b13,
|
||||
4f0400b3000000000000504944564944,Thrustmaster Firestorm Dual Power,a:b0,b:b2,y:b3,x:b1,start:b10,guide:b8,back:b9,leftstick:b11,rightstick:b12,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,platform:Windows,
|
||||
00f00300000000000000504944564944,RetroUSB.com RetroPad,a:b1,b:b5,x:b0,y:b4,back:b2,start:b3,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Windows,
|
||||
00f0f100000000000000504944564944,RetroUSB.com Super RetroPort,a:b1,b:b5,x:b0,y:b4,back:b2,start:b3,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Windows,
|
||||
28040140000000000000504944564944,GamePad Pro USB,platform:Windows,a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,lefttrigger:b6,righttrigger:b7,
|
||||
ff113133000000000000504944564944,SVEN X-PAD,platform:Windows,a:b2,b:b3,y:b1,x:b0,start:b5,back:b4,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a4,lefttrigger:b8,righttrigger:b9,
|
||||
8f0e0300000000000000504944564944,Piranha xtreme,platform:Windows,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,
|
||||
8f0e0d31000000000000504944564944,Multilaser JS071 USB,platform:Windows,a:b1,b:b2,y:b3,x:b0,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,
|
||||
10080300000000000000504944564944,PS2 USB,platform:Windows,a:b2,b:b1,y:b0,x:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a4,righty:a2,lefttrigger:b4,righttrigger:b5,
|
||||
79000600000000000000504944564944,G-Shark GS-GP702,a:b2,b:b1,x:b3,y:b0,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a4,lefttrigger:b6,righttrigger:b7,platform:Windows,
|
||||
4b12014d000000000000504944564944,NYKO AIRFLO,a:b0,b:b1,x:b2,y:b3,back:b8,guide:b10,start:b9,leftstick:a0,rightstick:a2,leftshoulder:a3,rightshoulder:b5,dpup:h0.1,dpdown:h0.0,dpleft:h0.8,dpright:h0.2,leftx:h0.6,lefty:h0.12,rightx:h0.9,righty:h0.4,lefttrigger:b6,righttrigger:b7,platform:Windows,
|
||||
d6206dca000000000000504944564944,PowerA Pro Ex,a:b1,b:b2,x:b0,y:b3,back:b8,guide:b12,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.0,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Windows,
|
||||
a3060cff000000000000504944564944,Saitek P2500,a:b2,b:b3,y:b1,x:b0,start:b4,guide:b10,back:b5,leftstick:b8,rightstick:b9,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,platform:Windows,
|
||||
4f0415b3000000000000504944564944,Thrustmaster Dual Analog 3.2,platform:Windows,x:b1,a:b0,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,
|
||||
6f0e1e01000000000000504944564944,Rock Candy Gamepad for PS3,platform:Windows,a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,guide:b12,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,
|
||||
83056020000000000000504944564944,iBuffalo USB 2-axis 8-button Gamepad,a:b1,b:b0,y:b2,x:b3,start:b7,back:b6,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,platform:Windows,
|
||||
10080100000000000000504944564944,PS1 USB,platform:Windows,a:b2,b:b1,x:b3,y:b0,back:b8,start:b9,leftshoulder:b6,rightshoulder:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b4,righttrigger:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,
|
||||
49190204000000000000504944564944,Ipega PG-9023,a:b0,b:b1,x:b3,y:b4,back:b10,start:b11,leftstick:b13,rightstick:b14,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:b8,righttrigger:b9,platform:Windows,
|
||||
4f0423b3000000000000504944564944,Dual Trigger 3-in-1,a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:b6,righttrigger:b7,platform:Windows,
|
||||
0d0f4900000000000000504944564944,Hatsune Miku Sho Controller,a:b1,b:b2,x:b0,y:b3,back:b8,guide:b12,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Windows,
|
||||
79004318000000000000504944564944,Mayflash GameCube Controller Adapter,platform:Windows,a:b1,b:b2,x:b0,y:b3,back:b0,start:b9,guide:b0,leftshoulder:b4,rightshoulder:b7,leftstick:b0,rightstick:b0,leftx:a0,lefty:a1,rightx:a5,righty:a2,lefttrigger:a3,righttrigger:a4,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,
|
||||
79000018000000000000504944564944,Mayflash WiiU Pro Game Controller Adapter (DInput),a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Windows,
|
||||
2509e803000000000000504944564944,Mayflash Wii Classic Controller,a:b1,b:b0,x:b3,y:b2,back:b8,guide:b10,start:b9,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:b11,dpdown:b13,dpleft:b12,dpright:b14,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Windows,
|
||||
300f1001000000000000504944564944,Saitek P480 Rumble Pad,a:b2,b:b3,x:b0,y:b1,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b5,righttrigger:b7,platform:Windows,
|
||||
10280900000000000000504944564944,8Bitdo SFC30 GamePad,a:b1,b:b0,y:b3,x:b4,start:b11,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,platform:Windows,
|
||||
63252305000000000000504944564944,USB Vibration Joystick (BM),platform:Windows,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,
|
||||
20380900000000000000504944564944,8Bitdo NES30 PRO Wireless,platform:Windows,a:b0,b:b1,x:b3,y:b4,leftshoulder:b6,rightshoulder:b7,lefttrigger:b8,righttrigger:b9,back:b10,start:b11,leftstick:b13,rightstick:b14,leftx:a0,lefty:a1,rightx:a3,righty:a4,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,
|
||||
02200090000000000000504944564944,8Bitdo NES30 PRO USB,platform:Windows,a:b0,b:b1,x:b3,y:b4,leftshoulder:b6,rightshoulder:b7,lefttrigger:b8,righttrigger:b9,back:b10,start:b11,leftstick:b13,rightstick:b14,leftx:a0,lefty:a1,rightx:a3,righty:a4,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,
|
||||
ff113133000000000000504944564944,Gembird JPD-DualForce,platform:Windows,a:b2,b:b3,x:b0,y:b1,start:b9,back:b8,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a4,lefttrigger:b6,righttrigger:b7,leftstick:b10,rightstick:b11,
|
||||
341a0108000000000000504944564944,EXEQ RF USB Gamepad 8206,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,leftstick:b8,rightstick:b7,back:b8,start:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightx:a2,righty:a3,platform:Windows,
|
||||
c0111352000000000000504944564944,Battalife Joystick,platform:Windows,x:b4,a:b6,b:b7,y:b5,back:b2,start:b3,leftshoulder:b0,rightshoulder:b1,leftx:a0,lefty:a1,
|
||||
100801e5000000000000504944564944,NEXT Classic USB Game Controller,a:b0,b:b1,back:b8,start:b9,rightx:a2,righty:a3,leftx:a0,lefty:a1,platform:Windows,
|
||||
4c05cc09000000000000504944564944,Sony DualShock 4,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b13,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Windows,
|
||||
4c05a00b000000000000504944564944,Sony DualShock 4 Wireless Adaptor,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b13,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Windows,
|
||||
|
||||
# OS X
|
||||
0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,
|
||||
6d0400000000000016c2000000000000,Logitech F310 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
6d0400000000000018c2000000000000,Logitech F510 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
6d040000000000001fc2000000000000,Logitech F710 Gamepad (XInput),a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
|
||||
6d0400000000000019c2000000000000,Logitech Wireless Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
4c050000000000006802000000000000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Mac OS X,
|
||||
4c05000000000000c405000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
5e040000000000008e02000000000000,X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
|
||||
891600000000000000fd000000000000,Razer Onza Tournament,a:b0,b:b1,y:b3,x:b2,start:b8,guide:b10,back:b9,leftstick:b6,rightstick:b7,leftshoulder:b4,rightshoulder:b5,dpup:b11,dpleft:b13,dpdown:b12,dpright:b14,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Mac OS X,
|
||||
4f0400000000000000b3000000000000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,y:b3,x:b1,start:b10,guide:b8,back:b9,leftstick:b11,rightstick:,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,platform:Mac OS X,
|
||||
8f0e0000000000000300000000000000,Piranha xtreme,platform:Mac OS X,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,
|
||||
0d0f0000000000004d00000000000000,HORI Gem Pad 3,platform:Mac OS X,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,
|
||||
79000000000000000600000000000000,G-Shark GP-702,a:b2,b:b1,x:b3,y:b0,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:b6,righttrigger:b7,platform:Mac OS X,
|
||||
4f0400000000000015b3000000000000,Thrustmaster Dual Analog 3.2,platform:Mac OS X,x:b1,a:b0,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,
|
||||
AD1B00000000000001F9000000000000,Gamestop BB-070 X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
|
||||
050000005769696d6f74652028303000,Wii Remote,a:b4,b:b5,y:b9,x:b10,start:b6,guide:b8,back:b7,dpup:b2,dpleft:b0,dpdown:b3,dpright:b1,leftx:a0,lefty:a1,lefttrigger:b12,righttrigger:,leftshoulder:b11,platform:Mac OS X,
|
||||
83050000000000006020000000000000,iBuffalo USB 2-axis 8-button Gamepad,a:b1,b:b0,x:b3,y:b2,back:b6,start:b7,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,platform:Mac OS X,
|
||||
5e04000000000000dd02000000000000,Xbox One Wired Controller,platform:Mac OS X,x:b2,a:b0,b:b1,y:b3,back:b9,guide:b10,start:b8,dpleft:b13,dpdown:b12,dpright:b14,dpup:b11,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b6,rightstick:b7,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
050000005769696d6f74652028313800,Wii U Pro Controller,a:b16,b:b15,x:b18,y:b17,back:b7,guide:b8,start:b6,leftstick:b23,rightstick:b24,leftshoulder:b19,rightshoulder:b20,dpup:b11,dpdown:b12,dpleft:b13,dpright:b14,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b21,righttrigger:b22,platform:Mac OS X,
|
||||
79000000000000000018000000000000,Mayflash WiiU Pro Game Controller Adapter (DInput),a:b4,b:b8,x:b0,y:b12,back:b32,start:b36,leftstick:b40,rightstick:b44,leftshoulder:b16,rightshoulder:b20,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a4,rightx:a8,righty:a12,lefttrigger:b24,righttrigger:b28,platform:Mac OS X,
|
||||
2509000000000000e803000000000000,Mayflash Wii Classic Controller,a:b1,b:b0,x:b3,y:b2,back:b8,guide:b10,start:b9,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:b11,dpdown:b13,dpleft:b12,dpright:b14,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Mac OS X,
|
||||
351200000000000021ab000000000000,SFC30 Joystick,a:b1,b:b0,x:b4,y:b3,back:b10,start:b11,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Mac OS X,
|
||||
b4040000000000000a01000000000000,Sega Saturn USB Gamepad,a:b0,b:b1,x:b3,y:b4,back:b5,guide:b2,start:b8,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Mac OS X,
|
||||
10280000000000000900000000000000,8Bitdo SFC30 GamePad,a:b1,b:b0,x:b4,y:b3,back:b10,start:b11,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Mac OS X,
|
||||
d814000000000000cecf000000000000,MC Cthulhu,platform:Mac OS X,leftx:,lefty:,rightx:,righty:,lefttrigger:b6,a:b1,b:b2,y:b3,x:b0,start:b9,back:b8,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,righttrigger:b7,
|
||||
0d0f0000000000006600000000000000,HORIPAD FPS PLUS 4,platform:Mac OS X,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:b6,righttrigger:a4,
|
||||
5e04000000000000e002000000000000,Xbox Wireless Controller,platform:Mac OS X,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b10,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
79000000000000001100000000000000,Retrolink Classic Controller,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,leftshoulder:b4,rightshoulder:b5,leftx:a3,lefty:a4,platform:Mac OS X,
|
||||
4c05000000000000cc09000000000000,Sony DualShock 4 V2,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b13,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Mac OS X,
|
||||
5e04000000000000ea02000000000000,Xbox Wireless Controller,platform:Mac OS X,x:b2,a:b0,b:b1,y:b3,back:b9,guide:b10,start:b8,dpleft:b13,dpdown:b12,dpright:b14,dpup:b11,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b6,rightstick:b7,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
81170000000000007e05000000000000,Sega Saturn,x:b0,a:b2,b:b4,y:b6,start:b13,dpleft:b15,dpdown:b16,dpright:b14,dpup:b17,leftshoulder:b8,lefttrigger:a5,lefttrigger:b10,rightshoulder:b9,righttrigger:a4,righttrigger:b11,leftx:a0,lefty:a2,platform:Mac OS X,
|
||||
bd1200000000000015d0000000000000,Tomee SNES USB Controller,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,platform:Mac OS X,
|
||||
03000000632500002305000000010000,Redragon Saturn,a:b2,b:b1,x:b3,y:b0,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Mac OS X,
|
||||
|
||||
# Linux
|
||||
050000004c0500006802000000000000,Sony PLAYSTATION(R)3 Controller,platform:Linux,a:b14,b:b13,x:b15,y:b12,back:b0,guide:b16,start:b3,leftstick:b1,rightstick:b2,leftshoulder:b10,rightshoulder:b11,dpup:b4,dpdown:b6,dpleft:b7,dpright:b5,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a12,righttrigger:a13,
|
||||
03000000ff1100004133000010010000,GreenAsia Inc.USB Joystick,platform:Linux,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,
|
||||
0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
|
||||
03000000ba2200002010000001010000,Jess Technology USB Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,
|
||||
030000006d04000019c2000010010000,Logitech Cordless RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
|
||||
030000006d0400001dc2000014400000,Logitech F310 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
030000006d0400001ec2000020200000,Logitech F510 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
030000006d04000019c2000011010000,Logitech F710 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
|
||||
030000006d0400001fc2000005030000,Logitech F710 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
030000004c0500006802000011010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux,
|
||||
03000000451300000830000010010000,NYKO CORE,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:b6,righttrigger:b7,platform:Linux,
|
||||
030000004c050000c405000011010000,Sony DualShock 4,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:b6,righttrigger:b7,platform:Linux,
|
||||
030000006f0e00003001000001010000,EA Sports PS3 Controller,platform:Linux,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,
|
||||
03000000de280000ff11000001000000,Valve Streaming Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
030000005e0400008e02000014010000,X360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
030000005e0400008e02000010010000,X360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
030000005e0400001907000000010000,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
03000000100800000100000010010000,Twin USB PS2 Adapter,a:b2,b:b1,y:b0,x:b3,start:b9,guide:,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b4,righttrigger:b5,platform:Linux,
|
||||
03000000a306000023f6000011010000,Saitek Cyborg V.1 Game Pad,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a4,lefttrigger:b6,righttrigger:b7,platform:Linux,
|
||||
030000004f04000020b3000010010000,Thrustmaster 2 in 1 DT,a:b0,b:b2,y:b3,x:b1,start:b9,guide:,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,platform:Linux,
|
||||
030000004f04000023b3000000010000,Thrustmaster Dual Trigger 3-in-1,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a5,
|
||||
030000008f0e00000300000010010000,GreenAsia Inc. USB Joystick ,platform:Linux,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,
|
||||
030000008f0e00001200000010010000,GreenAsia Inc. USB Joystick ,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,
|
||||
030000005e0400009102000007010000,X360 Wireless Controller,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:b13,dpleft:b11,dpdown:b14,dpright:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Linux,
|
||||
030000006d04000016c2000010010000,Logitech Logitech Dual Action,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,
|
||||
03000000260900008888000000010000,GameCube {WiseGroup USB box},a:b0,b:b2,y:b3,x:b1,start:b7,leftshoulder:,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,rightstick:,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,platform:Linux,
|
||||
030000006d04000011c2000010010000,Logitech WingMan Cordless RumblePad,a:b0,b:b1,y:b4,x:b3,start:b8,guide:b5,back:b2,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:b9,righttrigger:b10,platform:Linux,
|
||||
030000006d04000018c2000010010000,Logitech Logitech RumblePad 2 USB,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,
|
||||
05000000d6200000ad0d000001000000,Moga Pro,platform:Linux,a:b0,b:b1,y:b3,x:b2,start:b6,leftstick:b7,rightstick:b8,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a5,righttrigger:a4,
|
||||
030000004f04000009d0000000010000,Thrustmaster Run N Drive Wireless PS3,platform:Linux,a:b1,b:b2,x:b0,y:b3,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,
|
||||
030000004f04000008d0000000010000,Thrustmaster Run N Drive Wireless,platform:Linux,a:b1,b:b2,x:b0,y:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:b6,righttrigger:b7,
|
||||
0300000000f000000300000000010000,RetroUSB.com RetroPad,a:b1,b:b5,x:b0,y:b4,back:b2,start:b3,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Linux,
|
||||
0300000000f00000f100000000010000,RetroUSB.com Super RetroPort,a:b1,b:b5,x:b0,y:b4,back:b2,start:b3,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Linux,
|
||||
030000006f0e00001f01000000010000,Generic X-Box pad,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
03000000280400000140000000010000,Gravis GamePad Pro USB ,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftx:a0,lefty:a1,
|
||||
030000005e0400008902000021010000,Microsoft X-Box pad v2 (US),platform:Linux,x:b3,a:b0,b:b1,y:b4,back:b6,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b5,lefttrigger:a2,rightshoulder:b2,righttrigger:a5,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
030000005e0400008502000000010000,Microsoft X-Box pad (Japan),platform:Linux,x:b3,a:b0,b:b1,y:b4,back:b6,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b5,lefttrigger:a2,rightshoulder:b2,righttrigger:a5,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
030000006f0e00001e01000011010000,Rock Candy Gamepad for PS3,platform:Linux,a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,guide:b12,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,
|
||||
03000000250900000500000000010000,Sony PS2 pad with SmartJoy adapter,platform:Linux,a:b2,b:b1,y:b0,x:b3,start:b8,back:b9,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b4,righttrigger:b5,
|
||||
030000008916000000fd000024010000,Razer Onza Tournament,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:b13,dpleft:b11,dpdown:b14,dpright:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Linux,
|
||||
030000004f04000000b3000010010000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,y:b3,x:b1,start:b10,guide:b8,back:b9,leftstick:b11,rightstick:b12,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,platform:Linux,
|
||||
03000000ad1b000001f5000033050000,Hori Pad EX Turbo 2,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Linux,
|
||||
050000004c050000c405000000010000,PS4 Controller (Bluetooth),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
|
||||
060000004c0500006802000000010000,PS3 Controller (Bluetooth),a:b14,b:b13,y:b12,x:b15,start:b3,guide:b16,back:b0,leftstick:b1,rightstick:b2,leftshoulder:b10,rightshoulder:b11,dpup:b4,dpleft:b7,dpdown:b6,dpright:b5,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b8,righttrigger:b9,platform:Linux,
|
||||
050000004c0500006802000000010000,PS3 Controller (Bluetooth),a:b14,b:b13,y:b12,x:b15,start:b3,guide:b16,back:b0,leftstick:b1,rightstick:b2,leftshoulder:b10,rightshoulder:b11,dpup:b4,dpleft:b7,dpdown:b6,dpright:b5,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b8,righttrigger:b9,platform:Linux,
|
||||
05000000504c415953544154494f4e00,PS3 Controller (Bluetooth),a:b14,b:b13,y:b12,x:b15,start:b3,guide:b16,back:b0,leftstick:b1,rightstick:b2,leftshoulder:b10,rightshoulder:b11,dpup:b4,dpleft:b7,dpdown:b6,dpright:b5,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b8,righttrigger:b9,platform:Linux,
|
||||
03000000790000000600000010010000,DragonRise Inc. Generic USB Joystick ,platform:Linux,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
03000000666600000488000000010000,Super Joy Box 5 Pro,platform:Linux,a:b2,b:b1,x:b3,y:b0,back:b9,start:b8,leftshoulder:b6,rightshoulder:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b4,righttrigger:b5,dpup:b12,dpleft:b15,dpdown:b14,dpright:b13,
|
||||
05000000362800000100000002010000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,platform:Linux,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,
|
||||
05000000362800000100000003010000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,platform:Linux,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,
|
||||
030000008916000001fd000024010000,Razer Onza Classic Edition,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:b11,dpdown:b14,dpright:b12,dpup:b13,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
030000005e040000d102000001010000,Microsoft X-Box One pad,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
030000005e040000dd02000003020000,Microsoft X-Box One pad v2,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,platform:Linux,
|
||||
03000000790000001100000010010000,RetroLink Saturn Classic Controller,platform:Linux,x:b3,a:b0,b:b1,y:b4,back:b5,guide:b2,start:b8,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,
|
||||
050000007e0500003003000001000000,Nintendo Wii U Pro Controller,platform:Linux,a:b0,b:b1,x:b3,y:b2,back:b8,start:b9,guide:b10,leftshoulder:b4,rightshoulder:b5,leftstick:b11,rightstick:b12,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,dpup:b13,dpleft:b15,dpdown:b14,dpright:b16,
|
||||
030000005e0400008e02000004010000,Microsoft X-Box 360 pad,platform:Linux,a:b0,b:b1,x:b2,y:b3,back:b6,start:b7,guide:b8,leftshoulder:b4,rightshoulder:b5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,
|
||||
030000000d0f00002200000011010000,HORI CO. LTD. REAL ARCADE Pro.V3,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,guide:b12,start:b9,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,
|
||||
030000000d0f00001000000011010000,HORI CO. LTD. FIGHTING STICK 3,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,guide:b12,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7
|
||||
03000000f0250000c183000010010000,Goodbetterbest Ltd USB Controller,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,guide:b12,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,
|
||||
03000000f0250000c283000010010000,Goodbetterbest Ltd PC USB Controller,platform:Linux,a:b1,b:b2,x:b0,y:b3,back:b8,guide:b12,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7
|
||||
0000000058626f782047616d65706100,Xbox Gamepad (userspace driver),platform:Linux,a:b0,b:b1,x:b2,y:b3,start:b7,back:b6,guide:b8,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,lefttrigger:a5,righttrigger:a4,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a2,righty:a3,
|
||||
03000000ff1100003133000010010000,PC Game Controller,a:b2,b:b1,y:b0,x:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Linux,
|
||||
030000005e0400008e02000020200000,SpeedLink XEOX Pro Analog Gamepad pad,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
030000006f0e00001304000000010000,Generic X-Box pad,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:a0,rightstick:a3,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
03000000a306000018f5000010010000,Saitek PLC Saitek P3200 Rumble Pad,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
03000000830500006020000010010000,iBuffalo USB 2-axis 8-button Gamepad,a:b1,b:b0,x:b3,y:b2,back:b6,start:b7,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,platform:Linux,
|
||||
03000000c9110000f055000011010000,HJC Game GAMEPAD,leftx:a0,lefty:a1,dpdown:h0.4,rightstick:b11,rightshoulder:b5,rightx:a2,start:b9,righty:a3,dpleft:h0.8,lefttrigger:b6,x:b2,dpup:h0.1,back:b8,leftstick:b10,leftshoulder:b4,y:b3,a:b0,dpright:h0.2,righttrigger:b7,b:b1,platform:Linux,
|
||||
03000000a30600000c04000011010000,Saitek P2900 Wireless Pad,a:b1,b:b2,y:b3,x:b0,start:b12,guide:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b4,righttrigger:b5,platform:Linux,
|
||||
03000000341a000005f7000010010000,GameCube {HuiJia USB box},a:b1,b:b2,y:b3,x:b0,start:b9,guide:,back:,leftstick:,rightstick:,leftshoulder:,dpleft:b15,dpdown:b14,dpright:b13,leftx:a0,lefty:a1,rightx:a5,righty:a2,lefttrigger:a3,righttrigger:a4,rightshoulder:b7,dpup:b12,platform:Linux,
|
||||
030000006e0500000320000010010000,JC-U3613M - DirectInput Mode,platform:Linux,x:b0,a:b2,b:b3,y:b1,back:b10,guide:b12,start:b11,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,
|
||||
030000006f0e00004601000001010000,Rock Candy Wired Controller for Xbox One,platform:Linux,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,guide:b8,leftstick:b9,rightstick:b10,lefttrigger:a2,righttrigger:a5,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
03000000380700001647000010040000,Mad Catz Wired Xbox 360 Controller,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
030000006f0e00003901000020060000,Afterglow Wired Controller for Xbox One,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,platform:Linux,
|
||||
030000004f04000015b3000010010000,Thrustmaster Dual Analog 4,platform:Linux,a:b0,b:b2,x:b1,y:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,
|
||||
05000000102800000900000000010000,8Bitdo SFC30 GamePad,platform:Linux,x:b4,a:b1,b:b0,y:b3,back:b10,start:b11,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,
|
||||
03000000d81400000862000011010000,HitBox (PS3/PC) Analog Mode,platform:Linux,a:b1,b:b2,y:b3,x:b0,start:b12,guide:b9,back:b8,leftshoulder:b4,rightshoulder:b5,lefttrigger:b6,righttrigger:b7,leftx:a0,lefty:a1,
|
||||
030000000d0f00000d00000000010000,hori,platform:Linux,a:b0,b:b6,y:b2,x:b1,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,start:b9,guide:b10,back:b8,leftshoulder:b3,rightshoulder:b7,leftx:b4,lefty:b5,
|
||||
030000000d0f00006700000001010000,HORIPAD ONE,platform:Linux,a:b0,b:b1,x:b2,y:b3,back:b6,start:b7,guide:b8,leftshoulder:b4,rightshoulder:b5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,
|
||||
03000000ad1b000016f0000090040000,Mad Catz Xbox 360 Controller,platform:Linux,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,
|
||||
03000000d814000007cd000011010000,Toodles 2008 Chimp PC/PS3,platform:Linux,a:b0,b:b1,y:b2,x:b3,start:b9,back:b8,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,lefttrigger:b6,righttrigger:b7,
|
||||
03000000fd0500000030000000010000,InterAct GoPad I-73000 (Fighting Game Layout),platform:Linux,a:b3,b:b4,y:b1,x:b0,start:b7,back:b6,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,
|
||||
05000000010000000100000003000000,Nintendo Wiimote,platform:Linux,a:b0,b:b1,y:b3,x:b2,start:b9,guide:b10,back:b8,leftstick:b11,rightstick:b12,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,
|
||||
030000005e0400008e02000062230000,Microsoft X-Box 360 pad,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
03000000a30600000901000000010000,Saitek P880,a:b2,b:b3,y:b1,x:b0,leftstick:b8,rightstick:b9,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b6,righttrigger:b7,platform:Linux,
|
||||
030000006f0e00000103000000020000,Logic3 Controller,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
05000000380700006652000025010000,Mad Catz C.T.R.L.R ,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,guide:b12,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,
|
||||
06000000adde0000efbe000002010000,Hidromancer Game Controller,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
03000000c01600008704000011010000,Serial/Keyboard/Mouse/Joystick,platform:Linux,a:b12,b:b10,x:b13,y:b11,back:b4,start:b5,leftstick:b14,rightstick:b15,leftshoulder:b9,rightshoulder:b8,dpup:b0,dpdown:b2,dpleft:b3,dpright:b1,leftx:a1,lefty:a0,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,
|
||||
05000000a00500003232000001000000,8Bitdo Zero GamePad,platform:Linux,a:b0,b:b1,x:b3,y:b4,back:b10,start:b11,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,
|
||||
03000000780000000600000010010000,Microntek USB Joystick,platform:Linux,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,leftx:a0,lefty:a1,
|
||||
03000000ad1b00002ef0000090040000,Mad Catz Fightpad SFxT,platform:Linux,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,lefttrigger:a2,righttrigger:a5,
|
||||
03000000100800000300000010010000,USB Gamepad,platform:Linux,a:b2,b:b1,x:b3,y:b0,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b4,righttrigger:b5,
|
||||
030000005e0400008e02000073050000,Speedlink TORID Wireless Gamepad,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
030000001008000001e5000010010000,NEXT Classic USB Game Controller,a:b0,b:b1,back:b8,start:b9,rightx:a2,righty:a3,leftx:a0,lefty:a1,platform:Linux,
|
||||
030000006d04000016c2000011010000,Logitech F310 Gamepad (DInput),x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,platform:Linux,
|
||||
03000000bd12000015d0000010010000,Tomee SNES USB Controller,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,platform:Linux,
|
||||
050000004c050000cc09000000010000,Sony DualShock 4 V2 BT,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b13,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Linux,
|
||||
030000004c050000a00b000011010000,Sony DualShock 4 Wireless Adaptor,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b13,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Linux,
|
||||
05000000ac0500003232000001000000,VR-BOX,platform:Linux,a:b0,b:b1,x:b2,y:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b4,righttrigger:b5,
|
||||
030000004c050000cc09000011010000,Sony DualShock 4 V2,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Linux,
|
||||
030000004c050000cc09000011810000,Sony Interactive Entertainment Wireless Controller,platform:Linux,x:b3,a:b0,b:b1,y:b2,back:b8,guide:b10,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b6,rightshoulder:b5,righttrigger:a5,leftstick:b7,leftstick:b11,rightstick:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
050000004c050000cc09000000810000,Wireless Controller,platform:Linux,x:b3,a:b0,b:b1,y:b2,back:b8,guide:b10,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b6,rightshoulder:b5,righttrigger:a5,leftstick:b7,leftstick:b11,rightstick:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
030000004c0500006802000011810000,Sony PLAYSTATION(R)3 Controller,platform:Linux,x:b3,a:b0,b:b1,y:b2,back:b8,guide:b10,start:b9,dpleft:b15,dpdown:b14,dpright:b16,dpup:b13,leftshoulder:b4,lefttrigger:a2,rightshoulder:b6,rightshoulder:b5,righttrigger:a5,leftstick:b7,leftstick:b11,rightstick:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
050000004c0500006802000000810000,PLAYSTATION(R)3 Controller,platform:Linux,x:b3,a:b0,b:b1,y:b2,back:b8,guide:b10,start:b9,dpleft:b15,dpdown:b14,dpright:b16,dpup:b13,leftshoulder:b4,lefttrigger:a2,rightshoulder:b6,rightshoulder:b5,righttrigger:a5,leftstick:b7,leftstick:b11,rightstick:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
03000000c82d00000190000011010000,8Bitdo NES30 Pro 8Bitdo NES30 Pro,platform:Linux,a:b1,b:b0,x:b4,y:b3,back:b10,start:b11,leftstick:b13,rightstick:b14,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,
|
||||
05000000c82d00002038000000010000,8Bitdo NES30 Pro,platform:Linux,a:b1,b:b0,x:b4,y:b3,back:b10,guide:b2,start:b11,leftstick:b13,rightstick:b14,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a5,righttrigger:a4,
|
||||
030000005e040000a102000000010000,Xbox 360 Wireless Receiver,platform:Linux,a:b0,b:b1,x:b2,y:b3,back:b6,guide:b8,start:b7,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:b13,dpdown:b14,dpleft:b11,dpright:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,
|
||||
050000004c050000cc09000001000000,Sony DualShock 4 V2 BT,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Linux,
|
||||
03000000bc2000006412000011010000,BETOP CONTROLLER,a:b2,b:b1,y:b0,x:b3,start:b9,guide:b30,back:b8,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Linux,
|
||||
05000000c82d00000161000000010000,8Bitdo SN30 Pro,platform:Linux,a:b1,b:b0,x:b4,y:b3,back:b10,guide:b2,start:b11,leftstick:b13,rightstick:b14,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a5,righttrigger:a4,
|
||||
03000000380700008532000010010000,MadCatz Madcatz Fightpad,platform:Linux,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,lefttrigger:b5,righttrigger:b7,
|
||||
030000000d0f0000ee00000011010000,HORI CO.,LTD. HORIPAD mini4,platform:Linux,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,
|
||||
030000000d0f0000c100000011010000,HORI CO.,LTD. HORIPAD S,platform:Linux,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,
|
||||
03000000ad1b000003f5000033050000,Hori Fighting Stick VX,platform:Linux,a:b0,b:b1,x:b2,y:b3,back:b8,guide:b10,start:b9,leftshoulder:b4,rightshoulder:b5,-leftx:h0.8,+leftx:h0.2,-lefty:h0.1,+lefty:h0.4,lefttrigger:b6,righttrigger:b7,
|
||||
03000000c82d00000260000011010000,8Bitdo SF30 Pro 8BitDo SN30 Pro+,platform:Linux,a:b1,b:b0,x:b4,y:b3,back:b10,guide:b2,start:b11,leftstick:b13,rightstick:b14,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a5,righttrigger:a4,
|
||||
060000007e0500000820000000000000,Nintendo Switch Combined Joy-Cons,platform:Linux,a:b0,b:b1,x:b3,y:b2,back:b9,guide:b11,start:b10,leftstick:b12,rightstick:b13,leftshoulder:b5,rightshoulder:b6,dpup:b14,dpdown:b15,dpleft:b16,dpright:b17,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b7,righttrigger:b8,
|
||||
05000000491900000204000000000000,PG-9118,platform:Linux,x:b76,a:b73,b:b74,y:b77,back:b83,start:b84,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b79,lefttrigger:b81,rightshoulder:b80,righttrigger:b82,leftstick:b86,rightstick:b87,leftx:a0,lefty:a1,rightx:a2,righty:a3,
|
||||
# Windows - DINPUT
|
||||
8f0e1200000000000000504944564944,Acme,platform:Windows,x:b2,a:b0,b:b1,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,
|
||||
341a3608000000000000504944564944,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
|
||||
ffff0000000000000000504944564944,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
|
||||
6d0416c2000000000000504944564944,Generic DirectInput Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
|
||||
0d0f6e00000000000000504944564944,HORIPAD 4,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Windows,
|
||||
6d0419c2000000000000504944564944,Logitech F710 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
|
||||
88880803000000000000504944564944,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.8,dpleft:h0.4,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b9,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b0,y:b3,platform:Windows,
|
||||
4c056802000000000000504944564944,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Windows,
|
||||
25090500000000000000504944564944,PS3 DualShock,a:b2,b:b1,back:b9,dpdown:h0.8,dpleft:h0.4,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b0,y:b3,platform:Windows,
|
||||
4c05c405000000000000504944564944,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
|
||||
6d0418c2000000000000504944564944,Logitech RumblePad 2 USB,platform:Windows,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,
|
||||
36280100000000000000504944564944,OUYA Controller,platform:Windows,a:b0,b:b3,y:b2,x:b1,start:b14,guide:b15,leftstick:b6,rightstick:b7,leftshoulder:b4,rightshoulder:b5,dpup:b8,dpleft:b10,dpdown:b9,dpright:b11,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:b12,righttrigger:b13,
|
||||
4f0400b3000000000000504944564944,Thrustmaster Firestorm Dual Power,a:b0,b:b2,y:b3,x:b1,start:b10,guide:b8,back:b9,leftstick:b11,rightstick:b12,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,platform:Windows,
|
||||
00f00300000000000000504944564944,RetroUSB.com RetroPad,a:b1,b:b5,x:b0,y:b4,back:b2,start:b3,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Windows,
|
||||
00f0f100000000000000504944564944,RetroUSB.com Super RetroPort,a:b1,b:b5,x:b0,y:b4,back:b2,start:b3,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Windows,
|
||||
28040140000000000000504944564944,GamePad Pro USB,platform:Windows,a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,lefttrigger:b6,righttrigger:b7,
|
||||
ff113133000000000000504944564944,SVEN X-PAD,platform:Windows,a:b2,b:b3,y:b1,x:b0,start:b5,back:b4,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a4,lefttrigger:b8,righttrigger:b9,
|
||||
8f0e0300000000000000504944564944,Piranha xtreme,platform:Windows,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,
|
||||
8f0e0d31000000000000504944564944,Multilaser JS071 USB,platform:Windows,a:b1,b:b2,y:b3,x:b0,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,
|
||||
10080300000000000000504944564944,PS2 USB,platform:Windows,a:b2,b:b1,y:b0,x:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a4,righty:a2,lefttrigger:b4,righttrigger:b5,
|
||||
79000600000000000000504944564944,G-Shark GS-GP702,a:b2,b:b1,x:b3,y:b0,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a4,lefttrigger:b6,righttrigger:b7,platform:Windows,
|
||||
4b12014d000000000000504944564944,NYKO AIRFLO,a:b0,b:b1,x:b2,y:b3,back:b8,guide:b10,start:b9,leftstick:a0,rightstick:a2,leftshoulder:a3,rightshoulder:b5,dpup:h0.1,dpdown:h0.0,dpleft:h0.8,dpright:h0.2,leftx:h0.6,lefty:h0.12,rightx:h0.9,righty:h0.4,lefttrigger:b6,righttrigger:b7,platform:Windows,
|
||||
d6206dca000000000000504944564944,PowerA Pro Ex,a:b1,b:b2,x:b0,y:b3,back:b8,guide:b12,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.0,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Windows,
|
||||
a3060cff000000000000504944564944,Saitek P2500,a:b2,b:b3,y:b1,x:b0,start:b4,guide:b10,back:b5,leftstick:b8,rightstick:b9,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,platform:Windows,
|
||||
4f0415b3000000000000504944564944,Thrustmaster Dual Analog 3.2,platform:Windows,x:b1,a:b0,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,
|
||||
6f0e1e01000000000000504944564944,Rock Candy Gamepad for PS3,platform:Windows,a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,guide:b12,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,
|
||||
83056020000000000000504944564944,iBuffalo USB 2-axis 8-button Gamepad,a:b1,b:b0,y:b2,x:b3,start:b7,back:b6,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,platform:Windows,
|
||||
10080100000000000000504944564944,PS1 USB,platform:Windows,a:b2,b:b1,x:b3,y:b0,back:b8,start:b9,leftshoulder:b6,rightshoulder:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b4,righttrigger:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,
|
||||
49190204000000000000504944564944,Ipega PG-9023,a:b0,b:b1,x:b3,y:b4,back:b10,start:b11,leftstick:b13,rightstick:b14,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:b8,righttrigger:b9,platform:Windows,
|
||||
4f0423b3000000000000504944564944,Dual Trigger 3-in-1,a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:b6,righttrigger:b7,platform:Windows,
|
||||
0d0f4900000000000000504944564944,Hatsune Miku Sho Controller,a:b1,b:b2,x:b0,y:b3,back:b8,guide:b12,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Windows,
|
||||
79004318000000000000504944564944,Mayflash GameCube Controller Adapter,platform:Windows,a:b1,b:b2,x:b0,y:b3,back:b0,start:b9,guide:b0,leftshoulder:b4,rightshoulder:b7,leftstick:b0,rightstick:b0,leftx:a0,lefty:a1,rightx:a5,righty:a2,lefttrigger:a3,righttrigger:a4,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,
|
||||
79000018000000000000504944564944,Mayflash WiiU Pro Game Controller Adapter (DInput),a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Windows,
|
||||
2509e803000000000000504944564944,Mayflash Wii Classic Controller,a:b1,b:b0,x:b3,y:b2,back:b8,guide:b10,start:b9,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:b11,dpdown:b13,dpleft:b12,dpright:b14,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Windows,
|
||||
300f1001000000000000504944564944,Saitek P480 Rumble Pad,a:b2,b:b3,x:b0,y:b1,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b5,righttrigger:b7,platform:Windows,
|
||||
10280900000000000000504944564944,8Bitdo SFC30 GamePad,a:b1,b:b0,y:b3,x:b4,start:b11,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,platform:Windows,
|
||||
63252305000000000000504944564944,USB Vibration Joystick (BM),platform:Windows,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,
|
||||
20380900000000000000504944564944,8Bitdo NES30 PRO Wireless,platform:Windows,a:b0,b:b1,x:b3,y:b4,leftshoulder:b6,rightshoulder:b7,lefttrigger:b8,righttrigger:b9,back:b10,start:b11,leftstick:b13,rightstick:b14,leftx:a0,lefty:a1,rightx:a3,righty:a4,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,
|
||||
02200090000000000000504944564944,8Bitdo NES30 PRO USB,platform:Windows,a:b0,b:b1,x:b3,y:b4,leftshoulder:b6,rightshoulder:b7,lefttrigger:b8,righttrigger:b9,back:b10,start:b11,leftstick:b13,rightstick:b14,leftx:a0,lefty:a1,rightx:a3,righty:a4,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,
|
||||
ff113133000000000000504944564944,Gembird JPD-DualForce,platform:Windows,a:b2,b:b3,x:b0,y:b1,start:b9,back:b8,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a4,lefttrigger:b6,righttrigger:b7,leftstick:b10,rightstick:b11,
|
||||
341a0108000000000000504944564944,EXEQ RF USB Gamepad 8206,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,leftstick:b8,rightstick:b7,back:b8,start:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightx:a2,righty:a3,platform:Windows,
|
||||
c0111352000000000000504944564944,Battalife Joystick,platform:Windows,x:b4,a:b6,b:b7,y:b5,back:b2,start:b3,leftshoulder:b0,rightshoulder:b1,leftx:a0,lefty:a1,
|
||||
100801e5000000000000504944564944,NEXT Classic USB Game Controller,a:b0,b:b1,back:b8,start:b9,rightx:a2,righty:a3,leftx:a0,lefty:a1,platform:Windows,
|
||||
4c05cc09000000000000504944564944,Sony DualShock 4,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b13,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Windows,
|
||||
4c05a00b000000000000504944564944,Sony DualShock 4 Wireless Adaptor,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b13,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Windows,
|
||||
|
||||
# OS X
|
||||
0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,
|
||||
6d0400000000000016c2000000000000,Logitech F310 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
6d0400000000000018c2000000000000,Logitech F510 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
6d040000000000001fc2000000000000,Logitech F710 Gamepad (XInput),a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
|
||||
6d0400000000000019c2000000000000,Logitech Wireless Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
4c050000000000006802000000000000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Mac OS X,
|
||||
4c05000000000000c405000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
5e040000000000008e02000000000000,X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
|
||||
891600000000000000fd000000000000,Razer Onza Tournament,a:b0,b:b1,y:b3,x:b2,start:b8,guide:b10,back:b9,leftstick:b6,rightstick:b7,leftshoulder:b4,rightshoulder:b5,dpup:b11,dpleft:b13,dpdown:b12,dpright:b14,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Mac OS X,
|
||||
4f0400000000000000b3000000000000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,y:b3,x:b1,start:b10,guide:b8,back:b9,leftstick:b11,rightstick:,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,platform:Mac OS X,
|
||||
8f0e0000000000000300000000000000,Piranha xtreme,platform:Mac OS X,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,
|
||||
0d0f0000000000004d00000000000000,HORI Gem Pad 3,platform:Mac OS X,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,
|
||||
79000000000000000600000000000000,G-Shark GP-702,a:b2,b:b1,x:b3,y:b0,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:b6,righttrigger:b7,platform:Mac OS X,
|
||||
4f0400000000000015b3000000000000,Thrustmaster Dual Analog 3.2,platform:Mac OS X,x:b1,a:b0,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,
|
||||
AD1B00000000000001F9000000000000,Gamestop BB-070 X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
|
||||
050000005769696d6f74652028303000,Wii Remote,a:b4,b:b5,y:b9,x:b10,start:b6,guide:b8,back:b7,dpup:b2,dpleft:b0,dpdown:b3,dpright:b1,leftx:a0,lefty:a1,lefttrigger:b12,righttrigger:,leftshoulder:b11,platform:Mac OS X,
|
||||
83050000000000006020000000000000,iBuffalo USB 2-axis 8-button Gamepad,a:b1,b:b0,x:b3,y:b2,back:b6,start:b7,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,platform:Mac OS X,
|
||||
5e04000000000000dd02000000000000,Xbox One Wired Controller,platform:Mac OS X,x:b2,a:b0,b:b1,y:b3,back:b9,guide:b10,start:b8,dpleft:b13,dpdown:b12,dpright:b14,dpup:b11,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b6,rightstick:b7,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
050000005769696d6f74652028313800,Wii U Pro Controller,a:b16,b:b15,x:b18,y:b17,back:b7,guide:b8,start:b6,leftstick:b23,rightstick:b24,leftshoulder:b19,rightshoulder:b20,dpup:b11,dpdown:b12,dpleft:b13,dpright:b14,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b21,righttrigger:b22,platform:Mac OS X,
|
||||
79000000000000000018000000000000,Mayflash WiiU Pro Game Controller Adapter (DInput),a:b4,b:b8,x:b0,y:b12,back:b32,start:b36,leftstick:b40,rightstick:b44,leftshoulder:b16,rightshoulder:b20,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a4,rightx:a8,righty:a12,lefttrigger:b24,righttrigger:b28,platform:Mac OS X,
|
||||
2509000000000000e803000000000000,Mayflash Wii Classic Controller,a:b1,b:b0,x:b3,y:b2,back:b8,guide:b10,start:b9,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:b11,dpdown:b13,dpleft:b12,dpright:b14,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Mac OS X,
|
||||
351200000000000021ab000000000000,SFC30 Joystick,a:b1,b:b0,x:b4,y:b3,back:b10,start:b11,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Mac OS X,
|
||||
b4040000000000000a01000000000000,Sega Saturn USB Gamepad,a:b0,b:b1,x:b3,y:b4,back:b5,guide:b2,start:b8,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Mac OS X,
|
||||
10280000000000000900000000000000,8Bitdo SFC30 GamePad,a:b1,b:b0,x:b4,y:b3,back:b10,start:b11,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Mac OS X,
|
||||
d814000000000000cecf000000000000,MC Cthulhu,platform:Mac OS X,leftx:,lefty:,rightx:,righty:,lefttrigger:b6,a:b1,b:b2,y:b3,x:b0,start:b9,back:b8,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,righttrigger:b7,
|
||||
0d0f0000000000006600000000000000,HORIPAD FPS PLUS 4,platform:Mac OS X,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:b6,righttrigger:a4,
|
||||
5e04000000000000e002000000000000,Xbox Wireless Controller,platform:Mac OS X,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b10,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
79000000000000001100000000000000,Retrolink Classic Controller,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,leftshoulder:b4,rightshoulder:b5,leftx:a3,lefty:a4,platform:Mac OS X,
|
||||
4c05000000000000cc09000000000000,Sony DualShock 4 V2,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b13,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Mac OS X,
|
||||
5e04000000000000ea02000000000000,Xbox Wireless Controller,platform:Mac OS X,x:b2,a:b0,b:b1,y:b3,back:b9,guide:b10,start:b8,dpleft:b13,dpdown:b12,dpright:b14,dpup:b11,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b6,rightstick:b7,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
81170000000000007e05000000000000,Sega Saturn,x:b0,a:b2,b:b4,y:b6,start:b13,dpleft:b15,dpdown:b16,dpright:b14,dpup:b17,leftshoulder:b8,lefttrigger:a5,lefttrigger:b10,rightshoulder:b9,righttrigger:a4,righttrigger:b11,leftx:a0,lefty:a2,platform:Mac OS X,
|
||||
bd1200000000000015d0000000000000,Tomee SNES USB Controller,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,platform:Mac OS X,
|
||||
03000000632500002305000000010000,Redragon Saturn,a:b2,b:b1,x:b3,y:b0,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Mac OS X,
|
||||
|
||||
# Linux
|
||||
050000004c0500006802000000000000,Sony PLAYSTATION(R)3 Controller,platform:Linux,a:b14,b:b13,x:b15,y:b12,back:b0,guide:b16,start:b3,leftstick:b1,rightstick:b2,leftshoulder:b10,rightshoulder:b11,dpup:b4,dpdown:b6,dpleft:b7,dpright:b5,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a12,righttrigger:a13,
|
||||
03000000ff1100004133000010010000,GreenAsia Inc.USB Joystick,platform:Linux,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,
|
||||
0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
|
||||
03000000ba2200002010000001010000,Jess Technology USB Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,
|
||||
030000006d04000019c2000010010000,Logitech Cordless RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
|
||||
030000006d0400001dc2000014400000,Logitech F310 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
030000006d0400001ec2000020200000,Logitech F510 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
030000006d04000019c2000011010000,Logitech F710 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
|
||||
030000006d0400001fc2000005030000,Logitech F710 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
030000004c0500006802000011010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux,
|
||||
03000000451300000830000010010000,NYKO CORE,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:b6,righttrigger:b7,platform:Linux,
|
||||
030000004c050000c405000011010000,Sony DualShock 4,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:b6,righttrigger:b7,platform:Linux,
|
||||
030000006f0e00003001000001010000,EA Sports PS3 Controller,platform:Linux,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,
|
||||
03000000de280000ff11000001000000,Valve Streaming Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
030000005e0400008e02000014010000,X360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
030000005e0400008e02000010010000,X360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
030000005e0400001907000000010000,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
03000000100800000100000010010000,Twin USB PS2 Adapter,a:b2,b:b1,y:b0,x:b3,start:b9,guide:,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b4,righttrigger:b5,platform:Linux,
|
||||
03000000a306000023f6000011010000,Saitek Cyborg V.1 Game Pad,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a4,lefttrigger:b6,righttrigger:b7,platform:Linux,
|
||||
030000004f04000020b3000010010000,Thrustmaster 2 in 1 DT,a:b0,b:b2,y:b3,x:b1,start:b9,guide:,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,platform:Linux,
|
||||
030000004f04000023b3000000010000,Thrustmaster Dual Trigger 3-in-1,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a5,
|
||||
030000008f0e00000300000010010000,GreenAsia Inc. USB Joystick ,platform:Linux,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,
|
||||
030000008f0e00001200000010010000,GreenAsia Inc. USB Joystick ,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,
|
||||
030000005e0400009102000007010000,X360 Wireless Controller,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:b13,dpleft:b11,dpdown:b14,dpright:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Linux,
|
||||
030000006d04000016c2000010010000,Logitech Logitech Dual Action,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,
|
||||
03000000260900008888000000010000,GameCube {WiseGroup USB box},a:b0,b:b2,y:b3,x:b1,start:b7,leftshoulder:,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,rightstick:,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,platform:Linux,
|
||||
030000006d04000011c2000010010000,Logitech WingMan Cordless RumblePad,a:b0,b:b1,y:b4,x:b3,start:b8,guide:b5,back:b2,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:b9,righttrigger:b10,platform:Linux,
|
||||
030000006d04000018c2000010010000,Logitech Logitech RumblePad 2 USB,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,
|
||||
05000000d6200000ad0d000001000000,Moga Pro,platform:Linux,a:b0,b:b1,y:b3,x:b2,start:b6,leftstick:b7,rightstick:b8,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a5,righttrigger:a4,
|
||||
030000004f04000009d0000000010000,Thrustmaster Run N Drive Wireless PS3,platform:Linux,a:b1,b:b2,x:b0,y:b3,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,
|
||||
030000004f04000008d0000000010000,Thrustmaster Run N Drive Wireless,platform:Linux,a:b1,b:b2,x:b0,y:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:b6,righttrigger:b7,
|
||||
0300000000f000000300000000010000,RetroUSB.com RetroPad,a:b1,b:b5,x:b0,y:b4,back:b2,start:b3,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Linux,
|
||||
0300000000f00000f100000000010000,RetroUSB.com Super RetroPort,a:b1,b:b5,x:b0,y:b4,back:b2,start:b3,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Linux,
|
||||
030000006f0e00001f01000000010000,Generic X-Box pad,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
03000000280400000140000000010000,Gravis GamePad Pro USB ,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftx:a0,lefty:a1,
|
||||
030000005e0400008902000021010000,Microsoft X-Box pad v2 (US),platform:Linux,x:b3,a:b0,b:b1,y:b4,back:b6,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b5,lefttrigger:a2,rightshoulder:b2,righttrigger:a5,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
030000005e0400008502000000010000,Microsoft X-Box pad (Japan),platform:Linux,x:b3,a:b0,b:b1,y:b4,back:b6,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b5,lefttrigger:a2,rightshoulder:b2,righttrigger:a5,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
030000006f0e00001e01000011010000,Rock Candy Gamepad for PS3,platform:Linux,a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,guide:b12,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,
|
||||
03000000250900000500000000010000,Sony PS2 pad with SmartJoy adapter,platform:Linux,a:b2,b:b1,y:b0,x:b3,start:b8,back:b9,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b4,righttrigger:b5,
|
||||
030000008916000000fd000024010000,Razer Onza Tournament,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:b13,dpleft:b11,dpdown:b14,dpright:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Linux,
|
||||
030000004f04000000b3000010010000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,y:b3,x:b1,start:b10,guide:b8,back:b9,leftstick:b11,rightstick:b12,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,platform:Linux,
|
||||
03000000ad1b000001f5000033050000,Hori Pad EX Turbo 2,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Linux,
|
||||
050000004c050000c405000000010000,PS4 Controller (Bluetooth),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
|
||||
060000004c0500006802000000010000,PS3 Controller (Bluetooth),a:b14,b:b13,y:b12,x:b15,start:b3,guide:b16,back:b0,leftstick:b1,rightstick:b2,leftshoulder:b10,rightshoulder:b11,dpup:b4,dpleft:b7,dpdown:b6,dpright:b5,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b8,righttrigger:b9,platform:Linux,
|
||||
050000004c0500006802000000010000,PS3 Controller (Bluetooth),a:b14,b:b13,y:b12,x:b15,start:b3,guide:b16,back:b0,leftstick:b1,rightstick:b2,leftshoulder:b10,rightshoulder:b11,dpup:b4,dpleft:b7,dpdown:b6,dpright:b5,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b8,righttrigger:b9,platform:Linux,
|
||||
05000000504c415953544154494f4e00,PS3 Controller (Bluetooth),a:b14,b:b13,y:b12,x:b15,start:b3,guide:b16,back:b0,leftstick:b1,rightstick:b2,leftshoulder:b10,rightshoulder:b11,dpup:b4,dpleft:b7,dpdown:b6,dpright:b5,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b8,righttrigger:b9,platform:Linux,
|
||||
03000000790000000600000010010000,DragonRise Inc. Generic USB Joystick ,platform:Linux,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
03000000666600000488000000010000,Super Joy Box 5 Pro,platform:Linux,a:b2,b:b1,x:b3,y:b0,back:b9,start:b8,leftshoulder:b6,rightshoulder:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b4,righttrigger:b5,dpup:b12,dpleft:b15,dpdown:b14,dpright:b13,
|
||||
05000000362800000100000002010000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,platform:Linux,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,
|
||||
05000000362800000100000003010000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,platform:Linux,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,
|
||||
030000008916000001fd000024010000,Razer Onza Classic Edition,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:b11,dpdown:b14,dpright:b12,dpup:b13,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
030000005e040000d102000001010000,Microsoft X-Box One pad,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
030000005e040000dd02000003020000,Microsoft X-Box One pad v2,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,platform:Linux,
|
||||
03000000790000001100000010010000,RetroLink Saturn Classic Controller,platform:Linux,x:b3,a:b0,b:b1,y:b4,back:b5,guide:b2,start:b8,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,
|
||||
050000007e0500003003000001000000,Nintendo Wii U Pro Controller,platform:Linux,a:b0,b:b1,x:b3,y:b2,back:b8,start:b9,guide:b10,leftshoulder:b4,rightshoulder:b5,leftstick:b11,rightstick:b12,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,dpup:b13,dpleft:b15,dpdown:b14,dpright:b16,
|
||||
030000005e0400008e02000004010000,Microsoft X-Box 360 pad,platform:Linux,a:b0,b:b1,x:b2,y:b3,back:b6,start:b7,guide:b8,leftshoulder:b4,rightshoulder:b5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,
|
||||
030000000d0f00002200000011010000,HORI CO. LTD. REAL ARCADE Pro.V3,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,guide:b12,start:b9,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,
|
||||
030000000d0f00001000000011010000,HORI CO. LTD. FIGHTING STICK 3,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,guide:b12,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7
|
||||
03000000f0250000c183000010010000,Goodbetterbest Ltd USB Controller,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,guide:b12,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,
|
||||
03000000f0250000c283000010010000,Goodbetterbest Ltd PC USB Controller,platform:Linux,a:b1,b:b2,x:b0,y:b3,back:b8,guide:b12,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7
|
||||
0000000058626f782047616d65706100,Xbox Gamepad (userspace driver),platform:Linux,a:b0,b:b1,x:b2,y:b3,start:b7,back:b6,guide:b8,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,lefttrigger:a5,righttrigger:a4,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a2,righty:a3,
|
||||
03000000ff1100003133000010010000,PC Game Controller,a:b2,b:b1,y:b0,x:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Linux,
|
||||
030000005e0400008e02000020200000,SpeedLink XEOX Pro Analog Gamepad pad,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
030000006f0e00001304000000010000,Generic X-Box pad,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:a0,rightstick:a3,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
03000000a306000018f5000010010000,Saitek PLC Saitek P3200 Rumble Pad,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
03000000830500006020000010010000,iBuffalo USB 2-axis 8-button Gamepad,a:b1,b:b0,x:b3,y:b2,back:b6,start:b7,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,platform:Linux,
|
||||
03000000c9110000f055000011010000,HJC Game GAMEPAD,leftx:a0,lefty:a1,dpdown:h0.4,rightstick:b11,rightshoulder:b5,rightx:a2,start:b9,righty:a3,dpleft:h0.8,lefttrigger:b6,x:b2,dpup:h0.1,back:b8,leftstick:b10,leftshoulder:b4,y:b3,a:b0,dpright:h0.2,righttrigger:b7,b:b1,platform:Linux,
|
||||
03000000a30600000c04000011010000,Saitek P2900 Wireless Pad,a:b1,b:b2,y:b3,x:b0,start:b12,guide:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b4,righttrigger:b5,platform:Linux,
|
||||
03000000341a000005f7000010010000,GameCube {HuiJia USB box},a:b1,b:b2,y:b3,x:b0,start:b9,guide:,back:,leftstick:,rightstick:,leftshoulder:,dpleft:b15,dpdown:b14,dpright:b13,leftx:a0,lefty:a1,rightx:a5,righty:a2,lefttrigger:a3,righttrigger:a4,rightshoulder:b7,dpup:b12,platform:Linux,
|
||||
030000006e0500000320000010010000,JC-U3613M - DirectInput Mode,platform:Linux,x:b0,a:b2,b:b3,y:b1,back:b10,guide:b12,start:b11,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,
|
||||
030000006f0e00004601000001010000,Rock Candy Wired Controller for Xbox One,platform:Linux,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,guide:b8,leftstick:b9,rightstick:b10,lefttrigger:a2,righttrigger:a5,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
03000000380700001647000010040000,Mad Catz Wired Xbox 360 Controller,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
030000006f0e00003901000020060000,Afterglow Wired Controller for Xbox One,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,platform:Linux,
|
||||
030000004f04000015b3000010010000,Thrustmaster Dual Analog 4,platform:Linux,a:b0,b:b2,x:b1,y:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,
|
||||
05000000102800000900000000010000,8Bitdo SFC30 GamePad,platform:Linux,x:b4,a:b1,b:b0,y:b3,back:b10,start:b11,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,
|
||||
03000000d81400000862000011010000,HitBox (PS3/PC) Analog Mode,platform:Linux,a:b1,b:b2,y:b3,x:b0,start:b12,guide:b9,back:b8,leftshoulder:b4,rightshoulder:b5,lefttrigger:b6,righttrigger:b7,leftx:a0,lefty:a1,
|
||||
030000000d0f00000d00000000010000,hori,platform:Linux,a:b0,b:b6,y:b2,x:b1,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,start:b9,guide:b10,back:b8,leftshoulder:b3,rightshoulder:b7,leftx:b4,lefty:b5,
|
||||
030000000d0f00006700000001010000,HORIPAD ONE,platform:Linux,a:b0,b:b1,x:b2,y:b3,back:b6,start:b7,guide:b8,leftshoulder:b4,rightshoulder:b5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,
|
||||
03000000ad1b000016f0000090040000,Mad Catz Xbox 360 Controller,platform:Linux,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,
|
||||
03000000d814000007cd000011010000,Toodles 2008 Chimp PC/PS3,platform:Linux,a:b0,b:b1,y:b2,x:b3,start:b9,back:b8,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,lefttrigger:b6,righttrigger:b7,
|
||||
03000000fd0500000030000000010000,InterAct GoPad I-73000 (Fighting Game Layout),platform:Linux,a:b3,b:b4,y:b1,x:b0,start:b7,back:b6,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,
|
||||
05000000010000000100000003000000,Nintendo Wiimote,platform:Linux,a:b0,b:b1,y:b3,x:b2,start:b9,guide:b10,back:b8,leftstick:b11,rightstick:b12,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,
|
||||
030000005e0400008e02000062230000,Microsoft X-Box 360 pad,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
03000000a30600000901000000010000,Saitek P880,a:b2,b:b3,y:b1,x:b0,leftstick:b8,rightstick:b9,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b6,righttrigger:b7,platform:Linux,
|
||||
030000006f0e00000103000000020000,Logic3 Controller,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
05000000380700006652000025010000,Mad Catz C.T.R.L.R ,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,guide:b12,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,
|
||||
06000000adde0000efbe000002010000,Hidromancer Game Controller,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
03000000c01600008704000011010000,Serial/Keyboard/Mouse/Joystick,platform:Linux,a:b12,b:b10,x:b13,y:b11,back:b4,start:b5,leftstick:b14,rightstick:b15,leftshoulder:b9,rightshoulder:b8,dpup:b0,dpdown:b2,dpleft:b3,dpright:b1,leftx:a1,lefty:a0,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,
|
||||
05000000a00500003232000001000000,8Bitdo Zero GamePad,platform:Linux,a:b0,b:b1,x:b3,y:b4,back:b10,start:b11,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,
|
||||
03000000780000000600000010010000,Microntek USB Joystick,platform:Linux,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,leftx:a0,lefty:a1,
|
||||
03000000ad1b00002ef0000090040000,Mad Catz Fightpad SFxT,platform:Linux,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,lefttrigger:a2,righttrigger:a5,
|
||||
03000000100800000300000010010000,USB Gamepad,platform:Linux,a:b2,b:b1,x:b3,y:b0,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b4,righttrigger:b5,
|
||||
030000005e0400008e02000073050000,Speedlink TORID Wireless Gamepad,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
030000001008000001e5000010010000,NEXT Classic USB Game Controller,a:b0,b:b1,back:b8,start:b9,rightx:a2,righty:a3,leftx:a0,lefty:a1,platform:Linux,
|
||||
030000006d04000016c2000011010000,Logitech F310 Gamepad (DInput),x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,platform:Linux,
|
||||
03000000bd12000015d0000010010000,Tomee SNES USB Controller,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,platform:Linux,
|
||||
050000004c050000cc09000000010000,Sony DualShock 4 V2 BT,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b13,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Linux,
|
||||
030000004c050000a00b000011010000,Sony DualShock 4 Wireless Adaptor,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b13,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Linux,
|
||||
05000000ac0500003232000001000000,VR-BOX,platform:Linux,a:b0,b:b1,x:b2,y:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b4,righttrigger:b5,
|
||||
030000004c050000cc09000011010000,Sony DualShock 4 V2,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Linux,
|
||||
030000004c050000cc09000011810000,Sony Interactive Entertainment Wireless Controller,platform:Linux,x:b3,a:b0,b:b1,y:b2,back:b8,guide:b10,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b6,rightshoulder:b5,righttrigger:a5,leftstick:b7,leftstick:b11,rightstick:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
050000004c050000cc09000000810000,Wireless Controller,platform:Linux,x:b3,a:b0,b:b1,y:b2,back:b8,guide:b10,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b6,rightshoulder:b5,righttrigger:a5,leftstick:b7,leftstick:b11,rightstick:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
030000004c0500006802000011810000,Sony PLAYSTATION(R)3 Controller,platform:Linux,x:b3,a:b0,b:b1,y:b2,back:b8,guide:b10,start:b9,dpleft:b15,dpdown:b14,dpright:b16,dpup:b13,leftshoulder:b4,lefttrigger:a2,rightshoulder:b6,rightshoulder:b5,righttrigger:a5,leftstick:b7,leftstick:b11,rightstick:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
050000004c0500006802000000810000,PLAYSTATION(R)3 Controller,platform:Linux,x:b3,a:b0,b:b1,y:b2,back:b8,guide:b10,start:b9,dpleft:b15,dpdown:b14,dpright:b16,dpup:b13,leftshoulder:b4,lefttrigger:a2,rightshoulder:b6,rightshoulder:b5,righttrigger:a5,leftstick:b7,leftstick:b11,rightstick:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
03000000c82d00000190000011010000,8Bitdo NES30 Pro 8Bitdo NES30 Pro,platform:Linux,a:b1,b:b0,x:b4,y:b3,back:b10,start:b11,leftstick:b13,rightstick:b14,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,
|
||||
05000000c82d00002038000000010000,8Bitdo NES30 Pro,platform:Linux,a:b1,b:b0,x:b4,y:b3,back:b10,guide:b2,start:b11,leftstick:b13,rightstick:b14,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a5,righttrigger:a4,
|
||||
030000005e040000a102000000010000,Xbox 360 Wireless Receiver,platform:Linux,a:b0,b:b1,x:b2,y:b3,back:b6,guide:b8,start:b7,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:b13,dpdown:b14,dpleft:b11,dpright:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,
|
||||
050000004c050000cc09000001000000,Sony DualShock 4 V2 BT,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Linux,
|
||||
03000000bc2000006412000011010000,BETOP CONTROLLER,a:b2,b:b1,y:b0,x:b3,start:b9,guide:b30,back:b8,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Linux,
|
||||
05000000c82d00000161000000010000,8Bitdo SN30 Pro,platform:Linux,a:b1,b:b0,x:b4,y:b3,back:b10,guide:b2,start:b11,leftstick:b13,rightstick:b14,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a5,righttrigger:a4,
|
||||
03000000380700008532000010010000,MadCatz Madcatz Fightpad,platform:Linux,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,lefttrigger:b5,righttrigger:b7,
|
||||
030000000d0f0000ee00000011010000,HORI CO.,LTD. HORIPAD mini4,platform:Linux,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,
|
||||
030000000d0f0000c100000011010000,HORI CO.,LTD. HORIPAD S,platform:Linux,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,
|
||||
03000000ad1b000003f5000033050000,Hori Fighting Stick VX,platform:Linux,a:b0,b:b1,x:b2,y:b3,back:b8,guide:b10,start:b9,leftshoulder:b4,rightshoulder:b5,-leftx:h0.8,+leftx:h0.2,-lefty:h0.1,+lefty:h0.4,lefttrigger:b6,righttrigger:b7,
|
||||
03000000c82d00000260000011010000,8Bitdo SF30 Pro 8BitDo SN30 Pro+,platform:Linux,a:b1,b:b0,x:b4,y:b3,back:b10,guide:b2,start:b11,leftstick:b13,rightstick:b14,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a5,righttrigger:a4,
|
||||
060000007e0500000820000000000000,Nintendo Switch Combined Joy-Cons,platform:Linux,a:b0,b:b1,x:b3,y:b2,back:b9,guide:b11,start:b10,leftstick:b12,rightstick:b13,leftshoulder:b5,rightshoulder:b6,dpup:b14,dpdown:b15,dpleft:b16,dpright:b17,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b7,righttrigger:b8,
|
||||
05000000491900000204000000000000,PG-9118,platform:Linux,x:b76,a:b73,b:b74,y:b77,back:b83,start:b84,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b79,lefttrigger:b81,rightshoulder:b80,righttrigger:b82,leftstick:b86,rightstick:b87,leftx:a0,lefty:a1,rightx:a2,righty:a3,
|
||||
03000000d620000011a7000011010000,PowerA Nintendo Switch Wired Controller,a:b1,b:b2,x:b0,y:b3,back:b8,guide:b12,start:b9,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Linux,
|
||||
050000004c050000e60c000000810000,Sony DualSense,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,
|
||||
|
||||
@@ -1,337 +1,337 @@
|
||||
006b570008068310:184 = strtok_r
|
||||
019ba2099fb88f3c:48 = vector_normalize_t
|
||||
0266f96d740c7e03:912 = memcpy
|
||||
02bd2859045d2383:240 = bcmp
|
||||
030507c9a1f0fc85:92 = matrix_rot_x
|
||||
0483fceefa4557ff:1360 = __udivdi3
|
||||
0558ad5c5be00ca1:76 = vtfm_t
|
||||
05aedd0c04b451a1:356 = sqrt
|
||||
0654fc8adbe16ef7:28 = vmul_q
|
||||
06b243c926fa6ab5:24 = vf2in_q
|
||||
06e2826e02056114:56 = wcslen
|
||||
075fa9b234b41e9b:32 = fmodf
|
||||
0a051019bdd786c3:184 = strcasecmp
|
||||
0a46dc426054bb9d:24 = vector_add_t
|
||||
0c0173ed70f84f66:48 = vnormalize_t
|
||||
0c65188f5bfb3915:24 = vsgn_q
|
||||
0d898513a722ea3c:40 = copysignf
|
||||
0e99b037b852c8ea:68 = isnan
|
||||
0eb5f2e95f59276a:40 = dl_write_lightmode
|
||||
0f1e7533a546f6a1:228 = dl_write_bone_matrix_4
|
||||
0f2a1106ad84fb74:52 = strcmp
|
||||
0ffa5db8396d4274:64 = memcpy_jak
|
||||
1252e902d0b49bfb:44 = vector_sub_q_2
|
||||
12df3d33a58d0298:52 = vmidt_t
|
||||
12feef7b017d3431:700 = memmove
|
||||
1322c7e3fe6dff4d:784 = _free_r
|
||||
1376c115d5f1d90c:36 = strlen
|
||||
1448134dd3acd1f9:240 = memchr
|
||||
14800e59c04968d7:100 = wcsstr
|
||||
14b56e858a27a8a4:24 = vi2f_q
|
||||
15c4662d5d3c728e:308 = acosf
|
||||
1616ee7052542059:48 = vtfm_t
|
||||
16965ca11a4e7dac:104 = vmmul_q_transp
|
||||
16afe830a5dd2de2:40 = vdiv_q
|
||||
184e834a63a79016:32 = isnanf
|
||||
189212bda9c94df1:736 = atanf
|
||||
199821ce500ef9d2:24 = vocp_t
|
||||
1a3c8e9d637ed421:104 = __adddf3
|
||||
1a7564fa3e25c992:844 = memcpy
|
||||
1aad94c0723edfc0:124 = vmmul_t_transp
|
||||
1ab33b12b3cb8cb0:28 = vqmul_q
|
||||
1ac05627df1f87f4:112 = memcpy16
|
||||
1bdf3600844373fd:112 = strstr
|
||||
1c967be07917ddc9:92 = strcat
|
||||
1d03fa48334ca966:556 = _strtol_r
|
||||
1e1525e3bc2f6703:676 = rint
|
||||
1ec055f28bb9f4d1:88 = gu_update_stall
|
||||
1ef9cfe6afd3c035:180 = memset
|
||||
1f53eac122f96b37:224 = cosf
|
||||
2097a8b75c8fe651:436 = atan2
|
||||
21411b3c860822c0:36 = matrix_scale_q_t
|
||||
24d82a8675800808:220 = ceilf
|
||||
26cc90cb25af9d27:476 = log10
|
||||
2774614d57d4baa2:28 = vsub_q
|
||||
279c6bf9cf99cc85:436 = strncpy
|
||||
2876ed93c5fd1211:328 = dl_write_matrix_4
|
||||
2965b1ad3ca15cc1:44 = vtfm_t
|
||||
299a370587df078f:116 = strange_copy_routine
|
||||
2abca53599f09ea7:608 = dl_write_matrix_3
|
||||
2adb92e8855c454e:48 = vtfm_q
|
||||
2adc229bef7bbc75:40 = isnan
|
||||
2bcf5268dd26345a:340 = acos
|
||||
2c4cb2028a1735bf:600 = floor
|
||||
2ca5958bb816c72e:44 = vector_i2f_t
|
||||
2e7022d9767c9018:2100 = atan
|
||||
2f10d3faec84b5bb:276 = sinf
|
||||
2f639673670caa0e:772 = dl_write_matrix_2
|
||||
2f718936b371fc44:40 = vcos_s
|
||||
3024e961d1811dea:396 = fmod
|
||||
30c9c4f420573eb6:540 = expf
|
||||
317afeb882ff324a:212 = memcpy
|
||||
31ea2e192f5095a1:52 = vector_add_t
|
||||
31f523ef18898e0e:420 = logf
|
||||
32806967fe81568b:40 = vector_sub_t_2
|
||||
32ceb9a7f72b9385:440 = _strtoul_r
|
||||
32e6bc7c151491ed:68 = memchr
|
||||
335df69db1073a8d:96 = wcscpy
|
||||
33dc6b144cb302c1:304 = memmove
|
||||
35d3527ff8c22ff2:56 = matrix_scale_q
|
||||
373ce518eee5a2d2:20 = matrix300_store_q
|
||||
388043e96b0e11fd:144 = dl_write_material_2
|
||||
38f19bc3be215acc:388 = log10f
|
||||
393047f06eceaba1:96 = strcspn
|
||||
39a651942a0b3861:204 = tan
|
||||
3a3bc2b20a55bf02:68 = memchr
|
||||
3ab08b5659de1746:40 = vsin_s
|
||||
3c421a9265f37ebc:700 = memmove
|
||||
3cbc2d50a3db59e9:100 = strncmp
|
||||
3ce1806699a91d9d:148 = dl_write_light
|
||||
3d5e914011c181d4:444 = scalbnf
|
||||
3ea41eafb53fc99a:388 = logf
|
||||
3fe38bff09ac3da0:436 = _strtoul_r
|
||||
40a25c7e1fd44fe2:24 = fabsf
|
||||
410d48d9b6580b4a:36 = dl_write_ztest
|
||||
42dc17c8018f30f2:44 = vtan.s
|
||||
436b07caa2aab931:352 = acos
|
||||
444472537eedf966:32 = vmzero_q
|
||||
449ff96982626338:28 = vmidt_q
|
||||
44f65b1a72c45703:36 = strlen
|
||||
45528de3948615dc:64 = memcpy
|
||||
456a0d78ac318d15:164 = gta_dl_write_matrix
|
||||
497248c9d12f44fd:68 = strcpy
|
||||
4a70207212a4c497:24 = strlen
|
||||
4b16a5c602c74c6c:24 = vsub_t
|
||||
4bb677dace6ca526:184 = memset
|
||||
4c4bdedcc13ac77c:624 = dl_write_matrix_5
|
||||
4c91c556d1aa896b:104 = dl_write_material_3
|
||||
4cf38c368078181e:616 = dl_write_matrix
|
||||
4d72b294501cddfb:80 = copysign
|
||||
4ddd83b7f4ed8d4e:844 = memcpy
|
||||
4e266783291b0220:28 = vsub_t
|
||||
4e5950928c0bb082:44 = vmmul_q_transp4
|
||||
4f34fc596ecf5b25:40 = vdiv_t
|
||||
500a949afb39133f:24 = vf2iu_q
|
||||
50d8f01ea8fa713d:48 = send_commandi
|
||||
50fa6db2fb14814a:544 = rint
|
||||
513ce13cd7ce97ea:332 = scalbnf
|
||||
514161da54d37416:1416 = __umoddi3
|
||||
51c52d7dd4d2191c:360 = cos
|
||||
5287d4b8abd5806b:768 = _strtoll_r
|
||||
52d5141545a75eda:60 = dl_write_clutformat
|
||||
530cbe1ce9b45d58:108 = dl_write_light_vector
|
||||
53c9aa23504a630f:96 = vmmul_q_5
|
||||
54015ccbcbc75374:24 = strlen
|
||||
5550d87a851c218c:168 = dl_write_viewport
|
||||
55c1294280bfade0:88 = dl_write_blend_fixed
|
||||
56c9929e8c8c5768:24 = fabsf
|
||||
572b2d9e57e6e363:788 = memcpy_thingy
|
||||
580200b840b47c58:1856 = _realloc_r
|
||||
5961f681bbd69035:28 = vfad_q
|
||||
598b91c64cf7e036:2388 = qsort
|
||||
59a0cb08f5ecf8b6:28 = copysignf
|
||||
5ae4ec2a5e133de3:28 = vector_cross_t
|
||||
5b005f8375d7c364:236 = floorf
|
||||
5b103d973fd1dd94:92 = matrix_rot_y
|
||||
5b9d7e9d4c905694:196 = _calloc_r
|
||||
5bf7a77b028e9f66:324 = sqrtf
|
||||
5c0b3edc0e48852c:148 = memmove
|
||||
5e898df42c4af6b8:76 = wcsncmp
|
||||
5f473780835e3458:52 = vclamp_q
|
||||
5fc58ed2c4d48b79:40 = vtfm_q_transp
|
||||
6145029ef86f0365:76 = __extendsfdf2
|
||||
62815f41fa86a131:656 = scalbn
|
||||
6301fa5149bd973a:120 = wcscat
|
||||
658b07240a690dbd:36 = strlen
|
||||
66122f0ab50b2ef9:296 = dl_write_dither_matrix_5
|
||||
66f7f1beccbc104a:256 = memcpy_swizzled
|
||||
679e647e34ecf7f1:132 = roundf
|
||||
67afe74d9ec72f52:4380 = _strtod_r
|
||||
68b22c2aa4b8b915:400 = sqrt
|
||||
6962da85a6dad937:60 = strrchr
|
||||
69a3c4f774859404:64 = vmmul_q_transp2
|
||||
6b022e20ee3fa733:68 = __negdf2
|
||||
6b2a6347c0dfcb57:152 = strcpy
|
||||
6b4148322c569cb3:240 = wmemchr
|
||||
6c4cb6d25851553a:44 = vtfm_t
|
||||
6c7b2462b9ec7bc7:56 = vmmul_q
|
||||
6ca9cc8fa485d096:304 = __ieee754_sqrtf
|
||||
6ccffc753d2c148e:96 = strlwr
|
||||
6e40ec681fb5c571:40 = matrix_copy_q
|
||||
6e9884c842a51142:236 = strncasecmp
|
||||
6f101c5c4311c144:276 = floorf
|
||||
6f1731f84bbf76c3:116 = strcmp
|
||||
6f4e1a1a84df1da0:68 = dl_write_texmode
|
||||
70649c7211f6a8da:16 = fabsf
|
||||
7245b74db370ae72:64 = vmmul_q_transp3
|
||||
7259d52b21814a5a:40 = vtfm_t_transp
|
||||
736b34ebc702d873:104 = vmmul_q_transp
|
||||
7499a2ce8b60d801:12 = abs
|
||||
74ebbe7d341463f3:72 = dl_write_colortest
|
||||
755a41f9183bb89a:60 = vmmul_q
|
||||
759834c69bb12c12:68 = strcpy
|
||||
75c5a88d62c9c99f:276 = sinf
|
||||
76c661fecbb39990:364 = sin
|
||||
770c9c07bf58fd14:16 = fabsf
|
||||
774e479eb9634525:464 = _strtol_r
|
||||
77aeb1c23f9aa2ad:56 = strchr
|
||||
78e8c65b5a458f33:148 = memcmp
|
||||
794d1b073c183c77:24 = fabsf
|
||||
7978a886cf70b1c9:56 = wcschr
|
||||
79faa339fff5a80c:28 = finitef
|
||||
7c50728008c288e3:36 = vector_transform_q_4x4
|
||||
7f1fc0dce6be120a:404 = fmod
|
||||
828b98925af9ff8f:40 = vector_distance_t
|
||||
83ac39971df4b966:336 = sqrtf
|
||||
84c6cd47834f4c79:1284 = powf
|
||||
8734dc1d155ea493:24 = vf2iz_q
|
||||
87fe3f7e621ddebb:212 = memcpy
|
||||
891ca854e1c664e9:2392 = qsort
|
||||
8965d4b004adad28:420 = log10f
|
||||
89e1858ba11b84e4:52 = memset
|
||||
8a00e7207e7dbc81:232 = _exit
|
||||
8a1f9daadecbaf7f:104 = vmmul_q_transp
|
||||
8a610f34078ce360:32 = vector_copy_q_t
|
||||
8c3fd997a544d0b1:268 = memcpy
|
||||
8df2928848857e97:164 = strcat
|
||||
8e48cabd529ca6b5:52 = vector_multiply_t
|
||||
8e97dcb03fbaba5c:104 = vmmul_q_transp
|
||||
8ee81b03d2eef1e7:28 = vmul_t
|
||||
8f19c41e8b987e18:100 = matrix_mogrify
|
||||
8ff11e9bed387401:700 = memmove
|
||||
910140c1a07aa59e:256 = rot_matrix_euler_zyx
|
||||
91606bd72ae90481:44 = wmemcpy
|
||||
92c7d2de74068c9c:32 = vcross_t
|
||||
93d8a275ba288b26:32 = vdot_t
|
||||
94c7083b64a946b4:2028 = powf
|
||||
95a52ce1bc460108:2036 = _malloc_r
|
||||
95bd33ac373c019a:24 = fabsf
|
||||
9705934b0950d68d:280 = dl_write_framebuffer_ptr
|
||||
9734cf721bc0f3a1:732 = atanf
|
||||
9a06b9d5c16c4c20:76 = dl_write_clut_ptrload
|
||||
9b88b739267d189e:88 = strrchr
|
||||
9ce53975bb88c0e7:96 = strncpy
|
||||
9d4f5f56b52f07f2:808 = memmove
|
||||
9e2941c4a5c5e847:792 = memcpy
|
||||
9e6ce11f9d49f954:292 = memcpy
|
||||
9f269daa6f0da803:128 = dl_write_scissor_region
|
||||
9f7919eeb43982b0:208 = __fixdfsi
|
||||
a1ca0640f11182e7:72 = strcspn
|
||||
a243486be51ce224:272 = cosf
|
||||
a2bcef60a550a3ef:92 = matrix_rot_z
|
||||
a41989db0f9bf97e:1304 = pow
|
||||
a44f6227fdbc12b1:132 = memcmp
|
||||
a46cc6ea720d5775:44 = dl_write_cull
|
||||
a54967288afe8f26:600 = ceil
|
||||
a5ddbbc688e89a4d:56 = isinf
|
||||
a662359e30b829e4:148 = memcmp
|
||||
a8390e65fa087c62:140 = vtfm_t_q
|
||||
a85fe8abb88b1c6f:52 = vector_sub_t
|
||||
a9194e55cc586557:268 = memcpy
|
||||
a91b3d60bd75105b:28 = vadd_t
|
||||
ab97ec58c58a7c75:52 = vector_divide_t
|
||||
acc2c11c3ea28320:268 = ceilf
|
||||
ad67add5122b8c64:52 = matrix_q_translate_t
|
||||
ada952a1adcea4f5:60 = vmmul_q_transp5
|
||||
adfbf8fb8c933193:56 = fabs
|
||||
ae50226363135bdd:24 = vector_sub_t
|
||||
ae6cd7dfac82c244:48 = vpow_s
|
||||
af85d47f95ad2921:1936 = pow
|
||||
afb2c7e56c04c8e9:48 = vtfm_q
|
||||
afc9968e7d246a5e:1588 = atan
|
||||
afcb7dfbc4d72588:44 = vector_transform_3x4
|
||||
b0db731f27d3aa1b:40 = vmax_s
|
||||
b0ef265e87899f0a:32 = vector_divide_t_s
|
||||
b183a37baa12607b:32 = vscl_t
|
||||
b1a3e60a89af9857:20 = fabs
|
||||
b3fef47fb27d57c9:44 = vector_scale_t
|
||||
b43fd5078ae78029:84 = send_commandi_stall
|
||||
b43ffbd4dc446dd2:324 = atan2f
|
||||
b5fdb3083e6f4b3f:36 = vhtfm_t
|
||||
b6a04277fb1e1a1a:104 = vmmul_q_transp
|
||||
b7448c5ffdd3b0fc:356 = atan2f
|
||||
b7d88567dc22aab1:820 = memcpy
|
||||
b877d3c37a7aaa5d:60 = vmmul_q_2
|
||||
b89aa73b6f94ba95:52 = vclamp_t
|
||||
b8bd1f0e02e9ad87:156 = dl_write_light_dir
|
||||
b8cfaeebfeb2de20:7548 = _vfprintf_r
|
||||
b97f352e85661af6:32 = finitef
|
||||
bb3c6592ed319ba4:132 = dl_write_fog_params
|
||||
bb7d7c93e4c08577:124 = __truncdfsf2
|
||||
bdf54d66079afb96:200 = dl_write_bone_matrix_3
|
||||
be773f78afd1a70f:128 = rand
|
||||
bf5d02ccb8514881:108 = strcmp
|
||||
bf791954ebef4afb:396 = expf
|
||||
bfe07e305abc4cd1:808 = memmove
|
||||
c0feb88cc04a1dc7:48 = vector_negate_t
|
||||
c1f34599d0b9146b:116 = __subdf3
|
||||
c319f0d107dd2f45:888 = __muldf3
|
||||
c35c10300b6b6091:620 = floor
|
||||
c3dbf3e6c80a0a51:164 = dl_write_bone_matrix
|
||||
c51519f5dab342d4:224 = cosf
|
||||
c52c14b9af8c3008:76 = memcmp
|
||||
c54eae62622f1e11:164 = dl_write_bone_matrix_2
|
||||
c96e3a087ebf49a9:100 = dl_write_light_color
|
||||
cb7a2edd603ecfef:48 = vtfm_p
|
||||
cdf64d21418b2667:24 = vzero_q
|
||||
ce1c95ee25b8e2ea:448 = fmod
|
||||
ce4d18a75b98859f:40 = vector_add_t_2
|
||||
ceb5372d0003d951:52 = dl_write_stenciltest
|
||||
cee11483b550ce8f:24 = vocp_q
|
||||
cfecf208769ed5fd:272 = cosf
|
||||
d019b067b58cf6c3:700 = memmove
|
||||
d12a3a91e0040229:524 = dl_write_enable_disable
|
||||
d1faacfc711d61e8:68 = __negdf2
|
||||
d207b0650a41dd9c:28 = vmin_q
|
||||
d6d6e0bb21654778:24 = vneg_t
|
||||
d7229fee680e7851:40 = vmin_s
|
||||
d75670860a7f4b05:144 = wcsncpy
|
||||
d76d1a8804c7ec2c:100 = dl_write_material
|
||||
d7d350c0b33a4662:28 = vadd_q
|
||||
d80051931427dca0:116 = __subdf3
|
||||
da51dab503b06979:32 = vmidt_q
|
||||
dc0cc8b400ecfbf2:36 = strcmp
|
||||
dcab869acf2bacab:292 = strncasecmp
|
||||
dcdf7e1c1a3dc260:372 = strncmp
|
||||
dcfc28e624a81bf1:5476 = _dtoa_r
|
||||
ddfa5a85937aa581:32 = vdot_q
|
||||
e0214719d8a0aa4e:104 = strstr
|
||||
e029f0699ca3a886:76 = matrix300_transform_by
|
||||
e1107cf3892724a0:460 = _memalign_r
|
||||
e1724e6e29209d97:24 = vector_length_t_2
|
||||
e1a5d939cc308195:68 = wcscmp
|
||||
e2d9106e5b9e39e6:80 = strnlen
|
||||
e32cb5c062d1a1c4:700 = _strtoull_r
|
||||
e3835fb2c9c04e59:44 = vmmul_q
|
||||
e527c62d8613f297:136 = strcpy
|
||||
e7b36c2c1348551d:148 = tan
|
||||
e83a7a9d80a21c11:4448 = _strtod_r
|
||||
e894bda909a8a8f9:1064 = expensive_wipeout_pulse
|
||||
e8ad7719be44e7c8:276 = strchr
|
||||
eabb9c1b4f83d2b4:52 = memset
|
||||
eb0f7bf63d52ece9:88 = strncat
|
||||
eb8c0834d8bbc28c:416 = fmodf
|
||||
edbbe9bf9fbceca8:172 = dl_write_viewport2
|
||||
edc3f476221f96e6:148 = tanf
|
||||
f1f660fdf349eac2:1588 = _malloc_r
|
||||
f38a356a359dbe06:28 = vmax_q
|
||||
f3fc2220ed0f2703:32 = send_commandf
|
||||
f4d797cef4ac88cd:684 = _free_r
|
||||
f4ea7d2ec943fa02:224 = sinf
|
||||
f4f8cdf479dfc4a4:224 = sinf
|
||||
f52f993e444b6c52:44 = dl_write_shademode
|
||||
f56641884b36c638:468 = scalbn
|
||||
f5f7826b4a61767c:40 = matrix_copy_q
|
||||
f73c094e492bc163:396 = hypot
|
||||
f7fc691db0147e25:96 = strspn
|
||||
f842aea3baa61f29:32 = vector_length_t
|
||||
f8e0902f4099a9d6:2260 = qsort
|
||||
f972543ab7df071a:32 = vsqrt_s
|
||||
f9b00ef163e8b9d4:32 = vscl_q
|
||||
f9ea1bf2a897ef24:588 = ceil
|
||||
fa156c48461eeeb9:24 = vf2id_q
|
||||
fb4253a1d9d9df9f:20 = isnanf
|
||||
fd34a9ad94fa6241:76 = __extendsfdf2
|
||||
fe4f0280240008e9:28 = vavg_q
|
||||
fe5dd338ab862291:216 = memset
|
||||
ffc8f5f8f946152c:192 = dl_write_light_color
|
||||
006b570008068310:184 = strtok_r
|
||||
019ba2099fb88f3c:48 = vector_normalize_t
|
||||
0266f96d740c7e03:912 = memcpy
|
||||
02bd2859045d2383:240 = bcmp
|
||||
030507c9a1f0fc85:92 = matrix_rot_x
|
||||
0483fceefa4557ff:1360 = __udivdi3
|
||||
0558ad5c5be00ca1:76 = vtfm_t
|
||||
05aedd0c04b451a1:356 = sqrt
|
||||
0654fc8adbe16ef7:28 = vmul_q
|
||||
06b243c926fa6ab5:24 = vf2in_q
|
||||
06e2826e02056114:56 = wcslen
|
||||
075fa9b234b41e9b:32 = fmodf
|
||||
0a051019bdd786c3:184 = strcasecmp
|
||||
0a46dc426054bb9d:24 = vector_add_t
|
||||
0c0173ed70f84f66:48 = vnormalize_t
|
||||
0c65188f5bfb3915:24 = vsgn_q
|
||||
0d898513a722ea3c:40 = copysignf
|
||||
0e99b037b852c8ea:68 = isnan
|
||||
0eb5f2e95f59276a:40 = dl_write_lightmode
|
||||
0f1e7533a546f6a1:228 = dl_write_bone_matrix_4
|
||||
0f2a1106ad84fb74:52 = strcmp
|
||||
0ffa5db8396d4274:64 = memcpy_jak
|
||||
1252e902d0b49bfb:44 = vector_sub_q_2
|
||||
12df3d33a58d0298:52 = vmidt_t
|
||||
12feef7b017d3431:700 = memmove
|
||||
1322c7e3fe6dff4d:784 = _free_r
|
||||
1376c115d5f1d90c:36 = strlen
|
||||
1448134dd3acd1f9:240 = memchr
|
||||
14800e59c04968d7:100 = wcsstr
|
||||
14b56e858a27a8a4:24 = vi2f_q
|
||||
15c4662d5d3c728e:308 = acosf
|
||||
1616ee7052542059:48 = vtfm_t
|
||||
16965ca11a4e7dac:104 = vmmul_q_transp
|
||||
16afe830a5dd2de2:40 = vdiv_q
|
||||
184e834a63a79016:32 = isnanf
|
||||
189212bda9c94df1:736 = atanf
|
||||
199821ce500ef9d2:24 = vocp_t
|
||||
1a3c8e9d637ed421:104 = __adddf3
|
||||
1a7564fa3e25c992:844 = memcpy
|
||||
1aad94c0723edfc0:124 = vmmul_t_transp
|
||||
1ab33b12b3cb8cb0:28 = vqmul_q
|
||||
1ac05627df1f87f4:112 = memcpy16
|
||||
1bdf3600844373fd:112 = strstr
|
||||
1c967be07917ddc9:92 = strcat
|
||||
1d03fa48334ca966:556 = _strtol_r
|
||||
1e1525e3bc2f6703:676 = rint
|
||||
1ec055f28bb9f4d1:88 = gu_update_stall
|
||||
1ef9cfe6afd3c035:180 = memset
|
||||
1f53eac122f96b37:224 = cosf
|
||||
2097a8b75c8fe651:436 = atan2
|
||||
21411b3c860822c0:36 = matrix_scale_q_t
|
||||
24d82a8675800808:220 = ceilf
|
||||
26cc90cb25af9d27:476 = log10
|
||||
2774614d57d4baa2:28 = vsub_q
|
||||
279c6bf9cf99cc85:436 = strncpy
|
||||
2876ed93c5fd1211:328 = dl_write_matrix_4
|
||||
2965b1ad3ca15cc1:44 = vtfm_t
|
||||
299a370587df078f:116 = strange_copy_routine
|
||||
2abca53599f09ea7:608 = dl_write_matrix_3
|
||||
2adb92e8855c454e:48 = vtfm_q
|
||||
2adc229bef7bbc75:40 = isnan
|
||||
2bcf5268dd26345a:340 = acos
|
||||
2c4cb2028a1735bf:600 = floor
|
||||
2ca5958bb816c72e:44 = vector_i2f_t
|
||||
2e7022d9767c9018:2100 = atan
|
||||
2f10d3faec84b5bb:276 = sinf
|
||||
2f639673670caa0e:772 = dl_write_matrix_2
|
||||
2f718936b371fc44:40 = vcos_s
|
||||
3024e961d1811dea:396 = fmod
|
||||
30c9c4f420573eb6:540 = expf
|
||||
317afeb882ff324a:212 = memcpy
|
||||
31ea2e192f5095a1:52 = vector_add_t
|
||||
31f523ef18898e0e:420 = logf
|
||||
32806967fe81568b:40 = vector_sub_t_2
|
||||
32ceb9a7f72b9385:440 = _strtoul_r
|
||||
32e6bc7c151491ed:68 = memchr
|
||||
335df69db1073a8d:96 = wcscpy
|
||||
33dc6b144cb302c1:304 = memmove
|
||||
35d3527ff8c22ff2:56 = matrix_scale_q
|
||||
373ce518eee5a2d2:20 = matrix300_store_q
|
||||
388043e96b0e11fd:144 = dl_write_material_2
|
||||
38f19bc3be215acc:388 = log10f
|
||||
393047f06eceaba1:96 = strcspn
|
||||
39a651942a0b3861:204 = tan
|
||||
3a3bc2b20a55bf02:68 = memchr
|
||||
3ab08b5659de1746:40 = vsin_s
|
||||
3c421a9265f37ebc:700 = memmove
|
||||
3cbc2d50a3db59e9:100 = strncmp
|
||||
3ce1806699a91d9d:148 = dl_write_light
|
||||
3d5e914011c181d4:444 = scalbnf
|
||||
3ea41eafb53fc99a:388 = logf
|
||||
3fe38bff09ac3da0:436 = _strtoul_r
|
||||
40a25c7e1fd44fe2:24 = fabsf
|
||||
410d48d9b6580b4a:36 = dl_write_ztest
|
||||
42dc17c8018f30f2:44 = vtan.s
|
||||
436b07caa2aab931:352 = acos
|
||||
444472537eedf966:32 = vmzero_q
|
||||
449ff96982626338:28 = vmidt_q
|
||||
44f65b1a72c45703:36 = strlen
|
||||
45528de3948615dc:64 = memcpy
|
||||
456a0d78ac318d15:164 = gta_dl_write_matrix
|
||||
497248c9d12f44fd:68 = strcpy
|
||||
4a70207212a4c497:24 = strlen
|
||||
4b16a5c602c74c6c:24 = vsub_t
|
||||
4bb677dace6ca526:184 = memset
|
||||
4c4bdedcc13ac77c:624 = dl_write_matrix_5
|
||||
4c91c556d1aa896b:104 = dl_write_material_3
|
||||
4cf38c368078181e:616 = dl_write_matrix
|
||||
4d72b294501cddfb:80 = copysign
|
||||
4ddd83b7f4ed8d4e:844 = memcpy
|
||||
4e266783291b0220:28 = vsub_t
|
||||
4e5950928c0bb082:44 = vmmul_q_transp4
|
||||
4f34fc596ecf5b25:40 = vdiv_t
|
||||
500a949afb39133f:24 = vf2iu_q
|
||||
50d8f01ea8fa713d:48 = send_commandi
|
||||
50fa6db2fb14814a:544 = rint
|
||||
513ce13cd7ce97ea:332 = scalbnf
|
||||
514161da54d37416:1416 = __umoddi3
|
||||
51c52d7dd4d2191c:360 = cos
|
||||
5287d4b8abd5806b:768 = _strtoll_r
|
||||
52d5141545a75eda:60 = dl_write_clutformat
|
||||
530cbe1ce9b45d58:108 = dl_write_light_vector
|
||||
53c9aa23504a630f:96 = vmmul_q_5
|
||||
54015ccbcbc75374:24 = strlen
|
||||
5550d87a851c218c:168 = dl_write_viewport
|
||||
55c1294280bfade0:88 = dl_write_blend_fixed
|
||||
56c9929e8c8c5768:24 = fabsf
|
||||
572b2d9e57e6e363:788 = memcpy_thingy
|
||||
580200b840b47c58:1856 = _realloc_r
|
||||
5961f681bbd69035:28 = vfad_q
|
||||
598b91c64cf7e036:2388 = qsort
|
||||
59a0cb08f5ecf8b6:28 = copysignf
|
||||
5ae4ec2a5e133de3:28 = vector_cross_t
|
||||
5b005f8375d7c364:236 = floorf
|
||||
5b103d973fd1dd94:92 = matrix_rot_y
|
||||
5b9d7e9d4c905694:196 = _calloc_r
|
||||
5bf7a77b028e9f66:324 = sqrtf
|
||||
5c0b3edc0e48852c:148 = memmove
|
||||
5e898df42c4af6b8:76 = wcsncmp
|
||||
5f473780835e3458:52 = vclamp_q
|
||||
5fc58ed2c4d48b79:40 = vtfm_q_transp
|
||||
6145029ef86f0365:76 = __extendsfdf2
|
||||
62815f41fa86a131:656 = scalbn
|
||||
6301fa5149bd973a:120 = wcscat
|
||||
658b07240a690dbd:36 = strlen
|
||||
66122f0ab50b2ef9:296 = dl_write_dither_matrix_5
|
||||
66f7f1beccbc104a:256 = memcpy_swizzled
|
||||
679e647e34ecf7f1:132 = roundf
|
||||
67afe74d9ec72f52:4380 = _strtod_r
|
||||
68b22c2aa4b8b915:400 = sqrt
|
||||
6962da85a6dad937:60 = strrchr
|
||||
69a3c4f774859404:64 = vmmul_q_transp2
|
||||
6b022e20ee3fa733:68 = __negdf2
|
||||
6b2a6347c0dfcb57:152 = strcpy
|
||||
6b4148322c569cb3:240 = wmemchr
|
||||
6c4cb6d25851553a:44 = vtfm_t
|
||||
6c7b2462b9ec7bc7:56 = vmmul_q
|
||||
6ca9cc8fa485d096:304 = __ieee754_sqrtf
|
||||
6ccffc753d2c148e:96 = strlwr
|
||||
6e40ec681fb5c571:40 = matrix_copy_q
|
||||
6e9884c842a51142:236 = strncasecmp
|
||||
6f101c5c4311c144:276 = floorf
|
||||
6f1731f84bbf76c3:116 = strcmp
|
||||
6f4e1a1a84df1da0:68 = dl_write_texmode
|
||||
70649c7211f6a8da:16 = fabsf
|
||||
7245b74db370ae72:64 = vmmul_q_transp3
|
||||
7259d52b21814a5a:40 = vtfm_t_transp
|
||||
736b34ebc702d873:104 = vmmul_q_transp
|
||||
7499a2ce8b60d801:12 = abs
|
||||
74ebbe7d341463f3:72 = dl_write_colortest
|
||||
755a41f9183bb89a:60 = vmmul_q
|
||||
759834c69bb12c12:68 = strcpy
|
||||
75c5a88d62c9c99f:276 = sinf
|
||||
76c661fecbb39990:364 = sin
|
||||
770c9c07bf58fd14:16 = fabsf
|
||||
774e479eb9634525:464 = _strtol_r
|
||||
77aeb1c23f9aa2ad:56 = strchr
|
||||
78e8c65b5a458f33:148 = memcmp
|
||||
794d1b073c183c77:24 = fabsf
|
||||
7978a886cf70b1c9:56 = wcschr
|
||||
79faa339fff5a80c:28 = finitef
|
||||
7c50728008c288e3:36 = vector_transform_q_4x4
|
||||
7f1fc0dce6be120a:404 = fmod
|
||||
828b98925af9ff8f:40 = vector_distance_t
|
||||
83ac39971df4b966:336 = sqrtf
|
||||
84c6cd47834f4c79:1284 = powf
|
||||
8734dc1d155ea493:24 = vf2iz_q
|
||||
87fe3f7e621ddebb:212 = memcpy
|
||||
891ca854e1c664e9:2392 = qsort
|
||||
8965d4b004adad28:420 = log10f
|
||||
89e1858ba11b84e4:52 = memset
|
||||
8a00e7207e7dbc81:232 = _exit
|
||||
8a1f9daadecbaf7f:104 = vmmul_q_transp
|
||||
8a610f34078ce360:32 = vector_copy_q_t
|
||||
8c3fd997a544d0b1:268 = memcpy
|
||||
8df2928848857e97:164 = strcat
|
||||
8e48cabd529ca6b5:52 = vector_multiply_t
|
||||
8e97dcb03fbaba5c:104 = vmmul_q_transp
|
||||
8ee81b03d2eef1e7:28 = vmul_t
|
||||
8f19c41e8b987e18:100 = matrix_mogrify
|
||||
8ff11e9bed387401:700 = memmove
|
||||
910140c1a07aa59e:256 = rot_matrix_euler_zyx
|
||||
91606bd72ae90481:44 = wmemcpy
|
||||
92c7d2de74068c9c:32 = vcross_t
|
||||
93d8a275ba288b26:32 = vdot_t
|
||||
94c7083b64a946b4:2028 = powf
|
||||
95a52ce1bc460108:2036 = _malloc_r
|
||||
95bd33ac373c019a:24 = fabsf
|
||||
9705934b0950d68d:280 = dl_write_framebuffer_ptr
|
||||
9734cf721bc0f3a1:732 = atanf
|
||||
9a06b9d5c16c4c20:76 = dl_write_clut_ptrload
|
||||
9b88b739267d189e:88 = strrchr
|
||||
9ce53975bb88c0e7:96 = strncpy
|
||||
9d4f5f56b52f07f2:808 = memmove
|
||||
9e2941c4a5c5e847:792 = memcpy
|
||||
9e6ce11f9d49f954:292 = memcpy
|
||||
9f269daa6f0da803:128 = dl_write_scissor_region
|
||||
9f7919eeb43982b0:208 = __fixdfsi
|
||||
a1ca0640f11182e7:72 = strcspn
|
||||
a243486be51ce224:272 = cosf
|
||||
a2bcef60a550a3ef:92 = matrix_rot_z
|
||||
a41989db0f9bf97e:1304 = pow
|
||||
a44f6227fdbc12b1:132 = memcmp
|
||||
a46cc6ea720d5775:44 = dl_write_cull
|
||||
a54967288afe8f26:600 = ceil
|
||||
a5ddbbc688e89a4d:56 = isinf
|
||||
a662359e30b829e4:148 = memcmp
|
||||
a8390e65fa087c62:140 = vtfm_t_q
|
||||
a85fe8abb88b1c6f:52 = vector_sub_t
|
||||
a9194e55cc586557:268 = memcpy
|
||||
a91b3d60bd75105b:28 = vadd_t
|
||||
ab97ec58c58a7c75:52 = vector_divide_t
|
||||
acc2c11c3ea28320:268 = ceilf
|
||||
ad67add5122b8c64:52 = matrix_q_translate_t
|
||||
ada952a1adcea4f5:60 = vmmul_q_transp5
|
||||
adfbf8fb8c933193:56 = fabs
|
||||
ae50226363135bdd:24 = vector_sub_t
|
||||
ae6cd7dfac82c244:48 = vpow_s
|
||||
af85d47f95ad2921:1936 = pow
|
||||
afb2c7e56c04c8e9:48 = vtfm_q
|
||||
afc9968e7d246a5e:1588 = atan
|
||||
afcb7dfbc4d72588:44 = vector_transform_3x4
|
||||
b0db731f27d3aa1b:40 = vmax_s
|
||||
b0ef265e87899f0a:32 = vector_divide_t_s
|
||||
b183a37baa12607b:32 = vscl_t
|
||||
b1a3e60a89af9857:20 = fabs
|
||||
b3fef47fb27d57c9:44 = vector_scale_t
|
||||
b43fd5078ae78029:84 = send_commandi_stall
|
||||
b43ffbd4dc446dd2:324 = atan2f
|
||||
b5fdb3083e6f4b3f:36 = vhtfm_t
|
||||
b6a04277fb1e1a1a:104 = vmmul_q_transp
|
||||
b7448c5ffdd3b0fc:356 = atan2f
|
||||
b7d88567dc22aab1:820 = memcpy
|
||||
b877d3c37a7aaa5d:60 = vmmul_q_2
|
||||
b89aa73b6f94ba95:52 = vclamp_t
|
||||
b8bd1f0e02e9ad87:156 = dl_write_light_dir
|
||||
b8cfaeebfeb2de20:7548 = _vfprintf_r
|
||||
b97f352e85661af6:32 = finitef
|
||||
bb3c6592ed319ba4:132 = dl_write_fog_params
|
||||
bb7d7c93e4c08577:124 = __truncdfsf2
|
||||
bdf54d66079afb96:200 = dl_write_bone_matrix_3
|
||||
be773f78afd1a70f:128 = rand
|
||||
bf5d02ccb8514881:108 = strcmp
|
||||
bf791954ebef4afb:396 = expf
|
||||
bfe07e305abc4cd1:808 = memmove
|
||||
c0feb88cc04a1dc7:48 = vector_negate_t
|
||||
c1f34599d0b9146b:116 = __subdf3
|
||||
c319f0d107dd2f45:888 = __muldf3
|
||||
c35c10300b6b6091:620 = floor
|
||||
c3dbf3e6c80a0a51:164 = dl_write_bone_matrix
|
||||
c51519f5dab342d4:224 = cosf
|
||||
c52c14b9af8c3008:76 = memcmp
|
||||
c54eae62622f1e11:164 = dl_write_bone_matrix_2
|
||||
c96e3a087ebf49a9:100 = dl_write_light_color
|
||||
cb7a2edd603ecfef:48 = vtfm_p
|
||||
cdf64d21418b2667:24 = vzero_q
|
||||
ce1c95ee25b8e2ea:448 = fmod
|
||||
ce4d18a75b98859f:40 = vector_add_t_2
|
||||
ceb5372d0003d951:52 = dl_write_stenciltest
|
||||
cee11483b550ce8f:24 = vocp_q
|
||||
cfecf208769ed5fd:272 = cosf
|
||||
d019b067b58cf6c3:700 = memmove
|
||||
d12a3a91e0040229:524 = dl_write_enable_disable
|
||||
d1faacfc711d61e8:68 = __negdf2
|
||||
d207b0650a41dd9c:28 = vmin_q
|
||||
d6d6e0bb21654778:24 = vneg_t
|
||||
d7229fee680e7851:40 = vmin_s
|
||||
d75670860a7f4b05:144 = wcsncpy
|
||||
d76d1a8804c7ec2c:100 = dl_write_material
|
||||
d7d350c0b33a4662:28 = vadd_q
|
||||
d80051931427dca0:116 = __subdf3
|
||||
da51dab503b06979:32 = vmidt_q
|
||||
dc0cc8b400ecfbf2:36 = strcmp
|
||||
dcab869acf2bacab:292 = strncasecmp
|
||||
dcdf7e1c1a3dc260:372 = strncmp
|
||||
dcfc28e624a81bf1:5476 = _dtoa_r
|
||||
ddfa5a85937aa581:32 = vdot_q
|
||||
e0214719d8a0aa4e:104 = strstr
|
||||
e029f0699ca3a886:76 = matrix300_transform_by
|
||||
e1107cf3892724a0:460 = _memalign_r
|
||||
e1724e6e29209d97:24 = vector_length_t_2
|
||||
e1a5d939cc308195:68 = wcscmp
|
||||
e2d9106e5b9e39e6:80 = strnlen
|
||||
e32cb5c062d1a1c4:700 = _strtoull_r
|
||||
e3835fb2c9c04e59:44 = vmmul_q
|
||||
e527c62d8613f297:136 = strcpy
|
||||
e7b36c2c1348551d:148 = tan
|
||||
e83a7a9d80a21c11:4448 = _strtod_r
|
||||
e894bda909a8a8f9:1064 = expensive_wipeout_pulse
|
||||
e8ad7719be44e7c8:276 = strchr
|
||||
eabb9c1b4f83d2b4:52 = memset
|
||||
eb0f7bf63d52ece9:88 = strncat
|
||||
eb8c0834d8bbc28c:416 = fmodf
|
||||
edbbe9bf9fbceca8:172 = dl_write_viewport2
|
||||
edc3f476221f96e6:148 = tanf
|
||||
f1f660fdf349eac2:1588 = _malloc_r
|
||||
f38a356a359dbe06:28 = vmax_q
|
||||
f3fc2220ed0f2703:32 = send_commandf
|
||||
f4d797cef4ac88cd:684 = _free_r
|
||||
f4ea7d2ec943fa02:224 = sinf
|
||||
f4f8cdf479dfc4a4:224 = sinf
|
||||
f52f993e444b6c52:44 = dl_write_shademode
|
||||
f56641884b36c638:468 = scalbn
|
||||
f5f7826b4a61767c:40 = matrix_copy_q
|
||||
f73c094e492bc163:396 = hypot
|
||||
f7fc691db0147e25:96 = strspn
|
||||
f842aea3baa61f29:32 = vector_length_t
|
||||
f8e0902f4099a9d6:2260 = qsort
|
||||
f972543ab7df071a:32 = vsqrt_s
|
||||
f9b00ef163e8b9d4:32 = vscl_q
|
||||
f9ea1bf2a897ef24:588 = ceil
|
||||
fa156c48461eeeb9:24 = vf2id_q
|
||||
fb4253a1d9d9df9f:20 = isnanf
|
||||
fd34a9ad94fa6241:76 = __extendsfdf2
|
||||
fe4f0280240008e9:28 = vavg_q
|
||||
fe5dd338ab862291:216 = memset
|
||||
ffc8f5f8f946152c:192 = dl_write_light_color
|
||||
|
||||
@@ -1,28 +1,28 @@
|
||||
# lang
|
||||
|
||||
PPSSPP language ini repository
|
||||
|
||||
# Thanks for your interest in translating PPSSPP!
|
||||
|
||||
* Simply copy *en_US.ini* file to a new ini file with your language code, or use it to update an existing file with that name.
|
||||
* To see a list of codes, view [this](http://stackoverflow.com/questions/3191664/list-of-all-locales-and-their-short-codes) page.
|
||||
|
||||
# Please note, while translating:
|
||||
* Ampersands `&` on the *RIGHT* side of an equals sign denote an underlined keyboard hotkey.
|
||||
* The hotkeys are only supported currently in the *DesktopUI* section, however.
|
||||
* Example: `&File`. This will make it so when you press ALT + F on Windows, it'll open the File menu.
|
||||
|
||||
# Tools
|
||||
|
||||
* To remove a translation, use the following (where KeyWord is the key):
|
||||
|
||||
find . -type f -print0 | xargs -0 sed -i /^KeyWord/d
|
||||
|
||||
* To change a translation key, use something like this:
|
||||
|
||||
find . -type f -print0 | xargs -0 sed -i /^Key/NewKey
|
||||
|
||||
* Before you commit, use git diff to check that you don't delete too much
|
||||
or some unrelated key with the same prefix.
|
||||
|
||||
### Happy translating!
|
||||
# lang
|
||||
|
||||
PPSSPP language ini repository
|
||||
|
||||
# Thanks for your interest in translating PPSSPP!
|
||||
|
||||
* Simply copy *en_US.ini* file to a new ini file with your language code, or use it to update an existing file with that name.
|
||||
* To see a list of codes, view [this](http://stackoverflow.com/questions/3191664/list-of-all-locales-and-their-short-codes) page.
|
||||
|
||||
# Please note, while translating:
|
||||
* Ampersands `&` on the *RIGHT* side of an equals sign denote an underlined keyboard hotkey.
|
||||
* The hotkeys are only supported currently in the *DesktopUI* section, however.
|
||||
* Example: `&File`. This will make it so when you press ALT + F on Windows, it'll open the File menu.
|
||||
|
||||
# Tools
|
||||
|
||||
* To remove a translation, use the following (where KeyWord is the key):
|
||||
|
||||
find . -type f -print0 | xargs -0 sed -i /^KeyWord/d
|
||||
|
||||
* To change a translation key, use something like this:
|
||||
|
||||
find . -type f -print0 | xargs -0 sed -i /^Key/NewKey
|
||||
|
||||
* Before you commit, use git diff to check that you don't delete too much
|
||||
or some unrelated key with the same prefix.
|
||||
|
||||
### Happy translating!
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,61 +1,61 @@
|
||||
[LangRegionNames]
|
||||
ja_JP = "日本語"
|
||||
en_US = "English"
|
||||
fi_FI = "Suomi"
|
||||
fr_FR = "Français"
|
||||
es_ES = "Castellano (España)"
|
||||
es_LA = "Español (América Latina)"
|
||||
de_DE = "Deutsch"
|
||||
it_IT = "Italiano"
|
||||
nl_NL = "Nederlands"
|
||||
pt_PT = "Português"
|
||||
pt_BR = "Português Brasileiro"
|
||||
ru_RU = "Русский"
|
||||
ko_KR = "한국어"
|
||||
zh_TW = "繁體中文"
|
||||
zh_CN = "简体中文"
|
||||
ar_AE = "العربية"
|
||||
az_AZ = "Azeri"
|
||||
ca_ES = "Català"
|
||||
gl_ES = "Galego"
|
||||
gr_EL = "Ελληνικά"
|
||||
he_IL = "עברית"
|
||||
hu_HU = "Magyar"
|
||||
id_ID = "Indonesia"
|
||||
pl_PL = "Polski"
|
||||
ro_RO = "Român"
|
||||
sv_SE = "Svenska"
|
||||
tr_TR = "Türk"
|
||||
uk_UA = "Українська"
|
||||
vi_VN = "Tiếng Việt"
|
||||
cz_CZ = "Česky"
|
||||
tg_PH = "Tagalog"
|
||||
th_TH = "ไทย"
|
||||
dr_ID = "Duri"
|
||||
fa_IR = "فارسی"
|
||||
ms_MY = "Melayu"
|
||||
da_DK = "Dansk"
|
||||
no_NO = "Norsk"
|
||||
bg_BG = "български език"
|
||||
lt-LT = "Lithuanian"
|
||||
jv_ID = "Jawa"
|
||||
lo_LA = "ລາວ"
|
||||
hr_HR = "Hrvatski"
|
||||
|
||||
[SystemLanguage]
|
||||
ja_JP = "JAPANESE"
|
||||
en_US = "ENGLISH"
|
||||
fr_FR = "FRENCH"
|
||||
es_ES = "SPANISH"
|
||||
gl_ES = "SPANISH"
|
||||
es_LA = "SPANISH"
|
||||
de_DE = "GERMAN"
|
||||
it_IT = "ITALIAN"
|
||||
nl_NL = "DUTCH"
|
||||
pt_PT = "PORTUGUESE"
|
||||
pt_BR = "PORTUGUESE"
|
||||
ru_RU = "RUSSIAN"
|
||||
ko_KR = "KOREAN"
|
||||
th_TH = "THAI"
|
||||
zh_TW = "CHINESE_TRADITIONAL"
|
||||
zh_CN = "CHINESE_SIMPLIFIED"
|
||||
[LangRegionNames]
|
||||
ja_JP = "日本語"
|
||||
en_US = "English"
|
||||
fi_FI = "Suomi"
|
||||
fr_FR = "Français"
|
||||
es_ES = "Castellano (España)"
|
||||
es_LA = "Español (América Latina)"
|
||||
de_DE = "Deutsch"
|
||||
it_IT = "Italiano"
|
||||
nl_NL = "Nederlands"
|
||||
pt_PT = "Português"
|
||||
pt_BR = "Português Brasileiro"
|
||||
ru_RU = "Русский"
|
||||
ko_KR = "한국어"
|
||||
zh_TW = "繁體中文"
|
||||
zh_CN = "简体中文"
|
||||
ar_AE = "العربية"
|
||||
az_AZ = "Azeri"
|
||||
ca_ES = "Català"
|
||||
gl_ES = "Galego"
|
||||
gr_EL = "Ελληνικά"
|
||||
he_IL = "עברית"
|
||||
hu_HU = "Magyar"
|
||||
id_ID = "Indonesia"
|
||||
pl_PL = "Polski"
|
||||
ro_RO = "Român"
|
||||
sv_SE = "Svenska"
|
||||
tr_TR = "Türk"
|
||||
uk_UA = "Українська"
|
||||
vi_VN = "Tiếng Việt"
|
||||
cz_CZ = "Česky"
|
||||
tg_PH = "Tagalog"
|
||||
th_TH = "ไทย"
|
||||
dr_ID = "Duri"
|
||||
fa_IR = "فارسی"
|
||||
ms_MY = "Melayu"
|
||||
da_DK = "Dansk"
|
||||
no_NO = "Norsk"
|
||||
bg_BG = "български език"
|
||||
lt-LT = "Lithuanian"
|
||||
jv_ID = "Jawa"
|
||||
lo_LA = "ລາວ"
|
||||
hr_HR = "Hrvatski"
|
||||
|
||||
[SystemLanguage]
|
||||
ja_JP = "JAPANESE"
|
||||
en_US = "ENGLISH"
|
||||
fr_FR = "FRENCH"
|
||||
es_ES = "SPANISH"
|
||||
gl_ES = "SPANISH"
|
||||
es_LA = "SPANISH"
|
||||
de_DE = "GERMAN"
|
||||
it_IT = "ITALIAN"
|
||||
nl_NL = "DUTCH"
|
||||
pt_PT = "PORTUGUESE"
|
||||
pt_BR = "PORTUGUESE"
|
||||
ru_RU = "RUSSIAN"
|
||||
ko_KR = "KOREAN"
|
||||
th_TH = "THAI"
|
||||
zh_TW = "CHINESE_TRADITIONAL"
|
||||
zh_CN = "CHINESE_SIMPLIFIED"
|
||||
|
||||
@@ -1,77 +1,77 @@
|
||||
// 4xGLSL HqFilter shader, Modified to use in PPSSPP. Grabbed from:
|
||||
// http://forums.ngemu.com/showthread.php?t=76098
|
||||
|
||||
// by guest(r) (guest.r@gmail.com)
|
||||
// License: GNU-GPL
|
||||
|
||||
// Shader notes: looks better with sprite games
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
|
||||
varying vec4 v_texcoord0;
|
||||
varying vec4 v_texcoord1;
|
||||
varying vec4 v_texcoord2;
|
||||
varying vec4 v_texcoord3;
|
||||
varying vec4 v_texcoord4;
|
||||
varying vec4 v_texcoord5;
|
||||
varying vec4 v_texcoord6;
|
||||
|
||||
const float mx = 0.325; // start smoothing factor
|
||||
const float k = -0.250; // smoothing decrease factor
|
||||
const float max_w = 0.25; // max. smoothing weigth
|
||||
const float min_w =-0.05; // min smoothing/sharpening weigth
|
||||
|
||||
void main()
|
||||
{
|
||||
vec3 c = texture2D(sampler0, v_texcoord0.xy).xyz;
|
||||
vec3 i1 = texture2D(sampler0, v_texcoord1.xy).xyz;
|
||||
vec3 i2 = texture2D(sampler0, v_texcoord2.xy).xyz;
|
||||
vec3 i3 = texture2D(sampler0, v_texcoord3.xy).xyz;
|
||||
vec3 i4 = texture2D(sampler0, v_texcoord4.xy).xyz;
|
||||
vec3 o1 = texture2D(sampler0, v_texcoord5.xy).xyz;
|
||||
vec3 o3 = texture2D(sampler0, v_texcoord6.xy).xyz;
|
||||
vec3 o2 = texture2D(sampler0, v_texcoord5.zw).xyz;
|
||||
vec3 o4 = texture2D(sampler0, v_texcoord6.zw).xyz;
|
||||
|
||||
vec3 dt = vec3(1.0,1.0,1.0);
|
||||
|
||||
float ko1=dot(abs(o1-c),dt);
|
||||
float ko2=dot(abs(o2-c),dt);
|
||||
float ko3=dot(abs(o3-c),dt);
|
||||
float ko4=dot(abs(o4-c),dt);
|
||||
|
||||
float sd1 = dot(abs(i1-i3),dt);
|
||||
float sd2 = dot(abs(i2-i4),dt);
|
||||
|
||||
float w1 = step(ko1,ko3)*sd2;
|
||||
float w2 = step(ko2,ko4)*sd1;
|
||||
float w3 = step(ko3,ko1)*sd2;
|
||||
float w4 = step(ko4,ko2)*sd1;
|
||||
|
||||
c = (w1*o1+w2*o2+w3*o3+w4*o4+0.1*c)/(w1+w2+w3+w4+0.1);
|
||||
|
||||
float lc = c.r+c.g+c.b+0.2;
|
||||
|
||||
w1 = (i1.r+i1.g+i1.b+lc)*0.2;
|
||||
w1 = clamp(k*dot(abs(c-i1),dt)/w1+mx,min_w,max_w);
|
||||
|
||||
w2 = (i2.r+i2.g+i2.b+lc)*0.2;
|
||||
w2 = clamp(k*dot(abs(c-i2),dt)/w2+mx,min_w,max_w);
|
||||
|
||||
w3 = (i3.r+i3.g+i3.b+lc)*0.2;
|
||||
w3 = clamp(k*dot(abs(c-i3),dt)/w3+mx,min_w,max_w);
|
||||
|
||||
w4 = (i4.r+i4.g+i4.b+lc)*0.2;
|
||||
w4 = clamp(k*dot(abs(c-i4),dt)/w4+mx,min_w,max_w);
|
||||
|
||||
gl_FragColor.rgb = w1*i1 + w2*i2 + w3*i3 + w4*i4 + (1.0-w1-w2-w3-w4)*c;
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 4xGLSL HqFilter shader, Modified to use in PPSSPP. Grabbed from:
|
||||
// http://forums.ngemu.com/showthread.php?t=76098
|
||||
|
||||
// by guest(r) (guest.r@gmail.com)
|
||||
// License: GNU-GPL
|
||||
|
||||
// Shader notes: looks better with sprite games
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
|
||||
varying vec4 v_texcoord0;
|
||||
varying vec4 v_texcoord1;
|
||||
varying vec4 v_texcoord2;
|
||||
varying vec4 v_texcoord3;
|
||||
varying vec4 v_texcoord4;
|
||||
varying vec4 v_texcoord5;
|
||||
varying vec4 v_texcoord6;
|
||||
|
||||
const float mx = 0.325; // start smoothing factor
|
||||
const float k = -0.250; // smoothing decrease factor
|
||||
const float max_w = 0.25; // max. smoothing weigth
|
||||
const float min_w =-0.05; // min smoothing/sharpening weigth
|
||||
|
||||
void main()
|
||||
{
|
||||
vec3 c = texture2D(sampler0, v_texcoord0.xy).xyz;
|
||||
vec3 i1 = texture2D(sampler0, v_texcoord1.xy).xyz;
|
||||
vec3 i2 = texture2D(sampler0, v_texcoord2.xy).xyz;
|
||||
vec3 i3 = texture2D(sampler0, v_texcoord3.xy).xyz;
|
||||
vec3 i4 = texture2D(sampler0, v_texcoord4.xy).xyz;
|
||||
vec3 o1 = texture2D(sampler0, v_texcoord5.xy).xyz;
|
||||
vec3 o3 = texture2D(sampler0, v_texcoord6.xy).xyz;
|
||||
vec3 o2 = texture2D(sampler0, v_texcoord5.zw).xyz;
|
||||
vec3 o4 = texture2D(sampler0, v_texcoord6.zw).xyz;
|
||||
|
||||
vec3 dt = vec3(1.0,1.0,1.0);
|
||||
|
||||
float ko1=dot(abs(o1-c),dt);
|
||||
float ko2=dot(abs(o2-c),dt);
|
||||
float ko3=dot(abs(o3-c),dt);
|
||||
float ko4=dot(abs(o4-c),dt);
|
||||
|
||||
float sd1 = dot(abs(i1-i3),dt);
|
||||
float sd2 = dot(abs(i2-i4),dt);
|
||||
|
||||
float w1 = step(ko1,ko3)*sd2;
|
||||
float w2 = step(ko2,ko4)*sd1;
|
||||
float w3 = step(ko3,ko1)*sd2;
|
||||
float w4 = step(ko4,ko2)*sd1;
|
||||
|
||||
c = (w1*o1+w2*o2+w3*o3+w4*o4+0.1*c)/(w1+w2+w3+w4+0.1);
|
||||
|
||||
float lc = c.r+c.g+c.b+0.2;
|
||||
|
||||
w1 = (i1.r+i1.g+i1.b+lc)*0.2;
|
||||
w1 = clamp(k*dot(abs(c-i1),dt)/w1+mx,min_w,max_w);
|
||||
|
||||
w2 = (i2.r+i2.g+i2.b+lc)*0.2;
|
||||
w2 = clamp(k*dot(abs(c-i2),dt)/w2+mx,min_w,max_w);
|
||||
|
||||
w3 = (i3.r+i3.g+i3.b+lc)*0.2;
|
||||
w3 = clamp(k*dot(abs(c-i3),dt)/w3+mx,min_w,max_w);
|
||||
|
||||
w4 = (i4.r+i4.g+i4.b+lc)*0.2;
|
||||
w4 = clamp(k*dot(abs(c-i4),dt)/w4+mx,min_w,max_w);
|
||||
|
||||
gl_FragColor.rgb = w1*i1 + w2*i2 + w3*i3 + w4*i4 + (1.0-w1-w2-w3-w4)*c;
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,37 +1,37 @@
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
attribute vec4 a_position;
|
||||
attribute vec2 a_texcoord0;
|
||||
uniform vec2 u_texelDelta;
|
||||
uniform vec2 u_pixelDelta;
|
||||
|
||||
varying vec4 v_texcoord0;
|
||||
varying vec4 v_texcoord1;
|
||||
varying vec4 v_texcoord2;
|
||||
varying vec4 v_texcoord3;
|
||||
varying vec4 v_texcoord4;
|
||||
varying vec4 v_texcoord5;
|
||||
varying vec4 v_texcoord6;
|
||||
|
||||
void main()
|
||||
{
|
||||
float x = u_pixelDelta.x*((u_texelDelta.x/u_pixelDelta.x)/2.0);
|
||||
float y = u_pixelDelta.y*((u_texelDelta.y/u_pixelDelta.y)/2.0);
|
||||
vec2 dg1 = vec2( x,y);
|
||||
vec2 dg2 = vec2(-x,y);
|
||||
vec2 sd1 = dg1*0.5;
|
||||
vec2 sd2 = dg2*0.5;
|
||||
gl_Position = a_position;
|
||||
v_texcoord0=a_texcoord0.xyxy;
|
||||
v_texcoord1.xy = v_texcoord0.xy - sd1;
|
||||
v_texcoord2.xy = v_texcoord0.xy - sd2;
|
||||
v_texcoord3.xy = v_texcoord0.xy + sd1;
|
||||
v_texcoord4.xy = v_texcoord0.xy + sd2;
|
||||
v_texcoord5.xy = v_texcoord0.xy - dg1;
|
||||
v_texcoord6.xy = v_texcoord0.xy + dg1;
|
||||
v_texcoord5.zw = v_texcoord0.xy - dg2;
|
||||
v_texcoord6.zw = v_texcoord0.xy + dg2;
|
||||
}
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
attribute vec4 a_position;
|
||||
attribute vec2 a_texcoord0;
|
||||
uniform vec2 u_texelDelta;
|
||||
uniform vec2 u_pixelDelta;
|
||||
|
||||
varying vec4 v_texcoord0;
|
||||
varying vec4 v_texcoord1;
|
||||
varying vec4 v_texcoord2;
|
||||
varying vec4 v_texcoord3;
|
||||
varying vec4 v_texcoord4;
|
||||
varying vec4 v_texcoord5;
|
||||
varying vec4 v_texcoord6;
|
||||
|
||||
void main()
|
||||
{
|
||||
float x = u_pixelDelta.x*((u_texelDelta.x/u_pixelDelta.x)/2.0);
|
||||
float y = u_pixelDelta.y*((u_texelDelta.y/u_pixelDelta.y)/2.0);
|
||||
vec2 dg1 = vec2( x,y);
|
||||
vec2 dg2 = vec2(-x,y);
|
||||
vec2 sd1 = dg1*0.5;
|
||||
vec2 sd2 = dg2*0.5;
|
||||
gl_Position = a_position;
|
||||
v_texcoord0=a_texcoord0.xyxy;
|
||||
v_texcoord1.xy = v_texcoord0.xy - sd1;
|
||||
v_texcoord2.xy = v_texcoord0.xy - sd2;
|
||||
v_texcoord3.xy = v_texcoord0.xy + sd1;
|
||||
v_texcoord4.xy = v_texcoord0.xy + sd2;
|
||||
v_texcoord5.xy = v_texcoord0.xy - dg1;
|
||||
v_texcoord6.xy = v_texcoord0.xy + dg1;
|
||||
v_texcoord5.zw = v_texcoord0.xy - dg2;
|
||||
v_texcoord6.zw = v_texcoord0.xy + dg2;
|
||||
}
|
||||
|
||||
@@ -1,218 +1,218 @@
|
||||
/*
|
||||
Hyllian's xBR-lv2 Shader Accuracy (tweak by guest.r)
|
||||
|
||||
Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
Incorporates some of the ideas from SABR shader. Thanks to Joshua Street.
|
||||
*/
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
#define CornerA 0 //ON:1/OFF:0 / A, B, C, D are just different variants of corner rounding
|
||||
#define CornerB 0 //ON:1/OFF:0 / activate only one
|
||||
#define CornerD 0 //ON:1/OFF:0
|
||||
// CornerC //used as default if none of the above is defined
|
||||
|
||||
const float XBR_SCALE = 3.0;
|
||||
const float lv2_cf = 2.0;
|
||||
|
||||
const float coef = 2.0;
|
||||
const vec3 rgbw = vec3(14.352, 28.176, 5.472);
|
||||
const vec4 eq_threshold = vec4(15.0, 15.0, 15.0, 15.0);
|
||||
|
||||
const vec4 Ao = vec4( 1.0, -1.0, -1.0, 1.0 );
|
||||
const vec4 Bo = vec4( 1.0, 1.0, -1.0,-1.0 );
|
||||
const vec4 Co = vec4( 1.5, 0.5, -0.5, 0.5 );
|
||||
const vec4 Ax = vec4( 1.0, -1.0, -1.0, 1.0 );
|
||||
const vec4 Bx = vec4( 0.5, 2.0, -0.5,-2.0 );
|
||||
const vec4 Cx = vec4( 1.0, 1.0, -0.5, 0.0 );
|
||||
const vec4 Ay = vec4( 1.0, -1.0, -1.0, 1.0 );
|
||||
const vec4 By = vec4( 2.0, 0.5, -2.0,-0.5 );
|
||||
const vec4 Cy = vec4( 2.0, 0.0, -1.0, 0.5 );
|
||||
const vec4 Ci = vec4(0.25, 0.25, 0.25, 0.25);
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
uniform vec2 u_texelDelta;
|
||||
uniform vec2 u_pixelDelta;
|
||||
varying vec2 v_texcoord0;
|
||||
|
||||
// Difference between vector components.
|
||||
vec4 df(vec4 A, vec4 B) {
|
||||
return vec4(abs(A-B));
|
||||
}
|
||||
|
||||
// Compare two vectors and return their components are different.
|
||||
vec4 diff(vec4 A, vec4 B) {
|
||||
return vec4(notEqual(A, B));
|
||||
}
|
||||
|
||||
// Determine if two vector components are equal based on a threshold.
|
||||
vec4 eq(vec4 A, vec4 B) {
|
||||
return (step(df(A, B), eq_threshold));
|
||||
}
|
||||
|
||||
// Determine if two vector components are NOT equal based on a threshold.
|
||||
vec4 neq(vec4 A, vec4 B) {
|
||||
return (vec4(1.0, 1.0, 1.0, 1.0) - eq(A, B));
|
||||
}
|
||||
|
||||
float c_df(vec3 c1, vec3 c2) {
|
||||
vec3 df = abs(c1 - c2);
|
||||
return df.r + df.g + df.b;
|
||||
}
|
||||
|
||||
void main() {
|
||||
|
||||
bool upscale = u_texelDelta.x > (1.6 * u_pixelDelta.x);
|
||||
vec3 res = texture2D(sampler0, v_texcoord0.xy).xyz;
|
||||
|
||||
// Let's skip the whole scaling if output size smaller than 1.6x of input size
|
||||
if (upscale) {
|
||||
|
||||
vec4 edri, edr, edr_l, edr_u, px; // px = pixel, edr = edge detection rule
|
||||
vec4 irlv0, irlv1, irlv2l, irlv2u;
|
||||
vec4 fx, fx_l, fx_u; // inequations of straight lines.
|
||||
|
||||
vec2 pS = 1.0 / u_texelDelta.xy;
|
||||
vec2 fp = fract(v_texcoord0.xy*pS.xy);
|
||||
vec2 TexCoord_0 = v_texcoord0.xy-fp*u_pixelDelta.xy;
|
||||
vec2 dx = vec2(u_texelDelta.x,0.0);
|
||||
vec2 dy = vec2(0.0,u_texelDelta.y);
|
||||
vec2 y2 = dy + dy; vec2 x2 = dx + dx;
|
||||
|
||||
vec4 delta = vec4(1.0/XBR_SCALE, 1.0/XBR_SCALE, 1.0/XBR_SCALE, 1.0/XBR_SCALE);
|
||||
vec4 delta_l = vec4(0.5/XBR_SCALE, 1.0/XBR_SCALE, 0.5/XBR_SCALE, 1.0/XBR_SCALE);
|
||||
vec4 delta_u = delta_l.yxwz;
|
||||
|
||||
vec3 A = texture2D(sampler0, TexCoord_0 -dx -dy ).xyz;
|
||||
vec3 B = texture2D(sampler0, TexCoord_0 -dy ).xyz;
|
||||
vec3 C = texture2D(sampler0, TexCoord_0 +dx -dy ).xyz;
|
||||
vec3 D = texture2D(sampler0, TexCoord_0 -dx ).xyz;
|
||||
vec3 E = texture2D(sampler0, TexCoord_0 ).xyz;
|
||||
vec3 F = texture2D(sampler0, TexCoord_0 +dx ).xyz;
|
||||
vec3 G = texture2D(sampler0, TexCoord_0 -dx +dy ).xyz;
|
||||
vec3 H = texture2D(sampler0, TexCoord_0 +dy ).xyz;
|
||||
vec3 I = texture2D(sampler0, TexCoord_0 +dx +dy ).xyz;
|
||||
vec3 A1 = texture2D(sampler0, TexCoord_0 -dx -y2).xyz;
|
||||
vec3 C1 = texture2D(sampler0, TexCoord_0 +dx -y2).xyz;
|
||||
vec3 A0 = texture2D(sampler0, TexCoord_0 -x2 -dy).xyz;
|
||||
vec3 G0 = texture2D(sampler0, TexCoord_0 -x2 +dy).xyz;
|
||||
vec3 C4 = texture2D(sampler0, TexCoord_0 +x2 -dy).xyz;
|
||||
vec3 I4 = texture2D(sampler0, TexCoord_0 +x2 +dy).xyz;
|
||||
vec3 G5 = texture2D(sampler0, TexCoord_0 -dx +y2).xyz;
|
||||
vec3 I5 = texture2D(sampler0, TexCoord_0 +dx +y2).xyz;
|
||||
vec3 B1 = texture2D(sampler0, TexCoord_0 -y2).xyz;
|
||||
vec3 D0 = texture2D(sampler0, TexCoord_0 -x2 ).xyz;
|
||||
vec3 H5 = texture2D(sampler0, TexCoord_0 +y2).xyz;
|
||||
vec3 F4 = texture2D(sampler0, TexCoord_0 +x2 ).xyz;
|
||||
|
||||
vec4 b = vec4(dot(B ,rgbw), dot(D ,rgbw), dot(H ,rgbw), dot(F ,rgbw));
|
||||
vec4 c = vec4(dot(C ,rgbw), dot(A ,rgbw), dot(G ,rgbw), dot(I ,rgbw));
|
||||
vec4 d = b.yzwx;
|
||||
vec4 e = vec4(dot(E,rgbw));
|
||||
vec4 f = b.wxyz;
|
||||
vec4 g = c.zwxy;
|
||||
vec4 h = b.zwxy;
|
||||
vec4 i = c.wxyz;
|
||||
vec4 i4 = vec4(dot(I4,rgbw), dot(C1,rgbw), dot(A0,rgbw), dot(G5,rgbw));
|
||||
vec4 i5 = vec4(dot(I5,rgbw), dot(C4,rgbw), dot(A1,rgbw), dot(G0,rgbw));
|
||||
vec4 h5 = vec4(dot(H5,rgbw), dot(F4,rgbw), dot(B1,rgbw), dot(D0,rgbw));
|
||||
vec4 f4 = h5.yzwx;
|
||||
|
||||
// These inequations define the line below which interpolation occurs.
|
||||
fx = (Ao*fp.y+Bo*fp.x);
|
||||
fx_l = (Ax*fp.y+Bx*fp.x);
|
||||
fx_u = (Ay*fp.y+By*fp.x);
|
||||
irlv1 = irlv0 = diff(e,f) * diff(e,h);
|
||||
#if(CornerA==0) // A takes priority skipping other corners
|
||||
#define SMOOTH_TIPS
|
||||
// Corner C also default if no other ones used
|
||||
irlv1 = (irlv0 * ( neq(f,b) * neq(f,c) + neq(h,d) * neq(h,g) + eq(e,i) * (neq(f,f4) * neq(f,i4) + neq(h,h5) * neq(h,i5)) + eq(e,g) + eq(e,c)) );
|
||||
int select1 = 0;
|
||||
#if(CornerB==1) // Corner B
|
||||
irlv1 = (irlv0 * ( neq(f,b) * neq(h,d) + eq(e,i) * neq(f,i4) * neq(h,i5) + eq(e,g) + eq(e,c) ) );
|
||||
select1 = 1;
|
||||
#endif
|
||||
#if(CornerD==1) // Corner D
|
||||
if (select1==0) {
|
||||
vec4 c1 = i4.yzwx;
|
||||
vec4 g0 = i5.wxyz;
|
||||
irlv1 = (irlv0 * ( neq(f,b) * neq(h,d) + eq(e,i) * neq(f,i4) * neq(h,i5) + eq(e,g) + eq(e,c) ) * (diff(f,f4) * diff(f,i) + diff(h,h5) * diff(h,i) + diff(h,g) + diff(f,c) + eq(b,c1) * eq(d,g0)));
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
irlv2l = diff(e,g) * diff(d,g);
|
||||
irlv2u = diff(e,c) * diff(b,c);
|
||||
|
||||
vec4 fx45i = clamp((fx + delta -Co - Ci) / (2.0*delta ), 0.0, 1.0);
|
||||
vec4 fx45 = clamp((fx + delta -Co ) / (2.0*delta ), 0.0, 1.0);
|
||||
vec4 fx30 = clamp((fx_l + delta_l -Cx ) / (2.0*delta_l), 0.0, 1.0);
|
||||
vec4 fx60 = clamp((fx_u + delta_u -Cy ) / (2.0*delta_u), 0.0, 1.0);
|
||||
vec4 w1, w2;
|
||||
|
||||
w1.x = dot(abs(E-C),rgbw) + dot(abs(E-G),rgbw) + dot(abs(I-H5),rgbw) + dot(abs(I-F4),rgbw) + 4.0*dot(abs(H-F),rgbw);
|
||||
w1.y = dot(abs(E-A),rgbw) + dot(abs(E-I),rgbw) + dot(abs(C-F4),rgbw) + dot(abs(C-B1),rgbw) + 4.0*dot(abs(F-B),rgbw);
|
||||
w1.z = dot(abs(E-G),rgbw) + dot(abs(E-C),rgbw) + dot(abs(A-B1),rgbw) + dot(abs(A-D0),rgbw) + 4.0*dot(abs(B-D),rgbw);
|
||||
w1.w = dot(abs(E-I),rgbw) + dot(abs(E-A),rgbw) + dot(abs(G-D0),rgbw) + dot(abs(G-H5),rgbw) + 4.0*dot(abs(D-H),rgbw);
|
||||
w2.x = dot(abs(H-D),rgbw) + dot(abs(H-I5),rgbw) + dot(abs(F-I4),rgbw) + dot(abs(F-B),rgbw) + 4.0*dot(abs(E-I),rgbw);
|
||||
w2.y = dot(abs(F-H),rgbw) + dot(abs(F-C4),rgbw) + dot(abs(B-C1),rgbw) + dot(abs(B-D),rgbw) + 4.0*dot(abs(E-C),rgbw);
|
||||
w2.z = dot(abs(B-F),rgbw) + dot(abs(B-A1),rgbw) + dot(abs(D-A0),rgbw) + dot(abs(D-H),rgbw) + 4.0*dot(abs(E-A),rgbw);
|
||||
w2.w = dot(abs(D-B),rgbw) + dot(abs(D-G0),rgbw) + dot(abs(H-G5),rgbw) + dot(abs(H-F),rgbw) + 4.0*dot(abs(E-G),rgbw);
|
||||
|
||||
edri = step(w1, w2) * irlv0;
|
||||
edr = step(w1 + vec4(0.1, 0.1, 0.1, 0.1), w2) * step(vec4(0.5, 0.5, 0.5, 0.5), irlv1);
|
||||
|
||||
w1.x = dot(abs(F-G),rgbw); w1.y = dot(abs(B-I),rgbw); w1.z = dot(abs(D-C),rgbw); w1.w = dot(abs(H-A),rgbw);
|
||||
w2.x = dot(abs(H-C),rgbw); w2.y = dot(abs(F-A),rgbw); w2.z = dot(abs(B-G),rgbw); w2.w = dot(abs(D-I),rgbw);
|
||||
|
||||
edr_l = step( lv2_cf*w1, w2 ) * irlv2l * edr;
|
||||
edr_u = step( lv2_cf*w2, w1 ) * irlv2u * edr;
|
||||
|
||||
fx45 = edr * fx45;
|
||||
fx30 = edr_l * fx30;
|
||||
fx60 = edr_u * fx60;
|
||||
fx45i = edri * fx45i;
|
||||
|
||||
w1.x = dot(abs(E-F),rgbw); w1.y = dot(abs(E-B),rgbw); w1.z = dot(abs(E-D),rgbw); w1.w = dot(abs(E-H),rgbw);
|
||||
w2.x = dot(abs(E-H),rgbw); w2.y = dot(abs(E-F),rgbw); w2.z = dot(abs(E-B),rgbw); w2.w = dot(abs(E-D),rgbw);
|
||||
|
||||
px = step(w1, w2);
|
||||
#ifdef SMOOTH_TIPS
|
||||
vec4 maximos = max(max(fx30, fx60), max(fx45, fx45i));
|
||||
#else
|
||||
vec4 maximos = max(max(fx30, fx60), fx45);
|
||||
#endif
|
||||
vec3 res1 = E;
|
||||
res1 = mix(res1, mix(H, F, px.x), maximos.x);
|
||||
res1 = mix(res1, mix(B, D, px.z), maximos.z);
|
||||
|
||||
vec3 res2 = E;
|
||||
res2 = mix(res2, mix(F, B, px.y), maximos.y);
|
||||
res2 = mix(res2, mix(D, H, px.w), maximos.w);
|
||||
|
||||
res = mix(res1, res2, step(c_df(E, res1), c_df(E, res2)));
|
||||
}
|
||||
gl_FragColor.xyz = res;
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
/*
|
||||
Hyllian's xBR-lv2 Shader Accuracy (tweak by guest.r)
|
||||
|
||||
Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
Incorporates some of the ideas from SABR shader. Thanks to Joshua Street.
|
||||
*/
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
#define CornerA 0 //ON:1/OFF:0 / A, B, C, D are just different variants of corner rounding
|
||||
#define CornerB 0 //ON:1/OFF:0 / activate only one
|
||||
#define CornerD 0 //ON:1/OFF:0
|
||||
// CornerC //used as default if none of the above is defined
|
||||
|
||||
const float XBR_SCALE = 3.0;
|
||||
const float lv2_cf = 2.0;
|
||||
|
||||
const float coef = 2.0;
|
||||
const vec3 rgbw = vec3(14.352, 28.176, 5.472);
|
||||
const vec4 eq_threshold = vec4(15.0, 15.0, 15.0, 15.0);
|
||||
|
||||
const vec4 Ao = vec4( 1.0, -1.0, -1.0, 1.0 );
|
||||
const vec4 Bo = vec4( 1.0, 1.0, -1.0,-1.0 );
|
||||
const vec4 Co = vec4( 1.5, 0.5, -0.5, 0.5 );
|
||||
const vec4 Ax = vec4( 1.0, -1.0, -1.0, 1.0 );
|
||||
const vec4 Bx = vec4( 0.5, 2.0, -0.5,-2.0 );
|
||||
const vec4 Cx = vec4( 1.0, 1.0, -0.5, 0.0 );
|
||||
const vec4 Ay = vec4( 1.0, -1.0, -1.0, 1.0 );
|
||||
const vec4 By = vec4( 2.0, 0.5, -2.0,-0.5 );
|
||||
const vec4 Cy = vec4( 2.0, 0.0, -1.0, 0.5 );
|
||||
const vec4 Ci = vec4(0.25, 0.25, 0.25, 0.25);
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
uniform vec2 u_texelDelta;
|
||||
uniform vec2 u_pixelDelta;
|
||||
varying vec2 v_texcoord0;
|
||||
|
||||
// Difference between vector components.
|
||||
vec4 df(vec4 A, vec4 B) {
|
||||
return vec4(abs(A-B));
|
||||
}
|
||||
|
||||
// Compare two vectors and return their components are different.
|
||||
vec4 diff(vec4 A, vec4 B) {
|
||||
return vec4(notEqual(A, B));
|
||||
}
|
||||
|
||||
// Determine if two vector components are equal based on a threshold.
|
||||
vec4 eq(vec4 A, vec4 B) {
|
||||
return (step(df(A, B), eq_threshold));
|
||||
}
|
||||
|
||||
// Determine if two vector components are NOT equal based on a threshold.
|
||||
vec4 neq(vec4 A, vec4 B) {
|
||||
return (vec4(1.0, 1.0, 1.0, 1.0) - eq(A, B));
|
||||
}
|
||||
|
||||
float c_df(vec3 c1, vec3 c2) {
|
||||
vec3 df = abs(c1 - c2);
|
||||
return df.r + df.g + df.b;
|
||||
}
|
||||
|
||||
void main() {
|
||||
|
||||
bool upscale = u_texelDelta.x > (1.6 * u_pixelDelta.x);
|
||||
vec3 res = texture2D(sampler0, v_texcoord0.xy).xyz;
|
||||
|
||||
// Let's skip the whole scaling if output size smaller than 1.6x of input size
|
||||
if (upscale) {
|
||||
|
||||
vec4 edri, edr, edr_l, edr_u, px; // px = pixel, edr = edge detection rule
|
||||
vec4 irlv0, irlv1, irlv2l, irlv2u;
|
||||
vec4 fx, fx_l, fx_u; // inequations of straight lines.
|
||||
|
||||
vec2 pS = 1.0 / u_texelDelta.xy;
|
||||
vec2 fp = fract(v_texcoord0.xy*pS.xy);
|
||||
vec2 TexCoord_0 = v_texcoord0.xy-fp*u_pixelDelta.xy;
|
||||
vec2 dx = vec2(u_texelDelta.x,0.0);
|
||||
vec2 dy = vec2(0.0,u_texelDelta.y);
|
||||
vec2 y2 = dy + dy; vec2 x2 = dx + dx;
|
||||
|
||||
vec4 delta = vec4(1.0/XBR_SCALE, 1.0/XBR_SCALE, 1.0/XBR_SCALE, 1.0/XBR_SCALE);
|
||||
vec4 delta_l = vec4(0.5/XBR_SCALE, 1.0/XBR_SCALE, 0.5/XBR_SCALE, 1.0/XBR_SCALE);
|
||||
vec4 delta_u = delta_l.yxwz;
|
||||
|
||||
vec3 A = texture2D(sampler0, TexCoord_0 -dx -dy ).xyz;
|
||||
vec3 B = texture2D(sampler0, TexCoord_0 -dy ).xyz;
|
||||
vec3 C = texture2D(sampler0, TexCoord_0 +dx -dy ).xyz;
|
||||
vec3 D = texture2D(sampler0, TexCoord_0 -dx ).xyz;
|
||||
vec3 E = texture2D(sampler0, TexCoord_0 ).xyz;
|
||||
vec3 F = texture2D(sampler0, TexCoord_0 +dx ).xyz;
|
||||
vec3 G = texture2D(sampler0, TexCoord_0 -dx +dy ).xyz;
|
||||
vec3 H = texture2D(sampler0, TexCoord_0 +dy ).xyz;
|
||||
vec3 I = texture2D(sampler0, TexCoord_0 +dx +dy ).xyz;
|
||||
vec3 A1 = texture2D(sampler0, TexCoord_0 -dx -y2).xyz;
|
||||
vec3 C1 = texture2D(sampler0, TexCoord_0 +dx -y2).xyz;
|
||||
vec3 A0 = texture2D(sampler0, TexCoord_0 -x2 -dy).xyz;
|
||||
vec3 G0 = texture2D(sampler0, TexCoord_0 -x2 +dy).xyz;
|
||||
vec3 C4 = texture2D(sampler0, TexCoord_0 +x2 -dy).xyz;
|
||||
vec3 I4 = texture2D(sampler0, TexCoord_0 +x2 +dy).xyz;
|
||||
vec3 G5 = texture2D(sampler0, TexCoord_0 -dx +y2).xyz;
|
||||
vec3 I5 = texture2D(sampler0, TexCoord_0 +dx +y2).xyz;
|
||||
vec3 B1 = texture2D(sampler0, TexCoord_0 -y2).xyz;
|
||||
vec3 D0 = texture2D(sampler0, TexCoord_0 -x2 ).xyz;
|
||||
vec3 H5 = texture2D(sampler0, TexCoord_0 +y2).xyz;
|
||||
vec3 F4 = texture2D(sampler0, TexCoord_0 +x2 ).xyz;
|
||||
|
||||
vec4 b = vec4(dot(B ,rgbw), dot(D ,rgbw), dot(H ,rgbw), dot(F ,rgbw));
|
||||
vec4 c = vec4(dot(C ,rgbw), dot(A ,rgbw), dot(G ,rgbw), dot(I ,rgbw));
|
||||
vec4 d = b.yzwx;
|
||||
vec4 e = vec4(dot(E,rgbw));
|
||||
vec4 f = b.wxyz;
|
||||
vec4 g = c.zwxy;
|
||||
vec4 h = b.zwxy;
|
||||
vec4 i = c.wxyz;
|
||||
vec4 i4 = vec4(dot(I4,rgbw), dot(C1,rgbw), dot(A0,rgbw), dot(G5,rgbw));
|
||||
vec4 i5 = vec4(dot(I5,rgbw), dot(C4,rgbw), dot(A1,rgbw), dot(G0,rgbw));
|
||||
vec4 h5 = vec4(dot(H5,rgbw), dot(F4,rgbw), dot(B1,rgbw), dot(D0,rgbw));
|
||||
vec4 f4 = h5.yzwx;
|
||||
|
||||
// These inequations define the line below which interpolation occurs.
|
||||
fx = (Ao*fp.y+Bo*fp.x);
|
||||
fx_l = (Ax*fp.y+Bx*fp.x);
|
||||
fx_u = (Ay*fp.y+By*fp.x);
|
||||
irlv1 = irlv0 = diff(e,f) * diff(e,h);
|
||||
#if(CornerA==0) // A takes priority skipping other corners
|
||||
#define SMOOTH_TIPS
|
||||
// Corner C also default if no other ones used
|
||||
irlv1 = (irlv0 * ( neq(f,b) * neq(f,c) + neq(h,d) * neq(h,g) + eq(e,i) * (neq(f,f4) * neq(f,i4) + neq(h,h5) * neq(h,i5)) + eq(e,g) + eq(e,c)) );
|
||||
int select1 = 0;
|
||||
#if(CornerB==1) // Corner B
|
||||
irlv1 = (irlv0 * ( neq(f,b) * neq(h,d) + eq(e,i) * neq(f,i4) * neq(h,i5) + eq(e,g) + eq(e,c) ) );
|
||||
select1 = 1;
|
||||
#endif
|
||||
#if(CornerD==1) // Corner D
|
||||
if (select1==0) {
|
||||
vec4 c1 = i4.yzwx;
|
||||
vec4 g0 = i5.wxyz;
|
||||
irlv1 = (irlv0 * ( neq(f,b) * neq(h,d) + eq(e,i) * neq(f,i4) * neq(h,i5) + eq(e,g) + eq(e,c) ) * (diff(f,f4) * diff(f,i) + diff(h,h5) * diff(h,i) + diff(h,g) + diff(f,c) + eq(b,c1) * eq(d,g0)));
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
irlv2l = diff(e,g) * diff(d,g);
|
||||
irlv2u = diff(e,c) * diff(b,c);
|
||||
|
||||
vec4 fx45i = clamp((fx + delta -Co - Ci) / (2.0*delta ), 0.0, 1.0);
|
||||
vec4 fx45 = clamp((fx + delta -Co ) / (2.0*delta ), 0.0, 1.0);
|
||||
vec4 fx30 = clamp((fx_l + delta_l -Cx ) / (2.0*delta_l), 0.0, 1.0);
|
||||
vec4 fx60 = clamp((fx_u + delta_u -Cy ) / (2.0*delta_u), 0.0, 1.0);
|
||||
vec4 w1, w2;
|
||||
|
||||
w1.x = dot(abs(E-C),rgbw) + dot(abs(E-G),rgbw) + dot(abs(I-H5),rgbw) + dot(abs(I-F4),rgbw) + 4.0*dot(abs(H-F),rgbw);
|
||||
w1.y = dot(abs(E-A),rgbw) + dot(abs(E-I),rgbw) + dot(abs(C-F4),rgbw) + dot(abs(C-B1),rgbw) + 4.0*dot(abs(F-B),rgbw);
|
||||
w1.z = dot(abs(E-G),rgbw) + dot(abs(E-C),rgbw) + dot(abs(A-B1),rgbw) + dot(abs(A-D0),rgbw) + 4.0*dot(abs(B-D),rgbw);
|
||||
w1.w = dot(abs(E-I),rgbw) + dot(abs(E-A),rgbw) + dot(abs(G-D0),rgbw) + dot(abs(G-H5),rgbw) + 4.0*dot(abs(D-H),rgbw);
|
||||
w2.x = dot(abs(H-D),rgbw) + dot(abs(H-I5),rgbw) + dot(abs(F-I4),rgbw) + dot(abs(F-B),rgbw) + 4.0*dot(abs(E-I),rgbw);
|
||||
w2.y = dot(abs(F-H),rgbw) + dot(abs(F-C4),rgbw) + dot(abs(B-C1),rgbw) + dot(abs(B-D),rgbw) + 4.0*dot(abs(E-C),rgbw);
|
||||
w2.z = dot(abs(B-F),rgbw) + dot(abs(B-A1),rgbw) + dot(abs(D-A0),rgbw) + dot(abs(D-H),rgbw) + 4.0*dot(abs(E-A),rgbw);
|
||||
w2.w = dot(abs(D-B),rgbw) + dot(abs(D-G0),rgbw) + dot(abs(H-G5),rgbw) + dot(abs(H-F),rgbw) + 4.0*dot(abs(E-G),rgbw);
|
||||
|
||||
edri = step(w1, w2) * irlv0;
|
||||
edr = step(w1 + vec4(0.1, 0.1, 0.1, 0.1), w2) * step(vec4(0.5, 0.5, 0.5, 0.5), irlv1);
|
||||
|
||||
w1.x = dot(abs(F-G),rgbw); w1.y = dot(abs(B-I),rgbw); w1.z = dot(abs(D-C),rgbw); w1.w = dot(abs(H-A),rgbw);
|
||||
w2.x = dot(abs(H-C),rgbw); w2.y = dot(abs(F-A),rgbw); w2.z = dot(abs(B-G),rgbw); w2.w = dot(abs(D-I),rgbw);
|
||||
|
||||
edr_l = step( lv2_cf*w1, w2 ) * irlv2l * edr;
|
||||
edr_u = step( lv2_cf*w2, w1 ) * irlv2u * edr;
|
||||
|
||||
fx45 = edr * fx45;
|
||||
fx30 = edr_l * fx30;
|
||||
fx60 = edr_u * fx60;
|
||||
fx45i = edri * fx45i;
|
||||
|
||||
w1.x = dot(abs(E-F),rgbw); w1.y = dot(abs(E-B),rgbw); w1.z = dot(abs(E-D),rgbw); w1.w = dot(abs(E-H),rgbw);
|
||||
w2.x = dot(abs(E-H),rgbw); w2.y = dot(abs(E-F),rgbw); w2.z = dot(abs(E-B),rgbw); w2.w = dot(abs(E-D),rgbw);
|
||||
|
||||
px = step(w1, w2);
|
||||
#ifdef SMOOTH_TIPS
|
||||
vec4 maximos = max(max(fx30, fx60), max(fx45, fx45i));
|
||||
#else
|
||||
vec4 maximos = max(max(fx30, fx60), fx45);
|
||||
#endif
|
||||
vec3 res1 = E;
|
||||
res1 = mix(res1, mix(H, F, px.x), maximos.x);
|
||||
res1 = mix(res1, mix(B, D, px.z), maximos.z);
|
||||
|
||||
vec3 res2 = E;
|
||||
res2 = mix(res2, mix(F, B, px.y), maximos.y);
|
||||
res2 = mix(res2, mix(D, H, px.w), maximos.w);
|
||||
|
||||
res = mix(res1, res2, step(c_df(E, res1), c_df(E, res2)));
|
||||
}
|
||||
gl_FragColor.xyz = res;
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
|
||||
@@ -1,133 +1,133 @@
|
||||
/*
|
||||
Hyllian's 5xBR v3.5a Shader
|
||||
|
||||
Copyright (C) 2011 Hyllian/Jararaca - sergiogdb@gmail.com
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
uniform vec2 u_texelDelta;
|
||||
uniform vec2 u_pixelDelta;
|
||||
varying vec2 v_texcoord0;
|
||||
|
||||
const float coef = 2.0;
|
||||
const vec3 rgbw = vec3(16.163, 23.351, 8.4772);
|
||||
|
||||
const vec4 Ao = vec4( 1.0, -1.0, -1.0, 1.0 );
|
||||
const vec4 Bo = vec4( 1.0, 1.0, -1.0,-1.0 );
|
||||
const vec4 Co = vec4( 1.5, 0.5, -0.5, 0.5 );
|
||||
const vec4 Ax = vec4( 1.0, -1.0, -1.0, 1.0 );
|
||||
const vec4 Bx = vec4( 0.5, 2.0, -0.5,-2.0 );
|
||||
const vec4 Cx = vec4( 1.0, 1.0, -0.5, 0.0 );
|
||||
const vec4 Ay = vec4( 1.0, -1.0, -1.0, 1.0 );
|
||||
const vec4 By = vec4( 2.0, 0.5, -2.0,-0.5 );
|
||||
const vec4 Cy = vec4( 2.0, 0.0, -1.0, 0.5 );
|
||||
|
||||
|
||||
vec4 df(vec4 A, vec4 B) {
|
||||
return abs(A-B);
|
||||
}
|
||||
|
||||
vec4 weighted_distance(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, vec4 h) {
|
||||
return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + 4.0*df(g,h));
|
||||
}
|
||||
|
||||
|
||||
void main(){
|
||||
|
||||
bool upscale = u_texelDelta.x > (1.6 * u_pixelDelta.x);
|
||||
vec3 res = texture2D(sampler0, v_texcoord0.xy).xyz;
|
||||
|
||||
// Let's skip the whole scaling if output size smaller than 1.6x of input size
|
||||
if (upscale) {
|
||||
|
||||
bvec4 edr, edr_left, edr_up, px; // px = pixel, edr = edge detection rule
|
||||
bvec4 interp_restriction_lv1, interp_restriction_lv2_left, interp_restriction_lv2_up;
|
||||
bvec4 nc; // new_color
|
||||
bvec4 fx, fx_left, fx_up; // inequations of straight lines.
|
||||
|
||||
vec2 pS = 1.0 / u_texelDelta.xy;
|
||||
vec2 fp = fract(v_texcoord0.xy*pS.xy);
|
||||
vec2 TexCoord_0 = v_texcoord0.xy-fp*u_pixelDelta.xy;
|
||||
vec2 dx = vec2(u_texelDelta.x,0.0);
|
||||
vec2 dy = vec2(0.0,u_texelDelta.y);
|
||||
vec2 y2 = dy + dy; vec2 x2 = dx + dx;
|
||||
|
||||
vec3 A = texture2D(sampler0, TexCoord_0 -dx -dy ).xyz;
|
||||
vec3 B = texture2D(sampler0, TexCoord_0 -dy ).xyz;
|
||||
vec3 C = texture2D(sampler0, TexCoord_0 +dx -dy ).xyz;
|
||||
vec3 D = texture2D(sampler0, TexCoord_0 -dx ).xyz;
|
||||
vec3 E = texture2D(sampler0, TexCoord_0 ).xyz;
|
||||
vec3 F = texture2D(sampler0, TexCoord_0 +dx ).xyz;
|
||||
vec3 G = texture2D(sampler0, TexCoord_0 -dx +dy ).xyz;
|
||||
vec3 H = texture2D(sampler0, TexCoord_0 +dy ).xyz;
|
||||
vec3 I = texture2D(sampler0, TexCoord_0 +dx +dy ).xyz;
|
||||
vec3 A1 = texture2D(sampler0, TexCoord_0 -dx -y2).xyz;
|
||||
vec3 C1 = texture2D(sampler0, TexCoord_0 +dx -y2).xyz;
|
||||
vec3 A0 = texture2D(sampler0, TexCoord_0 -x2 -dy).xyz;
|
||||
vec3 G0 = texture2D(sampler0, TexCoord_0 -x2 +dy).xyz;
|
||||
vec3 C4 = texture2D(sampler0, TexCoord_0 +x2 -dy).xyz;
|
||||
vec3 I4 = texture2D(sampler0, TexCoord_0 +x2 +dy).xyz;
|
||||
vec3 G5 = texture2D(sampler0, TexCoord_0 -dx +y2).xyz;
|
||||
vec3 I5 = texture2D(sampler0, TexCoord_0 +dx +y2).xyz;
|
||||
vec3 B1 = texture2D(sampler0, TexCoord_0 -y2).xyz;
|
||||
vec3 D0 = texture2D(sampler0, TexCoord_0 -x2 ).xyz;
|
||||
vec3 H5 = texture2D(sampler0, TexCoord_0 +y2).xyz;
|
||||
vec3 F4 = texture2D(sampler0, TexCoord_0 +x2 ).xyz;
|
||||
|
||||
vec4 b = vec4(dot(B ,rgbw), dot(D ,rgbw), dot(H ,rgbw), dot(F ,rgbw));
|
||||
vec4 c = vec4(dot(C ,rgbw), dot(A ,rgbw), dot(G ,rgbw), dot(I ,rgbw));
|
||||
vec4 d = vec4(b.y, b.z, b.w, b.x);
|
||||
vec4 e = vec4(dot(E,rgbw));
|
||||
vec4 f = vec4(b.w, b.x, b.y, b.z);
|
||||
vec4 g = vec4(c.z, c.w, c.x, c.y);
|
||||
vec4 h = vec4(b.z, b.w, b.x, b.y);
|
||||
vec4 i = vec4(c.w, c.x, c.y, c.z);
|
||||
vec4 i4 = vec4(dot(I4,rgbw), dot(C1,rgbw), dot(A0,rgbw), dot(G5,rgbw));
|
||||
vec4 i5 = vec4(dot(I5,rgbw), dot(C4,rgbw), dot(A1,rgbw), dot(G0,rgbw));
|
||||
vec4 h5 = vec4(dot(H5,rgbw), dot(F4,rgbw), dot(B1,rgbw), dot(D0,rgbw));
|
||||
vec4 f4 = vec4(h5.y, h5.z, h5.w, h5.x);
|
||||
|
||||
// These inequations define the line below which interpolation occurs.
|
||||
fx = greaterThan(Ao*fp.y+Bo*fp.x,Co);
|
||||
fx_left = greaterThan(Ax*fp.y+Bx*fp.x,Cx);
|
||||
fx_up = greaterThan(Ay*fp.y+By*fp.x,Cy);
|
||||
|
||||
interp_restriction_lv1 = bvec4(vec4(notEqual(e,f))*vec4(notEqual(e,h)));
|
||||
interp_restriction_lv2_left = bvec4(vec4(notEqual(e,g))*vec4(notEqual(d,g)));
|
||||
interp_restriction_lv2_up = bvec4(vec4(notEqual(e,c))*vec4(notEqual(b,c)));
|
||||
|
||||
edr = bvec4(vec4(lessThan(weighted_distance( e, c, g, i, h5, f4, h, f), weighted_distance( h, d, i5, f, i4, b, e, i)))*vec4(interp_restriction_lv1));
|
||||
edr_left = bvec4(vec4(lessThanEqual(coef*df(f,g),df(h,c)))*vec4(interp_restriction_lv2_left));
|
||||
edr_up = bvec4(vec4(greaterThanEqual(df(f,g),coef*df(h,c)))*vec4(interp_restriction_lv2_up));
|
||||
|
||||
nc.x = ( edr.x && (fx.x || edr_left.x && fx_left.x || edr_up.x && fx_up.x) );
|
||||
nc.y = ( edr.y && (fx.y || edr_left.y && fx_left.y || edr_up.y && fx_up.y) );
|
||||
nc.z = ( edr.z && (fx.z || edr_left.z && fx_left.z || edr_up.z && fx_up.z) );
|
||||
nc.w = ( edr.w && (fx.w || edr_left.w && fx_left.w || edr_up.w && fx_up.w) );
|
||||
|
||||
px = lessThanEqual(df(e,f),df(e,h));
|
||||
|
||||
res = nc.x ? px.x ? F : H : nc.y ? px.y ? B : F : nc.z ? px.z ? D : B : nc.w ? px.w ? H : D : E;
|
||||
}
|
||||
gl_FragColor.rgb = res;
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
/*
|
||||
Hyllian's 5xBR v3.5a Shader
|
||||
|
||||
Copyright (C) 2011 Hyllian/Jararaca - sergiogdb@gmail.com
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
uniform vec2 u_texelDelta;
|
||||
uniform vec2 u_pixelDelta;
|
||||
varying vec2 v_texcoord0;
|
||||
|
||||
const float coef = 2.0;
|
||||
const vec3 rgbw = vec3(16.163, 23.351, 8.4772);
|
||||
|
||||
const vec4 Ao = vec4( 1.0, -1.0, -1.0, 1.0 );
|
||||
const vec4 Bo = vec4( 1.0, 1.0, -1.0,-1.0 );
|
||||
const vec4 Co = vec4( 1.5, 0.5, -0.5, 0.5 );
|
||||
const vec4 Ax = vec4( 1.0, -1.0, -1.0, 1.0 );
|
||||
const vec4 Bx = vec4( 0.5, 2.0, -0.5,-2.0 );
|
||||
const vec4 Cx = vec4( 1.0, 1.0, -0.5, 0.0 );
|
||||
const vec4 Ay = vec4( 1.0, -1.0, -1.0, 1.0 );
|
||||
const vec4 By = vec4( 2.0, 0.5, -2.0,-0.5 );
|
||||
const vec4 Cy = vec4( 2.0, 0.0, -1.0, 0.5 );
|
||||
|
||||
|
||||
vec4 df(vec4 A, vec4 B) {
|
||||
return abs(A-B);
|
||||
}
|
||||
|
||||
vec4 weighted_distance(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, vec4 h) {
|
||||
return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + 4.0*df(g,h));
|
||||
}
|
||||
|
||||
|
||||
void main(){
|
||||
|
||||
bool upscale = u_texelDelta.x > (1.6 * u_pixelDelta.x);
|
||||
vec3 res = texture2D(sampler0, v_texcoord0.xy).xyz;
|
||||
|
||||
// Let's skip the whole scaling if output size smaller than 1.6x of input size
|
||||
if (upscale) {
|
||||
|
||||
bvec4 edr, edr_left, edr_up, px; // px = pixel, edr = edge detection rule
|
||||
bvec4 interp_restriction_lv1, interp_restriction_lv2_left, interp_restriction_lv2_up;
|
||||
bvec4 nc; // new_color
|
||||
bvec4 fx, fx_left, fx_up; // inequations of straight lines.
|
||||
|
||||
vec2 pS = 1.0 / u_texelDelta.xy;
|
||||
vec2 fp = fract(v_texcoord0.xy*pS.xy);
|
||||
vec2 TexCoord_0 = v_texcoord0.xy-fp*u_pixelDelta.xy;
|
||||
vec2 dx = vec2(u_texelDelta.x,0.0);
|
||||
vec2 dy = vec2(0.0,u_texelDelta.y);
|
||||
vec2 y2 = dy + dy; vec2 x2 = dx + dx;
|
||||
|
||||
vec3 A = texture2D(sampler0, TexCoord_0 -dx -dy ).xyz;
|
||||
vec3 B = texture2D(sampler0, TexCoord_0 -dy ).xyz;
|
||||
vec3 C = texture2D(sampler0, TexCoord_0 +dx -dy ).xyz;
|
||||
vec3 D = texture2D(sampler0, TexCoord_0 -dx ).xyz;
|
||||
vec3 E = texture2D(sampler0, TexCoord_0 ).xyz;
|
||||
vec3 F = texture2D(sampler0, TexCoord_0 +dx ).xyz;
|
||||
vec3 G = texture2D(sampler0, TexCoord_0 -dx +dy ).xyz;
|
||||
vec3 H = texture2D(sampler0, TexCoord_0 +dy ).xyz;
|
||||
vec3 I = texture2D(sampler0, TexCoord_0 +dx +dy ).xyz;
|
||||
vec3 A1 = texture2D(sampler0, TexCoord_0 -dx -y2).xyz;
|
||||
vec3 C1 = texture2D(sampler0, TexCoord_0 +dx -y2).xyz;
|
||||
vec3 A0 = texture2D(sampler0, TexCoord_0 -x2 -dy).xyz;
|
||||
vec3 G0 = texture2D(sampler0, TexCoord_0 -x2 +dy).xyz;
|
||||
vec3 C4 = texture2D(sampler0, TexCoord_0 +x2 -dy).xyz;
|
||||
vec3 I4 = texture2D(sampler0, TexCoord_0 +x2 +dy).xyz;
|
||||
vec3 G5 = texture2D(sampler0, TexCoord_0 -dx +y2).xyz;
|
||||
vec3 I5 = texture2D(sampler0, TexCoord_0 +dx +y2).xyz;
|
||||
vec3 B1 = texture2D(sampler0, TexCoord_0 -y2).xyz;
|
||||
vec3 D0 = texture2D(sampler0, TexCoord_0 -x2 ).xyz;
|
||||
vec3 H5 = texture2D(sampler0, TexCoord_0 +y2).xyz;
|
||||
vec3 F4 = texture2D(sampler0, TexCoord_0 +x2 ).xyz;
|
||||
|
||||
vec4 b = vec4(dot(B ,rgbw), dot(D ,rgbw), dot(H ,rgbw), dot(F ,rgbw));
|
||||
vec4 c = vec4(dot(C ,rgbw), dot(A ,rgbw), dot(G ,rgbw), dot(I ,rgbw));
|
||||
vec4 d = vec4(b.y, b.z, b.w, b.x);
|
||||
vec4 e = vec4(dot(E,rgbw));
|
||||
vec4 f = vec4(b.w, b.x, b.y, b.z);
|
||||
vec4 g = vec4(c.z, c.w, c.x, c.y);
|
||||
vec4 h = vec4(b.z, b.w, b.x, b.y);
|
||||
vec4 i = vec4(c.w, c.x, c.y, c.z);
|
||||
vec4 i4 = vec4(dot(I4,rgbw), dot(C1,rgbw), dot(A0,rgbw), dot(G5,rgbw));
|
||||
vec4 i5 = vec4(dot(I5,rgbw), dot(C4,rgbw), dot(A1,rgbw), dot(G0,rgbw));
|
||||
vec4 h5 = vec4(dot(H5,rgbw), dot(F4,rgbw), dot(B1,rgbw), dot(D0,rgbw));
|
||||
vec4 f4 = vec4(h5.y, h5.z, h5.w, h5.x);
|
||||
|
||||
// These inequations define the line below which interpolation occurs.
|
||||
fx = greaterThan(Ao*fp.y+Bo*fp.x,Co);
|
||||
fx_left = greaterThan(Ax*fp.y+Bx*fp.x,Cx);
|
||||
fx_up = greaterThan(Ay*fp.y+By*fp.x,Cy);
|
||||
|
||||
interp_restriction_lv1 = bvec4(vec4(notEqual(e,f))*vec4(notEqual(e,h)));
|
||||
interp_restriction_lv2_left = bvec4(vec4(notEqual(e,g))*vec4(notEqual(d,g)));
|
||||
interp_restriction_lv2_up = bvec4(vec4(notEqual(e,c))*vec4(notEqual(b,c)));
|
||||
|
||||
edr = bvec4(vec4(lessThan(weighted_distance( e, c, g, i, h5, f4, h, f), weighted_distance( h, d, i5, f, i4, b, e, i)))*vec4(interp_restriction_lv1));
|
||||
edr_left = bvec4(vec4(lessThanEqual(coef*df(f,g),df(h,c)))*vec4(interp_restriction_lv2_left));
|
||||
edr_up = bvec4(vec4(greaterThanEqual(df(f,g),coef*df(h,c)))*vec4(interp_restriction_lv2_up));
|
||||
|
||||
nc.x = ( edr.x && (fx.x || edr_left.x && fx_left.x || edr_up.x && fx_up.x) );
|
||||
nc.y = ( edr.y && (fx.y || edr_left.y && fx_left.y || edr_up.y && fx_up.y) );
|
||||
nc.z = ( edr.z && (fx.z || edr_left.z && fx_left.z || edr_up.z && fx_up.z) );
|
||||
nc.w = ( edr.w && (fx.w || edr_left.w && fx_left.w || edr_up.w && fx_up.w) );
|
||||
|
||||
px = lessThanEqual(df(e,f),df(e,h));
|
||||
|
||||
res = nc.x ? px.x ? F : H : nc.y ? px.y ? B : F : nc.z ? px.z ? D : B : nc.w ? px.w ? H : D : E;
|
||||
}
|
||||
gl_FragColor.rgb = res;
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
|
||||
@@ -1,34 +1,34 @@
|
||||
/*
|
||||
Hyllian's 5xBR v3.5a Shader
|
||||
|
||||
Copyright (C) 2011 Hyllian/Jararaca - sergiogdb@gmail.com
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
attribute vec4 a_position;
|
||||
attribute vec2 a_texcoord0;
|
||||
varying vec2 v_texcoord0;
|
||||
|
||||
void main() {
|
||||
v_texcoord0 = a_texcoord0;
|
||||
gl_Position = a_position;
|
||||
/*
|
||||
Hyllian's 5xBR v3.5a Shader
|
||||
|
||||
Copyright (C) 2011 Hyllian/Jararaca - sergiogdb@gmail.com
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
attribute vec4 a_position;
|
||||
attribute vec2 a_texcoord0;
|
||||
varying vec2 v_texcoord0;
|
||||
|
||||
void main() {
|
||||
v_texcoord0 = a_texcoord0;
|
||||
gl_Position = a_position;
|
||||
}
|
||||
@@ -1,73 +1,73 @@
|
||||
// PPSSPP: Simple Gauss filter
|
||||
// Made by Bigpet
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
|
||||
// The inverse of the texture dimensions along X and Y
|
||||
uniform vec2 u_texelDelta;
|
||||
uniform vec2 u_pixelDelta;
|
||||
varying vec2 v_texcoord0;
|
||||
|
||||
void main() {
|
||||
// The parameters are hardcoded for now, but could be
|
||||
// made into uniforms to control fromt he program.
|
||||
float GAUSS_SPAN_MAX = 1.5;
|
||||
|
||||
//just a variable to describe the maximu
|
||||
float GAUSS_KERNEL_SIZE = 5.0;
|
||||
//indices
|
||||
// XX XX 00 XX XX
|
||||
// XX 01 02 03 XX
|
||||
// 04 05 06 07 08
|
||||
// XX 09 10 11 XX
|
||||
// XX XX 12 XX XX
|
||||
|
||||
//filter strength, rather smooth
|
||||
// XX XX 01 XX XX
|
||||
// XX 03 08 03 XX
|
||||
// 01 08 10 08 01
|
||||
// XX 03 08 03 XX
|
||||
// XX XX 01 XX XX
|
||||
|
||||
vec2 offset = u_pixelDelta*GAUSS_SPAN_MAX/GAUSS_KERNEL_SIZE;
|
||||
|
||||
vec3 rgbSimple0 = 1.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 0.0,-2.0)).xyz;
|
||||
vec3 rgbSimple1 = 3.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2(-1.0,-1.0)).xyz;
|
||||
vec3 rgbSimple2 = 8.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 0.0,-1.0)).xyz;
|
||||
vec3 rgbSimple3 = 3.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 1.0,-1.0)).xyz;
|
||||
vec3 rgbSimple4 = 1.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2(-2.0, 0.0)).xyz;
|
||||
vec3 rgbSimple5 = 8.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2(-1.0, 0.0)).xyz;
|
||||
vec3 rgbSimple6 = 10.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 0.0, 0.0)).xyz;
|
||||
vec3 rgbSimple7 = 8.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 1.0, 0.0)).xyz;
|
||||
vec3 rgbSimple8 = 1.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 2.0, 0.0)).xyz;
|
||||
vec3 rgbSimple9 = 3.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2(-1.0, 1.0)).xyz;
|
||||
vec3 rgbSimple10= 8.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 0.0, 1.0)).xyz;
|
||||
vec3 rgbSimple11= 3.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 1.0, 1.0)).xyz;
|
||||
vec3 rgbSimple12= 1.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 0.0, 2.0)).xyz;
|
||||
//vec3 rgbSimple10= vec3(1.0,0.0,0.0);
|
||||
//vec3 rgbSimple11= vec3(1.0,0.0,0.0);
|
||||
//vec3 rgbSimple12= vec3(1.0,0.0,0.0);
|
||||
|
||||
vec3 rgb = rgbSimple0 +
|
||||
rgbSimple1 +
|
||||
rgbSimple2 +
|
||||
rgbSimple3 +
|
||||
rgbSimple4 +
|
||||
rgbSimple5 +
|
||||
rgbSimple6 +
|
||||
rgbSimple7 +
|
||||
rgbSimple8 +
|
||||
rgbSimple9 +
|
||||
rgbSimple10 +
|
||||
rgbSimple11 +
|
||||
rgbSimple12;
|
||||
rgb = rgb / 58.0;
|
||||
gl_FragColor.xyz=rgb;
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
|
||||
// PPSSPP: Simple Gauss filter
|
||||
// Made by Bigpet
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
|
||||
// The inverse of the texture dimensions along X and Y
|
||||
uniform vec2 u_texelDelta;
|
||||
uniform vec2 u_pixelDelta;
|
||||
varying vec2 v_texcoord0;
|
||||
|
||||
void main() {
|
||||
// The parameters are hardcoded for now, but could be
|
||||
// made into uniforms to control fromt he program.
|
||||
float GAUSS_SPAN_MAX = 1.5;
|
||||
|
||||
//just a variable to describe the maximu
|
||||
float GAUSS_KERNEL_SIZE = 5.0;
|
||||
//indices
|
||||
// XX XX 00 XX XX
|
||||
// XX 01 02 03 XX
|
||||
// 04 05 06 07 08
|
||||
// XX 09 10 11 XX
|
||||
// XX XX 12 XX XX
|
||||
|
||||
//filter strength, rather smooth
|
||||
// XX XX 01 XX XX
|
||||
// XX 03 08 03 XX
|
||||
// 01 08 10 08 01
|
||||
// XX 03 08 03 XX
|
||||
// XX XX 01 XX XX
|
||||
|
||||
vec2 offset = u_pixelDelta*GAUSS_SPAN_MAX/GAUSS_KERNEL_SIZE;
|
||||
|
||||
vec3 rgbSimple0 = 1.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 0.0,-2.0)).xyz;
|
||||
vec3 rgbSimple1 = 3.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2(-1.0,-1.0)).xyz;
|
||||
vec3 rgbSimple2 = 8.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 0.0,-1.0)).xyz;
|
||||
vec3 rgbSimple3 = 3.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 1.0,-1.0)).xyz;
|
||||
vec3 rgbSimple4 = 1.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2(-2.0, 0.0)).xyz;
|
||||
vec3 rgbSimple5 = 8.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2(-1.0, 0.0)).xyz;
|
||||
vec3 rgbSimple6 = 10.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 0.0, 0.0)).xyz;
|
||||
vec3 rgbSimple7 = 8.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 1.0, 0.0)).xyz;
|
||||
vec3 rgbSimple8 = 1.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 2.0, 0.0)).xyz;
|
||||
vec3 rgbSimple9 = 3.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2(-1.0, 1.0)).xyz;
|
||||
vec3 rgbSimple10= 8.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 0.0, 1.0)).xyz;
|
||||
vec3 rgbSimple11= 3.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 1.0, 1.0)).xyz;
|
||||
vec3 rgbSimple12= 1.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 0.0, 2.0)).xyz;
|
||||
//vec3 rgbSimple10= vec3(1.0,0.0,0.0);
|
||||
//vec3 rgbSimple11= vec3(1.0,0.0,0.0);
|
||||
//vec3 rgbSimple12= vec3(1.0,0.0,0.0);
|
||||
|
||||
vec3 rgb = rgbSimple0 +
|
||||
rgbSimple1 +
|
||||
rgbSimple2 +
|
||||
rgbSimple3 +
|
||||
rgbSimple4 +
|
||||
rgbSimple5 +
|
||||
rgbSimple6 +
|
||||
rgbSimple7 +
|
||||
rgbSimple8 +
|
||||
rgbSimple9 +
|
||||
rgbSimple10 +
|
||||
rgbSimple11 +
|
||||
rgbSimple12;
|
||||
rgb = rgb / 58.0;
|
||||
gl_FragColor.xyz=rgb;
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,69 +1,69 @@
|
||||
// AA-Color shader, Modified to use in PPSSPP. Grabbed from:
|
||||
// http://forums.ngemu.com/showthread.php?t=76098
|
||||
|
||||
// by guest(r) (guest.r@gmail.com)
|
||||
// license: GNU-GPL
|
||||
|
||||
// Color variables
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
const vec3 c_ch = vec3(1.0,1.0,1.0); // rgb color channel intensity
|
||||
const float a = 1.20 ; // saturation
|
||||
const float b = 1.00 ; // brightness
|
||||
const float c = 1.25 ; // contrast
|
||||
|
||||
// you can use contrast1,contrast2...contrast4 (or contrast0 for speedup)
|
||||
|
||||
float contrast0(float x)
|
||||
{ return x; }
|
||||
|
||||
float contrast1(float x)
|
||||
{ x = x*1.1547-1.0;
|
||||
return sign(x)*pow(abs(x),1.0/c)*0.86 + 0.86;}
|
||||
|
||||
float contrast2(float x)
|
||||
{ return normalize(vec2(pow(x,c),pow(0.86,c))).x*1.72;}
|
||||
|
||||
float contrast3(float x)
|
||||
{ return 1.73*pow(0.57735*x,c); }
|
||||
|
||||
float contrast4(float x)
|
||||
{ return clamp(0.866 + c*(x-0.866),0.05, 1.73); }
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
|
||||
varying vec4 v_texcoord0;
|
||||
varying vec4 v_texcoord1;
|
||||
varying vec4 v_texcoord2;
|
||||
varying vec4 v_texcoord3;
|
||||
varying vec4 v_texcoord4;
|
||||
varying vec4 v_texcoord5;
|
||||
varying vec4 v_texcoord6;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec3 c10 = texture2D(sampler0, v_texcoord1.xy).xyz;
|
||||
vec3 c01 = texture2D(sampler0, v_texcoord4.xy).xyz;
|
||||
vec3 c11 = texture2D(sampler0, v_texcoord0.xy).xyz;
|
||||
vec3 c21 = texture2D(sampler0, v_texcoord5.xy).xyz;
|
||||
vec3 c12 = texture2D(sampler0, v_texcoord2.xy).xyz;
|
||||
|
||||
vec3 dt = vec3(1.0,1.0,1.0);
|
||||
float k1=dot(abs(c01-c21),dt);
|
||||
float k2=dot(abs(c10-c12),dt);
|
||||
|
||||
vec3 color = (k1*(c10+c12)+k2*(c01+c21)+0.001*c11)/(2.0*(k1+k2)+0.001);
|
||||
|
||||
float x = sqrt(dot(color,color));
|
||||
|
||||
color.r = pow(color.r+0.001,a);
|
||||
color.g = pow(color.g+0.001,a);
|
||||
color.b = pow(color.b+0.001,a);
|
||||
|
||||
gl_FragColor.rgb = contrast4(x)*normalize(color*c_ch)*b;
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
// AA-Color shader, Modified to use in PPSSPP. Grabbed from:
|
||||
// http://forums.ngemu.com/showthread.php?t=76098
|
||||
|
||||
// by guest(r) (guest.r@gmail.com)
|
||||
// license: GNU-GPL
|
||||
|
||||
// Color variables
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
const vec3 c_ch = vec3(1.0,1.0,1.0); // rgb color channel intensity
|
||||
const float a = 1.20 ; // saturation
|
||||
const float b = 1.00 ; // brightness
|
||||
const float c = 1.25 ; // contrast
|
||||
|
||||
// you can use contrast1,contrast2...contrast4 (or contrast0 for speedup)
|
||||
|
||||
float contrast0(float x)
|
||||
{ return x; }
|
||||
|
||||
float contrast1(float x)
|
||||
{ x = x*1.1547-1.0;
|
||||
return sign(x)*pow(abs(x),1.0/c)*0.86 + 0.86;}
|
||||
|
||||
float contrast2(float x)
|
||||
{ return normalize(vec2(pow(x,c),pow(0.86,c))).x*1.72;}
|
||||
|
||||
float contrast3(float x)
|
||||
{ return 1.73*pow(0.57735*x,c); }
|
||||
|
||||
float contrast4(float x)
|
||||
{ return clamp(0.866 + c*(x-0.866),0.05, 1.73); }
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
|
||||
varying vec4 v_texcoord0;
|
||||
varying vec4 v_texcoord1;
|
||||
varying vec4 v_texcoord2;
|
||||
varying vec4 v_texcoord3;
|
||||
varying vec4 v_texcoord4;
|
||||
varying vec4 v_texcoord5;
|
||||
varying vec4 v_texcoord6;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec3 c10 = texture2D(sampler0, v_texcoord1.xy).xyz;
|
||||
vec3 c01 = texture2D(sampler0, v_texcoord4.xy).xyz;
|
||||
vec3 c11 = texture2D(sampler0, v_texcoord0.xy).xyz;
|
||||
vec3 c21 = texture2D(sampler0, v_texcoord5.xy).xyz;
|
||||
vec3 c12 = texture2D(sampler0, v_texcoord2.xy).xyz;
|
||||
|
||||
vec3 dt = vec3(1.0,1.0,1.0);
|
||||
float k1=dot(abs(c01-c21),dt);
|
||||
float k2=dot(abs(c10-c12),dt);
|
||||
|
||||
vec3 color = (k1*(c10+c12)+k2*(c01+c21)+0.001*c11)/(2.0*(k1+k2)+0.001);
|
||||
|
||||
float x = sqrt(dot(color,color));
|
||||
|
||||
color.r = pow(color.r+0.001,a);
|
||||
color.g = pow(color.g+0.001,a);
|
||||
color.b = pow(color.b+0.001,a);
|
||||
|
||||
gl_FragColor.rgb = contrast4(x)*normalize(color*c_ch)*b;
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
|
||||
@@ -1,38 +1,38 @@
|
||||
// by guest(r) - guest.r@gmail.com
|
||||
// license: GNU-GPL
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
attribute vec4 a_position;
|
||||
attribute vec2 a_texcoord0;
|
||||
uniform vec2 u_texelDelta;
|
||||
|
||||
varying vec4 v_texcoord0;
|
||||
varying vec4 v_texcoord1;
|
||||
varying vec4 v_texcoord2;
|
||||
varying vec4 v_texcoord3;
|
||||
varying vec4 v_texcoord4;
|
||||
varying vec4 v_texcoord5;
|
||||
varying vec4 v_texcoord6;
|
||||
|
||||
float scaleoffset = 0.8;
|
||||
|
||||
void main()
|
||||
|
||||
{
|
||||
float x = u_texelDelta.x*scaleoffset;
|
||||
float y = u_texelDelta.y*scaleoffset;
|
||||
gl_Position = a_position;
|
||||
v_texcoord0 = a_texcoord0.xyxy;
|
||||
v_texcoord1 = v_texcoord0;
|
||||
v_texcoord2 = v_texcoord0;
|
||||
v_texcoord4 = v_texcoord0;
|
||||
v_texcoord5 = v_texcoord0;
|
||||
v_texcoord1.y-=y;
|
||||
v_texcoord2.y+=y;
|
||||
v_texcoord4.x-=x;
|
||||
v_texcoord5.x+=x;
|
||||
}
|
||||
// by guest(r) - guest.r@gmail.com
|
||||
// license: GNU-GPL
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
attribute vec4 a_position;
|
||||
attribute vec2 a_texcoord0;
|
||||
uniform vec2 u_texelDelta;
|
||||
|
||||
varying vec4 v_texcoord0;
|
||||
varying vec4 v_texcoord1;
|
||||
varying vec4 v_texcoord2;
|
||||
varying vec4 v_texcoord3;
|
||||
varying vec4 v_texcoord4;
|
||||
varying vec4 v_texcoord5;
|
||||
varying vec4 v_texcoord6;
|
||||
|
||||
float scaleoffset = 0.8;
|
||||
|
||||
void main()
|
||||
|
||||
{
|
||||
float x = u_texelDelta.x*scaleoffset;
|
||||
float y = u_texelDelta.y*scaleoffset;
|
||||
gl_Position = a_position;
|
||||
v_texcoord0 = a_texcoord0.xyxy;
|
||||
v_texcoord1 = v_texcoord0;
|
||||
v_texcoord2 = v_texcoord0;
|
||||
v_texcoord4 = v_texcoord0;
|
||||
v_texcoord5 = v_texcoord0;
|
||||
v_texcoord1.y-=y;
|
||||
v_texcoord2.y+=y;
|
||||
v_texcoord4.x-=x;
|
||||
v_texcoord5.x+=x;
|
||||
}
|
||||
|
||||
@@ -1,47 +1,47 @@
|
||||
// Simple Bloom shader; created to use in PPSSPP.
|
||||
// Without excessive samples and complex nested loops
|
||||
// (to make it compatible with low-end GPUs and to ensure ps_2_0 compatibility).
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
varying vec2 v_texcoord0;
|
||||
|
||||
uniform vec4 u_setting;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec3 color = texture2D(sampler0, v_texcoord0.xy).xyz;
|
||||
vec4 sum = vec4(0);
|
||||
vec3 bloom;
|
||||
|
||||
for(int i= -3 ;i < 3; i++)
|
||||
{
|
||||
sum += texture2D(sampler0, v_texcoord0 + vec2(-1, i)*0.004) * u_setting.x;
|
||||
sum += texture2D(sampler0, v_texcoord0 + vec2(0, i)*0.004) * u_setting.x;
|
||||
sum += texture2D(sampler0, v_texcoord0 + vec2(1, i)*0.004) * u_setting.x;
|
||||
}
|
||||
|
||||
if (color.r < 0.3 && color.g < 0.3 && color.b < 0.3)
|
||||
{
|
||||
bloom = sum.xyz*sum.xyz*0.012 + color;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (color.r < 0.5 && color.g < 0.5 && color.b < 0.5)
|
||||
{
|
||||
bloom = sum.xyz*sum.xyz*0.009 + color;
|
||||
}
|
||||
else
|
||||
{
|
||||
bloom = sum.xyz*sum.xyz*0.0075 + color;
|
||||
}
|
||||
}
|
||||
|
||||
bloom = mix(color, bloom, u_setting.y);
|
||||
gl_FragColor.rgb = bloom;
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
// Simple Bloom shader; created to use in PPSSPP.
|
||||
// Without excessive samples and complex nested loops
|
||||
// (to make it compatible with low-end GPUs and to ensure ps_2_0 compatibility).
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
varying vec2 v_texcoord0;
|
||||
|
||||
uniform vec4 u_setting;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec3 color = texture2D(sampler0, v_texcoord0.xy).xyz;
|
||||
vec4 sum = vec4(0);
|
||||
vec3 bloom;
|
||||
|
||||
for(int i= -3 ;i < 3; i++)
|
||||
{
|
||||
sum += texture2D(sampler0, v_texcoord0 + vec2(-1, i)*0.004) * u_setting.x;
|
||||
sum += texture2D(sampler0, v_texcoord0 + vec2(0, i)*0.004) * u_setting.x;
|
||||
sum += texture2D(sampler0, v_texcoord0 + vec2(1, i)*0.004) * u_setting.x;
|
||||
}
|
||||
|
||||
if (color.r < 0.3 && color.g < 0.3 && color.b < 0.3)
|
||||
{
|
||||
bloom = sum.xyz*sum.xyz*0.012 + color;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (color.r < 0.5 && color.g < 0.5 && color.b < 0.5)
|
||||
{
|
||||
bloom = sum.xyz*sum.xyz*0.009 + color;
|
||||
}
|
||||
else
|
||||
{
|
||||
bloom = sum.xyz*sum.xyz*0.0075 + color;
|
||||
}
|
||||
}
|
||||
|
||||
bloom = mix(color, bloom, u_setting.y);
|
||||
gl_FragColor.rgb = bloom;
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
|
||||
@@ -1,52 +1,52 @@
|
||||
// Modified to use in PPSSPP. Grabbed from:
|
||||
// http://forums.ngemu.com/showthread.php?t=76098
|
||||
|
||||
// Advanced Cartoon shader I
|
||||
// by guest(r) (guest.r@gmail.com)
|
||||
// license: GNU-GPL
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform vec4 u_setting;
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
|
||||
varying vec4 v_texcoord0;
|
||||
varying vec4 v_texcoord1;
|
||||
varying vec4 v_texcoord2;
|
||||
varying vec4 v_texcoord3;
|
||||
varying vec4 v_texcoord4;
|
||||
varying vec4 v_texcoord5;
|
||||
varying vec4 v_texcoord6;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec3 c00 = texture2D(sampler0, v_texcoord5.xy).xyz;
|
||||
vec3 c10 = texture2D(sampler0, v_texcoord1.xy).xyz;
|
||||
vec3 c20 = texture2D(sampler0, v_texcoord2.zw).xyz;
|
||||
vec3 c01 = texture2D(sampler0, v_texcoord3.xy).xyz;
|
||||
vec3 c11 = texture2D(sampler0, v_texcoord0.xy).xyz;
|
||||
vec3 c21 = texture2D(sampler0, v_texcoord4.xy).xyz;
|
||||
vec3 c02 = texture2D(sampler0, v_texcoord1.zw).xyz;
|
||||
vec3 c12 = texture2D(sampler0, v_texcoord2.xy).xyz;
|
||||
vec3 c22 = texture2D(sampler0, v_texcoord6.xy).xyz;
|
||||
vec3 dt = vec3(1.0,1.0,1.0);
|
||||
|
||||
float d1=dot(abs(c00-c22),dt);
|
||||
float d2=dot(abs(c20-c02),dt);
|
||||
float hl=dot(abs(c01-c21),dt);
|
||||
float vl=dot(abs(c10-c12),dt);
|
||||
float d = u_setting.x*(d1+d2+hl+vl)/(dot(c11,dt)+0.15);
|
||||
|
||||
float lc = 4.0*length(c11);
|
||||
float f = fract(lc); f*=f;
|
||||
lc = 0.25*(floor(lc) + f*f)+0.05;
|
||||
c11 = 4.0*normalize(c11);
|
||||
vec3 frct = fract(c11); frct*=frct;
|
||||
c11 = floor(c11)+ 0.05*dt + frct*frct;
|
||||
gl_FragColor.rgb = 0.25*lc*(1.1-d*sqrt(d))*c11;
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
// Modified to use in PPSSPP. Grabbed from:
|
||||
// http://forums.ngemu.com/showthread.php?t=76098
|
||||
|
||||
// Advanced Cartoon shader I
|
||||
// by guest(r) (guest.r@gmail.com)
|
||||
// license: GNU-GPL
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform vec4 u_setting;
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
|
||||
varying vec4 v_texcoord0;
|
||||
varying vec4 v_texcoord1;
|
||||
varying vec4 v_texcoord2;
|
||||
varying vec4 v_texcoord3;
|
||||
varying vec4 v_texcoord4;
|
||||
varying vec4 v_texcoord5;
|
||||
varying vec4 v_texcoord6;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec3 c00 = texture2D(sampler0, v_texcoord5.xy).xyz;
|
||||
vec3 c10 = texture2D(sampler0, v_texcoord1.xy).xyz;
|
||||
vec3 c20 = texture2D(sampler0, v_texcoord2.zw).xyz;
|
||||
vec3 c01 = texture2D(sampler0, v_texcoord3.xy).xyz;
|
||||
vec3 c11 = texture2D(sampler0, v_texcoord0.xy).xyz;
|
||||
vec3 c21 = texture2D(sampler0, v_texcoord4.xy).xyz;
|
||||
vec3 c02 = texture2D(sampler0, v_texcoord1.zw).xyz;
|
||||
vec3 c12 = texture2D(sampler0, v_texcoord2.xy).xyz;
|
||||
vec3 c22 = texture2D(sampler0, v_texcoord6.xy).xyz;
|
||||
vec3 dt = vec3(1.0,1.0,1.0);
|
||||
|
||||
float d1=dot(abs(c00-c22),dt);
|
||||
float d2=dot(abs(c20-c02),dt);
|
||||
float hl=dot(abs(c01-c21),dt);
|
||||
float vl=dot(abs(c10-c12),dt);
|
||||
float d = u_setting.x*(d1+d2+hl+vl)/(dot(c11,dt)+0.15);
|
||||
|
||||
float lc = 4.0*length(c11);
|
||||
float f = fract(lc); f*=f;
|
||||
lc = 0.25*(floor(lc) + f*f)+0.05;
|
||||
c11 = 4.0*normalize(c11);
|
||||
vec3 frct = fract(c11); frct*=frct;
|
||||
c11 = floor(c11)+ 0.05*dt + frct*frct;
|
||||
gl_FragColor.rgb = 0.25*lc*(1.1-d*sqrt(d))*c11;
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
|
||||
@@ -1,39 +1,39 @@
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
attribute vec4 a_position;
|
||||
attribute vec2 a_texcoord0;
|
||||
uniform vec2 u_texelDelta;
|
||||
|
||||
varying vec4 v_texcoord0;
|
||||
varying vec4 v_texcoord1;
|
||||
varying vec4 v_texcoord2;
|
||||
varying vec4 v_texcoord3;
|
||||
varying vec4 v_texcoord4;
|
||||
varying vec4 v_texcoord5;
|
||||
varying vec4 v_texcoord6;
|
||||
|
||||
float scaleoffset = 0.8; //edge detection offset
|
||||
|
||||
void main()
|
||||
{
|
||||
float x = u_texelDelta.x*scaleoffset;
|
||||
float y = u_texelDelta.y*scaleoffset;
|
||||
vec2 dg1 = vec2( x,y);
|
||||
vec2 dg2 = vec2(-x,y);
|
||||
vec2 dx = vec2(x,0.0);
|
||||
vec2 dy = vec2(0.0,y);
|
||||
gl_Position = a_position;
|
||||
v_texcoord0=a_texcoord0.xyxy;
|
||||
v_texcoord1.xy = v_texcoord0.xy - dy;
|
||||
v_texcoord2.xy = v_texcoord0.xy + dy;
|
||||
v_texcoord3.xy = v_texcoord0.xy - dx;
|
||||
v_texcoord4.xy = v_texcoord0.xy + dx;
|
||||
v_texcoord5.xy = v_texcoord0.xy - dg1;
|
||||
v_texcoord6.xy = v_texcoord0.xy + dg1;
|
||||
v_texcoord1.zw = v_texcoord0.xy - dg2;
|
||||
v_texcoord2.zw = v_texcoord0.xy + dg2;
|
||||
|
||||
}
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
attribute vec4 a_position;
|
||||
attribute vec2 a_texcoord0;
|
||||
uniform vec2 u_texelDelta;
|
||||
|
||||
varying vec4 v_texcoord0;
|
||||
varying vec4 v_texcoord1;
|
||||
varying vec4 v_texcoord2;
|
||||
varying vec4 v_texcoord3;
|
||||
varying vec4 v_texcoord4;
|
||||
varying vec4 v_texcoord5;
|
||||
varying vec4 v_texcoord6;
|
||||
|
||||
float scaleoffset = 0.8; //edge detection offset
|
||||
|
||||
void main()
|
||||
{
|
||||
float x = u_texelDelta.x*scaleoffset;
|
||||
float y = u_texelDelta.y*scaleoffset;
|
||||
vec2 dg1 = vec2( x,y);
|
||||
vec2 dg2 = vec2(-x,y);
|
||||
vec2 dx = vec2(x,0.0);
|
||||
vec2 dy = vec2(0.0,y);
|
||||
gl_Position = a_position;
|
||||
v_texcoord0=a_texcoord0.xyxy;
|
||||
v_texcoord1.xy = v_texcoord0.xy - dy;
|
||||
v_texcoord2.xy = v_texcoord0.xy + dy;
|
||||
v_texcoord3.xy = v_texcoord0.xy - dx;
|
||||
v_texcoord4.xy = v_texcoord0.xy + dx;
|
||||
v_texcoord5.xy = v_texcoord0.xy - dg1;
|
||||
v_texcoord6.xy = v_texcoord0.xy + dg1;
|
||||
v_texcoord1.zw = v_texcoord0.xy - dg2;
|
||||
v_texcoord2.zw = v_texcoord0.xy + dg2;
|
||||
|
||||
}
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
// Color correction
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
varying vec2 v_texcoord0;
|
||||
|
||||
uniform vec4 u_setting;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec3 rgb = texture2D( sampler0, v_texcoord0 ).xyz;
|
||||
rgb = vec3(mix(vec3(dot(rgb, vec3(0.299, 0.587, 0.114))), rgb, u_setting.y));
|
||||
rgb = (rgb-0.5)*u_setting.z+0.5+u_setting.x-1.0;
|
||||
gl_FragColor.rgb = pow(rgb, vec3(1.0/u_setting.w));
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
// Color correction
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
varying vec2 v_texcoord0;
|
||||
|
||||
uniform vec4 u_setting;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec3 rgb = texture2D( sampler0, v_texcoord0 ).xyz;
|
||||
rgb = vec3(mix(vec3(dot(rgb, vec3(0.299, 0.587, 0.114))), rgb, u_setting.y));
|
||||
rgb = (rgb-0.5)*u_setting.z+0.5+u_setting.x-1.0;
|
||||
gl_FragColor.rgb = pow(rgb, vec3(1.0/u_setting.w));
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
|
||||
@@ -1,33 +1,33 @@
|
||||
// Retro (CRT) shader, created to use in PPSSPP.
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
varying vec2 v_texcoord0;
|
||||
uniform vec4 u_time;
|
||||
|
||||
void main()
|
||||
{
|
||||
// scanlines
|
||||
int vPos = int( ( v_texcoord0.y + u_time.x * 0.5 ) * 272.0 );
|
||||
float line_intensity = mod( float(vPos), 2.0 );
|
||||
|
||||
// color shift
|
||||
float off = line_intensity * 0.0005;
|
||||
vec2 shift = vec2( off, 0 );
|
||||
|
||||
// shift R and G channels to simulate NTSC color bleed
|
||||
vec2 colorShift = vec2( 0.001, 0 );
|
||||
float r = texture2D( sampler0, v_texcoord0 + colorShift + shift ).x;
|
||||
float g = texture2D( sampler0, v_texcoord0 - colorShift + shift ).y;
|
||||
float b = texture2D( sampler0, v_texcoord0 ).z;
|
||||
|
||||
vec4 c = vec4( r, g * 0.99, b, 1.0 ) * clamp( line_intensity, 0.85, 1.0 );
|
||||
|
||||
float rollbar = sin( ( v_texcoord0.y + u_time.x ) * 4.0 );
|
||||
|
||||
gl_FragColor.rgba = c + (rollbar * 0.02);
|
||||
}
|
||||
// Retro (CRT) shader, created to use in PPSSPP.
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
varying vec2 v_texcoord0;
|
||||
uniform vec4 u_time;
|
||||
|
||||
void main()
|
||||
{
|
||||
// scanlines
|
||||
int vPos = int( ( v_texcoord0.y + u_time.x * 0.5 ) * 272.0 );
|
||||
float line_intensity = mod( float(vPos), 2.0 );
|
||||
|
||||
// color shift
|
||||
float off = line_intensity * 0.0005;
|
||||
vec2 shift = vec2( off, 0 );
|
||||
|
||||
// shift R and G channels to simulate NTSC color bleed
|
||||
vec2 colorShift = vec2( 0.001, 0 );
|
||||
float r = texture2D( sampler0, v_texcoord0 + colorShift + shift ).x;
|
||||
float g = texture2D( sampler0, v_texcoord0 - colorShift + shift ).y;
|
||||
float b = texture2D( sampler0, v_texcoord0 ).z;
|
||||
|
||||
vec4 c = vec4( r, g * 0.99, b, 1.0 ) * clamp( line_intensity, 0.85, 1.0 );
|
||||
|
||||
float rollbar = sin( ( v_texcoord0.y + u_time.x ) * 4.0 );
|
||||
|
||||
gl_FragColor.rgba = c + (rollbar * 0.02);
|
||||
}
|
||||
|
||||
@@ -1,162 +1,163 @@
|
||||
# You can have multiple ini files if you want, it doesn't matter.
|
||||
[FXAA]
|
||||
Name=FXAA Antialiasing
|
||||
Author=nVidia
|
||||
Fragment=fxaa.fsh
|
||||
Vertex=fxaa.vsh
|
||||
[CRT]
|
||||
Name=CRT Scanlines
|
||||
Author=KillaMaaki
|
||||
Fragment=crt.fsh
|
||||
Vertex=fxaa.vsh
|
||||
60fps=True
|
||||
[Natural]
|
||||
Name=Natural Colors
|
||||
Fragment=natural.fsh
|
||||
Vertex=natural.vsh
|
||||
[NaturalA]
|
||||
Name=Natural Colors (No Blur)
|
||||
Fragment=naturalA.fsh
|
||||
Vertex=naturalA.vsh
|
||||
[Vignette]
|
||||
Name=Vignette
|
||||
Author=Henrik
|
||||
Fragment=vignette.fsh
|
||||
Vertex=fxaa.vsh
|
||||
[Grayscale]
|
||||
Name=Grayscale
|
||||
Author=Henrik
|
||||
Fragment=grayscale.fsh
|
||||
Vertex=fxaa.vsh
|
||||
[Bloom]
|
||||
Name=Bloom
|
||||
Fragment=bloom.fsh
|
||||
Vertex=fxaa.vsh
|
||||
SettingName1=Amount
|
||||
SettingDefaultValue1=0.6
|
||||
SettingMaxValue1=1.0
|
||||
SettingMinValue1=0.0
|
||||
SettingName2=Power
|
||||
SettingDefaultValue2=0.5
|
||||
SettingMaxValue2=1.0
|
||||
SettingMinValue2=0.0
|
||||
[Sharpen]
|
||||
Name=Sharpen
|
||||
Fragment=sharpen.fsh
|
||||
Vertex=fxaa.vsh
|
||||
SettingName1=Amount
|
||||
SettingDefaultValue1=1.5
|
||||
SettingMaxValue1=3.0
|
||||
SettingMinValue1=1.0
|
||||
SettingStep1=0.1
|
||||
[InverseColors]
|
||||
Name=Inverse Colors
|
||||
Author=Henrik
|
||||
Fragment=inversecolors.fsh
|
||||
Vertex=fxaa.vsh
|
||||
[Scanlines]
|
||||
Name=Scanlines (CRT)
|
||||
Fragment=scanlines.fsh
|
||||
Vertex=fxaa.vsh
|
||||
OutputResolution=True
|
||||
SettingName1=Amount
|
||||
SettingDefaultValue1=1.0
|
||||
SettingMaxValue1=1.0
|
||||
SettingMinValue1=0.0
|
||||
SettingStep1=0.1
|
||||
SettingName2=Intensity
|
||||
SettingDefaultValue2=0.5
|
||||
SettingMaxValue2=1.0
|
||||
SettingMinValue2=0.0
|
||||
SettingStep2=0.05
|
||||
[Cartoon]
|
||||
Name=Cartoon
|
||||
Fragment=cartoon.fsh
|
||||
Vertex=cartoon.vsh
|
||||
SettingName1=Black border
|
||||
SettingDefaultValue1=0.5
|
||||
SettingMaxValue1=1.0
|
||||
SettingMinValue1=0.0
|
||||
[4xHqGLSL]
|
||||
Name=4xHqGLSL Upscaler
|
||||
Fragment=4xhqglsl.fsh
|
||||
Vertex=4xhqglsl.vsh
|
||||
OutputResolution=True
|
||||
Upscaling=True
|
||||
[AAColor]
|
||||
Name=AA-Color
|
||||
Fragment=aacolor.fsh
|
||||
Vertex=aacolor.vsh
|
||||
[UpscaleSpline36]
|
||||
Name=Spline36 Upscaler
|
||||
Fragment=upscale_spline36.fsh
|
||||
Vertex=upscale_spline36.vsh
|
||||
OutputResolution=True
|
||||
RequiresIntSupport=True
|
||||
Upscaling=True
|
||||
[5xBR]
|
||||
Name=5xBR Upscaler
|
||||
Author=Hyllian
|
||||
Fragment=5xBR.fsh
|
||||
Vertex=5xBR.vsh
|
||||
OutputResolution=True
|
||||
Upscaling=True
|
||||
[5xBR-lv2]
|
||||
Name=5xBR lv2 Upscaler
|
||||
Author=Hyllian (tweak by guest.r)
|
||||
Fragment=5xBR-lv2.fsh
|
||||
Vertex=5xBR.vsh
|
||||
OutputResolution=True
|
||||
Upscaling=True
|
||||
[VideoSmoothingAA]
|
||||
Name=Video aware guest.r AA 4.o
|
||||
Author=guest.r(tweak by LunaMoo)
|
||||
Fragment=videoAA.fsh
|
||||
Vertex=fxaa.vsh
|
||||
OutputResolution=True
|
||||
[SSAA(Gauss)]
|
||||
Name=Super Sampling AA(Gauss)
|
||||
Fragment=GaussianDownscale.fsh
|
||||
Vertex=fxaa.vsh
|
||||
OutputResolution=True
|
||||
SSAA=2
|
||||
[ColorCorrection]
|
||||
Name=Color correction
|
||||
Fragment=colorcorrection.fsh
|
||||
Vertex=fxaa.vsh
|
||||
SettingName1=Brightness
|
||||
SettingDefaultValue1=1.0
|
||||
SettingMaxValue1=2.0
|
||||
SettingMinValue1=0.1
|
||||
SettingStep1=0.05
|
||||
SettingName2=Saturation
|
||||
SettingDefaultValue2=1.0
|
||||
SettingMaxValue2=2.0
|
||||
SettingMinValue2=0.0
|
||||
SettingStep2=0.1
|
||||
SettingName3=Contrast
|
||||
SettingDefaultValue3=1.0
|
||||
SettingMaxValue3=3.0
|
||||
SettingMinValue3=0.1
|
||||
SettingStep3=0.1
|
||||
SettingName4=Gamma
|
||||
SettingDefaultValue4=1.0
|
||||
SettingMaxValue4=2.0
|
||||
SettingMinValue4=0.1
|
||||
SettingStep4=0.05
|
||||
[PSPColor]
|
||||
Name=PSP Color
|
||||
Author=hunterk, Pokefan531 (ported by jdgleaver)
|
||||
Fragment=psp_color.fsh
|
||||
Vertex=fxaa.vsh
|
||||
[Tex4xBRZ]
|
||||
Type=Texture
|
||||
Name=4xBRZ
|
||||
Author=Hyllian
|
||||
Compute=tex_4xbrz.csh
|
||||
[TexMMPX]
|
||||
Type=Texture
|
||||
Name=MMPX
|
||||
Author=Morgan McGuire and Mara Gagiu
|
||||
Compute=tex_mmpx.csh
|
||||
MaxScale=2
|
||||
# You can have multiple ini files if you want, it doesn't matter.
|
||||
[FXAA]
|
||||
Name=FXAA Antialiasing
|
||||
Author=nVidia
|
||||
Fragment=fxaa.fsh
|
||||
Vertex=fxaa.vsh
|
||||
[CRT]
|
||||
Name=CRT Scanlines
|
||||
Author=KillaMaaki
|
||||
Fragment=crt.fsh
|
||||
Vertex=fxaa.vsh
|
||||
60fps=True
|
||||
[Natural]
|
||||
Name=Natural Colors
|
||||
Fragment=natural.fsh
|
||||
Vertex=natural.vsh
|
||||
[NaturalA]
|
||||
Name=Natural Colors (No Blur)
|
||||
Fragment=naturalA.fsh
|
||||
Vertex=naturalA.vsh
|
||||
[Vignette]
|
||||
Name=Vignette
|
||||
Author=Henrik
|
||||
Fragment=vignette.fsh
|
||||
Vertex=fxaa.vsh
|
||||
[Grayscale]
|
||||
Name=Grayscale
|
||||
Author=Henrik
|
||||
Fragment=grayscale.fsh
|
||||
Vertex=fxaa.vsh
|
||||
[Bloom]
|
||||
Name=Bloom
|
||||
Fragment=bloom.fsh
|
||||
Vertex=fxaa.vsh
|
||||
SettingName1=Amount
|
||||
SettingDefaultValue1=0.6
|
||||
SettingMaxValue1=1.0
|
||||
SettingMinValue1=0.0
|
||||
SettingName2=Power
|
||||
SettingDefaultValue2=0.5
|
||||
SettingMaxValue2=1.0
|
||||
SettingMinValue2=0.0
|
||||
[Sharpen]
|
||||
Name=Sharpen
|
||||
Fragment=sharpen.fsh
|
||||
Vertex=fxaa.vsh
|
||||
SettingName1=Amount
|
||||
SettingDefaultValue1=1.5
|
||||
SettingMaxValue1=3.0
|
||||
SettingMinValue1=1.0
|
||||
SettingStep1=0.1
|
||||
[InverseColors]
|
||||
Name=Inverse Colors
|
||||
Author=Henrik
|
||||
Fragment=inversecolors.fsh
|
||||
Vertex=fxaa.vsh
|
||||
[Scanlines]
|
||||
Name=Scanlines (CRT)
|
||||
Fragment=scanlines.fsh
|
||||
Vertex=fxaa.vsh
|
||||
OutputResolution=True
|
||||
SettingName1=Amount
|
||||
SettingDefaultValue1=1.0
|
||||
SettingMaxValue1=1.0
|
||||
SettingMinValue1=0.0
|
||||
SettingStep1=0.1
|
||||
SettingName2=Intensity
|
||||
SettingDefaultValue2=0.5
|
||||
SettingMaxValue2=1.0
|
||||
SettingMinValue2=0.0
|
||||
SettingStep2=0.05
|
||||
[Cartoon]
|
||||
Name=Cartoon
|
||||
Fragment=cartoon.fsh
|
||||
Vertex=cartoon.vsh
|
||||
SettingName1=Black border
|
||||
SettingDefaultValue1=0.5
|
||||
SettingMaxValue1=1.0
|
||||
SettingMinValue1=0.0
|
||||
[4xHqGLSL]
|
||||
Name=4xHqGLSL Upscaler
|
||||
Fragment=4xhqglsl.fsh
|
||||
Vertex=4xhqglsl.vsh
|
||||
OutputResolution=True
|
||||
Upscaling=True
|
||||
[AAColor]
|
||||
Name=AA-Color
|
||||
Fragment=aacolor.fsh
|
||||
Vertex=aacolor.vsh
|
||||
[UpscaleSpline36]
|
||||
Name=Spline36 Upscaler
|
||||
Fragment=upscale_spline36.fsh
|
||||
Vertex=upscale_spline36.vsh
|
||||
OutputResolution=True
|
||||
RequiresIntSupport=True
|
||||
Upscaling=True
|
||||
[5xBR]
|
||||
Name=5xBR Upscaler
|
||||
Author=Hyllian
|
||||
Fragment=5xBR.fsh
|
||||
Vertex=5xBR.vsh
|
||||
OutputResolution=True
|
||||
Upscaling=True
|
||||
[5xBR-lv2]
|
||||
Name=5xBR lv2 Upscaler
|
||||
Author=Hyllian (tweak by guest.r)
|
||||
Fragment=5xBR-lv2.fsh
|
||||
Vertex=5xBR.vsh
|
||||
OutputResolution=True
|
||||
Upscaling=True
|
||||
[VideoSmoothingAA]
|
||||
Name=Video aware guest.r AA 4.o
|
||||
Author=guest.r(tweak by LunaMoo)
|
||||
Fragment=videoAA.fsh
|
||||
Vertex=fxaa.vsh
|
||||
OutputResolution=True
|
||||
[SSAA(Gauss)]
|
||||
Name=Super Sampling AA(Gauss)
|
||||
Fragment=GaussianDownscale.fsh
|
||||
Vertex=fxaa.vsh
|
||||
OutputResolution=True
|
||||
SSAA=2
|
||||
[ColorCorrection]
|
||||
Name=Color correction
|
||||
Fragment=colorcorrection.fsh
|
||||
Vertex=fxaa.vsh
|
||||
SettingName1=Brightness
|
||||
SettingDefaultValue1=1.0
|
||||
SettingMaxValue1=2.0
|
||||
SettingMinValue1=0.1
|
||||
SettingStep1=0.05
|
||||
SettingName2=Saturation
|
||||
SettingDefaultValue2=1.0
|
||||
SettingMaxValue2=2.0
|
||||
SettingMinValue2=0.0
|
||||
SettingStep2=0.1
|
||||
SettingName3=Contrast
|
||||
SettingDefaultValue3=1.0
|
||||
SettingMaxValue3=3.0
|
||||
SettingMinValue3=0.1
|
||||
SettingStep3=0.1
|
||||
SettingName4=Gamma
|
||||
SettingDefaultValue4=1.0
|
||||
SettingMaxValue4=2.0
|
||||
SettingMinValue4=0.1
|
||||
SettingStep4=0.05
|
||||
[PSPColor]
|
||||
Name=PSP Color
|
||||
Author=hunterk, Pokefan531 (ported by jdgleaver)
|
||||
Fragment=psp_color.fsh
|
||||
Vertex=fxaa.vsh
|
||||
[Tex4xBRZ]
|
||||
Type=Texture
|
||||
Name=4xBRZ
|
||||
Author=Hyllian
|
||||
Compute=tex_4xbrz.csh
|
||||
VendorBlacklist=ARM
|
||||
[TexMMPX]
|
||||
Type=Texture
|
||||
Name=MMPX
|
||||
Author=Morgan McGuire and Mara Gagiu
|
||||
Compute=tex_mmpx.csh
|
||||
MaxScale=2
|
||||
|
||||
@@ -1,68 +1,68 @@
|
||||
// PPSSPP: Grabbed from Processing and slightly modified.
|
||||
|
||||
// FXAA shader, GLSL code adapted from:
|
||||
// http://horde3d.org/wiki/index.php5?title=Shading_Technique_-_FXAA
|
||||
// Whitepaper describing the technique:
|
||||
// http://developer.download.nvidia.com/assets/gamedev/files/sdk/11/FXAA_WhitePaper.pdf
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
|
||||
// The inverse of the texture dimensions along X and Y
|
||||
uniform vec2 u_texelDelta;
|
||||
varying vec2 v_texcoord0;
|
||||
|
||||
void main() {
|
||||
// The parameters are hardcoded for now, but could be
|
||||
// made into uniforms to control fromt he program.
|
||||
float FXAA_SPAN_MAX = 8.0;
|
||||
float FXAA_REDUCE_MUL = 1.0/8.0;
|
||||
float FXAA_REDUCE_MIN = (1.0/128.0);
|
||||
|
||||
vec3 rgbNW = texture2D(sampler0, v_texcoord0.xy + (vec2(-1.0, -1.0) * u_texelDelta)).xyz;
|
||||
vec3 rgbNE = texture2D(sampler0, v_texcoord0.xy + (vec2(+1.0, -1.0) * u_texelDelta)).xyz;
|
||||
vec3 rgbSW = texture2D(sampler0, v_texcoord0.xy + (vec2(-1.0, +1.0) * u_texelDelta)).xyz;
|
||||
vec3 rgbSE = texture2D(sampler0, v_texcoord0.xy + (vec2(+1.0, +1.0) * u_texelDelta)).xyz;
|
||||
vec3 rgbM = texture2D(sampler0, v_texcoord0.xy).xyz;
|
||||
|
||||
vec3 luma = vec3(0.299, 0.587, 0.114);
|
||||
float lumaNW = dot(rgbNW, luma);
|
||||
float lumaNE = dot(rgbNE, luma);
|
||||
float lumaSW = dot(rgbSW, luma);
|
||||
float lumaSE = dot(rgbSE, luma);
|
||||
float lumaM = dot( rgbM, luma);
|
||||
|
||||
float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));
|
||||
float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));
|
||||
|
||||
vec2 dir;
|
||||
dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));
|
||||
dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));
|
||||
|
||||
float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) * (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);
|
||||
|
||||
float rcpDirMin = 1.0/(min(abs(dir.x), abs(dir.y)) + dirReduce);
|
||||
|
||||
dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),
|
||||
max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX), dir * rcpDirMin)) * u_texelDelta;
|
||||
|
||||
vec3 rgbA = (1.0/2.0) * (
|
||||
texture2D(sampler0, v_texcoord0.xy + dir * (1.0/3.0 - 0.5)).xyz +
|
||||
texture2D(sampler0, v_texcoord0.xy + dir * (2.0/3.0 - 0.5)).xyz);
|
||||
vec3 rgbB = rgbA * (1.0/2.0) + (1.0/4.0) * (
|
||||
texture2D(sampler0, v_texcoord0.xy + dir * (0.0/3.0 - 0.5)).xyz +
|
||||
texture2D(sampler0, v_texcoord0.xy + dir * (3.0/3.0 - 0.5)).xyz);
|
||||
float lumaB = dot(rgbB, luma);
|
||||
|
||||
if((lumaB < lumaMin) || (lumaB > lumaMax)){
|
||||
gl_FragColor.xyz=rgbA;
|
||||
} else {
|
||||
gl_FragColor.xyz=rgbB;
|
||||
}
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
|
||||
// PPSSPP: Grabbed from Processing and slightly modified.
|
||||
|
||||
// FXAA shader, GLSL code adapted from:
|
||||
// http://horde3d.org/wiki/index.php5?title=Shading_Technique_-_FXAA
|
||||
// Whitepaper describing the technique:
|
||||
// http://developer.download.nvidia.com/assets/gamedev/files/sdk/11/FXAA_WhitePaper.pdf
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
|
||||
// The inverse of the texture dimensions along X and Y
|
||||
uniform vec2 u_texelDelta;
|
||||
varying vec2 v_texcoord0;
|
||||
|
||||
void main() {
|
||||
// The parameters are hardcoded for now, but could be
|
||||
// made into uniforms to control fromt he program.
|
||||
float FXAA_SPAN_MAX = 8.0;
|
||||
float FXAA_REDUCE_MUL = 1.0/8.0;
|
||||
float FXAA_REDUCE_MIN = (1.0/128.0);
|
||||
|
||||
vec3 rgbNW = texture2D(sampler0, v_texcoord0.xy + (vec2(-1.0, -1.0) * u_texelDelta)).xyz;
|
||||
vec3 rgbNE = texture2D(sampler0, v_texcoord0.xy + (vec2(+1.0, -1.0) * u_texelDelta)).xyz;
|
||||
vec3 rgbSW = texture2D(sampler0, v_texcoord0.xy + (vec2(-1.0, +1.0) * u_texelDelta)).xyz;
|
||||
vec3 rgbSE = texture2D(sampler0, v_texcoord0.xy + (vec2(+1.0, +1.0) * u_texelDelta)).xyz;
|
||||
vec3 rgbM = texture2D(sampler0, v_texcoord0.xy).xyz;
|
||||
|
||||
vec3 luma = vec3(0.299, 0.587, 0.114);
|
||||
float lumaNW = dot(rgbNW, luma);
|
||||
float lumaNE = dot(rgbNE, luma);
|
||||
float lumaSW = dot(rgbSW, luma);
|
||||
float lumaSE = dot(rgbSE, luma);
|
||||
float lumaM = dot( rgbM, luma);
|
||||
|
||||
float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));
|
||||
float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));
|
||||
|
||||
vec2 dir;
|
||||
dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));
|
||||
dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));
|
||||
|
||||
float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) * (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);
|
||||
|
||||
float rcpDirMin = 1.0/(min(abs(dir.x), abs(dir.y)) + dirReduce);
|
||||
|
||||
dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),
|
||||
max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX), dir * rcpDirMin)) * u_texelDelta;
|
||||
|
||||
vec3 rgbA = (1.0/2.0) * (
|
||||
texture2D(sampler0, v_texcoord0.xy + dir * (1.0/3.0 - 0.5)).xyz +
|
||||
texture2D(sampler0, v_texcoord0.xy + dir * (2.0/3.0 - 0.5)).xyz);
|
||||
vec3 rgbB = rgbA * (1.0/2.0) + (1.0/4.0) * (
|
||||
texture2D(sampler0, v_texcoord0.xy + dir * (0.0/3.0 - 0.5)).xyz +
|
||||
texture2D(sampler0, v_texcoord0.xy + dir * (3.0/3.0 - 0.5)).xyz);
|
||||
float lumaB = dot(rgbB, luma);
|
||||
|
||||
if((lumaB < lumaMin) || (lumaB > lumaMax)){
|
||||
gl_FragColor.xyz=rgbA;
|
||||
} else {
|
||||
gl_FragColor.xyz=rgbB;
|
||||
}
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
attribute vec4 a_position;
|
||||
attribute vec2 a_texcoord0;
|
||||
varying vec2 v_texcoord0;
|
||||
void main() {
|
||||
v_texcoord0 = a_texcoord0;
|
||||
gl_Position = a_position;
|
||||
}
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
attribute vec4 a_position;
|
||||
attribute vec2 a_texcoord0;
|
||||
varying vec2 v_texcoord0;
|
||||
void main() {
|
||||
v_texcoord0 = a_texcoord0;
|
||||
gl_Position = a_position;
|
||||
}
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
// Simple grayscale shader
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
varying vec2 v_texcoord0;
|
||||
|
||||
void main() {
|
||||
vec3 rgb = texture2D(sampler0, v_texcoord0.xy).xyz;
|
||||
float luma = dot(rgb, vec3(0.299, 0.587, 0.114));
|
||||
gl_FragColor.rgb = vec3(luma, luma, luma);
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
// Simple grayscale shader
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
varying vec2 v_texcoord0;
|
||||
|
||||
void main() {
|
||||
vec3 rgb = texture2D(sampler0, v_texcoord0.xy).xyz;
|
||||
float luma = dot(rgb, vec3(0.299, 0.587, 0.114));
|
||||
gl_FragColor.rgb = vec3(luma, luma, luma);
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
// Simple false color shader
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
varying vec2 v_texcoord0;
|
||||
|
||||
void main() {
|
||||
vec3 rgb = texture2D(sampler0, v_texcoord0.xy).xyz;
|
||||
float luma = dot(rgb, vec3(0.299, 0.587, 0.114));
|
||||
vec3 gray = vec3(luma, luma, luma) - 0.5;
|
||||
rgb -= vec3(0.5, 0.5, 0.5);
|
||||
|
||||
gl_FragColor.rgb = mix(rgb, gray, 2.0) + 0.5;
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
// Simple false color shader
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
varying vec2 v_texcoord0;
|
||||
|
||||
void main() {
|
||||
vec3 rgb = texture2D(sampler0, v_texcoord0.xy).xyz;
|
||||
float luma = dot(rgb, vec3(0.299, 0.587, 0.114));
|
||||
vec3 gray = vec3(luma, luma, luma) - 0.5;
|
||||
rgb -= vec3(0.5, 0.5, 0.5);
|
||||
|
||||
gl_FragColor.rgb = mix(rgb, gray, 2.0) + 0.5;
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
|
||||
@@ -1,58 +1,58 @@
|
||||
// Natural Vision Shader, modified to use in PPSSPP.
|
||||
|
||||
// by ShadX (Modded by SimoneT)
|
||||
// http://forums.ngemu.com/showthread.php?t=76098
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
varying vec4 v_texcoord0;
|
||||
varying vec4 v_texcoord1;
|
||||
varying vec4 v_texcoord2;
|
||||
varying vec4 v_texcoord3;
|
||||
|
||||
const mat3 RGBtoYIQ = mat3(0.299, 0.596, 0.212,
|
||||
0.587,-0.275,-0.523,
|
||||
0.114,-0.321, 0.311);
|
||||
|
||||
const mat3 YIQtoRGB = mat3(1.0, 1.0, 1.0,
|
||||
0.95568806036115671171,-0.27158179694405859326,-1.1081773266826619523,
|
||||
0.61985809445637075388,-0.64687381613840131330, 1.7050645599191817149);
|
||||
|
||||
const vec3 val00 = vec3( 1.2, 1.2, 1.2);
|
||||
|
||||
void main()
|
||||
{
|
||||
vec3 c0,c1;
|
||||
|
||||
c0 = texture2D(sampler0,v_texcoord0.xy).xyz;
|
||||
c0+=(texture2D(sampler0,v_texcoord0.zy).xyz)*0.25;
|
||||
c0+=(texture2D(sampler0,v_texcoord0.xw).xyz)*0.25;
|
||||
c0+=(texture2D(sampler0,v_texcoord0.zw).xyz)*0.125;
|
||||
|
||||
c0+= texture2D(sampler0,v_texcoord1.xy).xyz;
|
||||
c0+=(texture2D(sampler0,v_texcoord1.zy).xyz)*0.25;
|
||||
c0+=(texture2D(sampler0,v_texcoord1.xw).xyz)*0.25;
|
||||
c0+=(texture2D(sampler0,v_texcoord1.zw).xyz)*0.125;
|
||||
|
||||
c0+= texture2D(sampler0,v_texcoord2.xy).xyz;
|
||||
c0+=(texture2D(sampler0,v_texcoord2.zy).xyz)*0.25;
|
||||
c0+=(texture2D(sampler0,v_texcoord2.xw).xyz)*0.25;
|
||||
c0+=(texture2D(sampler0,v_texcoord2.zw).xyz)*0.125;
|
||||
|
||||
c0+= texture2D(sampler0,v_texcoord3.xy).xyz;
|
||||
c0+=(texture2D(sampler0,v_texcoord3.zy).xyz)*0.25;
|
||||
c0+=(texture2D(sampler0,v_texcoord3.xw).xyz)*0.25;
|
||||
c0+=(texture2D(sampler0,v_texcoord3.zw).xyz)*0.125;
|
||||
c0*=0.153846153846;
|
||||
|
||||
c1=RGBtoYIQ*c0;
|
||||
|
||||
c1=vec3(pow(c1.x,val00.x),c1.yz*val00.yz);
|
||||
|
||||
gl_FragColor.rgb=YIQtoRGB*c1;
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
// Natural Vision Shader, modified to use in PPSSPP.
|
||||
|
||||
// by ShadX (Modded by SimoneT)
|
||||
// http://forums.ngemu.com/showthread.php?t=76098
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
varying vec4 v_texcoord0;
|
||||
varying vec4 v_texcoord1;
|
||||
varying vec4 v_texcoord2;
|
||||
varying vec4 v_texcoord3;
|
||||
|
||||
const mat3 RGBtoYIQ = mat3(0.299, 0.596, 0.212,
|
||||
0.587,-0.275,-0.523,
|
||||
0.114,-0.321, 0.311);
|
||||
|
||||
const mat3 YIQtoRGB = mat3(1.0, 1.0, 1.0,
|
||||
0.95568806036115671171,-0.27158179694405859326,-1.1081773266826619523,
|
||||
0.61985809445637075388,-0.64687381613840131330, 1.7050645599191817149);
|
||||
|
||||
const vec3 val00 = vec3( 1.2, 1.2, 1.2);
|
||||
|
||||
void main()
|
||||
{
|
||||
vec3 c0,c1;
|
||||
|
||||
c0 = texture2D(sampler0,v_texcoord0.xy).xyz;
|
||||
c0+=(texture2D(sampler0,v_texcoord0.zy).xyz)*0.25;
|
||||
c0+=(texture2D(sampler0,v_texcoord0.xw).xyz)*0.25;
|
||||
c0+=(texture2D(sampler0,v_texcoord0.zw).xyz)*0.125;
|
||||
|
||||
c0+= texture2D(sampler0,v_texcoord1.xy).xyz;
|
||||
c0+=(texture2D(sampler0,v_texcoord1.zy).xyz)*0.25;
|
||||
c0+=(texture2D(sampler0,v_texcoord1.xw).xyz)*0.25;
|
||||
c0+=(texture2D(sampler0,v_texcoord1.zw).xyz)*0.125;
|
||||
|
||||
c0+= texture2D(sampler0,v_texcoord2.xy).xyz;
|
||||
c0+=(texture2D(sampler0,v_texcoord2.zy).xyz)*0.25;
|
||||
c0+=(texture2D(sampler0,v_texcoord2.xw).xyz)*0.25;
|
||||
c0+=(texture2D(sampler0,v_texcoord2.zw).xyz)*0.125;
|
||||
|
||||
c0+= texture2D(sampler0,v_texcoord3.xy).xyz;
|
||||
c0+=(texture2D(sampler0,v_texcoord3.zy).xyz)*0.25;
|
||||
c0+=(texture2D(sampler0,v_texcoord3.xw).xyz)*0.25;
|
||||
c0+=(texture2D(sampler0,v_texcoord3.zw).xyz)*0.125;
|
||||
c0*=0.153846153846;
|
||||
|
||||
c1=RGBtoYIQ*c0;
|
||||
|
||||
c1=vec3(pow(c1.x,val00.x),c1.yz*val00.yz);
|
||||
|
||||
gl_FragColor.rgb=YIQtoRGB*c1;
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
|
||||
@@ -1,24 +1,24 @@
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform vec2 u_texelDelta;
|
||||
|
||||
attribute vec4 a_position;
|
||||
attribute vec2 a_texcoord0;
|
||||
|
||||
varying vec4 v_texcoord0;
|
||||
varying vec4 v_texcoord1;
|
||||
varying vec4 v_texcoord2;
|
||||
varying vec4 v_texcoord3;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position=a_position;
|
||||
|
||||
v_texcoord0=a_texcoord0.xyxy+vec4(-0.5,-0.5,-1.5,-1.5)*u_texelDelta.xyxy;
|
||||
v_texcoord1=a_texcoord0.xyxy+vec4( 0.5,-0.5, 1.5,-1.5)*u_texelDelta.xyxy;
|
||||
v_texcoord2=a_texcoord0.xyxy+vec4(-0.5, 0.5,-1.5, 1.5)*u_texelDelta.xyxy;
|
||||
v_texcoord3=a_texcoord0.xyxy+vec4( 0.5, 0.5, 1.5, 1.5)*u_texelDelta.xyxy;
|
||||
}
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform vec2 u_texelDelta;
|
||||
|
||||
attribute vec4 a_position;
|
||||
attribute vec2 a_texcoord0;
|
||||
|
||||
varying vec4 v_texcoord0;
|
||||
varying vec4 v_texcoord1;
|
||||
varying vec4 v_texcoord2;
|
||||
varying vec4 v_texcoord3;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position=a_position;
|
||||
|
||||
v_texcoord0=a_texcoord0.xyxy+vec4(-0.5,-0.5,-1.5,-1.5)*u_texelDelta.xyxy;
|
||||
v_texcoord1=a_texcoord0.xyxy+vec4( 0.5,-0.5, 1.5,-1.5)*u_texelDelta.xyxy;
|
||||
v_texcoord2=a_texcoord0.xyxy+vec4(-0.5, 0.5,-1.5, 1.5)*u_texelDelta.xyxy;
|
||||
v_texcoord3=a_texcoord0.xyxy+vec4( 0.5, 0.5, 1.5, 1.5)*u_texelDelta.xyxy;
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
attribute vec4 a_position;
|
||||
attribute vec2 a_texcoord0;
|
||||
|
||||
varying vec2 v_texcoord0;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position=a_position;
|
||||
v_texcoord0=a_texcoord0;
|
||||
}
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
attribute vec4 a_position;
|
||||
attribute vec2 a_texcoord0;
|
||||
|
||||
varying vec2 v_texcoord0;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position=a_position;
|
||||
v_texcoord0=a_texcoord0;
|
||||
}
|
||||
|
||||
@@ -1,58 +1,58 @@
|
||||
/*
|
||||
psp_color vertex shader
|
||||
|
||||
Original code written by hunterk, modified by Pokefan531 and
|
||||
released into the public domain
|
||||
|
||||
'Ported' (i.e. copy/paste) to PPSSPP format by jdgleaver
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the Free
|
||||
Software Foundation; either version 2 of the License, or (at your option)
|
||||
any later version.
|
||||
|
||||
Notes: This shader replicates the LCD dynamics of the PSP 1000 and PSP 2000
|
||||
*/
|
||||
|
||||
//================
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
// For android, use this instead...
|
||||
//precision highp float;
|
||||
//precision highp int;
|
||||
//
|
||||
#endif
|
||||
|
||||
//================
|
||||
#define target_gamma 2.21
|
||||
#define display_gamma 2.2
|
||||
#define r 0.98
|
||||
#define g 0.795
|
||||
#define b 0.98
|
||||
#define rg 0.04
|
||||
#define rb 0.01
|
||||
#define gr 0.20
|
||||
#define gb 0.01
|
||||
#define br -0.18
|
||||
#define bg 0.165
|
||||
|
||||
//================
|
||||
uniform sampler2D sampler0;
|
||||
varying vec2 v_texcoord0;
|
||||
|
||||
//================
|
||||
void main()
|
||||
{
|
||||
// Apply colour correction
|
||||
vec3 screen = pow(texture2D(sampler0, v_texcoord0.xy).rgb, vec3(target_gamma));
|
||||
// screen = clamp(screen, 0.0, 1.0);
|
||||
screen = pow(
|
||||
mat3(r, rg, rb,
|
||||
gr, g, gb,
|
||||
br, bg, b) * screen,
|
||||
vec3(1.0 / display_gamma)
|
||||
);
|
||||
|
||||
gl_FragColor = vec4(screen, 1.0);
|
||||
}
|
||||
/*
|
||||
psp_color vertex shader
|
||||
|
||||
Original code written by hunterk, modified by Pokefan531 and
|
||||
released into the public domain
|
||||
|
||||
'Ported' (i.e. copy/paste) to PPSSPP format by jdgleaver
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the Free
|
||||
Software Foundation; either version 2 of the License, or (at your option)
|
||||
any later version.
|
||||
|
||||
Notes: This shader replicates the LCD dynamics of the PSP 1000 and PSP 2000
|
||||
*/
|
||||
|
||||
//================
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
// For android, use this instead...
|
||||
//precision highp float;
|
||||
//precision highp int;
|
||||
//
|
||||
#endif
|
||||
|
||||
//================
|
||||
#define target_gamma 2.21
|
||||
#define display_gamma 2.2
|
||||
#define r 0.98
|
||||
#define g 0.795
|
||||
#define b 0.98
|
||||
#define rg 0.04
|
||||
#define rb 0.01
|
||||
#define gr 0.20
|
||||
#define gb 0.01
|
||||
#define br -0.18
|
||||
#define bg 0.165
|
||||
|
||||
//================
|
||||
uniform sampler2D sampler0;
|
||||
varying vec2 v_texcoord0;
|
||||
|
||||
//================
|
||||
void main()
|
||||
{
|
||||
// Apply colour correction
|
||||
vec3 screen = pow(texture2D(sampler0, v_texcoord0.xy).rgb, vec3(target_gamma));
|
||||
// screen = clamp(screen, 0.0, 1.0);
|
||||
screen = pow(
|
||||
mat3(r, rg, rb,
|
||||
gr, g, gb,
|
||||
br, bg, b) * screen,
|
||||
vec3(1.0 / display_gamma)
|
||||
);
|
||||
|
||||
gl_FragColor = vec4(screen, 1.0);
|
||||
}
|
||||
|
||||
@@ -1,29 +1,29 @@
|
||||
// Advanced Scanlines (CRT) shader, created to use in PPSSPP.
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
varying vec2 v_texcoord0;
|
||||
|
||||
uniform vec4 u_setting;
|
||||
|
||||
void main()
|
||||
{
|
||||
float pos0 = ((v_texcoord0.y + 1.0) * 170.0*u_setting.x);
|
||||
float pos1 = cos((fract( pos0 ) - 0.5)*3.1415926*u_setting.y)*1.5;
|
||||
vec4 rgb = texture2D( sampler0, v_texcoord0 );
|
||||
|
||||
// slight contrast curve
|
||||
vec4 color = rgb*0.5+0.5*rgb*rgb*1.2;
|
||||
|
||||
// color tint
|
||||
color *= vec4(0.9,1.0,0.7, 0.0);
|
||||
|
||||
// vignette
|
||||
color *= 1.1 - 0.6 * (dot(v_texcoord0 - 0.5, v_texcoord0 - 0.5) * 2.0);
|
||||
|
||||
gl_FragColor.rgba = mix(vec4(0,0,0,0), color, pos1);
|
||||
}
|
||||
// Advanced Scanlines (CRT) shader, created to use in PPSSPP.
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
varying vec2 v_texcoord0;
|
||||
|
||||
uniform vec4 u_setting;
|
||||
|
||||
void main()
|
||||
{
|
||||
float pos0 = ((v_texcoord0.y + 1.0) * 170.0*u_setting.x);
|
||||
float pos1 = cos((fract( pos0 ) - 0.5)*3.1415926*u_setting.y)*1.5;
|
||||
vec4 rgb = texture2D( sampler0, v_texcoord0 );
|
||||
|
||||
// slight contrast curve
|
||||
vec4 color = rgb*0.5+0.5*rgb*rgb*1.2;
|
||||
|
||||
// color tint
|
||||
color *= vec4(0.9,1.0,0.7, 0.0);
|
||||
|
||||
// vignette
|
||||
color *= 1.1 - 0.6 * (dot(v_texcoord0 - 0.5, v_texcoord0 - 0.5) * 2.0);
|
||||
|
||||
gl_FragColor.rgba = mix(vec4(0,0,0,0), color, pos1);
|
||||
}
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
// Simple sharpen shader; created to use in PPSSPP
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
varying vec2 v_texcoord0;
|
||||
|
||||
uniform vec4 u_setting;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec3 color = texture2D(sampler0, v_texcoord0.xy).xyz;
|
||||
color -= texture2D(sampler0, v_texcoord0.xy+0.0001).xyz*7.0*u_setting.x;
|
||||
color += texture2D(sampler0, v_texcoord0.xy-0.0001).xyz*7.0*u_setting.x;
|
||||
gl_FragColor.rgb = color;
|
||||
}
|
||||
// Simple sharpen shader; created to use in PPSSPP
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
varying vec2 v_texcoord0;
|
||||
|
||||
uniform vec4 u_setting;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec3 color = texture2D(sampler0, v_texcoord0.xy).xyz;
|
||||
color -= texture2D(sampler0, v_texcoord0.xy+0.0001).xyz*7.0*u_setting.x;
|
||||
color += texture2D(sampler0, v_texcoord0.xy-0.0001).xyz*7.0*u_setting.x;
|
||||
gl_FragColor.rgb = color;
|
||||
}
|
||||
|
||||
@@ -1,279 +1,279 @@
|
||||
// 4xBRZ shader - Copyright (C) 2014-2016 DeSmuME team (GPL2+)
|
||||
// Hyllian's xBR-vertex code and texel mapping
|
||||
// Copyright (C) 2011/2016 Hyllian - sergiogdb@gmail.com
|
||||
#define BLEND_ALPHA 1
|
||||
#define BLEND_NONE 0
|
||||
#define BLEND_NORMAL 1
|
||||
#define BLEND_DOMINANT 2
|
||||
#define LUMINANCE_WEIGHT 1.0
|
||||
#define EQUAL_COLOR_TOLERANCE 30.0/255.0
|
||||
#define STEEP_DIRECTION_THRESHOLD 2.2
|
||||
#define DOMINANT_DIRECTION_THRESHOLD 3.6
|
||||
|
||||
float reduce(vec4 color) {
|
||||
return dot(color.rgb, vec3(65536.0, 256.0, 1.0));
|
||||
}
|
||||
|
||||
float DistYCbCr(vec4 pixA, vec4 pixB) {
|
||||
// https://en.wikipedia.org/wiki/YCbCr#ITU-R_BT.2020_conversion
|
||||
const vec3 K = vec3(0.2627, 0.6780, 0.0593);
|
||||
const mat3 MATRIX = mat3(K,
|
||||
-.5 * K.r / (1.0 - K.b), -.5 * K.g / (1.0 - K.b), .5,
|
||||
.5, -.5 * K.g / (1.0 - K.r), -.5 * K.b / (1.0 - K.r));
|
||||
vec4 diff = pixA - pixB;
|
||||
vec3 YCbCr = diff.rgb * MATRIX;
|
||||
YCbCr.x *= LUMINANCE_WEIGHT;
|
||||
float d = length(YCbCr);
|
||||
return sqrt(pixA.a * pixB.a * d * d + diff.a * diff.a);
|
||||
}
|
||||
|
||||
bool IsPixEqual(const vec4 pixA, const vec4 pixB) {
|
||||
return (DistYCbCr(pixA, pixB) < EQUAL_COLOR_TOLERANCE);
|
||||
}
|
||||
|
||||
bool IsBlendingNeeded(const ivec4 blend) {
|
||||
ivec4 diff = blend - ivec4(BLEND_NONE);
|
||||
return diff.x != 0 || diff.y != 0 || diff.z != 0 || diff.w != 0;
|
||||
}
|
||||
|
||||
vec4 applyScalingf(uvec2 origxy, uvec2 xy) {
|
||||
float dx = 1.0 / params.width;
|
||||
float dy = 1.0 / params.height;
|
||||
|
||||
// A1 B1 C1
|
||||
// A0 A B C C4
|
||||
// D0 D E F F4
|
||||
// G0 G H I I4
|
||||
// G5 H5 I5
|
||||
|
||||
uvec4 t1 = uvec4(origxy.x - 1, origxy.x, origxy.x + 1, origxy.y - 2); // A1 B1 C1
|
||||
uvec4 t2 = uvec4(origxy.x - 1, origxy.x, origxy.x + 1, origxy.y - 1); // A B C
|
||||
uvec4 t3 = uvec4(origxy.x - 1, origxy.x, origxy.x + 1, origxy.y + 0); // D E F
|
||||
uvec4 t4 = uvec4(origxy.x - 1, origxy.x, origxy.x + 1, origxy.y + 1); // G H I
|
||||
uvec4 t5 = uvec4(origxy.x - 1, origxy.x, origxy.x + 1, origxy.y + 2); // G5 H5 I5
|
||||
uvec4 t6 = uvec4(origxy.x - 2, origxy.y - 1, origxy.y, origxy.y + 1); // A0 D0 G0
|
||||
uvec4 t7 = uvec4(origxy.x + 2, origxy.y - 1, origxy.y, origxy.y + 1); // C4 F4 I4
|
||||
|
||||
vec2 f = fract(vec2(float(xy.x) / float(params.scale), float(xy.y) / float(params.scale)));
|
||||
|
||||
//---------------------------------------
|
||||
// Input Pixel Mapping: |21|22|23|
|
||||
// 19|06|07|08|09
|
||||
// 18|05|00|01|10
|
||||
// 17|04|03|02|11
|
||||
// |15|14|13|
|
||||
|
||||
vec4 src[25];
|
||||
|
||||
src[21] = readColorf(t1.xw);
|
||||
src[22] = readColorf(t1.yw);
|
||||
src[23] = readColorf(t1.zw);
|
||||
src[ 6] = readColorf(t2.xw);
|
||||
src[ 7] = readColorf(t2.yw);
|
||||
src[ 8] = readColorf(t2.zw);
|
||||
src[ 5] = readColorf(t3.xw);
|
||||
src[ 0] = readColorf(t3.yw);
|
||||
src[ 1] = readColorf(t3.zw);
|
||||
src[ 4] = readColorf(t4.xw);
|
||||
src[ 3] = readColorf(t4.yw);
|
||||
src[ 2] = readColorf(t4.zw);
|
||||
src[15] = readColorf(t5.xw);
|
||||
src[14] = readColorf(t5.yw);
|
||||
src[13] = readColorf(t5.zw);
|
||||
src[19] = readColorf(t6.xy);
|
||||
src[18] = readColorf(t6.xz);
|
||||
src[17] = readColorf(t6.xw);
|
||||
src[ 9] = readColorf(t7.xy);
|
||||
src[10] = readColorf(t7.xz);
|
||||
src[11] = readColorf(t7.xw);
|
||||
|
||||
float v[9];
|
||||
v[0] = reduce(src[0]);
|
||||
v[1] = reduce(src[1]);
|
||||
v[2] = reduce(src[2]);
|
||||
v[3] = reduce(src[3]);
|
||||
v[4] = reduce(src[4]);
|
||||
v[5] = reduce(src[5]);
|
||||
v[6] = reduce(src[6]);
|
||||
v[7] = reduce(src[7]);
|
||||
v[8] = reduce(src[8]);
|
||||
|
||||
ivec4 blendResult = ivec4(BLEND_NONE);
|
||||
|
||||
// Preprocess corners
|
||||
// Pixel Tap Mapping: --|--|--|--|--
|
||||
// --|--|07|08|--
|
||||
// --|05|00|01|10
|
||||
// --|04|03|02|11
|
||||
// --|--|14|13|--
|
||||
// Corner (1, 1)
|
||||
if ( ((v[0] == v[1] && v[3] == v[2]) || (v[0] == v[3] && v[1] == v[2])) == false) {
|
||||
float dist_03_01 = DistYCbCr(src[ 4], src[ 0]) + DistYCbCr(src[ 0], src[ 8]) + DistYCbCr(src[14], src[ 2]) + DistYCbCr(src[ 2], src[10]) + (4.0 * DistYCbCr(src[ 3], src[ 1]));
|
||||
float dist_00_02 = DistYCbCr(src[ 5], src[ 3]) + DistYCbCr(src[ 3], src[13]) + DistYCbCr(src[ 7], src[ 1]) + DistYCbCr(src[ 1], src[11]) + (4.0 * DistYCbCr(src[ 0], src[ 2]));
|
||||
bool dominantGradient = (DOMINANT_DIRECTION_THRESHOLD * dist_03_01) < dist_00_02;
|
||||
blendResult[2] = ((dist_03_01 < dist_00_02) && (v[0] != v[1]) && (v[0] != v[3])) ? ((dominantGradient) ? BLEND_DOMINANT : BLEND_NORMAL) : BLEND_NONE;
|
||||
}
|
||||
|
||||
// Pixel Tap Mapping: --|--|--|--|--
|
||||
// --|06|07|--|--
|
||||
// 18|05|00|01|--
|
||||
// 17|04|03|02|--
|
||||
// --|15|14|--|--
|
||||
// Corner (0, 1)
|
||||
if ( ((v[5] == v[0] && v[4] == v[3]) || (v[5] == v[4] && v[0] == v[3])) == false) {
|
||||
float dist_04_00 = DistYCbCr(src[17], src[ 5]) + DistYCbCr(src[ 5], src[ 7]) + DistYCbCr(src[15], src[ 3]) + DistYCbCr(src[ 3], src[ 1]) + (4.0 * DistYCbCr(src[ 4], src[ 0]));
|
||||
float dist_05_03 = DistYCbCr(src[18], src[ 4]) + DistYCbCr(src[ 4], src[14]) + DistYCbCr(src[ 6], src[ 0]) + DistYCbCr(src[ 0], src[ 2]) + (4.0 * DistYCbCr(src[ 5], src[ 3]));
|
||||
bool dominantGradient = (DOMINANT_DIRECTION_THRESHOLD * dist_05_03) < dist_04_00;
|
||||
blendResult[3] = ((dist_04_00 > dist_05_03) && (v[0] != v[5]) && (v[0] != v[3])) ? ((dominantGradient) ? BLEND_DOMINANT : BLEND_NORMAL) : BLEND_NONE;
|
||||
}
|
||||
|
||||
// Pixel Tap Mapping: --|--|22|23|--
|
||||
// --|06|07|08|09
|
||||
// --|05|00|01|10
|
||||
// --|--|03|02|--
|
||||
// --|--|--|--|--
|
||||
// Corner (1, 0)
|
||||
if ( ((v[7] == v[8] && v[0] == v[1]) || (v[7] == v[0] && v[8] == v[1])) == false) {
|
||||
float dist_00_08 = DistYCbCr(src[ 5], src[ 7]) + DistYCbCr(src[ 7], src[23]) + DistYCbCr(src[ 3], src[ 1]) + DistYCbCr(src[ 1], src[ 9]) + (4.0 * DistYCbCr(src[ 0], src[ 8]));
|
||||
float dist_07_01 = DistYCbCr(src[ 6], src[ 0]) + DistYCbCr(src[ 0], src[ 2]) + DistYCbCr(src[22], src[ 8]) + DistYCbCr(src[ 8], src[10]) + (4.0 * DistYCbCr(src[ 7], src[ 1]));
|
||||
bool dominantGradient = (DOMINANT_DIRECTION_THRESHOLD * dist_07_01) < dist_00_08;
|
||||
blendResult[1] = ((dist_00_08 > dist_07_01) && (v[0] != v[7]) && (v[0] != v[1])) ? ((dominantGradient) ? BLEND_DOMINANT : BLEND_NORMAL) : BLEND_NONE;
|
||||
}
|
||||
|
||||
// Pixel Tap Mapping: --|21|22|--|--
|
||||
// 19|06|07|08|--
|
||||
// 18|05|00|01|--
|
||||
// --|04|03|--|--
|
||||
// --|--|--|--|--
|
||||
// Corner (0, 0)
|
||||
if ( ((v[6] == v[7] && v[5] == v[0]) || (v[6] == v[5] && v[7] == v[0])) == false) {
|
||||
float dist_05_07 = DistYCbCr(src[18], src[ 6]) + DistYCbCr(src[ 6], src[22]) + DistYCbCr(src[ 4], src[ 0]) + DistYCbCr(src[ 0], src[ 8]) + (4.0 * DistYCbCr(src[ 5], src[ 7]));
|
||||
float dist_06_00 = DistYCbCr(src[19], src[ 5]) + DistYCbCr(src[ 5], src[ 3]) + DistYCbCr(src[21], src[ 7]) + DistYCbCr(src[ 7], src[ 1]) + (4.0 * DistYCbCr(src[ 6], src[ 0]));
|
||||
bool dominantGradient = (DOMINANT_DIRECTION_THRESHOLD * dist_05_07) < dist_06_00;
|
||||
blendResult[0] = ((dist_05_07 < dist_06_00) && (v[0] != v[5]) && (v[0] != v[7])) ? ((dominantGradient) ? BLEND_DOMINANT : BLEND_NORMAL) : BLEND_NONE;
|
||||
}
|
||||
|
||||
vec4 dst[16];
|
||||
dst[ 0] = src[0];
|
||||
dst[ 1] = src[0];
|
||||
dst[ 2] = src[0];
|
||||
dst[ 3] = src[0];
|
||||
dst[ 4] = src[0];
|
||||
dst[ 5] = src[0];
|
||||
dst[ 6] = src[0];
|
||||
dst[ 7] = src[0];
|
||||
dst[ 8] = src[0];
|
||||
dst[ 9] = src[0];
|
||||
dst[10] = src[0];
|
||||
dst[11] = src[0];
|
||||
dst[12] = src[0];
|
||||
dst[13] = src[0];
|
||||
dst[14] = src[0];
|
||||
dst[15] = src[0];
|
||||
|
||||
// Scale pixel
|
||||
if (IsBlendingNeeded(blendResult) == true) {
|
||||
float dist_01_04 = DistYCbCr(src[1], src[4]);
|
||||
float dist_03_08 = DistYCbCr(src[3], src[8]);
|
||||
bool haveShallowLine = (STEEP_DIRECTION_THRESHOLD * dist_01_04 <= dist_03_08) && (v[0] != v[4]) && (v[5] != v[4]);
|
||||
bool haveSteepLine = (STEEP_DIRECTION_THRESHOLD * dist_03_08 <= dist_01_04) && (v[0] != v[8]) && (v[7] != v[8]);
|
||||
bool needBlend = (blendResult[2] != BLEND_NONE);
|
||||
bool doLineBlend = ( blendResult[2] >= BLEND_DOMINANT ||
|
||||
((blendResult[1] != BLEND_NONE && !IsPixEqual(src[0], src[4])) ||
|
||||
(blendResult[3] != BLEND_NONE && !IsPixEqual(src[0], src[8])) ||
|
||||
(IsPixEqual(src[4], src[3]) && IsPixEqual(src[3], src[2]) && IsPixEqual(src[2], src[1]) && IsPixEqual(src[1], src[8]) && IsPixEqual(src[0], src[2]) == false) ) == false );
|
||||
|
||||
vec4 blendPix = ( DistYCbCr(src[0], src[1]) <= DistYCbCr(src[0], src[3]) ) ? src[1] : src[3];
|
||||
dst[ 2] = mix(dst[ 2], blendPix, (needBlend && doLineBlend) ? ((haveShallowLine) ? ((haveSteepLine) ? 1.0/3.0 : 0.25) : ((haveSteepLine) ? 0.25 : 0.00)) : 0.00);
|
||||
dst[ 9] = mix(dst[ 9], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.25 : 0.00);
|
||||
dst[10] = mix(dst[10], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.75 : 0.00);
|
||||
dst[11] = mix(dst[11], blendPix, (needBlend) ? ((doLineBlend) ? ((haveSteepLine) ? 1.00 : ((haveShallowLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00);
|
||||
dst[12] = mix(dst[12], blendPix, (needBlend) ? ((doLineBlend) ? 1.00 : 0.6848532563) : 0.00);
|
||||
dst[13] = mix(dst[13], blendPix, (needBlend) ? ((doLineBlend) ? ((haveShallowLine) ? 1.00 : ((haveSteepLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00);
|
||||
dst[14] = mix(dst[14], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.75 : 0.00);
|
||||
dst[15] = mix(dst[15], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.25 : 0.00);
|
||||
|
||||
dist_01_04 = DistYCbCr(src[7], src[2]);
|
||||
dist_03_08 = DistYCbCr(src[1], src[6]);
|
||||
haveShallowLine = (STEEP_DIRECTION_THRESHOLD * dist_01_04 <= dist_03_08) && (v[0] != v[2]) && (v[3] != v[2]);
|
||||
haveSteepLine = (STEEP_DIRECTION_THRESHOLD * dist_03_08 <= dist_01_04) && (v[0] != v[6]) && (v[5] != v[6]);
|
||||
needBlend = (blendResult[1] != BLEND_NONE);
|
||||
doLineBlend = ( blendResult[1] >= BLEND_DOMINANT ||
|
||||
!((blendResult[0] != BLEND_NONE && !IsPixEqual(src[0], src[2])) ||
|
||||
(blendResult[2] != BLEND_NONE && !IsPixEqual(src[0], src[6])) ||
|
||||
(IsPixEqual(src[2], src[1]) && IsPixEqual(src[1], src[8]) && IsPixEqual(src[8], src[7]) && IsPixEqual(src[7], src[6]) && !IsPixEqual(src[0], src[8])) ) );
|
||||
|
||||
blendPix = ( DistYCbCr(src[0], src[7]) <= DistYCbCr(src[0], src[1]) ) ? src[7] : src[1];
|
||||
dst[ 1] = mix(dst[ 1], blendPix, (needBlend && doLineBlend) ? ((haveShallowLine) ? ((haveSteepLine) ? 1.0/3.0 : 0.25) : ((haveSteepLine) ? 0.25 : 0.00)) : 0.00);
|
||||
dst[ 6] = mix(dst[ 6], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.25 : 0.00);
|
||||
dst[ 7] = mix(dst[ 7], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.75 : 0.00);
|
||||
dst[ 8] = mix(dst[ 8], blendPix, (needBlend) ? ((doLineBlend) ? ((haveSteepLine) ? 1.00 : ((haveShallowLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00);
|
||||
dst[ 9] = mix(dst[ 9], blendPix, (needBlend) ? ((doLineBlend) ? 1.00 : 0.6848532563) : 0.00);
|
||||
dst[10] = mix(dst[10], blendPix, (needBlend) ? ((doLineBlend) ? ((haveShallowLine) ? 1.00 : ((haveSteepLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00);
|
||||
dst[11] = mix(dst[11], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.75 : 0.00);
|
||||
dst[12] = mix(dst[12], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.25 : 0.00);
|
||||
|
||||
dist_01_04 = DistYCbCr(src[5], src[8]);
|
||||
dist_03_08 = DistYCbCr(src[7], src[4]);
|
||||
haveShallowLine = (STEEP_DIRECTION_THRESHOLD * dist_01_04 <= dist_03_08) && (v[0] != v[8]) && (v[1] != v[8]);
|
||||
haveSteepLine = (STEEP_DIRECTION_THRESHOLD * dist_03_08 <= dist_01_04) && (v[0] != v[4]) && (v[3] != v[4]);
|
||||
needBlend = (blendResult[0] != BLEND_NONE);
|
||||
doLineBlend = ( blendResult[0] >= BLEND_DOMINANT ||
|
||||
!((blendResult[3] != BLEND_NONE && !IsPixEqual(src[0], src[8])) ||
|
||||
(blendResult[1] != BLEND_NONE && !IsPixEqual(src[0], src[4])) ||
|
||||
(IsPixEqual(src[8], src[7]) && IsPixEqual(src[7], src[6]) && IsPixEqual(src[6], src[5]) && IsPixEqual(src[5], src[4]) && !IsPixEqual(src[0], src[6])) ) );
|
||||
|
||||
blendPix = ( DistYCbCr(src[0], src[5]) <= DistYCbCr(src[0], src[7]) ) ? src[5] : src[7];
|
||||
dst[ 0] = mix(dst[ 0], blendPix, (needBlend && doLineBlend) ? ((haveShallowLine) ? ((haveSteepLine) ? 1.0/3.0 : 0.25) : ((haveSteepLine) ? 0.25 : 0.00)) : 0.00);
|
||||
dst[15] = mix(dst[15], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.25 : 0.00);
|
||||
dst[ 4] = mix(dst[ 4], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.75 : 0.00);
|
||||
dst[ 5] = mix(dst[ 5], blendPix, (needBlend) ? ((doLineBlend) ? ((haveSteepLine) ? 1.00 : ((haveShallowLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00);
|
||||
dst[ 6] = mix(dst[ 6], blendPix, (needBlend) ? ((doLineBlend) ? 1.00 : 0.6848532563) : 0.00);
|
||||
dst[ 7] = mix(dst[ 7], blendPix, (needBlend) ? ((doLineBlend) ? ((haveShallowLine) ? 1.00 : ((haveSteepLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00);
|
||||
dst[ 8] = mix(dst[ 8], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.75 : 0.00);
|
||||
dst[ 9] = mix(dst[ 9], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.25 : 0.00);
|
||||
|
||||
dist_01_04 = DistYCbCr(src[3], src[6]);
|
||||
dist_03_08 = DistYCbCr(src[5], src[2]);
|
||||
haveShallowLine = (STEEP_DIRECTION_THRESHOLD * dist_01_04 <= dist_03_08) && (v[0] != v[6]) && (v[7] != v[6]);
|
||||
haveSteepLine = (STEEP_DIRECTION_THRESHOLD * dist_03_08 <= dist_01_04) && (v[0] != v[2]) && (v[1] != v[2]);
|
||||
needBlend = (blendResult[3] != BLEND_NONE);
|
||||
doLineBlend = ( blendResult[3] >= BLEND_DOMINANT ||
|
||||
!((blendResult[2] != BLEND_NONE && !IsPixEqual(src[0], src[6])) ||
|
||||
(blendResult[0] != BLEND_NONE && !IsPixEqual(src[0], src[2])) ||
|
||||
(IsPixEqual(src[6], src[5]) && IsPixEqual(src[5], src[4]) && IsPixEqual(src[4], src[3]) && IsPixEqual(src[3], src[2]) && !IsPixEqual(src[0], src[4])) ) );
|
||||
|
||||
blendPix = ( DistYCbCr(src[0], src[3]) <= DistYCbCr(src[0], src[5]) ) ? src[3] : src[5];
|
||||
dst[ 3] = mix(dst[ 3], blendPix, (needBlend && doLineBlend) ? ((haveShallowLine) ? ((haveSteepLine) ? 1.0/3.0 : 0.25) : ((haveSteepLine) ? 0.25 : 0.00)) : 0.00);
|
||||
dst[12] = mix(dst[12], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.25 : 0.00);
|
||||
dst[13] = mix(dst[13], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.75 : 0.00);
|
||||
dst[14] = mix(dst[14], blendPix, (needBlend) ? ((doLineBlend) ? ((haveSteepLine) ? 1.00 : ((haveShallowLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00);
|
||||
dst[15] = mix(dst[15], blendPix, (needBlend) ? ((doLineBlend) ? 1.00 : 0.6848532563) : 0.00);
|
||||
dst[ 4] = mix(dst[ 4], blendPix, (needBlend) ? ((doLineBlend) ? ((haveShallowLine) ? 1.00 : ((haveSteepLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00);
|
||||
dst[ 5] = mix(dst[ 5], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.75 : 0.00);
|
||||
dst[ 6] = mix(dst[ 6], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.25 : 0.00);
|
||||
}
|
||||
|
||||
// select output pixel
|
||||
vec4 res = mix(mix(mix(mix(dst[ 6], dst[ 7], step(0.25, f.x)),
|
||||
mix(dst[ 8], dst[ 9], step(0.75, f.x)),
|
||||
step(0.50, f.x)),
|
||||
mix(mix(dst[ 5], dst[ 0], step(0.25, f.x)),
|
||||
mix(dst[ 1], dst[10], step(0.75, f.x)),
|
||||
step(0.50, f.x)),
|
||||
step(0.25, f.y)),
|
||||
mix(mix(mix(dst[ 4], dst[ 3], step(0.25, f.x)),
|
||||
mix(dst[ 2], dst[11], step(0.75, f.x)),
|
||||
step(0.50, f.x)),
|
||||
mix(mix(dst[15], dst[14], step(0.25, f.x)),
|
||||
mix(dst[13], dst[12], step(0.75, f.x)),
|
||||
step(0.50, f.x)),
|
||||
step(0.75, f.y)),
|
||||
step(0.50, f.y));
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
uint applyScalingu(uvec2 origxy, uvec2 xy) {
|
||||
return packUnorm4x8(applyScalingf(origxy, xy));
|
||||
}
|
||||
// 4xBRZ shader - Copyright (C) 2014-2016 DeSmuME team (GPL2+)
|
||||
// Hyllian's xBR-vertex code and texel mapping
|
||||
// Copyright (C) 2011/2016 Hyllian - sergiogdb@gmail.com
|
||||
#define BLEND_ALPHA 1
|
||||
#define BLEND_NONE 0
|
||||
#define BLEND_NORMAL 1
|
||||
#define BLEND_DOMINANT 2
|
||||
#define LUMINANCE_WEIGHT 1.0
|
||||
#define EQUAL_COLOR_TOLERANCE 30.0/255.0
|
||||
#define STEEP_DIRECTION_THRESHOLD 2.2
|
||||
#define DOMINANT_DIRECTION_THRESHOLD 3.6
|
||||
|
||||
float reduce(vec4 color) {
|
||||
return dot(color.rgb, vec3(65536.0, 256.0, 1.0));
|
||||
}
|
||||
|
||||
float DistYCbCr(vec4 pixA, vec4 pixB) {
|
||||
// https://en.wikipedia.org/wiki/YCbCr#ITU-R_BT.2020_conversion
|
||||
const vec3 K = vec3(0.2627, 0.6780, 0.0593);
|
||||
const mat3 MATRIX = mat3(K,
|
||||
-.5 * K.r / (1.0 - K.b), -.5 * K.g / (1.0 - K.b), .5,
|
||||
.5, -.5 * K.g / (1.0 - K.r), -.5 * K.b / (1.0 - K.r));
|
||||
vec4 diff = pixA - pixB;
|
||||
vec3 YCbCr = diff.rgb * MATRIX;
|
||||
YCbCr.x *= LUMINANCE_WEIGHT;
|
||||
float d = length(YCbCr);
|
||||
return sqrt(pixA.a * pixB.a * d * d + diff.a * diff.a);
|
||||
}
|
||||
|
||||
bool IsPixEqual(const vec4 pixA, const vec4 pixB) {
|
||||
return (DistYCbCr(pixA, pixB) < EQUAL_COLOR_TOLERANCE);
|
||||
}
|
||||
|
||||
bool IsBlendingNeeded(const ivec4 blend) {
|
||||
ivec4 diff = blend - ivec4(BLEND_NONE);
|
||||
return diff.x != 0 || diff.y != 0 || diff.z != 0 || diff.w != 0;
|
||||
}
|
||||
|
||||
vec4 applyScalingf(uvec2 origxy, uvec2 xy) {
|
||||
float dx = 1.0 / params.width;
|
||||
float dy = 1.0 / params.height;
|
||||
|
||||
// A1 B1 C1
|
||||
// A0 A B C C4
|
||||
// D0 D E F F4
|
||||
// G0 G H I I4
|
||||
// G5 H5 I5
|
||||
|
||||
uvec4 t1 = uvec4(origxy.x - 1, origxy.x, origxy.x + 1, origxy.y - 2); // A1 B1 C1
|
||||
uvec4 t2 = uvec4(origxy.x - 1, origxy.x, origxy.x + 1, origxy.y - 1); // A B C
|
||||
uvec4 t3 = uvec4(origxy.x - 1, origxy.x, origxy.x + 1, origxy.y + 0); // D E F
|
||||
uvec4 t4 = uvec4(origxy.x - 1, origxy.x, origxy.x + 1, origxy.y + 1); // G H I
|
||||
uvec4 t5 = uvec4(origxy.x - 1, origxy.x, origxy.x + 1, origxy.y + 2); // G5 H5 I5
|
||||
uvec4 t6 = uvec4(origxy.x - 2, origxy.y - 1, origxy.y, origxy.y + 1); // A0 D0 G0
|
||||
uvec4 t7 = uvec4(origxy.x + 2, origxy.y - 1, origxy.y, origxy.y + 1); // C4 F4 I4
|
||||
|
||||
vec2 f = fract(vec2(float(xy.x) / float(params.scale), float(xy.y) / float(params.scale)));
|
||||
|
||||
//---------------------------------------
|
||||
// Input Pixel Mapping: |21|22|23|
|
||||
// 19|06|07|08|09
|
||||
// 18|05|00|01|10
|
||||
// 17|04|03|02|11
|
||||
// |15|14|13|
|
||||
|
||||
vec4 src[25];
|
||||
|
||||
src[21] = readColorf(t1.xw);
|
||||
src[22] = readColorf(t1.yw);
|
||||
src[23] = readColorf(t1.zw);
|
||||
src[ 6] = readColorf(t2.xw);
|
||||
src[ 7] = readColorf(t2.yw);
|
||||
src[ 8] = readColorf(t2.zw);
|
||||
src[ 5] = readColorf(t3.xw);
|
||||
src[ 0] = readColorf(t3.yw);
|
||||
src[ 1] = readColorf(t3.zw);
|
||||
src[ 4] = readColorf(t4.xw);
|
||||
src[ 3] = readColorf(t4.yw);
|
||||
src[ 2] = readColorf(t4.zw);
|
||||
src[15] = readColorf(t5.xw);
|
||||
src[14] = readColorf(t5.yw);
|
||||
src[13] = readColorf(t5.zw);
|
||||
src[19] = readColorf(t6.xy);
|
||||
src[18] = readColorf(t6.xz);
|
||||
src[17] = readColorf(t6.xw);
|
||||
src[ 9] = readColorf(t7.xy);
|
||||
src[10] = readColorf(t7.xz);
|
||||
src[11] = readColorf(t7.xw);
|
||||
|
||||
float v[9];
|
||||
v[0] = reduce(src[0]);
|
||||
v[1] = reduce(src[1]);
|
||||
v[2] = reduce(src[2]);
|
||||
v[3] = reduce(src[3]);
|
||||
v[4] = reduce(src[4]);
|
||||
v[5] = reduce(src[5]);
|
||||
v[6] = reduce(src[6]);
|
||||
v[7] = reduce(src[7]);
|
||||
v[8] = reduce(src[8]);
|
||||
|
||||
ivec4 blendResult = ivec4(BLEND_NONE);
|
||||
|
||||
// Preprocess corners
|
||||
// Pixel Tap Mapping: --|--|--|--|--
|
||||
// --|--|07|08|--
|
||||
// --|05|00|01|10
|
||||
// --|04|03|02|11
|
||||
// --|--|14|13|--
|
||||
// Corner (1, 1)
|
||||
if ( ((v[0] == v[1] && v[3] == v[2]) || (v[0] == v[3] && v[1] == v[2])) == false) {
|
||||
float dist_03_01 = DistYCbCr(src[ 4], src[ 0]) + DistYCbCr(src[ 0], src[ 8]) + DistYCbCr(src[14], src[ 2]) + DistYCbCr(src[ 2], src[10]) + (4.0 * DistYCbCr(src[ 3], src[ 1]));
|
||||
float dist_00_02 = DistYCbCr(src[ 5], src[ 3]) + DistYCbCr(src[ 3], src[13]) + DistYCbCr(src[ 7], src[ 1]) + DistYCbCr(src[ 1], src[11]) + (4.0 * DistYCbCr(src[ 0], src[ 2]));
|
||||
bool dominantGradient = (DOMINANT_DIRECTION_THRESHOLD * dist_03_01) < dist_00_02;
|
||||
blendResult[2] = ((dist_03_01 < dist_00_02) && (v[0] != v[1]) && (v[0] != v[3])) ? ((dominantGradient) ? BLEND_DOMINANT : BLEND_NORMAL) : BLEND_NONE;
|
||||
}
|
||||
|
||||
// Pixel Tap Mapping: --|--|--|--|--
|
||||
// --|06|07|--|--
|
||||
// 18|05|00|01|--
|
||||
// 17|04|03|02|--
|
||||
// --|15|14|--|--
|
||||
// Corner (0, 1)
|
||||
if ( ((v[5] == v[0] && v[4] == v[3]) || (v[5] == v[4] && v[0] == v[3])) == false) {
|
||||
float dist_04_00 = DistYCbCr(src[17], src[ 5]) + DistYCbCr(src[ 5], src[ 7]) + DistYCbCr(src[15], src[ 3]) + DistYCbCr(src[ 3], src[ 1]) + (4.0 * DistYCbCr(src[ 4], src[ 0]));
|
||||
float dist_05_03 = DistYCbCr(src[18], src[ 4]) + DistYCbCr(src[ 4], src[14]) + DistYCbCr(src[ 6], src[ 0]) + DistYCbCr(src[ 0], src[ 2]) + (4.0 * DistYCbCr(src[ 5], src[ 3]));
|
||||
bool dominantGradient = (DOMINANT_DIRECTION_THRESHOLD * dist_05_03) < dist_04_00;
|
||||
blendResult[3] = ((dist_04_00 > dist_05_03) && (v[0] != v[5]) && (v[0] != v[3])) ? ((dominantGradient) ? BLEND_DOMINANT : BLEND_NORMAL) : BLEND_NONE;
|
||||
}
|
||||
|
||||
// Pixel Tap Mapping: --|--|22|23|--
|
||||
// --|06|07|08|09
|
||||
// --|05|00|01|10
|
||||
// --|--|03|02|--
|
||||
// --|--|--|--|--
|
||||
// Corner (1, 0)
|
||||
if ( ((v[7] == v[8] && v[0] == v[1]) || (v[7] == v[0] && v[8] == v[1])) == false) {
|
||||
float dist_00_08 = DistYCbCr(src[ 5], src[ 7]) + DistYCbCr(src[ 7], src[23]) + DistYCbCr(src[ 3], src[ 1]) + DistYCbCr(src[ 1], src[ 9]) + (4.0 * DistYCbCr(src[ 0], src[ 8]));
|
||||
float dist_07_01 = DistYCbCr(src[ 6], src[ 0]) + DistYCbCr(src[ 0], src[ 2]) + DistYCbCr(src[22], src[ 8]) + DistYCbCr(src[ 8], src[10]) + (4.0 * DistYCbCr(src[ 7], src[ 1]));
|
||||
bool dominantGradient = (DOMINANT_DIRECTION_THRESHOLD * dist_07_01) < dist_00_08;
|
||||
blendResult[1] = ((dist_00_08 > dist_07_01) && (v[0] != v[7]) && (v[0] != v[1])) ? ((dominantGradient) ? BLEND_DOMINANT : BLEND_NORMAL) : BLEND_NONE;
|
||||
}
|
||||
|
||||
// Pixel Tap Mapping: --|21|22|--|--
|
||||
// 19|06|07|08|--
|
||||
// 18|05|00|01|--
|
||||
// --|04|03|--|--
|
||||
// --|--|--|--|--
|
||||
// Corner (0, 0)
|
||||
if ( ((v[6] == v[7] && v[5] == v[0]) || (v[6] == v[5] && v[7] == v[0])) == false) {
|
||||
float dist_05_07 = DistYCbCr(src[18], src[ 6]) + DistYCbCr(src[ 6], src[22]) + DistYCbCr(src[ 4], src[ 0]) + DistYCbCr(src[ 0], src[ 8]) + (4.0 * DistYCbCr(src[ 5], src[ 7]));
|
||||
float dist_06_00 = DistYCbCr(src[19], src[ 5]) + DistYCbCr(src[ 5], src[ 3]) + DistYCbCr(src[21], src[ 7]) + DistYCbCr(src[ 7], src[ 1]) + (4.0 * DistYCbCr(src[ 6], src[ 0]));
|
||||
bool dominantGradient = (DOMINANT_DIRECTION_THRESHOLD * dist_05_07) < dist_06_00;
|
||||
blendResult[0] = ((dist_05_07 < dist_06_00) && (v[0] != v[5]) && (v[0] != v[7])) ? ((dominantGradient) ? BLEND_DOMINANT : BLEND_NORMAL) : BLEND_NONE;
|
||||
}
|
||||
|
||||
vec4 dst[16];
|
||||
dst[ 0] = src[0];
|
||||
dst[ 1] = src[0];
|
||||
dst[ 2] = src[0];
|
||||
dst[ 3] = src[0];
|
||||
dst[ 4] = src[0];
|
||||
dst[ 5] = src[0];
|
||||
dst[ 6] = src[0];
|
||||
dst[ 7] = src[0];
|
||||
dst[ 8] = src[0];
|
||||
dst[ 9] = src[0];
|
||||
dst[10] = src[0];
|
||||
dst[11] = src[0];
|
||||
dst[12] = src[0];
|
||||
dst[13] = src[0];
|
||||
dst[14] = src[0];
|
||||
dst[15] = src[0];
|
||||
|
||||
// Scale pixel
|
||||
if (IsBlendingNeeded(blendResult) == true) {
|
||||
float dist_01_04 = DistYCbCr(src[1], src[4]);
|
||||
float dist_03_08 = DistYCbCr(src[3], src[8]);
|
||||
bool haveShallowLine = (STEEP_DIRECTION_THRESHOLD * dist_01_04 <= dist_03_08) && (v[0] != v[4]) && (v[5] != v[4]);
|
||||
bool haveSteepLine = (STEEP_DIRECTION_THRESHOLD * dist_03_08 <= dist_01_04) && (v[0] != v[8]) && (v[7] != v[8]);
|
||||
bool needBlend = (blendResult[2] != BLEND_NONE);
|
||||
bool doLineBlend = ( blendResult[2] >= BLEND_DOMINANT ||
|
||||
((blendResult[1] != BLEND_NONE && !IsPixEqual(src[0], src[4])) ||
|
||||
(blendResult[3] != BLEND_NONE && !IsPixEqual(src[0], src[8])) ||
|
||||
(IsPixEqual(src[4], src[3]) && IsPixEqual(src[3], src[2]) && IsPixEqual(src[2], src[1]) && IsPixEqual(src[1], src[8]) && IsPixEqual(src[0], src[2]) == false) ) == false );
|
||||
|
||||
vec4 blendPix = ( DistYCbCr(src[0], src[1]) <= DistYCbCr(src[0], src[3]) ) ? src[1] : src[3];
|
||||
dst[ 2] = mix(dst[ 2], blendPix, (needBlend && doLineBlend) ? ((haveShallowLine) ? ((haveSteepLine) ? 1.0/3.0 : 0.25) : ((haveSteepLine) ? 0.25 : 0.00)) : 0.00);
|
||||
dst[ 9] = mix(dst[ 9], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.25 : 0.00);
|
||||
dst[10] = mix(dst[10], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.75 : 0.00);
|
||||
dst[11] = mix(dst[11], blendPix, (needBlend) ? ((doLineBlend) ? ((haveSteepLine) ? 1.00 : ((haveShallowLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00);
|
||||
dst[12] = mix(dst[12], blendPix, (needBlend) ? ((doLineBlend) ? 1.00 : 0.6848532563) : 0.00);
|
||||
dst[13] = mix(dst[13], blendPix, (needBlend) ? ((doLineBlend) ? ((haveShallowLine) ? 1.00 : ((haveSteepLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00);
|
||||
dst[14] = mix(dst[14], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.75 : 0.00);
|
||||
dst[15] = mix(dst[15], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.25 : 0.00);
|
||||
|
||||
dist_01_04 = DistYCbCr(src[7], src[2]);
|
||||
dist_03_08 = DistYCbCr(src[1], src[6]);
|
||||
haveShallowLine = (STEEP_DIRECTION_THRESHOLD * dist_01_04 <= dist_03_08) && (v[0] != v[2]) && (v[3] != v[2]);
|
||||
haveSteepLine = (STEEP_DIRECTION_THRESHOLD * dist_03_08 <= dist_01_04) && (v[0] != v[6]) && (v[5] != v[6]);
|
||||
needBlend = (blendResult[1] != BLEND_NONE);
|
||||
doLineBlend = ( blendResult[1] >= BLEND_DOMINANT ||
|
||||
!((blendResult[0] != BLEND_NONE && !IsPixEqual(src[0], src[2])) ||
|
||||
(blendResult[2] != BLEND_NONE && !IsPixEqual(src[0], src[6])) ||
|
||||
(IsPixEqual(src[2], src[1]) && IsPixEqual(src[1], src[8]) && IsPixEqual(src[8], src[7]) && IsPixEqual(src[7], src[6]) && !IsPixEqual(src[0], src[8])) ) );
|
||||
|
||||
blendPix = ( DistYCbCr(src[0], src[7]) <= DistYCbCr(src[0], src[1]) ) ? src[7] : src[1];
|
||||
dst[ 1] = mix(dst[ 1], blendPix, (needBlend && doLineBlend) ? ((haveShallowLine) ? ((haveSteepLine) ? 1.0/3.0 : 0.25) : ((haveSteepLine) ? 0.25 : 0.00)) : 0.00);
|
||||
dst[ 6] = mix(dst[ 6], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.25 : 0.00);
|
||||
dst[ 7] = mix(dst[ 7], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.75 : 0.00);
|
||||
dst[ 8] = mix(dst[ 8], blendPix, (needBlend) ? ((doLineBlend) ? ((haveSteepLine) ? 1.00 : ((haveShallowLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00);
|
||||
dst[ 9] = mix(dst[ 9], blendPix, (needBlend) ? ((doLineBlend) ? 1.00 : 0.6848532563) : 0.00);
|
||||
dst[10] = mix(dst[10], blendPix, (needBlend) ? ((doLineBlend) ? ((haveShallowLine) ? 1.00 : ((haveSteepLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00);
|
||||
dst[11] = mix(dst[11], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.75 : 0.00);
|
||||
dst[12] = mix(dst[12], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.25 : 0.00);
|
||||
|
||||
dist_01_04 = DistYCbCr(src[5], src[8]);
|
||||
dist_03_08 = DistYCbCr(src[7], src[4]);
|
||||
haveShallowLine = (STEEP_DIRECTION_THRESHOLD * dist_01_04 <= dist_03_08) && (v[0] != v[8]) && (v[1] != v[8]);
|
||||
haveSteepLine = (STEEP_DIRECTION_THRESHOLD * dist_03_08 <= dist_01_04) && (v[0] != v[4]) && (v[3] != v[4]);
|
||||
needBlend = (blendResult[0] != BLEND_NONE);
|
||||
doLineBlend = ( blendResult[0] >= BLEND_DOMINANT ||
|
||||
!((blendResult[3] != BLEND_NONE && !IsPixEqual(src[0], src[8])) ||
|
||||
(blendResult[1] != BLEND_NONE && !IsPixEqual(src[0], src[4])) ||
|
||||
(IsPixEqual(src[8], src[7]) && IsPixEqual(src[7], src[6]) && IsPixEqual(src[6], src[5]) && IsPixEqual(src[5], src[4]) && !IsPixEqual(src[0], src[6])) ) );
|
||||
|
||||
blendPix = ( DistYCbCr(src[0], src[5]) <= DistYCbCr(src[0], src[7]) ) ? src[5] : src[7];
|
||||
dst[ 0] = mix(dst[ 0], blendPix, (needBlend && doLineBlend) ? ((haveShallowLine) ? ((haveSteepLine) ? 1.0/3.0 : 0.25) : ((haveSteepLine) ? 0.25 : 0.00)) : 0.00);
|
||||
dst[15] = mix(dst[15], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.25 : 0.00);
|
||||
dst[ 4] = mix(dst[ 4], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.75 : 0.00);
|
||||
dst[ 5] = mix(dst[ 5], blendPix, (needBlend) ? ((doLineBlend) ? ((haveSteepLine) ? 1.00 : ((haveShallowLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00);
|
||||
dst[ 6] = mix(dst[ 6], blendPix, (needBlend) ? ((doLineBlend) ? 1.00 : 0.6848532563) : 0.00);
|
||||
dst[ 7] = mix(dst[ 7], blendPix, (needBlend) ? ((doLineBlend) ? ((haveShallowLine) ? 1.00 : ((haveSteepLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00);
|
||||
dst[ 8] = mix(dst[ 8], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.75 : 0.00);
|
||||
dst[ 9] = mix(dst[ 9], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.25 : 0.00);
|
||||
|
||||
dist_01_04 = DistYCbCr(src[3], src[6]);
|
||||
dist_03_08 = DistYCbCr(src[5], src[2]);
|
||||
haveShallowLine = (STEEP_DIRECTION_THRESHOLD * dist_01_04 <= dist_03_08) && (v[0] != v[6]) && (v[7] != v[6]);
|
||||
haveSteepLine = (STEEP_DIRECTION_THRESHOLD * dist_03_08 <= dist_01_04) && (v[0] != v[2]) && (v[1] != v[2]);
|
||||
needBlend = (blendResult[3] != BLEND_NONE);
|
||||
doLineBlend = ( blendResult[3] >= BLEND_DOMINANT ||
|
||||
!((blendResult[2] != BLEND_NONE && !IsPixEqual(src[0], src[6])) ||
|
||||
(blendResult[0] != BLEND_NONE && !IsPixEqual(src[0], src[2])) ||
|
||||
(IsPixEqual(src[6], src[5]) && IsPixEqual(src[5], src[4]) && IsPixEqual(src[4], src[3]) && IsPixEqual(src[3], src[2]) && !IsPixEqual(src[0], src[4])) ) );
|
||||
|
||||
blendPix = ( DistYCbCr(src[0], src[3]) <= DistYCbCr(src[0], src[5]) ) ? src[3] : src[5];
|
||||
dst[ 3] = mix(dst[ 3], blendPix, (needBlend && doLineBlend) ? ((haveShallowLine) ? ((haveSteepLine) ? 1.0/3.0 : 0.25) : ((haveSteepLine) ? 0.25 : 0.00)) : 0.00);
|
||||
dst[12] = mix(dst[12], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.25 : 0.00);
|
||||
dst[13] = mix(dst[13], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.75 : 0.00);
|
||||
dst[14] = mix(dst[14], blendPix, (needBlend) ? ((doLineBlend) ? ((haveSteepLine) ? 1.00 : ((haveShallowLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00);
|
||||
dst[15] = mix(dst[15], blendPix, (needBlend) ? ((doLineBlend) ? 1.00 : 0.6848532563) : 0.00);
|
||||
dst[ 4] = mix(dst[ 4], blendPix, (needBlend) ? ((doLineBlend) ? ((haveShallowLine) ? 1.00 : ((haveSteepLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00);
|
||||
dst[ 5] = mix(dst[ 5], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.75 : 0.00);
|
||||
dst[ 6] = mix(dst[ 6], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.25 : 0.00);
|
||||
}
|
||||
|
||||
// select output pixel
|
||||
vec4 res = mix(mix(mix(mix(dst[ 6], dst[ 7], step(0.25, f.x)),
|
||||
mix(dst[ 8], dst[ 9], step(0.75, f.x)),
|
||||
step(0.50, f.x)),
|
||||
mix(mix(dst[ 5], dst[ 0], step(0.25, f.x)),
|
||||
mix(dst[ 1], dst[10], step(0.75, f.x)),
|
||||
step(0.50, f.x)),
|
||||
step(0.25, f.y)),
|
||||
mix(mix(mix(dst[ 4], dst[ 3], step(0.25, f.x)),
|
||||
mix(dst[ 2], dst[11], step(0.75, f.x)),
|
||||
step(0.50, f.x)),
|
||||
mix(mix(dst[15], dst[14], step(0.25, f.x)),
|
||||
mix(dst[13], dst[12], step(0.75, f.x)),
|
||||
step(0.50, f.x)),
|
||||
step(0.75, f.y)),
|
||||
step(0.50, f.y));
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
uint applyScalingu(uvec2 origxy, uvec2 xy) {
|
||||
return packUnorm4x8(applyScalingf(origxy, xy));
|
||||
}
|
||||
|
||||
@@ -1,117 +1,117 @@
|
||||
/* MMPX.glc
|
||||
Copyright 2020 Morgan McGuire & Mara Gagiu.
|
||||
Provided under the Open Source MIT license https://opensource.org/licenses/MIT
|
||||
|
||||
See js-demo.html for the commented source code.
|
||||
This is an optimized GLSL port of that version
|
||||
by Morgan McGuire and Mara Gagiu.
|
||||
*/
|
||||
|
||||
#define ABGR8 uint
|
||||
|
||||
ABGR8 src(int x, int y) {
|
||||
return readColoru(uvec2(clamp(x, 0, params.width - 1), clamp(y, 0, params.height - 1)));
|
||||
}
|
||||
|
||||
uint luma(ABGR8 C) {
|
||||
uint alpha = (C & 0xFF000000u) >> 24;
|
||||
return (((C & 0x00FF0000u) >> 16) + ((C & 0x0000FF00u) >> 8) + (C & 0x000000FFu) + 1u) * (256u - alpha);
|
||||
}
|
||||
|
||||
bool all_eq2(ABGR8 B, ABGR8 A0, ABGR8 A1) {
|
||||
return ((B ^ A0) | (B ^ A1)) == 0u;
|
||||
}
|
||||
|
||||
bool all_eq3(ABGR8 B, ABGR8 A0, ABGR8 A1, ABGR8 A2) {
|
||||
return ((B ^ A0) | (B ^ A1) | (B ^ A2)) == 0u;
|
||||
}
|
||||
|
||||
bool all_eq4(ABGR8 B, ABGR8 A0, ABGR8 A1, ABGR8 A2, ABGR8 A3) {
|
||||
return ((B ^ A0) | (B ^ A1) | (B ^ A2) | (B ^ A3)) == 0u;
|
||||
}
|
||||
|
||||
bool any_eq3(ABGR8 B, ABGR8 A0, ABGR8 A1, ABGR8 A2) {
|
||||
return B == A0 || B == A1 || B == A2;
|
||||
}
|
||||
|
||||
bool none_eq2(ABGR8 B, ABGR8 A0, ABGR8 A1) {
|
||||
return (B != A0) && (B != A1);
|
||||
}
|
||||
|
||||
bool none_eq4(ABGR8 B, ABGR8 A0, ABGR8 A1, ABGR8 A2, ABGR8 A3) {
|
||||
return B != A0 && B != A1 && B != A2 && B != A3;
|
||||
}
|
||||
|
||||
uint applyScalingu(uvec2 origxy, uvec2 xy) {
|
||||
int srcX = int(origxy.x);
|
||||
int srcY = int(origxy.y);
|
||||
|
||||
ABGR8 A = src(srcX - 1, srcY - 1), B = src(srcX, srcY - 1), C = src(srcX + 1, srcY - 1);
|
||||
ABGR8 D = src(srcX - 1, srcY + 0), E = src(srcX, srcY + 0), F = src(srcX + 1, srcY + 0);
|
||||
ABGR8 G = src(srcX - 1, srcY + 1), H = src(srcX, srcY + 1), I = src(srcX + 1, srcY + 1);
|
||||
|
||||
ABGR8 J = E, K = E, L = E, M = E;
|
||||
|
||||
if (((A ^ E) | (B ^ E) | (C ^ E) | (D ^ E) | (F ^ E) | (G ^ E) | (H ^ E) | (I ^ E)) != 0u) {
|
||||
ABGR8 P = src(srcX, srcY - 2), S = src(srcX, srcY + 2);
|
||||
ABGR8 Q = src(srcX - 2, srcY), R = src(srcX + 2, srcY);
|
||||
ABGR8 Bl = luma(B), Dl = luma(D), El = luma(E), Fl = luma(F), Hl = luma(H);
|
||||
|
||||
// 1:1 slope rules
|
||||
if ((D == B && D != H && D != F) && (El >= Dl || E == A) && any_eq3(E, A, C, G) && ((El < Dl) || A != D || E != P || E != Q)) J = D;
|
||||
if ((B == F && B != D && B != H) && (El >= Bl || E == C) && any_eq3(E, A, C, I) && ((El < Bl) || C != B || E != P || E != R)) K = B;
|
||||
if ((H == D && H != F && H != B) && (El >= Hl || E == G) && any_eq3(E, A, G, I) && ((El < Hl) || G != H || E != S || E != Q)) L = H;
|
||||
if ((F == H && F != B && F != D) && (El >= Fl || E == I) && any_eq3(E, C, G, I) && ((El < Fl) || I != H || E != R || E != S)) M = F;
|
||||
|
||||
// Intersection rules
|
||||
if ((E != F && all_eq4(E, C, I, D, Q) && all_eq2(F, B, H)) && (F != src(srcX + 3, srcY))) K = M = F;
|
||||
if ((E != D && all_eq4(E, A, G, F, R) && all_eq2(D, B, H)) && (D != src(srcX - 3, srcY))) J = L = D;
|
||||
if ((E != H && all_eq4(E, G, I, B, P) && all_eq2(H, D, F)) && (H != src(srcX, srcY + 3))) L = M = H;
|
||||
if ((E != B && all_eq4(E, A, C, H, S) && all_eq2(B, D, F)) && (B != src(srcX, srcY - 3))) J = K = B;
|
||||
if (Bl < El && all_eq4(E, G, H, I, S) && none_eq4(E, A, D, C, F)) J = K = B;
|
||||
if (Hl < El && all_eq4(E, A, B, C, P) && none_eq4(E, D, G, I, F)) L = M = H;
|
||||
if (Fl < El && all_eq4(E, A, D, G, Q) && none_eq4(E, B, C, I, H)) K = M = F;
|
||||
if (Dl < El && all_eq4(E, C, F, I, R) && none_eq4(E, B, A, G, H)) J = L = D;
|
||||
|
||||
// 2:1 slope rules
|
||||
if (H != B) {
|
||||
if (H != A && H != E && H != C) {
|
||||
if (all_eq3(H, G, F, R) && none_eq2(H, D, src(srcX + 2, srcY - 1))) L = M;
|
||||
if (all_eq3(H, I, D, Q) && none_eq2(H, F, src(srcX - 2, srcY - 1))) M = L;
|
||||
}
|
||||
|
||||
if (B != I && B != G && B != E) {
|
||||
if (all_eq3(B, A, F, R) && none_eq2(B, D, src(srcX + 2, srcY + 1))) J = K;
|
||||
if (all_eq3(B, C, D, Q) && none_eq2(B, F, src(srcX - 2, srcY + 1))) K = J;
|
||||
}
|
||||
} // H !== B
|
||||
|
||||
if (F != D) {
|
||||
if (D != I && D != E && D != C) {
|
||||
if (all_eq3(D, A, H, S) && none_eq2(D, B, src(srcX + 1, srcY + 2))) J = L;
|
||||
if (all_eq3(D, G, B, P) && none_eq2(D, H, src(srcX + 1, srcY - 2))) L = J;
|
||||
}
|
||||
|
||||
if (F != E && F != A && F != G) {
|
||||
if (all_eq3(F, C, H, S) && none_eq2(F, B, src(srcX - 1, srcY + 2))) K = M;
|
||||
if (all_eq3(F, I, B, P) && none_eq2(F, H, src(srcX - 1, srcY - 2))) M = K;
|
||||
}
|
||||
} // F !== D
|
||||
} // not constant
|
||||
|
||||
// TODO: Write four pixels at once. For now, 1/4x speed.
|
||||
if ((xy.y & 1u) == 0u) {
|
||||
if ((xy.x & 1u) == 0u) {
|
||||
return J;
|
||||
}
|
||||
return K;
|
||||
}
|
||||
if ((xy.x & 1u) == 0u) {
|
||||
return L;
|
||||
}
|
||||
return M;
|
||||
}
|
||||
|
||||
vec4 applyScalingf(uvec2 origxy, uvec2 xy) {
|
||||
return unpackUnorm4x8(applyScalingu(origxy, xy));
|
||||
}
|
||||
/* MMPX.glc
|
||||
Copyright 2020 Morgan McGuire & Mara Gagiu.
|
||||
Provided under the Open Source MIT license https://opensource.org/licenses/MIT
|
||||
|
||||
See js-demo.html for the commented source code.
|
||||
This is an optimized GLSL port of that version
|
||||
by Morgan McGuire and Mara Gagiu.
|
||||
*/
|
||||
|
||||
#define ABGR8 uint
|
||||
|
||||
ABGR8 src(int x, int y) {
|
||||
return readColoru(uvec2(clamp(x, 0, params.width - 1), clamp(y, 0, params.height - 1)));
|
||||
}
|
||||
|
||||
uint luma(ABGR8 C) {
|
||||
uint alpha = (C & 0xFF000000u) >> 24;
|
||||
return (((C & 0x00FF0000u) >> 16) + ((C & 0x0000FF00u) >> 8) + (C & 0x000000FFu) + 1u) * (256u - alpha);
|
||||
}
|
||||
|
||||
bool all_eq2(ABGR8 B, ABGR8 A0, ABGR8 A1) {
|
||||
return ((B ^ A0) | (B ^ A1)) == 0u;
|
||||
}
|
||||
|
||||
bool all_eq3(ABGR8 B, ABGR8 A0, ABGR8 A1, ABGR8 A2) {
|
||||
return ((B ^ A0) | (B ^ A1) | (B ^ A2)) == 0u;
|
||||
}
|
||||
|
||||
bool all_eq4(ABGR8 B, ABGR8 A0, ABGR8 A1, ABGR8 A2, ABGR8 A3) {
|
||||
return ((B ^ A0) | (B ^ A1) | (B ^ A2) | (B ^ A3)) == 0u;
|
||||
}
|
||||
|
||||
bool any_eq3(ABGR8 B, ABGR8 A0, ABGR8 A1, ABGR8 A2) {
|
||||
return B == A0 || B == A1 || B == A2;
|
||||
}
|
||||
|
||||
bool none_eq2(ABGR8 B, ABGR8 A0, ABGR8 A1) {
|
||||
return (B != A0) && (B != A1);
|
||||
}
|
||||
|
||||
bool none_eq4(ABGR8 B, ABGR8 A0, ABGR8 A1, ABGR8 A2, ABGR8 A3) {
|
||||
return B != A0 && B != A1 && B != A2 && B != A3;
|
||||
}
|
||||
|
||||
uint applyScalingu(uvec2 origxy, uvec2 xy) {
|
||||
int srcX = int(origxy.x);
|
||||
int srcY = int(origxy.y);
|
||||
|
||||
ABGR8 A = src(srcX - 1, srcY - 1), B = src(srcX, srcY - 1), C = src(srcX + 1, srcY - 1);
|
||||
ABGR8 D = src(srcX - 1, srcY + 0), E = src(srcX, srcY + 0), F = src(srcX + 1, srcY + 0);
|
||||
ABGR8 G = src(srcX - 1, srcY + 1), H = src(srcX, srcY + 1), I = src(srcX + 1, srcY + 1);
|
||||
|
||||
ABGR8 J = E, K = E, L = E, M = E;
|
||||
|
||||
if (((A ^ E) | (B ^ E) | (C ^ E) | (D ^ E) | (F ^ E) | (G ^ E) | (H ^ E) | (I ^ E)) != 0u) {
|
||||
ABGR8 P = src(srcX, srcY - 2), S = src(srcX, srcY + 2);
|
||||
ABGR8 Q = src(srcX - 2, srcY), R = src(srcX + 2, srcY);
|
||||
ABGR8 Bl = luma(B), Dl = luma(D), El = luma(E), Fl = luma(F), Hl = luma(H);
|
||||
|
||||
// 1:1 slope rules
|
||||
if ((D == B && D != H && D != F) && (El >= Dl || E == A) && any_eq3(E, A, C, G) && ((El < Dl) || A != D || E != P || E != Q)) J = D;
|
||||
if ((B == F && B != D && B != H) && (El >= Bl || E == C) && any_eq3(E, A, C, I) && ((El < Bl) || C != B || E != P || E != R)) K = B;
|
||||
if ((H == D && H != F && H != B) && (El >= Hl || E == G) && any_eq3(E, A, G, I) && ((El < Hl) || G != H || E != S || E != Q)) L = H;
|
||||
if ((F == H && F != B && F != D) && (El >= Fl || E == I) && any_eq3(E, C, G, I) && ((El < Fl) || I != H || E != R || E != S)) M = F;
|
||||
|
||||
// Intersection rules
|
||||
if ((E != F && all_eq4(E, C, I, D, Q) && all_eq2(F, B, H)) && (F != src(srcX + 3, srcY))) K = M = F;
|
||||
if ((E != D && all_eq4(E, A, G, F, R) && all_eq2(D, B, H)) && (D != src(srcX - 3, srcY))) J = L = D;
|
||||
if ((E != H && all_eq4(E, G, I, B, P) && all_eq2(H, D, F)) && (H != src(srcX, srcY + 3))) L = M = H;
|
||||
if ((E != B && all_eq4(E, A, C, H, S) && all_eq2(B, D, F)) && (B != src(srcX, srcY - 3))) J = K = B;
|
||||
if (Bl < El && all_eq4(E, G, H, I, S) && none_eq4(E, A, D, C, F)) J = K = B;
|
||||
if (Hl < El && all_eq4(E, A, B, C, P) && none_eq4(E, D, G, I, F)) L = M = H;
|
||||
if (Fl < El && all_eq4(E, A, D, G, Q) && none_eq4(E, B, C, I, H)) K = M = F;
|
||||
if (Dl < El && all_eq4(E, C, F, I, R) && none_eq4(E, B, A, G, H)) J = L = D;
|
||||
|
||||
// 2:1 slope rules
|
||||
if (H != B) {
|
||||
if (H != A && H != E && H != C) {
|
||||
if (all_eq3(H, G, F, R) && none_eq2(H, D, src(srcX + 2, srcY - 1))) L = M;
|
||||
if (all_eq3(H, I, D, Q) && none_eq2(H, F, src(srcX - 2, srcY - 1))) M = L;
|
||||
}
|
||||
|
||||
if (B != I && B != G && B != E) {
|
||||
if (all_eq3(B, A, F, R) && none_eq2(B, D, src(srcX + 2, srcY + 1))) J = K;
|
||||
if (all_eq3(B, C, D, Q) && none_eq2(B, F, src(srcX - 2, srcY + 1))) K = J;
|
||||
}
|
||||
} // H !== B
|
||||
|
||||
if (F != D) {
|
||||
if (D != I && D != E && D != C) {
|
||||
if (all_eq3(D, A, H, S) && none_eq2(D, B, src(srcX + 1, srcY + 2))) J = L;
|
||||
if (all_eq3(D, G, B, P) && none_eq2(D, H, src(srcX + 1, srcY - 2))) L = J;
|
||||
}
|
||||
|
||||
if (F != E && F != A && F != G) {
|
||||
if (all_eq3(F, C, H, S) && none_eq2(F, B, src(srcX - 1, srcY + 2))) K = M;
|
||||
if (all_eq3(F, I, B, P) && none_eq2(F, H, src(srcX - 1, srcY - 2))) M = K;
|
||||
}
|
||||
} // F !== D
|
||||
} // not constant
|
||||
|
||||
// TODO: Write four pixels at once. For now, 1/4x speed.
|
||||
if ((xy.y & 1u) == 0u) {
|
||||
if ((xy.x & 1u) == 0u) {
|
||||
return J;
|
||||
}
|
||||
return K;
|
||||
}
|
||||
if ((xy.x & 1u) == 0u) {
|
||||
return L;
|
||||
}
|
||||
return M;
|
||||
}
|
||||
|
||||
vec4 applyScalingf(uvec2 origxy, uvec2 xy) {
|
||||
return unpackUnorm4x8(applyScalingu(origxy, xy));
|
||||
}
|
||||
|
||||
@@ -1,120 +1,120 @@
|
||||
// Spline36 upscaling shader.
|
||||
// See issue #3921
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
varying vec2 v_position;
|
||||
|
||||
uniform vec2 u_texelDelta;
|
||||
uniform vec2 u_pixelDelta;
|
||||
|
||||
const vec2 HALF_PIXEL = vec2(0.5, 0.5);
|
||||
|
||||
float spline36_0_1(float x) {
|
||||
return ((13.0 / 11.0 * x - 453.0 / 209.0) * x - 3.0 / 209.0) * x + 1.0;
|
||||
}
|
||||
|
||||
float spline36_1_2(float x) {
|
||||
return ((-6.0 / 11.0 * x + 612.0 / 209.0) * x - 1038.0 / 209.0) * x + 540.0 / 209.0;
|
||||
}
|
||||
|
||||
float spline36_2_3(float x) {
|
||||
return ((1.0 / 11.0 * x - 159.0 / 209.0) * x + 434.0 / 209.0) * x - 384.0 / 209.0;
|
||||
}
|
||||
|
||||
vec4 rgb(int inputX, int inputY) {
|
||||
return texture2D(sampler0, (vec2(inputX, inputY) + HALF_PIXEL) * u_texelDelta);
|
||||
}
|
||||
|
||||
vec4 interpolateHorizontally(vec2 inputPos, ivec2 inputPosFloor, int dy) {
|
||||
float sumOfWeights = 0.0;
|
||||
vec4 sumOfWeightedPixel = vec4(0.0);
|
||||
|
||||
float x;
|
||||
float weight;
|
||||
|
||||
x = inputPos.x - float(inputPosFloor.x - 2);
|
||||
weight = spline36_2_3(x);
|
||||
sumOfWeights += weight;
|
||||
sumOfWeightedPixel += weight * rgb(inputPosFloor.x - 2, inputPosFloor.y + dy);
|
||||
|
||||
--x;
|
||||
weight = spline36_1_2(x);
|
||||
sumOfWeights += weight;
|
||||
sumOfWeightedPixel += weight * rgb(inputPosFloor.x - 1, inputPosFloor.y + dy);
|
||||
|
||||
--x;
|
||||
weight = spline36_0_1(x);
|
||||
sumOfWeights += weight;
|
||||
sumOfWeightedPixel += weight * rgb(inputPosFloor.x + 0, inputPosFloor.y + dy);
|
||||
|
||||
x = 1.0 - x;
|
||||
weight = spline36_0_1(x);
|
||||
sumOfWeights += weight;
|
||||
sumOfWeightedPixel += weight * rgb(inputPosFloor.x + 1, inputPosFloor.y + dy);
|
||||
|
||||
++x;
|
||||
weight = spline36_1_2(x);
|
||||
sumOfWeights += weight;
|
||||
sumOfWeightedPixel += weight * rgb(inputPosFloor.x + 2, inputPosFloor.y + dy);
|
||||
|
||||
++x;
|
||||
weight = spline36_2_3(x);
|
||||
sumOfWeights += weight;
|
||||
sumOfWeightedPixel += weight * rgb(inputPosFloor.x + 3, inputPosFloor.y + dy);
|
||||
|
||||
return sumOfWeightedPixel / sumOfWeights;
|
||||
}
|
||||
|
||||
vec4 process(vec2 outputPos) {
|
||||
vec2 inputPos = outputPos / u_texelDelta;
|
||||
ivec2 inputPosFloor = ivec2(inputPos);
|
||||
|
||||
// Vertical interporation
|
||||
float sumOfWeights = 0.0;
|
||||
vec4 sumOfWeightedPixel = vec4(0.0);
|
||||
|
||||
float weight;
|
||||
float y;
|
||||
|
||||
y = inputPos.y - float(inputPosFloor.y - 2);
|
||||
weight = spline36_2_3(y);
|
||||
sumOfWeights += weight;
|
||||
sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, -2);
|
||||
|
||||
--y;
|
||||
weight = spline36_1_2(y);
|
||||
sumOfWeights += weight;
|
||||
sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, -1);
|
||||
|
||||
--y;
|
||||
weight = spline36_0_1(y);
|
||||
sumOfWeights += weight;
|
||||
sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, +0);
|
||||
|
||||
y = 1.0 - y;
|
||||
weight = spline36_0_1(y);
|
||||
sumOfWeights += weight;
|
||||
sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, +1);
|
||||
|
||||
++y;
|
||||
weight = spline36_1_2(y);
|
||||
sumOfWeights += weight;
|
||||
sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, +2);
|
||||
|
||||
++y;
|
||||
weight = spline36_2_3(y);
|
||||
sumOfWeights += weight;
|
||||
sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, +3);
|
||||
|
||||
return vec4((sumOfWeightedPixel / sumOfWeights).xyz, 1.0);
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_FragColor.rgba = process(v_position);
|
||||
// Spline36 upscaling shader.
|
||||
// See issue #3921
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
varying vec2 v_position;
|
||||
|
||||
uniform vec2 u_texelDelta;
|
||||
uniform vec2 u_pixelDelta;
|
||||
|
||||
const vec2 HALF_PIXEL = vec2(0.5, 0.5);
|
||||
|
||||
float spline36_0_1(float x) {
|
||||
return ((13.0 / 11.0 * x - 453.0 / 209.0) * x - 3.0 / 209.0) * x + 1.0;
|
||||
}
|
||||
|
||||
float spline36_1_2(float x) {
|
||||
return ((-6.0 / 11.0 * x + 612.0 / 209.0) * x - 1038.0 / 209.0) * x + 540.0 / 209.0;
|
||||
}
|
||||
|
||||
float spline36_2_3(float x) {
|
||||
return ((1.0 / 11.0 * x - 159.0 / 209.0) * x + 434.0 / 209.0) * x - 384.0 / 209.0;
|
||||
}
|
||||
|
||||
vec4 rgb(int inputX, int inputY) {
|
||||
return texture2D(sampler0, (vec2(inputX, inputY) + HALF_PIXEL) * u_texelDelta);
|
||||
}
|
||||
|
||||
vec4 interpolateHorizontally(vec2 inputPos, ivec2 inputPosFloor, int dy) {
|
||||
float sumOfWeights = 0.0;
|
||||
vec4 sumOfWeightedPixel = vec4(0.0);
|
||||
|
||||
float x;
|
||||
float weight;
|
||||
|
||||
x = inputPos.x - float(inputPosFloor.x - 2);
|
||||
weight = spline36_2_3(x);
|
||||
sumOfWeights += weight;
|
||||
sumOfWeightedPixel += weight * rgb(inputPosFloor.x - 2, inputPosFloor.y + dy);
|
||||
|
||||
--x;
|
||||
weight = spline36_1_2(x);
|
||||
sumOfWeights += weight;
|
||||
sumOfWeightedPixel += weight * rgb(inputPosFloor.x - 1, inputPosFloor.y + dy);
|
||||
|
||||
--x;
|
||||
weight = spline36_0_1(x);
|
||||
sumOfWeights += weight;
|
||||
sumOfWeightedPixel += weight * rgb(inputPosFloor.x + 0, inputPosFloor.y + dy);
|
||||
|
||||
x = 1.0 - x;
|
||||
weight = spline36_0_1(x);
|
||||
sumOfWeights += weight;
|
||||
sumOfWeightedPixel += weight * rgb(inputPosFloor.x + 1, inputPosFloor.y + dy);
|
||||
|
||||
++x;
|
||||
weight = spline36_1_2(x);
|
||||
sumOfWeights += weight;
|
||||
sumOfWeightedPixel += weight * rgb(inputPosFloor.x + 2, inputPosFloor.y + dy);
|
||||
|
||||
++x;
|
||||
weight = spline36_2_3(x);
|
||||
sumOfWeights += weight;
|
||||
sumOfWeightedPixel += weight * rgb(inputPosFloor.x + 3, inputPosFloor.y + dy);
|
||||
|
||||
return sumOfWeightedPixel / sumOfWeights;
|
||||
}
|
||||
|
||||
vec4 process(vec2 outputPos) {
|
||||
vec2 inputPos = outputPos / u_texelDelta;
|
||||
ivec2 inputPosFloor = ivec2(inputPos);
|
||||
|
||||
// Vertical interporation
|
||||
float sumOfWeights = 0.0;
|
||||
vec4 sumOfWeightedPixel = vec4(0.0);
|
||||
|
||||
float weight;
|
||||
float y;
|
||||
|
||||
y = inputPos.y - float(inputPosFloor.y - 2);
|
||||
weight = spline36_2_3(y);
|
||||
sumOfWeights += weight;
|
||||
sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, -2);
|
||||
|
||||
--y;
|
||||
weight = spline36_1_2(y);
|
||||
sumOfWeights += weight;
|
||||
sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, -1);
|
||||
|
||||
--y;
|
||||
weight = spline36_0_1(y);
|
||||
sumOfWeights += weight;
|
||||
sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, +0);
|
||||
|
||||
y = 1.0 - y;
|
||||
weight = spline36_0_1(y);
|
||||
sumOfWeights += weight;
|
||||
sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, +1);
|
||||
|
||||
++y;
|
||||
weight = spline36_1_2(y);
|
||||
sumOfWeights += weight;
|
||||
sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, +2);
|
||||
|
||||
++y;
|
||||
weight = spline36_2_3(y);
|
||||
sumOfWeights += weight;
|
||||
sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, +3);
|
||||
|
||||
return vec4((sumOfWeightedPixel / sumOfWeights).xyz, 1.0);
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_FragColor.rgba = process(v_position);
|
||||
}
|
||||
@@ -1,16 +1,16 @@
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
attribute vec4 a_position;
|
||||
attribute vec2 a_texcoord0;
|
||||
|
||||
varying vec2 v_position;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = a_position;
|
||||
|
||||
v_position = a_texcoord0;
|
||||
}
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
attribute vec4 a_position;
|
||||
attribute vec2 a_texcoord0;
|
||||
|
||||
varying vec2 v_position;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = a_position;
|
||||
|
||||
v_position = a_texcoord0;
|
||||
}
|
||||
|
||||
@@ -1,201 +1,201 @@
|
||||
/*
|
||||
AA shader 4.o / AA shader 4.o - filtro
|
||||
|
||||
Copyright (C) 2014 guest(r) - guest.r@gmail.com
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
// Modified as video aware smoothing effect for PPSSPP.
|
||||
// Some variable definitions had to be moved inside functions(and so repeated) due to glsl->hlsl auto translation failing.
|
||||
// Also auto translation fails with bool uniform, which is why u_video is defined as float.
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
uniform float u_video;
|
||||
|
||||
|
||||
//===========
|
||||
varying vec2 v_texcoord0;
|
||||
|
||||
const vec3 dt = vec3(1.0,1.0,1.0);
|
||||
|
||||
vec3 texture2d (vec2 texcoord) {
|
||||
|
||||
float scale = 1.0;
|
||||
if (u_video==1.0){
|
||||
scale = 2.0;
|
||||
} else {
|
||||
scale = 7.0;
|
||||
}
|
||||
|
||||
vec4 yx = vec4(1.0/480.0,1.0/272.0,-1.0/480.0,-1.0/272.0)/scale;
|
||||
vec4 xy = vec4(2.0/480.0,2.0/272.0,-2.0/480.0,-2.0/272.0)/scale;
|
||||
|
||||
vec3 s00 = texture2D(sampler0, texcoord + yx.zw).xyz;
|
||||
vec3 s20 = texture2D(sampler0, texcoord + yx.xw).xyz;
|
||||
vec3 s22 = texture2D(sampler0, texcoord + yx.xy).xyz;
|
||||
vec3 s02 = texture2D(sampler0, texcoord + yx.zy).xyz;
|
||||
|
||||
float m1=dot(abs(s00-s22),dt)+0.001;
|
||||
float m2=dot(abs(s02-s20),dt)+0.001;
|
||||
|
||||
return 0.5*(m2*(s00+s22)+m1*(s02+s20))/(m1+m2);
|
||||
}
|
||||
vec3 texture2dd (vec2 texcoord) {
|
||||
|
||||
float scale = 1.0;
|
||||
if (u_video==1.0){
|
||||
scale = 2.0;
|
||||
} else {
|
||||
scale = 7.0;
|
||||
}
|
||||
|
||||
vec4 yx = vec4(1.0/480.0,1.0/272.0,-1.0/480.0,-1.0/272.0)/scale;
|
||||
vec4 xy = vec4(2.0/480.0,2.0/272.0,-2.0/480.0,-2.0/272.0)/scale;
|
||||
|
||||
vec3 c11 = texture2D(sampler0, texcoord ).xyz;
|
||||
vec3 c00 = texture2D(sampler0, texcoord + xy.zw).xyz;
|
||||
vec3 c20 = texture2D(sampler0, texcoord + xy.xw).xyz;
|
||||
vec3 c22 = texture2D(sampler0, texcoord + xy.xy).xyz;
|
||||
vec3 c02 = texture2D(sampler0, texcoord + xy.zy).xyz;
|
||||
vec3 s00 = texture2D(sampler0, texcoord + yx.zw).xyz;
|
||||
vec3 s20 = texture2D(sampler0, texcoord + yx.xw).xyz;
|
||||
vec3 s22 = texture2D(sampler0, texcoord + yx.xy).xyz;
|
||||
vec3 s02 = texture2D(sampler0, texcoord + yx.zy).xyz;
|
||||
|
||||
float d1=dot(abs(c00-c22),dt)+0.001;
|
||||
float d2=dot(abs(c20-c02),dt)+0.001;
|
||||
float m1=dot(abs(s00-s22),dt)+0.001;
|
||||
float m2=dot(abs(s02-s20),dt)+0.001;
|
||||
|
||||
vec3 t2=(d1*(c20+c02)+d2*(c00+c22))/(2.0*(d1+d2));
|
||||
|
||||
return 0.25*(c11+t2+(m2*(s00+s22)+m1*(s02+s20))/(m1+m2));
|
||||
}
|
||||
|
||||
void main() {
|
||||
|
||||
float scale = 7.0;
|
||||
bool filtro = false;
|
||||
|
||||
if (u_video==1.0){
|
||||
scale = 2.0;
|
||||
filtro = true;
|
||||
} else {
|
||||
scale = 7.0;
|
||||
filtro = false;
|
||||
}
|
||||
|
||||
// Calculating texel coordinates
|
||||
|
||||
vec2 size = vec2(480.0,272.0)*scale;
|
||||
vec2 inv_size = vec2(1.0/480.0,1.0/272.0)/scale;
|
||||
|
||||
vec2 OGL2Pos = v_texcoord0 * size;
|
||||
vec2 fp = fract(OGL2Pos);
|
||||
vec2 dx = vec2(inv_size.x,0.0);
|
||||
vec2 dy = vec2(0.0, inv_size.y);
|
||||
vec2 g1 = vec2(inv_size.x,inv_size.y);
|
||||
vec2 g2 = vec2(-inv_size.x,inv_size.y);
|
||||
|
||||
vec2 pC4 = floor(OGL2Pos) * inv_size + 0.5*inv_size;
|
||||
|
||||
// Reading the texels
|
||||
vec3 C0 = texture2d(pC4 - g1);
|
||||
vec3 C1 = texture2d(pC4 - dy);
|
||||
vec3 C2 = texture2d(pC4 - g2);
|
||||
vec3 C3 = texture2d(pC4 - dx);
|
||||
vec3 C4 = texture2d(pC4 );
|
||||
vec3 C5 = texture2d(pC4 + dx);
|
||||
vec3 C6 = texture2d(pC4 + g2);
|
||||
vec3 C7 = texture2d(pC4 + dy);
|
||||
vec3 C8 = texture2d(pC4 + g1);
|
||||
|
||||
vec3 ul, ur, dl, dr;
|
||||
float m1, m2;
|
||||
|
||||
m1 = dot(abs(C0-C4),dt)+0.001;
|
||||
m2 = dot(abs(C1-C3),dt)+0.001;
|
||||
ul = (m2*(C0+C4)+m1*(C1+C3))/(m1+m2);
|
||||
|
||||
m1 = dot(abs(C1-C5),dt)+0.001;
|
||||
m2 = dot(abs(C2-C4),dt)+0.001;
|
||||
ur = (m2*(C1+C5)+m1*(C2+C4))/(m1+m2);
|
||||
|
||||
m1 = dot(abs(C3-C7),dt)+0.001;
|
||||
m2 = dot(abs(C6-C4),dt)+0.001;
|
||||
dl = (m2*(C3+C7)+m1*(C6+C4))/(m1+m2);
|
||||
|
||||
m1 = dot(abs(C4-C8),dt)+0.001;
|
||||
m2 = dot(abs(C5-C7),dt)+0.001;
|
||||
dr = (m2*(C4+C8)+m1*(C5+C7))/(m1+m2);
|
||||
|
||||
vec3 result = vec3(0.5*((dr*fp.x+dl*(1.0-fp.x))*fp.y+(ur*fp.x+ul*(1.0-fp.x))*(1.0-fp.y)));
|
||||
|
||||
if(filtro){
|
||||
vec3 c11 = 0.5*((dr*fp.x+dl*(1.0-fp.x))*fp.y+(ur*fp.x+ul*(1.0-fp.x))*(1.0-fp.y));
|
||||
|
||||
inv_size = vec2(2.0/480.0,2.0/272.0)/scale;;
|
||||
|
||||
dx = vec2(inv_size.x,0.0);
|
||||
dy = vec2(0.0,inv_size.y);
|
||||
g1 = vec2( inv_size.x,inv_size.y);
|
||||
g2 = vec2(-inv_size.x,inv_size.y);
|
||||
pC4 = v_texcoord0;
|
||||
|
||||
C0 = texture2dd(pC4-g1);
|
||||
C1 = texture2dd(pC4-dy);
|
||||
C2 = texture2dd(pC4-g2);
|
||||
C3 = texture2dd(pC4-dx);
|
||||
C4 = texture2dd(pC4 );
|
||||
C5 = texture2dd(pC4+dx);
|
||||
C6 = texture2dd(pC4+g2);
|
||||
C7 = texture2dd(pC4+dy);
|
||||
C8 = texture2dd(pC4+g1);
|
||||
|
||||
vec3 mn1 = min(min(C0,C1),C2);
|
||||
vec3 mn2 = min(min(C3,C4),C5);
|
||||
vec3 mn3 = min(min(C6,C7),C8);
|
||||
vec3 mx1 = max(max(C0,C1),C2);
|
||||
vec3 mx2 = max(max(C3,C4),C5);
|
||||
vec3 mx3 = max(max(C6,C7),C8);
|
||||
|
||||
mn1 = min(min(mn1,mn2),mn3);
|
||||
mx1 = max(max(mx1,mx2),mx3);
|
||||
|
||||
vec3 dif1 = abs(c11-mn1) + 0.0001*dt;
|
||||
vec3 dif2 = abs(c11-mx1) + 0.0001*dt;
|
||||
|
||||
float filterparam = 2.0;
|
||||
|
||||
dif1=vec3(pow(dif1.x,filterparam),pow(dif1.y,filterparam),pow(dif1.z,filterparam));
|
||||
dif2=vec3(pow(dif2.x,filterparam),pow(dif2.y,filterparam),pow(dif2.z,filterparam));
|
||||
|
||||
c11.r = (dif1.x*mx1.x + dif2.x*mn1.x)/(dif1.x + dif2.x);
|
||||
c11.g = (dif1.y*mx1.y + dif2.y*mn1.y)/(dif1.y + dif2.y);
|
||||
c11.b = (dif1.z*mx1.z + dif2.z*mn1.z)/(dif1.z + dif2.z);
|
||||
|
||||
result = c11;
|
||||
}
|
||||
|
||||
|
||||
gl_FragColor.xyz=result.xyz;
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
/*
|
||||
AA shader 4.o / AA shader 4.o - filtro
|
||||
|
||||
Copyright (C) 2014 guest(r) - guest.r@gmail.com
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
// Modified as video aware smoothing effect for PPSSPP.
|
||||
// Some variable definitions had to be moved inside functions(and so repeated) due to glsl->hlsl auto translation failing.
|
||||
// Also auto translation fails with bool uniform, which is why u_video is defined as float.
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
uniform float u_video;
|
||||
|
||||
|
||||
//===========
|
||||
varying vec2 v_texcoord0;
|
||||
|
||||
const vec3 dt = vec3(1.0,1.0,1.0);
|
||||
|
||||
vec3 texture2d (vec2 texcoord) {
|
||||
|
||||
float scale = 1.0;
|
||||
if (u_video==1.0){
|
||||
scale = 2.0;
|
||||
} else {
|
||||
scale = 7.0;
|
||||
}
|
||||
|
||||
vec4 yx = vec4(1.0/480.0,1.0/272.0,-1.0/480.0,-1.0/272.0)/scale;
|
||||
vec4 xy = vec4(2.0/480.0,2.0/272.0,-2.0/480.0,-2.0/272.0)/scale;
|
||||
|
||||
vec3 s00 = texture2D(sampler0, texcoord + yx.zw).xyz;
|
||||
vec3 s20 = texture2D(sampler0, texcoord + yx.xw).xyz;
|
||||
vec3 s22 = texture2D(sampler0, texcoord + yx.xy).xyz;
|
||||
vec3 s02 = texture2D(sampler0, texcoord + yx.zy).xyz;
|
||||
|
||||
float m1=dot(abs(s00-s22),dt)+0.001;
|
||||
float m2=dot(abs(s02-s20),dt)+0.001;
|
||||
|
||||
return 0.5*(m2*(s00+s22)+m1*(s02+s20))/(m1+m2);
|
||||
}
|
||||
vec3 texture2dd (vec2 texcoord) {
|
||||
|
||||
float scale = 1.0;
|
||||
if (u_video==1.0){
|
||||
scale = 2.0;
|
||||
} else {
|
||||
scale = 7.0;
|
||||
}
|
||||
|
||||
vec4 yx = vec4(1.0/480.0,1.0/272.0,-1.0/480.0,-1.0/272.0)/scale;
|
||||
vec4 xy = vec4(2.0/480.0,2.0/272.0,-2.0/480.0,-2.0/272.0)/scale;
|
||||
|
||||
vec3 c11 = texture2D(sampler0, texcoord ).xyz;
|
||||
vec3 c00 = texture2D(sampler0, texcoord + xy.zw).xyz;
|
||||
vec3 c20 = texture2D(sampler0, texcoord + xy.xw).xyz;
|
||||
vec3 c22 = texture2D(sampler0, texcoord + xy.xy).xyz;
|
||||
vec3 c02 = texture2D(sampler0, texcoord + xy.zy).xyz;
|
||||
vec3 s00 = texture2D(sampler0, texcoord + yx.zw).xyz;
|
||||
vec3 s20 = texture2D(sampler0, texcoord + yx.xw).xyz;
|
||||
vec3 s22 = texture2D(sampler0, texcoord + yx.xy).xyz;
|
||||
vec3 s02 = texture2D(sampler0, texcoord + yx.zy).xyz;
|
||||
|
||||
float d1=dot(abs(c00-c22),dt)+0.001;
|
||||
float d2=dot(abs(c20-c02),dt)+0.001;
|
||||
float m1=dot(abs(s00-s22),dt)+0.001;
|
||||
float m2=dot(abs(s02-s20),dt)+0.001;
|
||||
|
||||
vec3 t2=(d1*(c20+c02)+d2*(c00+c22))/(2.0*(d1+d2));
|
||||
|
||||
return 0.25*(c11+t2+(m2*(s00+s22)+m1*(s02+s20))/(m1+m2));
|
||||
}
|
||||
|
||||
void main() {
|
||||
|
||||
float scale = 7.0;
|
||||
bool filtro = false;
|
||||
|
||||
if (u_video==1.0){
|
||||
scale = 2.0;
|
||||
filtro = true;
|
||||
} else {
|
||||
scale = 7.0;
|
||||
filtro = false;
|
||||
}
|
||||
|
||||
// Calculating texel coordinates
|
||||
|
||||
vec2 size = vec2(480.0,272.0)*scale;
|
||||
vec2 inv_size = vec2(1.0/480.0,1.0/272.0)/scale;
|
||||
|
||||
vec2 OGL2Pos = v_texcoord0 * size;
|
||||
vec2 fp = fract(OGL2Pos);
|
||||
vec2 dx = vec2(inv_size.x,0.0);
|
||||
vec2 dy = vec2(0.0, inv_size.y);
|
||||
vec2 g1 = vec2(inv_size.x,inv_size.y);
|
||||
vec2 g2 = vec2(-inv_size.x,inv_size.y);
|
||||
|
||||
vec2 pC4 = floor(OGL2Pos) * inv_size + 0.5*inv_size;
|
||||
|
||||
// Reading the texels
|
||||
vec3 C0 = texture2d(pC4 - g1);
|
||||
vec3 C1 = texture2d(pC4 - dy);
|
||||
vec3 C2 = texture2d(pC4 - g2);
|
||||
vec3 C3 = texture2d(pC4 - dx);
|
||||
vec3 C4 = texture2d(pC4 );
|
||||
vec3 C5 = texture2d(pC4 + dx);
|
||||
vec3 C6 = texture2d(pC4 + g2);
|
||||
vec3 C7 = texture2d(pC4 + dy);
|
||||
vec3 C8 = texture2d(pC4 + g1);
|
||||
|
||||
vec3 ul, ur, dl, dr;
|
||||
float m1, m2;
|
||||
|
||||
m1 = dot(abs(C0-C4),dt)+0.001;
|
||||
m2 = dot(abs(C1-C3),dt)+0.001;
|
||||
ul = (m2*(C0+C4)+m1*(C1+C3))/(m1+m2);
|
||||
|
||||
m1 = dot(abs(C1-C5),dt)+0.001;
|
||||
m2 = dot(abs(C2-C4),dt)+0.001;
|
||||
ur = (m2*(C1+C5)+m1*(C2+C4))/(m1+m2);
|
||||
|
||||
m1 = dot(abs(C3-C7),dt)+0.001;
|
||||
m2 = dot(abs(C6-C4),dt)+0.001;
|
||||
dl = (m2*(C3+C7)+m1*(C6+C4))/(m1+m2);
|
||||
|
||||
m1 = dot(abs(C4-C8),dt)+0.001;
|
||||
m2 = dot(abs(C5-C7),dt)+0.001;
|
||||
dr = (m2*(C4+C8)+m1*(C5+C7))/(m1+m2);
|
||||
|
||||
vec3 result = vec3(0.5*((dr*fp.x+dl*(1.0-fp.x))*fp.y+(ur*fp.x+ul*(1.0-fp.x))*(1.0-fp.y)));
|
||||
|
||||
if(filtro){
|
||||
vec3 c11 = 0.5*((dr*fp.x+dl*(1.0-fp.x))*fp.y+(ur*fp.x+ul*(1.0-fp.x))*(1.0-fp.y));
|
||||
|
||||
inv_size = vec2(2.0/480.0,2.0/272.0)/scale;;
|
||||
|
||||
dx = vec2(inv_size.x,0.0);
|
||||
dy = vec2(0.0,inv_size.y);
|
||||
g1 = vec2( inv_size.x,inv_size.y);
|
||||
g2 = vec2(-inv_size.x,inv_size.y);
|
||||
pC4 = v_texcoord0;
|
||||
|
||||
C0 = texture2dd(pC4-g1);
|
||||
C1 = texture2dd(pC4-dy);
|
||||
C2 = texture2dd(pC4-g2);
|
||||
C3 = texture2dd(pC4-dx);
|
||||
C4 = texture2dd(pC4 );
|
||||
C5 = texture2dd(pC4+dx);
|
||||
C6 = texture2dd(pC4+g2);
|
||||
C7 = texture2dd(pC4+dy);
|
||||
C8 = texture2dd(pC4+g1);
|
||||
|
||||
vec3 mn1 = min(min(C0,C1),C2);
|
||||
vec3 mn2 = min(min(C3,C4),C5);
|
||||
vec3 mn3 = min(min(C6,C7),C8);
|
||||
vec3 mx1 = max(max(C0,C1),C2);
|
||||
vec3 mx2 = max(max(C3,C4),C5);
|
||||
vec3 mx3 = max(max(C6,C7),C8);
|
||||
|
||||
mn1 = min(min(mn1,mn2),mn3);
|
||||
mx1 = max(max(mx1,mx2),mx3);
|
||||
|
||||
vec3 dif1 = abs(c11-mn1) + 0.0001*dt;
|
||||
vec3 dif2 = abs(c11-mx1) + 0.0001*dt;
|
||||
|
||||
float filterparam = 2.0;
|
||||
|
||||
dif1=vec3(pow(dif1.x,filterparam),pow(dif1.y,filterparam),pow(dif1.z,filterparam));
|
||||
dif2=vec3(pow(dif2.x,filterparam),pow(dif2.y,filterparam),pow(dif2.z,filterparam));
|
||||
|
||||
c11.r = (dif1.x*mx1.x + dif2.x*mn1.x)/(dif1.x + dif2.x);
|
||||
c11.g = (dif1.y*mx1.y + dif2.y*mn1.y)/(dif1.y + dif2.y);
|
||||
c11.b = (dif1.z*mx1.z + dif2.z*mn1.z)/(dif1.z + dif2.z);
|
||||
|
||||
result = c11;
|
||||
}
|
||||
|
||||
|
||||
gl_FragColor.xyz=result.xyz;
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
// Simple vignette shader - darker towards the corners like in the unprocessed output of a real camera.
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
varying vec2 v_texcoord0;
|
||||
|
||||
void main() {
|
||||
float vignette = 1.1 - 0.6 * (dot(v_texcoord0 - 0.5, v_texcoord0 - 0.5) * 2.0);
|
||||
vec3 rgb = texture2D(sampler0, v_texcoord0.xy).xyz;
|
||||
gl_FragColor.rgb = vignette * rgb;
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
// Simple vignette shader - darker towards the corners like in the unprocessed output of a real camera.
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform sampler2D sampler0;
|
||||
varying vec2 v_texcoord0;
|
||||
|
||||
void main() {
|
||||
float vignette = 1.1 - 0.6 * (dot(v_texcoord0 - 0.5, v_texcoord0 - 0.5) * 2.0);
|
||||
vec3 rgb = texture2D(sampler0, v_texcoord0.xy).xyz;
|
||||
gl_FragColor.rgb = vignette * rgb;
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user