PPSSPP : v1.12.2
This commit is contained in:
+76
-21
@@ -223,6 +223,22 @@ ULUS10070 = true
|
|||||||
ULES00719 = true
|
ULES00719 = true
|
||||||
# No US release, it seems
|
# 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]
|
[ClearToRAM]
|
||||||
# SOCOM Navy Seals games require this. See issue #8973.
|
# SOCOM Navy Seals games require this. See issue #8973.
|
||||||
# Navy Seals : Tactical Strike
|
# Navy Seals : Tactical Strike
|
||||||
@@ -244,10 +260,16 @@ UCUS98645 = true
|
|||||||
# Fireteam Bravo 2 Demo
|
# Fireteam Bravo 2 Demo
|
||||||
UCUS98677 = true
|
UCUS98677 = true
|
||||||
UCUS98691 = true
|
UCUS98691 = true
|
||||||
# Fireteam Bravo 3
|
|
||||||
NPHG00032 = true
|
# DBZ Tenkaichi Tag Team, see issue #14283
|
||||||
UCUS98716 = true
|
ULJS00311 = true
|
||||||
UCES01242 = true
|
ULAS42247 = true
|
||||||
|
ULUS10537 = true
|
||||||
|
ULUS10737 = true
|
||||||
|
ULJS19067 = true
|
||||||
|
ULAS42318 = true
|
||||||
|
NPUH90087 = true # demo
|
||||||
|
NPEH90042 = true # demo
|
||||||
|
|
||||||
[Force04154000Download]
|
[Force04154000Download]
|
||||||
# This applies a hack to Dangan Ronpa, its demo, and its sequel.
|
# This applies a hack to Dangan Ronpa, its demo, and its sequel.
|
||||||
@@ -356,9 +378,6 @@ ULJM05359 = true
|
|||||||
ULJM05885 = true
|
ULJM05885 = true
|
||||||
NPJH50825 = true
|
NPJH50825 = true
|
||||||
ULKS46157 = true
|
ULKS46157 = true
|
||||||
# GOW : JP/Korean
|
|
||||||
UCJS10114 = true
|
|
||||||
UCKS45084 = true
|
|
||||||
# GOW : Ghost of Sparta
|
# GOW : Ghost of Sparta
|
||||||
UCUS98737 = true
|
UCUS98737 = true
|
||||||
UCAS40323 = true
|
UCAS40323 = true
|
||||||
@@ -526,6 +545,10 @@ ULJM05091 = true
|
|||||||
# GachiTora! Abarenbou Kyoushi in High School need it to render shadows properly (see #14136)
|
# GachiTora! Abarenbou Kyoushi in High School need it to render shadows properly (see #14136)
|
||||||
ULJS00355 = true
|
ULJS00355 = true
|
||||||
NPJH50409 = true
|
NPJH50409 = true
|
||||||
|
# MegaMan Maverick Hunter X (see #10085)
|
||||||
|
ULES00251 = true
|
||||||
|
ULUS10068 = true
|
||||||
|
ULJM05043 = true
|
||||||
|
|
||||||
[DisableAccurateDepth]
|
[DisableAccurateDepth]
|
||||||
# Midnight Club: LA Remix
|
# Midnight Club: LA Remix
|
||||||
@@ -619,12 +642,12 @@ UCES00373 = true
|
|||||||
ULJS00078 = true
|
ULJS00078 = true
|
||||||
UCAS40104 = true
|
UCAS40104 = true
|
||||||
|
|
||||||
# Ys Seven
|
# Ys Seven disabled (caused glitches, see #13529)
|
||||||
ULUS10551 = true
|
# ULUS10551 = true
|
||||||
ULJM05475 = true
|
# ULJM05475 = true
|
||||||
ULJM05475 = true
|
# ULJM05475 = true
|
||||||
NPEH00065 = true
|
# NPEH00065 = true
|
||||||
NPJH50350 = true
|
# NPJH50350 = true
|
||||||
|
|
||||||
# Burnout Legends
|
# Burnout Legends
|
||||||
ULES00125 = true
|
ULES00125 = true
|
||||||
@@ -681,6 +704,11 @@ UCAS40347 = true
|
|||||||
UCJS10038 = true
|
UCJS10038 = true
|
||||||
UCJS18013 = 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
|
# Note! This whole flag is disabled temporarily by appending "Disabled" to its name). See 7914
|
||||||
[YugiohSaveFixDisabled]
|
[YugiohSaveFixDisabled]
|
||||||
# The cause of Yu-gi-oh series 's bad save (cannot save) are load "save status" and use cwcheat,
|
# 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
|
# The GOW games are very heavy and render as fast as they can. They benefit greatly from
|
||||||
# capping the framerate at 60fps.
|
# capping the framerate at 60fps.
|
||||||
|
|
||||||
UCJS10114 = true
|
|
||||||
UCKS45084 = true
|
|
||||||
# GOW : Ghost of Sparta
|
# GOW : Ghost of Sparta
|
||||||
UCUS98737 = true
|
UCUS98737 = true
|
||||||
UCAS40323 = true
|
UCAS40323 = true
|
||||||
@@ -847,6 +873,26 @@ ULES01495 = true
|
|||||||
# Atari Classics Evolved
|
# Atari Classics Evolved
|
||||||
ULUS10325 = true
|
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]
|
[JitInvalidationHack]
|
||||||
# This is an absolutely awful hack that somehow prevents issues when clearing the JIT,
|
# 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
|
# if the game has copied code with EmuHack opcodes or something. Hopefully will be able
|
||||||
@@ -859,6 +905,7 @@ ULES00034 = true
|
|||||||
ULES00035 = true
|
ULES00035 = true
|
||||||
# MTX MotoTrax
|
# MTX MotoTrax
|
||||||
ULUS10138 = true
|
ULUS10138 = true
|
||||||
|
ULES00581 = true
|
||||||
|
|
||||||
[HideISOFiles]
|
[HideISOFiles]
|
||||||
# DJ Max Portable has some crude copy-protection functionality where it looks for ISO/CSO files
|
# DJ Max Portable has some crude copy-protection functionality where it looks for ISO/CSO files
|
||||||
@@ -989,12 +1036,6 @@ ULJM05533 = true
|
|||||||
NPJH50006 = true
|
NPJH50006 = true
|
||||||
ULES01301 = true
|
ULES01301 = true
|
||||||
|
|
||||||
[DoublePrecisionSinCos]
|
|
||||||
# Hitman Reborn Battle Arena 2 (#12900)
|
|
||||||
ULJS00218 = true
|
|
||||||
# Hitman Reborn Battle Arena
|
|
||||||
ULJS00157 = true
|
|
||||||
|
|
||||||
[DisableFirstFrameReadback]
|
[DisableFirstFrameReadback]
|
||||||
# Wipeout Pure: Temporary workaround for lens flare flicker. See #13344
|
# Wipeout Pure: Temporary workaround for lens flare flicker. See #13344
|
||||||
UCUS98612 = true
|
UCUS98612 = true
|
||||||
@@ -1003,6 +1044,15 @@ UCES00001 = true
|
|||||||
UCKS45008 = true
|
UCKS45008 = true
|
||||||
NPJG00059 = 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]
|
[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 issue #13527 ,It is custom mpeg library that required sceMpegGetAvcAu return ERROR_MPEG_NO_DATA but break FIFA 14 issue #14086
|
||||||
# God Eater 1
|
# God Eater 1
|
||||||
@@ -1027,3 +1077,8 @@ NPJH50352 = true
|
|||||||
ULUS10563FV = true
|
ULUS10563FV = true
|
||||||
ULJS19081 = true
|
ULJS19081 = true
|
||||||
NPJH50352 = true
|
NPJH50352 = true
|
||||||
|
|
||||||
|
# Field Commander, see issue #10209
|
||||||
|
ULUS10088 = true
|
||||||
|
ULES00335 = true
|
||||||
|
ULKS46070 = true
|
||||||
|
|||||||
Binary file not shown.
+202
-200
@@ -1,200 +1,202 @@
|
|||||||
# Windows - DINPUT
|
# 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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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
|
# 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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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
|
# 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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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
|
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,
|
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
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
||||||
|
|||||||
+337
-337
@@ -1,337 +1,337 @@
|
|||||||
006b570008068310:184 = strtok_r
|
006b570008068310:184 = strtok_r
|
||||||
019ba2099fb88f3c:48 = vector_normalize_t
|
019ba2099fb88f3c:48 = vector_normalize_t
|
||||||
0266f96d740c7e03:912 = memcpy
|
0266f96d740c7e03:912 = memcpy
|
||||||
02bd2859045d2383:240 = bcmp
|
02bd2859045d2383:240 = bcmp
|
||||||
030507c9a1f0fc85:92 = matrix_rot_x
|
030507c9a1f0fc85:92 = matrix_rot_x
|
||||||
0483fceefa4557ff:1360 = __udivdi3
|
0483fceefa4557ff:1360 = __udivdi3
|
||||||
0558ad5c5be00ca1:76 = vtfm_t
|
0558ad5c5be00ca1:76 = vtfm_t
|
||||||
05aedd0c04b451a1:356 = sqrt
|
05aedd0c04b451a1:356 = sqrt
|
||||||
0654fc8adbe16ef7:28 = vmul_q
|
0654fc8adbe16ef7:28 = vmul_q
|
||||||
06b243c926fa6ab5:24 = vf2in_q
|
06b243c926fa6ab5:24 = vf2in_q
|
||||||
06e2826e02056114:56 = wcslen
|
06e2826e02056114:56 = wcslen
|
||||||
075fa9b234b41e9b:32 = fmodf
|
075fa9b234b41e9b:32 = fmodf
|
||||||
0a051019bdd786c3:184 = strcasecmp
|
0a051019bdd786c3:184 = strcasecmp
|
||||||
0a46dc426054bb9d:24 = vector_add_t
|
0a46dc426054bb9d:24 = vector_add_t
|
||||||
0c0173ed70f84f66:48 = vnormalize_t
|
0c0173ed70f84f66:48 = vnormalize_t
|
||||||
0c65188f5bfb3915:24 = vsgn_q
|
0c65188f5bfb3915:24 = vsgn_q
|
||||||
0d898513a722ea3c:40 = copysignf
|
0d898513a722ea3c:40 = copysignf
|
||||||
0e99b037b852c8ea:68 = isnan
|
0e99b037b852c8ea:68 = isnan
|
||||||
0eb5f2e95f59276a:40 = dl_write_lightmode
|
0eb5f2e95f59276a:40 = dl_write_lightmode
|
||||||
0f1e7533a546f6a1:228 = dl_write_bone_matrix_4
|
0f1e7533a546f6a1:228 = dl_write_bone_matrix_4
|
||||||
0f2a1106ad84fb74:52 = strcmp
|
0f2a1106ad84fb74:52 = strcmp
|
||||||
0ffa5db8396d4274:64 = memcpy_jak
|
0ffa5db8396d4274:64 = memcpy_jak
|
||||||
1252e902d0b49bfb:44 = vector_sub_q_2
|
1252e902d0b49bfb:44 = vector_sub_q_2
|
||||||
12df3d33a58d0298:52 = vmidt_t
|
12df3d33a58d0298:52 = vmidt_t
|
||||||
12feef7b017d3431:700 = memmove
|
12feef7b017d3431:700 = memmove
|
||||||
1322c7e3fe6dff4d:784 = _free_r
|
1322c7e3fe6dff4d:784 = _free_r
|
||||||
1376c115d5f1d90c:36 = strlen
|
1376c115d5f1d90c:36 = strlen
|
||||||
1448134dd3acd1f9:240 = memchr
|
1448134dd3acd1f9:240 = memchr
|
||||||
14800e59c04968d7:100 = wcsstr
|
14800e59c04968d7:100 = wcsstr
|
||||||
14b56e858a27a8a4:24 = vi2f_q
|
14b56e858a27a8a4:24 = vi2f_q
|
||||||
15c4662d5d3c728e:308 = acosf
|
15c4662d5d3c728e:308 = acosf
|
||||||
1616ee7052542059:48 = vtfm_t
|
1616ee7052542059:48 = vtfm_t
|
||||||
16965ca11a4e7dac:104 = vmmul_q_transp
|
16965ca11a4e7dac:104 = vmmul_q_transp
|
||||||
16afe830a5dd2de2:40 = vdiv_q
|
16afe830a5dd2de2:40 = vdiv_q
|
||||||
184e834a63a79016:32 = isnanf
|
184e834a63a79016:32 = isnanf
|
||||||
189212bda9c94df1:736 = atanf
|
189212bda9c94df1:736 = atanf
|
||||||
199821ce500ef9d2:24 = vocp_t
|
199821ce500ef9d2:24 = vocp_t
|
||||||
1a3c8e9d637ed421:104 = __adddf3
|
1a3c8e9d637ed421:104 = __adddf3
|
||||||
1a7564fa3e25c992:844 = memcpy
|
1a7564fa3e25c992:844 = memcpy
|
||||||
1aad94c0723edfc0:124 = vmmul_t_transp
|
1aad94c0723edfc0:124 = vmmul_t_transp
|
||||||
1ab33b12b3cb8cb0:28 = vqmul_q
|
1ab33b12b3cb8cb0:28 = vqmul_q
|
||||||
1ac05627df1f87f4:112 = memcpy16
|
1ac05627df1f87f4:112 = memcpy16
|
||||||
1bdf3600844373fd:112 = strstr
|
1bdf3600844373fd:112 = strstr
|
||||||
1c967be07917ddc9:92 = strcat
|
1c967be07917ddc9:92 = strcat
|
||||||
1d03fa48334ca966:556 = _strtol_r
|
1d03fa48334ca966:556 = _strtol_r
|
||||||
1e1525e3bc2f6703:676 = rint
|
1e1525e3bc2f6703:676 = rint
|
||||||
1ec055f28bb9f4d1:88 = gu_update_stall
|
1ec055f28bb9f4d1:88 = gu_update_stall
|
||||||
1ef9cfe6afd3c035:180 = memset
|
1ef9cfe6afd3c035:180 = memset
|
||||||
1f53eac122f96b37:224 = cosf
|
1f53eac122f96b37:224 = cosf
|
||||||
2097a8b75c8fe651:436 = atan2
|
2097a8b75c8fe651:436 = atan2
|
||||||
21411b3c860822c0:36 = matrix_scale_q_t
|
21411b3c860822c0:36 = matrix_scale_q_t
|
||||||
24d82a8675800808:220 = ceilf
|
24d82a8675800808:220 = ceilf
|
||||||
26cc90cb25af9d27:476 = log10
|
26cc90cb25af9d27:476 = log10
|
||||||
2774614d57d4baa2:28 = vsub_q
|
2774614d57d4baa2:28 = vsub_q
|
||||||
279c6bf9cf99cc85:436 = strncpy
|
279c6bf9cf99cc85:436 = strncpy
|
||||||
2876ed93c5fd1211:328 = dl_write_matrix_4
|
2876ed93c5fd1211:328 = dl_write_matrix_4
|
||||||
2965b1ad3ca15cc1:44 = vtfm_t
|
2965b1ad3ca15cc1:44 = vtfm_t
|
||||||
299a370587df078f:116 = strange_copy_routine
|
299a370587df078f:116 = strange_copy_routine
|
||||||
2abca53599f09ea7:608 = dl_write_matrix_3
|
2abca53599f09ea7:608 = dl_write_matrix_3
|
||||||
2adb92e8855c454e:48 = vtfm_q
|
2adb92e8855c454e:48 = vtfm_q
|
||||||
2adc229bef7bbc75:40 = isnan
|
2adc229bef7bbc75:40 = isnan
|
||||||
2bcf5268dd26345a:340 = acos
|
2bcf5268dd26345a:340 = acos
|
||||||
2c4cb2028a1735bf:600 = floor
|
2c4cb2028a1735bf:600 = floor
|
||||||
2ca5958bb816c72e:44 = vector_i2f_t
|
2ca5958bb816c72e:44 = vector_i2f_t
|
||||||
2e7022d9767c9018:2100 = atan
|
2e7022d9767c9018:2100 = atan
|
||||||
2f10d3faec84b5bb:276 = sinf
|
2f10d3faec84b5bb:276 = sinf
|
||||||
2f639673670caa0e:772 = dl_write_matrix_2
|
2f639673670caa0e:772 = dl_write_matrix_2
|
||||||
2f718936b371fc44:40 = vcos_s
|
2f718936b371fc44:40 = vcos_s
|
||||||
3024e961d1811dea:396 = fmod
|
3024e961d1811dea:396 = fmod
|
||||||
30c9c4f420573eb6:540 = expf
|
30c9c4f420573eb6:540 = expf
|
||||||
317afeb882ff324a:212 = memcpy
|
317afeb882ff324a:212 = memcpy
|
||||||
31ea2e192f5095a1:52 = vector_add_t
|
31ea2e192f5095a1:52 = vector_add_t
|
||||||
31f523ef18898e0e:420 = logf
|
31f523ef18898e0e:420 = logf
|
||||||
32806967fe81568b:40 = vector_sub_t_2
|
32806967fe81568b:40 = vector_sub_t_2
|
||||||
32ceb9a7f72b9385:440 = _strtoul_r
|
32ceb9a7f72b9385:440 = _strtoul_r
|
||||||
32e6bc7c151491ed:68 = memchr
|
32e6bc7c151491ed:68 = memchr
|
||||||
335df69db1073a8d:96 = wcscpy
|
335df69db1073a8d:96 = wcscpy
|
||||||
33dc6b144cb302c1:304 = memmove
|
33dc6b144cb302c1:304 = memmove
|
||||||
35d3527ff8c22ff2:56 = matrix_scale_q
|
35d3527ff8c22ff2:56 = matrix_scale_q
|
||||||
373ce518eee5a2d2:20 = matrix300_store_q
|
373ce518eee5a2d2:20 = matrix300_store_q
|
||||||
388043e96b0e11fd:144 = dl_write_material_2
|
388043e96b0e11fd:144 = dl_write_material_2
|
||||||
38f19bc3be215acc:388 = log10f
|
38f19bc3be215acc:388 = log10f
|
||||||
393047f06eceaba1:96 = strcspn
|
393047f06eceaba1:96 = strcspn
|
||||||
39a651942a0b3861:204 = tan
|
39a651942a0b3861:204 = tan
|
||||||
3a3bc2b20a55bf02:68 = memchr
|
3a3bc2b20a55bf02:68 = memchr
|
||||||
3ab08b5659de1746:40 = vsin_s
|
3ab08b5659de1746:40 = vsin_s
|
||||||
3c421a9265f37ebc:700 = memmove
|
3c421a9265f37ebc:700 = memmove
|
||||||
3cbc2d50a3db59e9:100 = strncmp
|
3cbc2d50a3db59e9:100 = strncmp
|
||||||
3ce1806699a91d9d:148 = dl_write_light
|
3ce1806699a91d9d:148 = dl_write_light
|
||||||
3d5e914011c181d4:444 = scalbnf
|
3d5e914011c181d4:444 = scalbnf
|
||||||
3ea41eafb53fc99a:388 = logf
|
3ea41eafb53fc99a:388 = logf
|
||||||
3fe38bff09ac3da0:436 = _strtoul_r
|
3fe38bff09ac3da0:436 = _strtoul_r
|
||||||
40a25c7e1fd44fe2:24 = fabsf
|
40a25c7e1fd44fe2:24 = fabsf
|
||||||
410d48d9b6580b4a:36 = dl_write_ztest
|
410d48d9b6580b4a:36 = dl_write_ztest
|
||||||
42dc17c8018f30f2:44 = vtan.s
|
42dc17c8018f30f2:44 = vtan.s
|
||||||
436b07caa2aab931:352 = acos
|
436b07caa2aab931:352 = acos
|
||||||
444472537eedf966:32 = vmzero_q
|
444472537eedf966:32 = vmzero_q
|
||||||
449ff96982626338:28 = vmidt_q
|
449ff96982626338:28 = vmidt_q
|
||||||
44f65b1a72c45703:36 = strlen
|
44f65b1a72c45703:36 = strlen
|
||||||
45528de3948615dc:64 = memcpy
|
45528de3948615dc:64 = memcpy
|
||||||
456a0d78ac318d15:164 = gta_dl_write_matrix
|
456a0d78ac318d15:164 = gta_dl_write_matrix
|
||||||
497248c9d12f44fd:68 = strcpy
|
497248c9d12f44fd:68 = strcpy
|
||||||
4a70207212a4c497:24 = strlen
|
4a70207212a4c497:24 = strlen
|
||||||
4b16a5c602c74c6c:24 = vsub_t
|
4b16a5c602c74c6c:24 = vsub_t
|
||||||
4bb677dace6ca526:184 = memset
|
4bb677dace6ca526:184 = memset
|
||||||
4c4bdedcc13ac77c:624 = dl_write_matrix_5
|
4c4bdedcc13ac77c:624 = dl_write_matrix_5
|
||||||
4c91c556d1aa896b:104 = dl_write_material_3
|
4c91c556d1aa896b:104 = dl_write_material_3
|
||||||
4cf38c368078181e:616 = dl_write_matrix
|
4cf38c368078181e:616 = dl_write_matrix
|
||||||
4d72b294501cddfb:80 = copysign
|
4d72b294501cddfb:80 = copysign
|
||||||
4ddd83b7f4ed8d4e:844 = memcpy
|
4ddd83b7f4ed8d4e:844 = memcpy
|
||||||
4e266783291b0220:28 = vsub_t
|
4e266783291b0220:28 = vsub_t
|
||||||
4e5950928c0bb082:44 = vmmul_q_transp4
|
4e5950928c0bb082:44 = vmmul_q_transp4
|
||||||
4f34fc596ecf5b25:40 = vdiv_t
|
4f34fc596ecf5b25:40 = vdiv_t
|
||||||
500a949afb39133f:24 = vf2iu_q
|
500a949afb39133f:24 = vf2iu_q
|
||||||
50d8f01ea8fa713d:48 = send_commandi
|
50d8f01ea8fa713d:48 = send_commandi
|
||||||
50fa6db2fb14814a:544 = rint
|
50fa6db2fb14814a:544 = rint
|
||||||
513ce13cd7ce97ea:332 = scalbnf
|
513ce13cd7ce97ea:332 = scalbnf
|
||||||
514161da54d37416:1416 = __umoddi3
|
514161da54d37416:1416 = __umoddi3
|
||||||
51c52d7dd4d2191c:360 = cos
|
51c52d7dd4d2191c:360 = cos
|
||||||
5287d4b8abd5806b:768 = _strtoll_r
|
5287d4b8abd5806b:768 = _strtoll_r
|
||||||
52d5141545a75eda:60 = dl_write_clutformat
|
52d5141545a75eda:60 = dl_write_clutformat
|
||||||
530cbe1ce9b45d58:108 = dl_write_light_vector
|
530cbe1ce9b45d58:108 = dl_write_light_vector
|
||||||
53c9aa23504a630f:96 = vmmul_q_5
|
53c9aa23504a630f:96 = vmmul_q_5
|
||||||
54015ccbcbc75374:24 = strlen
|
54015ccbcbc75374:24 = strlen
|
||||||
5550d87a851c218c:168 = dl_write_viewport
|
5550d87a851c218c:168 = dl_write_viewport
|
||||||
55c1294280bfade0:88 = dl_write_blend_fixed
|
55c1294280bfade0:88 = dl_write_blend_fixed
|
||||||
56c9929e8c8c5768:24 = fabsf
|
56c9929e8c8c5768:24 = fabsf
|
||||||
572b2d9e57e6e363:788 = memcpy_thingy
|
572b2d9e57e6e363:788 = memcpy_thingy
|
||||||
580200b840b47c58:1856 = _realloc_r
|
580200b840b47c58:1856 = _realloc_r
|
||||||
5961f681bbd69035:28 = vfad_q
|
5961f681bbd69035:28 = vfad_q
|
||||||
598b91c64cf7e036:2388 = qsort
|
598b91c64cf7e036:2388 = qsort
|
||||||
59a0cb08f5ecf8b6:28 = copysignf
|
59a0cb08f5ecf8b6:28 = copysignf
|
||||||
5ae4ec2a5e133de3:28 = vector_cross_t
|
5ae4ec2a5e133de3:28 = vector_cross_t
|
||||||
5b005f8375d7c364:236 = floorf
|
5b005f8375d7c364:236 = floorf
|
||||||
5b103d973fd1dd94:92 = matrix_rot_y
|
5b103d973fd1dd94:92 = matrix_rot_y
|
||||||
5b9d7e9d4c905694:196 = _calloc_r
|
5b9d7e9d4c905694:196 = _calloc_r
|
||||||
5bf7a77b028e9f66:324 = sqrtf
|
5bf7a77b028e9f66:324 = sqrtf
|
||||||
5c0b3edc0e48852c:148 = memmove
|
5c0b3edc0e48852c:148 = memmove
|
||||||
5e898df42c4af6b8:76 = wcsncmp
|
5e898df42c4af6b8:76 = wcsncmp
|
||||||
5f473780835e3458:52 = vclamp_q
|
5f473780835e3458:52 = vclamp_q
|
||||||
5fc58ed2c4d48b79:40 = vtfm_q_transp
|
5fc58ed2c4d48b79:40 = vtfm_q_transp
|
||||||
6145029ef86f0365:76 = __extendsfdf2
|
6145029ef86f0365:76 = __extendsfdf2
|
||||||
62815f41fa86a131:656 = scalbn
|
62815f41fa86a131:656 = scalbn
|
||||||
6301fa5149bd973a:120 = wcscat
|
6301fa5149bd973a:120 = wcscat
|
||||||
658b07240a690dbd:36 = strlen
|
658b07240a690dbd:36 = strlen
|
||||||
66122f0ab50b2ef9:296 = dl_write_dither_matrix_5
|
66122f0ab50b2ef9:296 = dl_write_dither_matrix_5
|
||||||
66f7f1beccbc104a:256 = memcpy_swizzled
|
66f7f1beccbc104a:256 = memcpy_swizzled
|
||||||
679e647e34ecf7f1:132 = roundf
|
679e647e34ecf7f1:132 = roundf
|
||||||
67afe74d9ec72f52:4380 = _strtod_r
|
67afe74d9ec72f52:4380 = _strtod_r
|
||||||
68b22c2aa4b8b915:400 = sqrt
|
68b22c2aa4b8b915:400 = sqrt
|
||||||
6962da85a6dad937:60 = strrchr
|
6962da85a6dad937:60 = strrchr
|
||||||
69a3c4f774859404:64 = vmmul_q_transp2
|
69a3c4f774859404:64 = vmmul_q_transp2
|
||||||
6b022e20ee3fa733:68 = __negdf2
|
6b022e20ee3fa733:68 = __negdf2
|
||||||
6b2a6347c0dfcb57:152 = strcpy
|
6b2a6347c0dfcb57:152 = strcpy
|
||||||
6b4148322c569cb3:240 = wmemchr
|
6b4148322c569cb3:240 = wmemchr
|
||||||
6c4cb6d25851553a:44 = vtfm_t
|
6c4cb6d25851553a:44 = vtfm_t
|
||||||
6c7b2462b9ec7bc7:56 = vmmul_q
|
6c7b2462b9ec7bc7:56 = vmmul_q
|
||||||
6ca9cc8fa485d096:304 = __ieee754_sqrtf
|
6ca9cc8fa485d096:304 = __ieee754_sqrtf
|
||||||
6ccffc753d2c148e:96 = strlwr
|
6ccffc753d2c148e:96 = strlwr
|
||||||
6e40ec681fb5c571:40 = matrix_copy_q
|
6e40ec681fb5c571:40 = matrix_copy_q
|
||||||
6e9884c842a51142:236 = strncasecmp
|
6e9884c842a51142:236 = strncasecmp
|
||||||
6f101c5c4311c144:276 = floorf
|
6f101c5c4311c144:276 = floorf
|
||||||
6f1731f84bbf76c3:116 = strcmp
|
6f1731f84bbf76c3:116 = strcmp
|
||||||
6f4e1a1a84df1da0:68 = dl_write_texmode
|
6f4e1a1a84df1da0:68 = dl_write_texmode
|
||||||
70649c7211f6a8da:16 = fabsf
|
70649c7211f6a8da:16 = fabsf
|
||||||
7245b74db370ae72:64 = vmmul_q_transp3
|
7245b74db370ae72:64 = vmmul_q_transp3
|
||||||
7259d52b21814a5a:40 = vtfm_t_transp
|
7259d52b21814a5a:40 = vtfm_t_transp
|
||||||
736b34ebc702d873:104 = vmmul_q_transp
|
736b34ebc702d873:104 = vmmul_q_transp
|
||||||
7499a2ce8b60d801:12 = abs
|
7499a2ce8b60d801:12 = abs
|
||||||
74ebbe7d341463f3:72 = dl_write_colortest
|
74ebbe7d341463f3:72 = dl_write_colortest
|
||||||
755a41f9183bb89a:60 = vmmul_q
|
755a41f9183bb89a:60 = vmmul_q
|
||||||
759834c69bb12c12:68 = strcpy
|
759834c69bb12c12:68 = strcpy
|
||||||
75c5a88d62c9c99f:276 = sinf
|
75c5a88d62c9c99f:276 = sinf
|
||||||
76c661fecbb39990:364 = sin
|
76c661fecbb39990:364 = sin
|
||||||
770c9c07bf58fd14:16 = fabsf
|
770c9c07bf58fd14:16 = fabsf
|
||||||
774e479eb9634525:464 = _strtol_r
|
774e479eb9634525:464 = _strtol_r
|
||||||
77aeb1c23f9aa2ad:56 = strchr
|
77aeb1c23f9aa2ad:56 = strchr
|
||||||
78e8c65b5a458f33:148 = memcmp
|
78e8c65b5a458f33:148 = memcmp
|
||||||
794d1b073c183c77:24 = fabsf
|
794d1b073c183c77:24 = fabsf
|
||||||
7978a886cf70b1c9:56 = wcschr
|
7978a886cf70b1c9:56 = wcschr
|
||||||
79faa339fff5a80c:28 = finitef
|
79faa339fff5a80c:28 = finitef
|
||||||
7c50728008c288e3:36 = vector_transform_q_4x4
|
7c50728008c288e3:36 = vector_transform_q_4x4
|
||||||
7f1fc0dce6be120a:404 = fmod
|
7f1fc0dce6be120a:404 = fmod
|
||||||
828b98925af9ff8f:40 = vector_distance_t
|
828b98925af9ff8f:40 = vector_distance_t
|
||||||
83ac39971df4b966:336 = sqrtf
|
83ac39971df4b966:336 = sqrtf
|
||||||
84c6cd47834f4c79:1284 = powf
|
84c6cd47834f4c79:1284 = powf
|
||||||
8734dc1d155ea493:24 = vf2iz_q
|
8734dc1d155ea493:24 = vf2iz_q
|
||||||
87fe3f7e621ddebb:212 = memcpy
|
87fe3f7e621ddebb:212 = memcpy
|
||||||
891ca854e1c664e9:2392 = qsort
|
891ca854e1c664e9:2392 = qsort
|
||||||
8965d4b004adad28:420 = log10f
|
8965d4b004adad28:420 = log10f
|
||||||
89e1858ba11b84e4:52 = memset
|
89e1858ba11b84e4:52 = memset
|
||||||
8a00e7207e7dbc81:232 = _exit
|
8a00e7207e7dbc81:232 = _exit
|
||||||
8a1f9daadecbaf7f:104 = vmmul_q_transp
|
8a1f9daadecbaf7f:104 = vmmul_q_transp
|
||||||
8a610f34078ce360:32 = vector_copy_q_t
|
8a610f34078ce360:32 = vector_copy_q_t
|
||||||
8c3fd997a544d0b1:268 = memcpy
|
8c3fd997a544d0b1:268 = memcpy
|
||||||
8df2928848857e97:164 = strcat
|
8df2928848857e97:164 = strcat
|
||||||
8e48cabd529ca6b5:52 = vector_multiply_t
|
8e48cabd529ca6b5:52 = vector_multiply_t
|
||||||
8e97dcb03fbaba5c:104 = vmmul_q_transp
|
8e97dcb03fbaba5c:104 = vmmul_q_transp
|
||||||
8ee81b03d2eef1e7:28 = vmul_t
|
8ee81b03d2eef1e7:28 = vmul_t
|
||||||
8f19c41e8b987e18:100 = matrix_mogrify
|
8f19c41e8b987e18:100 = matrix_mogrify
|
||||||
8ff11e9bed387401:700 = memmove
|
8ff11e9bed387401:700 = memmove
|
||||||
910140c1a07aa59e:256 = rot_matrix_euler_zyx
|
910140c1a07aa59e:256 = rot_matrix_euler_zyx
|
||||||
91606bd72ae90481:44 = wmemcpy
|
91606bd72ae90481:44 = wmemcpy
|
||||||
92c7d2de74068c9c:32 = vcross_t
|
92c7d2de74068c9c:32 = vcross_t
|
||||||
93d8a275ba288b26:32 = vdot_t
|
93d8a275ba288b26:32 = vdot_t
|
||||||
94c7083b64a946b4:2028 = powf
|
94c7083b64a946b4:2028 = powf
|
||||||
95a52ce1bc460108:2036 = _malloc_r
|
95a52ce1bc460108:2036 = _malloc_r
|
||||||
95bd33ac373c019a:24 = fabsf
|
95bd33ac373c019a:24 = fabsf
|
||||||
9705934b0950d68d:280 = dl_write_framebuffer_ptr
|
9705934b0950d68d:280 = dl_write_framebuffer_ptr
|
||||||
9734cf721bc0f3a1:732 = atanf
|
9734cf721bc0f3a1:732 = atanf
|
||||||
9a06b9d5c16c4c20:76 = dl_write_clut_ptrload
|
9a06b9d5c16c4c20:76 = dl_write_clut_ptrload
|
||||||
9b88b739267d189e:88 = strrchr
|
9b88b739267d189e:88 = strrchr
|
||||||
9ce53975bb88c0e7:96 = strncpy
|
9ce53975bb88c0e7:96 = strncpy
|
||||||
9d4f5f56b52f07f2:808 = memmove
|
9d4f5f56b52f07f2:808 = memmove
|
||||||
9e2941c4a5c5e847:792 = memcpy
|
9e2941c4a5c5e847:792 = memcpy
|
||||||
9e6ce11f9d49f954:292 = memcpy
|
9e6ce11f9d49f954:292 = memcpy
|
||||||
9f269daa6f0da803:128 = dl_write_scissor_region
|
9f269daa6f0da803:128 = dl_write_scissor_region
|
||||||
9f7919eeb43982b0:208 = __fixdfsi
|
9f7919eeb43982b0:208 = __fixdfsi
|
||||||
a1ca0640f11182e7:72 = strcspn
|
a1ca0640f11182e7:72 = strcspn
|
||||||
a243486be51ce224:272 = cosf
|
a243486be51ce224:272 = cosf
|
||||||
a2bcef60a550a3ef:92 = matrix_rot_z
|
a2bcef60a550a3ef:92 = matrix_rot_z
|
||||||
a41989db0f9bf97e:1304 = pow
|
a41989db0f9bf97e:1304 = pow
|
||||||
a44f6227fdbc12b1:132 = memcmp
|
a44f6227fdbc12b1:132 = memcmp
|
||||||
a46cc6ea720d5775:44 = dl_write_cull
|
a46cc6ea720d5775:44 = dl_write_cull
|
||||||
a54967288afe8f26:600 = ceil
|
a54967288afe8f26:600 = ceil
|
||||||
a5ddbbc688e89a4d:56 = isinf
|
a5ddbbc688e89a4d:56 = isinf
|
||||||
a662359e30b829e4:148 = memcmp
|
a662359e30b829e4:148 = memcmp
|
||||||
a8390e65fa087c62:140 = vtfm_t_q
|
a8390e65fa087c62:140 = vtfm_t_q
|
||||||
a85fe8abb88b1c6f:52 = vector_sub_t
|
a85fe8abb88b1c6f:52 = vector_sub_t
|
||||||
a9194e55cc586557:268 = memcpy
|
a9194e55cc586557:268 = memcpy
|
||||||
a91b3d60bd75105b:28 = vadd_t
|
a91b3d60bd75105b:28 = vadd_t
|
||||||
ab97ec58c58a7c75:52 = vector_divide_t
|
ab97ec58c58a7c75:52 = vector_divide_t
|
||||||
acc2c11c3ea28320:268 = ceilf
|
acc2c11c3ea28320:268 = ceilf
|
||||||
ad67add5122b8c64:52 = matrix_q_translate_t
|
ad67add5122b8c64:52 = matrix_q_translate_t
|
||||||
ada952a1adcea4f5:60 = vmmul_q_transp5
|
ada952a1adcea4f5:60 = vmmul_q_transp5
|
||||||
adfbf8fb8c933193:56 = fabs
|
adfbf8fb8c933193:56 = fabs
|
||||||
ae50226363135bdd:24 = vector_sub_t
|
ae50226363135bdd:24 = vector_sub_t
|
||||||
ae6cd7dfac82c244:48 = vpow_s
|
ae6cd7dfac82c244:48 = vpow_s
|
||||||
af85d47f95ad2921:1936 = pow
|
af85d47f95ad2921:1936 = pow
|
||||||
afb2c7e56c04c8e9:48 = vtfm_q
|
afb2c7e56c04c8e9:48 = vtfm_q
|
||||||
afc9968e7d246a5e:1588 = atan
|
afc9968e7d246a5e:1588 = atan
|
||||||
afcb7dfbc4d72588:44 = vector_transform_3x4
|
afcb7dfbc4d72588:44 = vector_transform_3x4
|
||||||
b0db731f27d3aa1b:40 = vmax_s
|
b0db731f27d3aa1b:40 = vmax_s
|
||||||
b0ef265e87899f0a:32 = vector_divide_t_s
|
b0ef265e87899f0a:32 = vector_divide_t_s
|
||||||
b183a37baa12607b:32 = vscl_t
|
b183a37baa12607b:32 = vscl_t
|
||||||
b1a3e60a89af9857:20 = fabs
|
b1a3e60a89af9857:20 = fabs
|
||||||
b3fef47fb27d57c9:44 = vector_scale_t
|
b3fef47fb27d57c9:44 = vector_scale_t
|
||||||
b43fd5078ae78029:84 = send_commandi_stall
|
b43fd5078ae78029:84 = send_commandi_stall
|
||||||
b43ffbd4dc446dd2:324 = atan2f
|
b43ffbd4dc446dd2:324 = atan2f
|
||||||
b5fdb3083e6f4b3f:36 = vhtfm_t
|
b5fdb3083e6f4b3f:36 = vhtfm_t
|
||||||
b6a04277fb1e1a1a:104 = vmmul_q_transp
|
b6a04277fb1e1a1a:104 = vmmul_q_transp
|
||||||
b7448c5ffdd3b0fc:356 = atan2f
|
b7448c5ffdd3b0fc:356 = atan2f
|
||||||
b7d88567dc22aab1:820 = memcpy
|
b7d88567dc22aab1:820 = memcpy
|
||||||
b877d3c37a7aaa5d:60 = vmmul_q_2
|
b877d3c37a7aaa5d:60 = vmmul_q_2
|
||||||
b89aa73b6f94ba95:52 = vclamp_t
|
b89aa73b6f94ba95:52 = vclamp_t
|
||||||
b8bd1f0e02e9ad87:156 = dl_write_light_dir
|
b8bd1f0e02e9ad87:156 = dl_write_light_dir
|
||||||
b8cfaeebfeb2de20:7548 = _vfprintf_r
|
b8cfaeebfeb2de20:7548 = _vfprintf_r
|
||||||
b97f352e85661af6:32 = finitef
|
b97f352e85661af6:32 = finitef
|
||||||
bb3c6592ed319ba4:132 = dl_write_fog_params
|
bb3c6592ed319ba4:132 = dl_write_fog_params
|
||||||
bb7d7c93e4c08577:124 = __truncdfsf2
|
bb7d7c93e4c08577:124 = __truncdfsf2
|
||||||
bdf54d66079afb96:200 = dl_write_bone_matrix_3
|
bdf54d66079afb96:200 = dl_write_bone_matrix_3
|
||||||
be773f78afd1a70f:128 = rand
|
be773f78afd1a70f:128 = rand
|
||||||
bf5d02ccb8514881:108 = strcmp
|
bf5d02ccb8514881:108 = strcmp
|
||||||
bf791954ebef4afb:396 = expf
|
bf791954ebef4afb:396 = expf
|
||||||
bfe07e305abc4cd1:808 = memmove
|
bfe07e305abc4cd1:808 = memmove
|
||||||
c0feb88cc04a1dc7:48 = vector_negate_t
|
c0feb88cc04a1dc7:48 = vector_negate_t
|
||||||
c1f34599d0b9146b:116 = __subdf3
|
c1f34599d0b9146b:116 = __subdf3
|
||||||
c319f0d107dd2f45:888 = __muldf3
|
c319f0d107dd2f45:888 = __muldf3
|
||||||
c35c10300b6b6091:620 = floor
|
c35c10300b6b6091:620 = floor
|
||||||
c3dbf3e6c80a0a51:164 = dl_write_bone_matrix
|
c3dbf3e6c80a0a51:164 = dl_write_bone_matrix
|
||||||
c51519f5dab342d4:224 = cosf
|
c51519f5dab342d4:224 = cosf
|
||||||
c52c14b9af8c3008:76 = memcmp
|
c52c14b9af8c3008:76 = memcmp
|
||||||
c54eae62622f1e11:164 = dl_write_bone_matrix_2
|
c54eae62622f1e11:164 = dl_write_bone_matrix_2
|
||||||
c96e3a087ebf49a9:100 = dl_write_light_color
|
c96e3a087ebf49a9:100 = dl_write_light_color
|
||||||
cb7a2edd603ecfef:48 = vtfm_p
|
cb7a2edd603ecfef:48 = vtfm_p
|
||||||
cdf64d21418b2667:24 = vzero_q
|
cdf64d21418b2667:24 = vzero_q
|
||||||
ce1c95ee25b8e2ea:448 = fmod
|
ce1c95ee25b8e2ea:448 = fmod
|
||||||
ce4d18a75b98859f:40 = vector_add_t_2
|
ce4d18a75b98859f:40 = vector_add_t_2
|
||||||
ceb5372d0003d951:52 = dl_write_stenciltest
|
ceb5372d0003d951:52 = dl_write_stenciltest
|
||||||
cee11483b550ce8f:24 = vocp_q
|
cee11483b550ce8f:24 = vocp_q
|
||||||
cfecf208769ed5fd:272 = cosf
|
cfecf208769ed5fd:272 = cosf
|
||||||
d019b067b58cf6c3:700 = memmove
|
d019b067b58cf6c3:700 = memmove
|
||||||
d12a3a91e0040229:524 = dl_write_enable_disable
|
d12a3a91e0040229:524 = dl_write_enable_disable
|
||||||
d1faacfc711d61e8:68 = __negdf2
|
d1faacfc711d61e8:68 = __negdf2
|
||||||
d207b0650a41dd9c:28 = vmin_q
|
d207b0650a41dd9c:28 = vmin_q
|
||||||
d6d6e0bb21654778:24 = vneg_t
|
d6d6e0bb21654778:24 = vneg_t
|
||||||
d7229fee680e7851:40 = vmin_s
|
d7229fee680e7851:40 = vmin_s
|
||||||
d75670860a7f4b05:144 = wcsncpy
|
d75670860a7f4b05:144 = wcsncpy
|
||||||
d76d1a8804c7ec2c:100 = dl_write_material
|
d76d1a8804c7ec2c:100 = dl_write_material
|
||||||
d7d350c0b33a4662:28 = vadd_q
|
d7d350c0b33a4662:28 = vadd_q
|
||||||
d80051931427dca0:116 = __subdf3
|
d80051931427dca0:116 = __subdf3
|
||||||
da51dab503b06979:32 = vmidt_q
|
da51dab503b06979:32 = vmidt_q
|
||||||
dc0cc8b400ecfbf2:36 = strcmp
|
dc0cc8b400ecfbf2:36 = strcmp
|
||||||
dcab869acf2bacab:292 = strncasecmp
|
dcab869acf2bacab:292 = strncasecmp
|
||||||
dcdf7e1c1a3dc260:372 = strncmp
|
dcdf7e1c1a3dc260:372 = strncmp
|
||||||
dcfc28e624a81bf1:5476 = _dtoa_r
|
dcfc28e624a81bf1:5476 = _dtoa_r
|
||||||
ddfa5a85937aa581:32 = vdot_q
|
ddfa5a85937aa581:32 = vdot_q
|
||||||
e0214719d8a0aa4e:104 = strstr
|
e0214719d8a0aa4e:104 = strstr
|
||||||
e029f0699ca3a886:76 = matrix300_transform_by
|
e029f0699ca3a886:76 = matrix300_transform_by
|
||||||
e1107cf3892724a0:460 = _memalign_r
|
e1107cf3892724a0:460 = _memalign_r
|
||||||
e1724e6e29209d97:24 = vector_length_t_2
|
e1724e6e29209d97:24 = vector_length_t_2
|
||||||
e1a5d939cc308195:68 = wcscmp
|
e1a5d939cc308195:68 = wcscmp
|
||||||
e2d9106e5b9e39e6:80 = strnlen
|
e2d9106e5b9e39e6:80 = strnlen
|
||||||
e32cb5c062d1a1c4:700 = _strtoull_r
|
e32cb5c062d1a1c4:700 = _strtoull_r
|
||||||
e3835fb2c9c04e59:44 = vmmul_q
|
e3835fb2c9c04e59:44 = vmmul_q
|
||||||
e527c62d8613f297:136 = strcpy
|
e527c62d8613f297:136 = strcpy
|
||||||
e7b36c2c1348551d:148 = tan
|
e7b36c2c1348551d:148 = tan
|
||||||
e83a7a9d80a21c11:4448 = _strtod_r
|
e83a7a9d80a21c11:4448 = _strtod_r
|
||||||
e894bda909a8a8f9:1064 = expensive_wipeout_pulse
|
e894bda909a8a8f9:1064 = expensive_wipeout_pulse
|
||||||
e8ad7719be44e7c8:276 = strchr
|
e8ad7719be44e7c8:276 = strchr
|
||||||
eabb9c1b4f83d2b4:52 = memset
|
eabb9c1b4f83d2b4:52 = memset
|
||||||
eb0f7bf63d52ece9:88 = strncat
|
eb0f7bf63d52ece9:88 = strncat
|
||||||
eb8c0834d8bbc28c:416 = fmodf
|
eb8c0834d8bbc28c:416 = fmodf
|
||||||
edbbe9bf9fbceca8:172 = dl_write_viewport2
|
edbbe9bf9fbceca8:172 = dl_write_viewport2
|
||||||
edc3f476221f96e6:148 = tanf
|
edc3f476221f96e6:148 = tanf
|
||||||
f1f660fdf349eac2:1588 = _malloc_r
|
f1f660fdf349eac2:1588 = _malloc_r
|
||||||
f38a356a359dbe06:28 = vmax_q
|
f38a356a359dbe06:28 = vmax_q
|
||||||
f3fc2220ed0f2703:32 = send_commandf
|
f3fc2220ed0f2703:32 = send_commandf
|
||||||
f4d797cef4ac88cd:684 = _free_r
|
f4d797cef4ac88cd:684 = _free_r
|
||||||
f4ea7d2ec943fa02:224 = sinf
|
f4ea7d2ec943fa02:224 = sinf
|
||||||
f4f8cdf479dfc4a4:224 = sinf
|
f4f8cdf479dfc4a4:224 = sinf
|
||||||
f52f993e444b6c52:44 = dl_write_shademode
|
f52f993e444b6c52:44 = dl_write_shademode
|
||||||
f56641884b36c638:468 = scalbn
|
f56641884b36c638:468 = scalbn
|
||||||
f5f7826b4a61767c:40 = matrix_copy_q
|
f5f7826b4a61767c:40 = matrix_copy_q
|
||||||
f73c094e492bc163:396 = hypot
|
f73c094e492bc163:396 = hypot
|
||||||
f7fc691db0147e25:96 = strspn
|
f7fc691db0147e25:96 = strspn
|
||||||
f842aea3baa61f29:32 = vector_length_t
|
f842aea3baa61f29:32 = vector_length_t
|
||||||
f8e0902f4099a9d6:2260 = qsort
|
f8e0902f4099a9d6:2260 = qsort
|
||||||
f972543ab7df071a:32 = vsqrt_s
|
f972543ab7df071a:32 = vsqrt_s
|
||||||
f9b00ef163e8b9d4:32 = vscl_q
|
f9b00ef163e8b9d4:32 = vscl_q
|
||||||
f9ea1bf2a897ef24:588 = ceil
|
f9ea1bf2a897ef24:588 = ceil
|
||||||
fa156c48461eeeb9:24 = vf2id_q
|
fa156c48461eeeb9:24 = vf2id_q
|
||||||
fb4253a1d9d9df9f:20 = isnanf
|
fb4253a1d9d9df9f:20 = isnanf
|
||||||
fd34a9ad94fa6241:76 = __extendsfdf2
|
fd34a9ad94fa6241:76 = __extendsfdf2
|
||||||
fe4f0280240008e9:28 = vavg_q
|
fe4f0280240008e9:28 = vavg_q
|
||||||
fe5dd338ab862291:216 = memset
|
fe5dd338ab862291:216 = memset
|
||||||
ffc8f5f8f946152c:192 = dl_write_light_color
|
ffc8f5f8f946152c:192 = dl_write_light_color
|
||||||
|
|||||||
@@ -1,28 +1,28 @@
|
|||||||
# lang
|
# lang
|
||||||
|
|
||||||
PPSSPP language ini repository
|
PPSSPP language ini repository
|
||||||
|
|
||||||
# Thanks for your interest in translating PPSSPP!
|
# 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.
|
* 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.
|
* 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:
|
# Please note, while translating:
|
||||||
* Ampersands `&` on the *RIGHT* side of an equals sign denote an underlined keyboard hotkey.
|
* 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.
|
* 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.
|
* Example: `&File`. This will make it so when you press ALT + F on Windows, it'll open the File menu.
|
||||||
|
|
||||||
# Tools
|
# Tools
|
||||||
|
|
||||||
* To remove a translation, use the following (where KeyWord is the key):
|
* To remove a translation, use the following (where KeyWord is the key):
|
||||||
|
|
||||||
find . -type f -print0 | xargs -0 sed -i /^KeyWord/d
|
find . -type f -print0 | xargs -0 sed -i /^KeyWord/d
|
||||||
|
|
||||||
* To change a translation key, use something like this:
|
* To change a translation key, use something like this:
|
||||||
|
|
||||||
find . -type f -print0 | xargs -0 sed -i /^Key/NewKey
|
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
|
* Before you commit, use git diff to check that you don't delete too much
|
||||||
or some unrelated key with the same prefix.
|
or some unrelated key with the same prefix.
|
||||||
|
|
||||||
### Happy translating!
|
### Happy translating!
|
||||||
|
|||||||
+1203
-1080
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1219
-1097
File diff suppressed because it is too large
Load Diff
+1195
-1066
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1186
-1063
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1197
-1074
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1219
-1072
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1196
-1073
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1207
-1073
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
+1196
-1072
File diff suppressed because it is too large
Load Diff
+1195
-1072
File diff suppressed because it is too large
Load Diff
@@ -1,61 +1,61 @@
|
|||||||
[LangRegionNames]
|
[LangRegionNames]
|
||||||
ja_JP = "日本語"
|
ja_JP = "日本語"
|
||||||
en_US = "English"
|
en_US = "English"
|
||||||
fi_FI = "Suomi"
|
fi_FI = "Suomi"
|
||||||
fr_FR = "Français"
|
fr_FR = "Français"
|
||||||
es_ES = "Castellano (España)"
|
es_ES = "Castellano (España)"
|
||||||
es_LA = "Español (América Latina)"
|
es_LA = "Español (América Latina)"
|
||||||
de_DE = "Deutsch"
|
de_DE = "Deutsch"
|
||||||
it_IT = "Italiano"
|
it_IT = "Italiano"
|
||||||
nl_NL = "Nederlands"
|
nl_NL = "Nederlands"
|
||||||
pt_PT = "Português"
|
pt_PT = "Português"
|
||||||
pt_BR = "Português Brasileiro"
|
pt_BR = "Português Brasileiro"
|
||||||
ru_RU = "Русский"
|
ru_RU = "Русский"
|
||||||
ko_KR = "한국어"
|
ko_KR = "한국어"
|
||||||
zh_TW = "繁體中文"
|
zh_TW = "繁體中文"
|
||||||
zh_CN = "简体中文"
|
zh_CN = "简体中文"
|
||||||
ar_AE = "العربية"
|
ar_AE = "العربية"
|
||||||
az_AZ = "Azeri"
|
az_AZ = "Azeri"
|
||||||
ca_ES = "Català"
|
ca_ES = "Català"
|
||||||
gl_ES = "Galego"
|
gl_ES = "Galego"
|
||||||
gr_EL = "Ελληνικά"
|
gr_EL = "Ελληνικά"
|
||||||
he_IL = "עברית"
|
he_IL = "עברית"
|
||||||
hu_HU = "Magyar"
|
hu_HU = "Magyar"
|
||||||
id_ID = "Indonesia"
|
id_ID = "Indonesia"
|
||||||
pl_PL = "Polski"
|
pl_PL = "Polski"
|
||||||
ro_RO = "Român"
|
ro_RO = "Român"
|
||||||
sv_SE = "Svenska"
|
sv_SE = "Svenska"
|
||||||
tr_TR = "Türk"
|
tr_TR = "Türk"
|
||||||
uk_UA = "Українська"
|
uk_UA = "Українська"
|
||||||
vi_VN = "Tiếng Việt"
|
vi_VN = "Tiếng Việt"
|
||||||
cz_CZ = "Česky"
|
cz_CZ = "Česky"
|
||||||
tg_PH = "Tagalog"
|
tg_PH = "Tagalog"
|
||||||
th_TH = "ไทย"
|
th_TH = "ไทย"
|
||||||
dr_ID = "Duri"
|
dr_ID = "Duri"
|
||||||
fa_IR = "فارسی"
|
fa_IR = "فارسی"
|
||||||
ms_MY = "Melayu"
|
ms_MY = "Melayu"
|
||||||
da_DK = "Dansk"
|
da_DK = "Dansk"
|
||||||
no_NO = "Norsk"
|
no_NO = "Norsk"
|
||||||
bg_BG = "български език"
|
bg_BG = "български език"
|
||||||
lt-LT = "Lithuanian"
|
lt-LT = "Lithuanian"
|
||||||
jv_ID = "Jawa"
|
jv_ID = "Jawa"
|
||||||
lo_LA = "ລາວ"
|
lo_LA = "ລາວ"
|
||||||
hr_HR = "Hrvatski"
|
hr_HR = "Hrvatski"
|
||||||
|
|
||||||
[SystemLanguage]
|
[SystemLanguage]
|
||||||
ja_JP = "JAPANESE"
|
ja_JP = "JAPANESE"
|
||||||
en_US = "ENGLISH"
|
en_US = "ENGLISH"
|
||||||
fr_FR = "FRENCH"
|
fr_FR = "FRENCH"
|
||||||
es_ES = "SPANISH"
|
es_ES = "SPANISH"
|
||||||
gl_ES = "SPANISH"
|
gl_ES = "SPANISH"
|
||||||
es_LA = "SPANISH"
|
es_LA = "SPANISH"
|
||||||
de_DE = "GERMAN"
|
de_DE = "GERMAN"
|
||||||
it_IT = "ITALIAN"
|
it_IT = "ITALIAN"
|
||||||
nl_NL = "DUTCH"
|
nl_NL = "DUTCH"
|
||||||
pt_PT = "PORTUGUESE"
|
pt_PT = "PORTUGUESE"
|
||||||
pt_BR = "PORTUGUESE"
|
pt_BR = "PORTUGUESE"
|
||||||
ru_RU = "RUSSIAN"
|
ru_RU = "RUSSIAN"
|
||||||
ko_KR = "KOREAN"
|
ko_KR = "KOREAN"
|
||||||
th_TH = "THAI"
|
th_TH = "THAI"
|
||||||
zh_TW = "CHINESE_TRADITIONAL"
|
zh_TW = "CHINESE_TRADITIONAL"
|
||||||
zh_CN = "CHINESE_SIMPLIFIED"
|
zh_CN = "CHINESE_SIMPLIFIED"
|
||||||
|
|||||||
@@ -1,77 +1,77 @@
|
|||||||
// 4xGLSL HqFilter shader, Modified to use in PPSSPP. Grabbed from:
|
// 4xGLSL HqFilter shader, Modified to use in PPSSPP. Grabbed from:
|
||||||
// http://forums.ngemu.com/showthread.php?t=76098
|
// http://forums.ngemu.com/showthread.php?t=76098
|
||||||
|
|
||||||
// by guest(r) (guest.r@gmail.com)
|
// by guest(r) (guest.r@gmail.com)
|
||||||
// License: GNU-GPL
|
// License: GNU-GPL
|
||||||
|
|
||||||
// Shader notes: looks better with sprite games
|
// Shader notes: looks better with sprite games
|
||||||
|
|
||||||
#ifdef GL_ES
|
#ifdef GL_ES
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
precision mediump int;
|
precision mediump int;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uniform sampler2D sampler0;
|
uniform sampler2D sampler0;
|
||||||
|
|
||||||
varying vec4 v_texcoord0;
|
varying vec4 v_texcoord0;
|
||||||
varying vec4 v_texcoord1;
|
varying vec4 v_texcoord1;
|
||||||
varying vec4 v_texcoord2;
|
varying vec4 v_texcoord2;
|
||||||
varying vec4 v_texcoord3;
|
varying vec4 v_texcoord3;
|
||||||
varying vec4 v_texcoord4;
|
varying vec4 v_texcoord4;
|
||||||
varying vec4 v_texcoord5;
|
varying vec4 v_texcoord5;
|
||||||
varying vec4 v_texcoord6;
|
varying vec4 v_texcoord6;
|
||||||
|
|
||||||
const float mx = 0.325; // start smoothing factor
|
const float mx = 0.325; // start smoothing factor
|
||||||
const float k = -0.250; // smoothing decrease factor
|
const float k = -0.250; // smoothing decrease factor
|
||||||
const float max_w = 0.25; // max. smoothing weigth
|
const float max_w = 0.25; // max. smoothing weigth
|
||||||
const float min_w =-0.05; // min smoothing/sharpening weigth
|
const float min_w =-0.05; // min smoothing/sharpening weigth
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vec3 c = texture2D(sampler0, v_texcoord0.xy).xyz;
|
vec3 c = texture2D(sampler0, v_texcoord0.xy).xyz;
|
||||||
vec3 i1 = texture2D(sampler0, v_texcoord1.xy).xyz;
|
vec3 i1 = texture2D(sampler0, v_texcoord1.xy).xyz;
|
||||||
vec3 i2 = texture2D(sampler0, v_texcoord2.xy).xyz;
|
vec3 i2 = texture2D(sampler0, v_texcoord2.xy).xyz;
|
||||||
vec3 i3 = texture2D(sampler0, v_texcoord3.xy).xyz;
|
vec3 i3 = texture2D(sampler0, v_texcoord3.xy).xyz;
|
||||||
vec3 i4 = texture2D(sampler0, v_texcoord4.xy).xyz;
|
vec3 i4 = texture2D(sampler0, v_texcoord4.xy).xyz;
|
||||||
vec3 o1 = texture2D(sampler0, v_texcoord5.xy).xyz;
|
vec3 o1 = texture2D(sampler0, v_texcoord5.xy).xyz;
|
||||||
vec3 o3 = texture2D(sampler0, v_texcoord6.xy).xyz;
|
vec3 o3 = texture2D(sampler0, v_texcoord6.xy).xyz;
|
||||||
vec3 o2 = texture2D(sampler0, v_texcoord5.zw).xyz;
|
vec3 o2 = texture2D(sampler0, v_texcoord5.zw).xyz;
|
||||||
vec3 o4 = texture2D(sampler0, v_texcoord6.zw).xyz;
|
vec3 o4 = texture2D(sampler0, v_texcoord6.zw).xyz;
|
||||||
|
|
||||||
vec3 dt = vec3(1.0,1.0,1.0);
|
vec3 dt = vec3(1.0,1.0,1.0);
|
||||||
|
|
||||||
float ko1=dot(abs(o1-c),dt);
|
float ko1=dot(abs(o1-c),dt);
|
||||||
float ko2=dot(abs(o2-c),dt);
|
float ko2=dot(abs(o2-c),dt);
|
||||||
float ko3=dot(abs(o3-c),dt);
|
float ko3=dot(abs(o3-c),dt);
|
||||||
float ko4=dot(abs(o4-c),dt);
|
float ko4=dot(abs(o4-c),dt);
|
||||||
|
|
||||||
float sd1 = dot(abs(i1-i3),dt);
|
float sd1 = dot(abs(i1-i3),dt);
|
||||||
float sd2 = dot(abs(i2-i4),dt);
|
float sd2 = dot(abs(i2-i4),dt);
|
||||||
|
|
||||||
float w1 = step(ko1,ko3)*sd2;
|
float w1 = step(ko1,ko3)*sd2;
|
||||||
float w2 = step(ko2,ko4)*sd1;
|
float w2 = step(ko2,ko4)*sd1;
|
||||||
float w3 = step(ko3,ko1)*sd2;
|
float w3 = step(ko3,ko1)*sd2;
|
||||||
float w4 = step(ko4,ko2)*sd1;
|
float w4 = step(ko4,ko2)*sd1;
|
||||||
|
|
||||||
c = (w1*o1+w2*o2+w3*o3+w4*o4+0.1*c)/(w1+w2+w3+w4+0.1);
|
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;
|
float lc = c.r+c.g+c.b+0.2;
|
||||||
|
|
||||||
w1 = (i1.r+i1.g+i1.b+lc)*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);
|
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 = (i2.r+i2.g+i2.b+lc)*0.2;
|
||||||
w2 = clamp(k*dot(abs(c-i2),dt)/w2+mx,min_w,max_w);
|
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 = (i3.r+i3.g+i3.b+lc)*0.2;
|
||||||
w3 = clamp(k*dot(abs(c-i3),dt)/w3+mx,min_w,max_w);
|
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 = (i4.r+i4.g+i4.b+lc)*0.2;
|
||||||
w4 = clamp(k*dot(abs(c-i4),dt)/w4+mx,min_w,max_w);
|
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.rgb = w1*i1 + w2*i2 + w3*i3 + w4*i4 + (1.0-w1-w2-w3-w4)*c;
|
||||||
gl_FragColor.a = 1.0;
|
gl_FragColor.a = 1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,37 +1,37 @@
|
|||||||
#ifdef GL_ES
|
#ifdef GL_ES
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
precision mediump int;
|
precision mediump int;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
attribute vec4 a_position;
|
attribute vec4 a_position;
|
||||||
attribute vec2 a_texcoord0;
|
attribute vec2 a_texcoord0;
|
||||||
uniform vec2 u_texelDelta;
|
uniform vec2 u_texelDelta;
|
||||||
uniform vec2 u_pixelDelta;
|
uniform vec2 u_pixelDelta;
|
||||||
|
|
||||||
varying vec4 v_texcoord0;
|
varying vec4 v_texcoord0;
|
||||||
varying vec4 v_texcoord1;
|
varying vec4 v_texcoord1;
|
||||||
varying vec4 v_texcoord2;
|
varying vec4 v_texcoord2;
|
||||||
varying vec4 v_texcoord3;
|
varying vec4 v_texcoord3;
|
||||||
varying vec4 v_texcoord4;
|
varying vec4 v_texcoord4;
|
||||||
varying vec4 v_texcoord5;
|
varying vec4 v_texcoord5;
|
||||||
varying vec4 v_texcoord6;
|
varying vec4 v_texcoord6;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
float x = u_pixelDelta.x*((u_texelDelta.x/u_pixelDelta.x)/2.0);
|
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);
|
float y = u_pixelDelta.y*((u_texelDelta.y/u_pixelDelta.y)/2.0);
|
||||||
vec2 dg1 = vec2( x,y);
|
vec2 dg1 = vec2( x,y);
|
||||||
vec2 dg2 = vec2(-x,y);
|
vec2 dg2 = vec2(-x,y);
|
||||||
vec2 sd1 = dg1*0.5;
|
vec2 sd1 = dg1*0.5;
|
||||||
vec2 sd2 = dg2*0.5;
|
vec2 sd2 = dg2*0.5;
|
||||||
gl_Position = a_position;
|
gl_Position = a_position;
|
||||||
v_texcoord0=a_texcoord0.xyxy;
|
v_texcoord0=a_texcoord0.xyxy;
|
||||||
v_texcoord1.xy = v_texcoord0.xy - sd1;
|
v_texcoord1.xy = v_texcoord0.xy - sd1;
|
||||||
v_texcoord2.xy = v_texcoord0.xy - sd2;
|
v_texcoord2.xy = v_texcoord0.xy - sd2;
|
||||||
v_texcoord3.xy = v_texcoord0.xy + sd1;
|
v_texcoord3.xy = v_texcoord0.xy + sd1;
|
||||||
v_texcoord4.xy = v_texcoord0.xy + sd2;
|
v_texcoord4.xy = v_texcoord0.xy + sd2;
|
||||||
v_texcoord5.xy = v_texcoord0.xy - dg1;
|
v_texcoord5.xy = v_texcoord0.xy - dg1;
|
||||||
v_texcoord6.xy = v_texcoord0.xy + dg1;
|
v_texcoord6.xy = v_texcoord0.xy + dg1;
|
||||||
v_texcoord5.zw = v_texcoord0.xy - dg2;
|
v_texcoord5.zw = v_texcoord0.xy - dg2;
|
||||||
v_texcoord6.zw = v_texcoord0.xy + dg2;
|
v_texcoord6.zw = v_texcoord0.xy + dg2;
|
||||||
}
|
}
|
||||||
|
|||||||
+218
-218
@@ -1,218 +1,218 @@
|
|||||||
/*
|
/*
|
||||||
Hyllian's xBR-lv2 Shader Accuracy (tweak by guest.r)
|
Hyllian's xBR-lv2 Shader Accuracy (tweak by guest.r)
|
||||||
|
|
||||||
Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com
|
Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
in the Software without restriction, including without limitation the rights
|
in the Software without restriction, including without limitation the rights
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
furnished to do so, subject to the following conditions:
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
The above copyright notice and this permission notice shall be included in
|
||||||
all copies or substantial portions of the Software.
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
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
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
THE SOFTWARE.
|
THE SOFTWARE.
|
||||||
|
|
||||||
Incorporates some of the ideas from SABR shader. Thanks to Joshua Street.
|
Incorporates some of the ideas from SABR shader. Thanks to Joshua Street.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef GL_ES
|
#ifdef GL_ES
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
precision mediump int;
|
precision mediump int;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define CornerA 0 //ON:1/OFF:0 / A, B, C, D are just different variants of corner rounding
|
#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 CornerB 0 //ON:1/OFF:0 / activate only one
|
||||||
#define CornerD 0 //ON:1/OFF:0
|
#define CornerD 0 //ON:1/OFF:0
|
||||||
// CornerC //used as default if none of the above is defined
|
// CornerC //used as default if none of the above is defined
|
||||||
|
|
||||||
const float XBR_SCALE = 3.0;
|
const float XBR_SCALE = 3.0;
|
||||||
const float lv2_cf = 2.0;
|
const float lv2_cf = 2.0;
|
||||||
|
|
||||||
const float coef = 2.0;
|
const float coef = 2.0;
|
||||||
const vec3 rgbw = vec3(14.352, 28.176, 5.472);
|
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 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 Ao = vec4( 1.0, -1.0, -1.0, 1.0 );
|
||||||
const vec4 Bo = 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 Co = vec4( 1.5, 0.5, -0.5, 0.5 );
|
||||||
const vec4 Ax = vec4( 1.0, -1.0, -1.0, 1.0 );
|
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 Bx = vec4( 0.5, 2.0, -0.5,-2.0 );
|
||||||
const vec4 Cx = vec4( 1.0, 1.0, -0.5, 0.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 Ay = vec4( 1.0, -1.0, -1.0, 1.0 );
|
||||||
const vec4 By = vec4( 2.0, 0.5, -2.0,-0.5 );
|
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 Cy = vec4( 2.0, 0.0, -1.0, 0.5 );
|
||||||
const vec4 Ci = vec4(0.25, 0.25, 0.25, 0.25);
|
const vec4 Ci = vec4(0.25, 0.25, 0.25, 0.25);
|
||||||
|
|
||||||
uniform sampler2D sampler0;
|
uniform sampler2D sampler0;
|
||||||
uniform vec2 u_texelDelta;
|
uniform vec2 u_texelDelta;
|
||||||
uniform vec2 u_pixelDelta;
|
uniform vec2 u_pixelDelta;
|
||||||
varying vec2 v_texcoord0;
|
varying vec2 v_texcoord0;
|
||||||
|
|
||||||
// Difference between vector components.
|
// Difference between vector components.
|
||||||
vec4 df(vec4 A, vec4 B) {
|
vec4 df(vec4 A, vec4 B) {
|
||||||
return vec4(abs(A-B));
|
return vec4(abs(A-B));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Compare two vectors and return their components are different.
|
// Compare two vectors and return their components are different.
|
||||||
vec4 diff(vec4 A, vec4 B) {
|
vec4 diff(vec4 A, vec4 B) {
|
||||||
return vec4(notEqual(A, B));
|
return vec4(notEqual(A, B));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine if two vector components are equal based on a threshold.
|
// Determine if two vector components are equal based on a threshold.
|
||||||
vec4 eq(vec4 A, vec4 B) {
|
vec4 eq(vec4 A, vec4 B) {
|
||||||
return (step(df(A, B), eq_threshold));
|
return (step(df(A, B), eq_threshold));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine if two vector components are NOT equal based on a threshold.
|
// Determine if two vector components are NOT equal based on a threshold.
|
||||||
vec4 neq(vec4 A, vec4 B) {
|
vec4 neq(vec4 A, vec4 B) {
|
||||||
return (vec4(1.0, 1.0, 1.0, 1.0) - eq(A, B));
|
return (vec4(1.0, 1.0, 1.0, 1.0) - eq(A, B));
|
||||||
}
|
}
|
||||||
|
|
||||||
float c_df(vec3 c1, vec3 c2) {
|
float c_df(vec3 c1, vec3 c2) {
|
||||||
vec3 df = abs(c1 - c2);
|
vec3 df = abs(c1 - c2);
|
||||||
return df.r + df.g + df.b;
|
return df.r + df.g + df.b;
|
||||||
}
|
}
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
|
|
||||||
bool upscale = u_texelDelta.x > (1.6 * u_pixelDelta.x);
|
bool upscale = u_texelDelta.x > (1.6 * u_pixelDelta.x);
|
||||||
vec3 res = texture2D(sampler0, v_texcoord0.xy).xyz;
|
vec3 res = texture2D(sampler0, v_texcoord0.xy).xyz;
|
||||||
|
|
||||||
// Let's skip the whole scaling if output size smaller than 1.6x of input size
|
// Let's skip the whole scaling if output size smaller than 1.6x of input size
|
||||||
if (upscale) {
|
if (upscale) {
|
||||||
|
|
||||||
vec4 edri, edr, edr_l, edr_u, px; // px = pixel, edr = edge detection rule
|
vec4 edri, edr, edr_l, edr_u, px; // px = pixel, edr = edge detection rule
|
||||||
vec4 irlv0, irlv1, irlv2l, irlv2u;
|
vec4 irlv0, irlv1, irlv2l, irlv2u;
|
||||||
vec4 fx, fx_l, fx_u; // inequations of straight lines.
|
vec4 fx, fx_l, fx_u; // inequations of straight lines.
|
||||||
|
|
||||||
vec2 pS = 1.0 / u_texelDelta.xy;
|
vec2 pS = 1.0 / u_texelDelta.xy;
|
||||||
vec2 fp = fract(v_texcoord0.xy*pS.xy);
|
vec2 fp = fract(v_texcoord0.xy*pS.xy);
|
||||||
vec2 TexCoord_0 = v_texcoord0.xy-fp*u_pixelDelta.xy;
|
vec2 TexCoord_0 = v_texcoord0.xy-fp*u_pixelDelta.xy;
|
||||||
vec2 dx = vec2(u_texelDelta.x,0.0);
|
vec2 dx = vec2(u_texelDelta.x,0.0);
|
||||||
vec2 dy = vec2(0.0,u_texelDelta.y);
|
vec2 dy = vec2(0.0,u_texelDelta.y);
|
||||||
vec2 y2 = dy + dy; vec2 x2 = dx + dx;
|
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 = 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_l = vec4(0.5/XBR_SCALE, 1.0/XBR_SCALE, 0.5/XBR_SCALE, 1.0/XBR_SCALE);
|
||||||
vec4 delta_u = delta_l.yxwz;
|
vec4 delta_u = delta_l.yxwz;
|
||||||
|
|
||||||
vec3 A = texture2D(sampler0, TexCoord_0 -dx -dy ).xyz;
|
vec3 A = texture2D(sampler0, TexCoord_0 -dx -dy ).xyz;
|
||||||
vec3 B = texture2D(sampler0, TexCoord_0 -dy ).xyz;
|
vec3 B = texture2D(sampler0, TexCoord_0 -dy ).xyz;
|
||||||
vec3 C = texture2D(sampler0, TexCoord_0 +dx -dy ).xyz;
|
vec3 C = texture2D(sampler0, TexCoord_0 +dx -dy ).xyz;
|
||||||
vec3 D = texture2D(sampler0, TexCoord_0 -dx ).xyz;
|
vec3 D = texture2D(sampler0, TexCoord_0 -dx ).xyz;
|
||||||
vec3 E = texture2D(sampler0, TexCoord_0 ).xyz;
|
vec3 E = texture2D(sampler0, TexCoord_0 ).xyz;
|
||||||
vec3 F = texture2D(sampler0, TexCoord_0 +dx ).xyz;
|
vec3 F = texture2D(sampler0, TexCoord_0 +dx ).xyz;
|
||||||
vec3 G = texture2D(sampler0, TexCoord_0 -dx +dy ).xyz;
|
vec3 G = texture2D(sampler0, TexCoord_0 -dx +dy ).xyz;
|
||||||
vec3 H = texture2D(sampler0, TexCoord_0 +dy ).xyz;
|
vec3 H = texture2D(sampler0, TexCoord_0 +dy ).xyz;
|
||||||
vec3 I = texture2D(sampler0, TexCoord_0 +dx +dy ).xyz;
|
vec3 I = texture2D(sampler0, TexCoord_0 +dx +dy ).xyz;
|
||||||
vec3 A1 = texture2D(sampler0, TexCoord_0 -dx -y2).xyz;
|
vec3 A1 = texture2D(sampler0, TexCoord_0 -dx -y2).xyz;
|
||||||
vec3 C1 = 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 A0 = texture2D(sampler0, TexCoord_0 -x2 -dy).xyz;
|
||||||
vec3 G0 = 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 C4 = texture2D(sampler0, TexCoord_0 +x2 -dy).xyz;
|
||||||
vec3 I4 = 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 G5 = texture2D(sampler0, TexCoord_0 -dx +y2).xyz;
|
||||||
vec3 I5 = 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 B1 = texture2D(sampler0, TexCoord_0 -y2).xyz;
|
||||||
vec3 D0 = texture2D(sampler0, TexCoord_0 -x2 ).xyz;
|
vec3 D0 = texture2D(sampler0, TexCoord_0 -x2 ).xyz;
|
||||||
vec3 H5 = texture2D(sampler0, TexCoord_0 +y2).xyz;
|
vec3 H5 = texture2D(sampler0, TexCoord_0 +y2).xyz;
|
||||||
vec3 F4 = texture2D(sampler0, TexCoord_0 +x2 ).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 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 c = vec4(dot(C ,rgbw), dot(A ,rgbw), dot(G ,rgbw), dot(I ,rgbw));
|
||||||
vec4 d = b.yzwx;
|
vec4 d = b.yzwx;
|
||||||
vec4 e = vec4(dot(E,rgbw));
|
vec4 e = vec4(dot(E,rgbw));
|
||||||
vec4 f = b.wxyz;
|
vec4 f = b.wxyz;
|
||||||
vec4 g = c.zwxy;
|
vec4 g = c.zwxy;
|
||||||
vec4 h = b.zwxy;
|
vec4 h = b.zwxy;
|
||||||
vec4 i = c.wxyz;
|
vec4 i = c.wxyz;
|
||||||
vec4 i4 = vec4(dot(I4,rgbw), dot(C1,rgbw), dot(A0,rgbw), dot(G5,rgbw));
|
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 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 h5 = vec4(dot(H5,rgbw), dot(F4,rgbw), dot(B1,rgbw), dot(D0,rgbw));
|
||||||
vec4 f4 = h5.yzwx;
|
vec4 f4 = h5.yzwx;
|
||||||
|
|
||||||
// These inequations define the line below which interpolation occurs.
|
// These inequations define the line below which interpolation occurs.
|
||||||
fx = (Ao*fp.y+Bo*fp.x);
|
fx = (Ao*fp.y+Bo*fp.x);
|
||||||
fx_l = (Ax*fp.y+Bx*fp.x);
|
fx_l = (Ax*fp.y+Bx*fp.x);
|
||||||
fx_u = (Ay*fp.y+By*fp.x);
|
fx_u = (Ay*fp.y+By*fp.x);
|
||||||
irlv1 = irlv0 = diff(e,f) * diff(e,h);
|
irlv1 = irlv0 = diff(e,f) * diff(e,h);
|
||||||
#if(CornerA==0) // A takes priority skipping other corners
|
#if(CornerA==0) // A takes priority skipping other corners
|
||||||
#define SMOOTH_TIPS
|
#define SMOOTH_TIPS
|
||||||
// Corner C also default if no other ones used
|
// 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)) );
|
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;
|
int select1 = 0;
|
||||||
#if(CornerB==1) // Corner B
|
#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) ) );
|
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;
|
select1 = 1;
|
||||||
#endif
|
#endif
|
||||||
#if(CornerD==1) // Corner D
|
#if(CornerD==1) // Corner D
|
||||||
if (select1==0) {
|
if (select1==0) {
|
||||||
vec4 c1 = i4.yzwx;
|
vec4 c1 = i4.yzwx;
|
||||||
vec4 g0 = i5.wxyz;
|
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)));
|
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
|
||||||
#endif
|
#endif
|
||||||
irlv2l = diff(e,g) * diff(d,g);
|
irlv2l = diff(e,g) * diff(d,g);
|
||||||
irlv2u = diff(e,c) * diff(b,c);
|
irlv2u = diff(e,c) * diff(b,c);
|
||||||
|
|
||||||
vec4 fx45i = clamp((fx + delta -Co - Ci) / (2.0*delta ), 0.0, 1.0);
|
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 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 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 fx60 = clamp((fx_u + delta_u -Cy ) / (2.0*delta_u), 0.0, 1.0);
|
||||||
vec4 w1, w2;
|
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.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.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.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);
|
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.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.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.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);
|
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;
|
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);
|
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);
|
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);
|
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_l = step( lv2_cf*w1, w2 ) * irlv2l * edr;
|
||||||
edr_u = step( lv2_cf*w2, w1 ) * irlv2u * edr;
|
edr_u = step( lv2_cf*w2, w1 ) * irlv2u * edr;
|
||||||
|
|
||||||
fx45 = edr * fx45;
|
fx45 = edr * fx45;
|
||||||
fx30 = edr_l * fx30;
|
fx30 = edr_l * fx30;
|
||||||
fx60 = edr_u * fx60;
|
fx60 = edr_u * fx60;
|
||||||
fx45i = edri * fx45i;
|
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);
|
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);
|
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);
|
px = step(w1, w2);
|
||||||
#ifdef SMOOTH_TIPS
|
#ifdef SMOOTH_TIPS
|
||||||
vec4 maximos = max(max(fx30, fx60), max(fx45, fx45i));
|
vec4 maximos = max(max(fx30, fx60), max(fx45, fx45i));
|
||||||
#else
|
#else
|
||||||
vec4 maximos = max(max(fx30, fx60), fx45);
|
vec4 maximos = max(max(fx30, fx60), fx45);
|
||||||
#endif
|
#endif
|
||||||
vec3 res1 = E;
|
vec3 res1 = E;
|
||||||
res1 = mix(res1, mix(H, F, px.x), maximos.x);
|
res1 = mix(res1, mix(H, F, px.x), maximos.x);
|
||||||
res1 = mix(res1, mix(B, D, px.z), maximos.z);
|
res1 = mix(res1, mix(B, D, px.z), maximos.z);
|
||||||
|
|
||||||
vec3 res2 = E;
|
vec3 res2 = E;
|
||||||
res2 = mix(res2, mix(F, B, px.y), maximos.y);
|
res2 = mix(res2, mix(F, B, px.y), maximos.y);
|
||||||
res2 = mix(res2, mix(D, H, px.w), maximos.w);
|
res2 = mix(res2, mix(D, H, px.w), maximos.w);
|
||||||
|
|
||||||
res = mix(res1, res2, step(c_df(E, res1), c_df(E, res2)));
|
res = mix(res1, res2, step(c_df(E, res1), c_df(E, res2)));
|
||||||
}
|
}
|
||||||
gl_FragColor.xyz = res;
|
gl_FragColor.xyz = res;
|
||||||
gl_FragColor.a = 1.0;
|
gl_FragColor.a = 1.0;
|
||||||
}
|
}
|
||||||
|
|||||||
+133
-133
@@ -1,133 +1,133 @@
|
|||||||
/*
|
/*
|
||||||
Hyllian's 5xBR v3.5a Shader
|
Hyllian's 5xBR v3.5a Shader
|
||||||
|
|
||||||
Copyright (C) 2011 Hyllian/Jararaca - sergiogdb@gmail.com
|
Copyright (C) 2011 Hyllian/Jararaca - sergiogdb@gmail.com
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or
|
This program is free software; you can redistribute it and/or
|
||||||
modify it under the terms of the GNU General Public License
|
modify it under the terms of the GNU General Public License
|
||||||
as published by the Free Software Foundation; either version 2
|
as published by the Free Software Foundation; either version 2
|
||||||
of the License, or (at your option) any later version.
|
of the License, or (at your option) any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
GNU General Public License for more details.
|
GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
#ifdef GL_ES
|
#ifdef GL_ES
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
precision mediump int;
|
precision mediump int;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uniform sampler2D sampler0;
|
uniform sampler2D sampler0;
|
||||||
uniform vec2 u_texelDelta;
|
uniform vec2 u_texelDelta;
|
||||||
uniform vec2 u_pixelDelta;
|
uniform vec2 u_pixelDelta;
|
||||||
varying vec2 v_texcoord0;
|
varying vec2 v_texcoord0;
|
||||||
|
|
||||||
const float coef = 2.0;
|
const float coef = 2.0;
|
||||||
const vec3 rgbw = vec3(16.163, 23.351, 8.4772);
|
const vec3 rgbw = vec3(16.163, 23.351, 8.4772);
|
||||||
|
|
||||||
const vec4 Ao = vec4( 1.0, -1.0, -1.0, 1.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 Bo = vec4( 1.0, 1.0, -1.0,-1.0 );
|
||||||
const vec4 Co = vec4( 1.5, 0.5, -0.5, 0.5 );
|
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 Ax = vec4( 1.0, -1.0, -1.0, 1.0 );
|
||||||
const vec4 Bx = vec4( 0.5, 2.0, -0.5,-2.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 Cx = vec4( 1.0, 1.0, -0.5, 0.0 );
|
||||||
const vec4 Ay = vec4( 1.0, -1.0, -1.0, 1.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 By = vec4( 2.0, 0.5, -2.0,-0.5 );
|
||||||
const vec4 Cy = vec4( 2.0, 0.0, -1.0, 0.5 );
|
const vec4 Cy = vec4( 2.0, 0.0, -1.0, 0.5 );
|
||||||
|
|
||||||
|
|
||||||
vec4 df(vec4 A, vec4 B) {
|
vec4 df(vec4 A, vec4 B) {
|
||||||
return abs(A-B);
|
return abs(A-B);
|
||||||
}
|
}
|
||||||
|
|
||||||
vec4 weighted_distance(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, vec4 h) {
|
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));
|
return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + 4.0*df(g,h));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void main(){
|
void main(){
|
||||||
|
|
||||||
bool upscale = u_texelDelta.x > (1.6 * u_pixelDelta.x);
|
bool upscale = u_texelDelta.x > (1.6 * u_pixelDelta.x);
|
||||||
vec3 res = texture2D(sampler0, v_texcoord0.xy).xyz;
|
vec3 res = texture2D(sampler0, v_texcoord0.xy).xyz;
|
||||||
|
|
||||||
// Let's skip the whole scaling if output size smaller than 1.6x of input size
|
// Let's skip the whole scaling if output size smaller than 1.6x of input size
|
||||||
if (upscale) {
|
if (upscale) {
|
||||||
|
|
||||||
bvec4 edr, edr_left, edr_up, px; // px = pixel, edr = edge detection rule
|
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 interp_restriction_lv1, interp_restriction_lv2_left, interp_restriction_lv2_up;
|
||||||
bvec4 nc; // new_color
|
bvec4 nc; // new_color
|
||||||
bvec4 fx, fx_left, fx_up; // inequations of straight lines.
|
bvec4 fx, fx_left, fx_up; // inequations of straight lines.
|
||||||
|
|
||||||
vec2 pS = 1.0 / u_texelDelta.xy;
|
vec2 pS = 1.0 / u_texelDelta.xy;
|
||||||
vec2 fp = fract(v_texcoord0.xy*pS.xy);
|
vec2 fp = fract(v_texcoord0.xy*pS.xy);
|
||||||
vec2 TexCoord_0 = v_texcoord0.xy-fp*u_pixelDelta.xy;
|
vec2 TexCoord_0 = v_texcoord0.xy-fp*u_pixelDelta.xy;
|
||||||
vec2 dx = vec2(u_texelDelta.x,0.0);
|
vec2 dx = vec2(u_texelDelta.x,0.0);
|
||||||
vec2 dy = vec2(0.0,u_texelDelta.y);
|
vec2 dy = vec2(0.0,u_texelDelta.y);
|
||||||
vec2 y2 = dy + dy; vec2 x2 = dx + dx;
|
vec2 y2 = dy + dy; vec2 x2 = dx + dx;
|
||||||
|
|
||||||
vec3 A = texture2D(sampler0, TexCoord_0 -dx -dy ).xyz;
|
vec3 A = texture2D(sampler0, TexCoord_0 -dx -dy ).xyz;
|
||||||
vec3 B = texture2D(sampler0, TexCoord_0 -dy ).xyz;
|
vec3 B = texture2D(sampler0, TexCoord_0 -dy ).xyz;
|
||||||
vec3 C = texture2D(sampler0, TexCoord_0 +dx -dy ).xyz;
|
vec3 C = texture2D(sampler0, TexCoord_0 +dx -dy ).xyz;
|
||||||
vec3 D = texture2D(sampler0, TexCoord_0 -dx ).xyz;
|
vec3 D = texture2D(sampler0, TexCoord_0 -dx ).xyz;
|
||||||
vec3 E = texture2D(sampler0, TexCoord_0 ).xyz;
|
vec3 E = texture2D(sampler0, TexCoord_0 ).xyz;
|
||||||
vec3 F = texture2D(sampler0, TexCoord_0 +dx ).xyz;
|
vec3 F = texture2D(sampler0, TexCoord_0 +dx ).xyz;
|
||||||
vec3 G = texture2D(sampler0, TexCoord_0 -dx +dy ).xyz;
|
vec3 G = texture2D(sampler0, TexCoord_0 -dx +dy ).xyz;
|
||||||
vec3 H = texture2D(sampler0, TexCoord_0 +dy ).xyz;
|
vec3 H = texture2D(sampler0, TexCoord_0 +dy ).xyz;
|
||||||
vec3 I = texture2D(sampler0, TexCoord_0 +dx +dy ).xyz;
|
vec3 I = texture2D(sampler0, TexCoord_0 +dx +dy ).xyz;
|
||||||
vec3 A1 = texture2D(sampler0, TexCoord_0 -dx -y2).xyz;
|
vec3 A1 = texture2D(sampler0, TexCoord_0 -dx -y2).xyz;
|
||||||
vec3 C1 = 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 A0 = texture2D(sampler0, TexCoord_0 -x2 -dy).xyz;
|
||||||
vec3 G0 = 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 C4 = texture2D(sampler0, TexCoord_0 +x2 -dy).xyz;
|
||||||
vec3 I4 = 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 G5 = texture2D(sampler0, TexCoord_0 -dx +y2).xyz;
|
||||||
vec3 I5 = 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 B1 = texture2D(sampler0, TexCoord_0 -y2).xyz;
|
||||||
vec3 D0 = texture2D(sampler0, TexCoord_0 -x2 ).xyz;
|
vec3 D0 = texture2D(sampler0, TexCoord_0 -x2 ).xyz;
|
||||||
vec3 H5 = texture2D(sampler0, TexCoord_0 +y2).xyz;
|
vec3 H5 = texture2D(sampler0, TexCoord_0 +y2).xyz;
|
||||||
vec3 F4 = texture2D(sampler0, TexCoord_0 +x2 ).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 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 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 d = vec4(b.y, b.z, b.w, b.x);
|
||||||
vec4 e = vec4(dot(E,rgbw));
|
vec4 e = vec4(dot(E,rgbw));
|
||||||
vec4 f = vec4(b.w, b.x, b.y, b.z);
|
vec4 f = vec4(b.w, b.x, b.y, b.z);
|
||||||
vec4 g = vec4(c.z, c.w, c.x, c.y);
|
vec4 g = vec4(c.z, c.w, c.x, c.y);
|
||||||
vec4 h = vec4(b.z, b.w, b.x, b.y);
|
vec4 h = vec4(b.z, b.w, b.x, b.y);
|
||||||
vec4 i = vec4(c.w, c.x, c.y, c.z);
|
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 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 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 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);
|
vec4 f4 = vec4(h5.y, h5.z, h5.w, h5.x);
|
||||||
|
|
||||||
// These inequations define the line below which interpolation occurs.
|
// These inequations define the line below which interpolation occurs.
|
||||||
fx = greaterThan(Ao*fp.y+Bo*fp.x,Co);
|
fx = greaterThan(Ao*fp.y+Bo*fp.x,Co);
|
||||||
fx_left = greaterThan(Ax*fp.y+Bx*fp.x,Cx);
|
fx_left = greaterThan(Ax*fp.y+Bx*fp.x,Cx);
|
||||||
fx_up = greaterThan(Ay*fp.y+By*fp.x,Cy);
|
fx_up = greaterThan(Ay*fp.y+By*fp.x,Cy);
|
||||||
|
|
||||||
interp_restriction_lv1 = bvec4(vec4(notEqual(e,f))*vec4(notEqual(e,h)));
|
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_left = bvec4(vec4(notEqual(e,g))*vec4(notEqual(d,g)));
|
||||||
interp_restriction_lv2_up = bvec4(vec4(notEqual(e,c))*vec4(notEqual(b,c)));
|
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 = 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_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));
|
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.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.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.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) );
|
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));
|
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;
|
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.rgb = res;
|
||||||
gl_FragColor.a = 1.0;
|
gl_FragColor.a = 1.0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,34 +1,34 @@
|
|||||||
/*
|
/*
|
||||||
Hyllian's 5xBR v3.5a Shader
|
Hyllian's 5xBR v3.5a Shader
|
||||||
|
|
||||||
Copyright (C) 2011 Hyllian/Jararaca - sergiogdb@gmail.com
|
Copyright (C) 2011 Hyllian/Jararaca - sergiogdb@gmail.com
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or
|
This program is free software; you can redistribute it and/or
|
||||||
modify it under the terms of the GNU General Public License
|
modify it under the terms of the GNU General Public License
|
||||||
as published by the Free Software Foundation; either version 2
|
as published by the Free Software Foundation; either version 2
|
||||||
of the License, or (at your option) any later version.
|
of the License, or (at your option) any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
GNU General Public License for more details.
|
GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef GL_ES
|
#ifdef GL_ES
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
precision mediump int;
|
precision mediump int;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
attribute vec4 a_position;
|
attribute vec4 a_position;
|
||||||
attribute vec2 a_texcoord0;
|
attribute vec2 a_texcoord0;
|
||||||
varying vec2 v_texcoord0;
|
varying vec2 v_texcoord0;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
v_texcoord0 = a_texcoord0;
|
v_texcoord0 = a_texcoord0;
|
||||||
gl_Position = a_position;
|
gl_Position = a_position;
|
||||||
}
|
}
|
||||||
@@ -1,73 +1,73 @@
|
|||||||
// PPSSPP: Simple Gauss filter
|
// PPSSPP: Simple Gauss filter
|
||||||
// Made by Bigpet
|
// Made by Bigpet
|
||||||
|
|
||||||
#ifdef GL_ES
|
#ifdef GL_ES
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
precision mediump int;
|
precision mediump int;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uniform sampler2D sampler0;
|
uniform sampler2D sampler0;
|
||||||
|
|
||||||
// The inverse of the texture dimensions along X and Y
|
// The inverse of the texture dimensions along X and Y
|
||||||
uniform vec2 u_texelDelta;
|
uniform vec2 u_texelDelta;
|
||||||
uniform vec2 u_pixelDelta;
|
uniform vec2 u_pixelDelta;
|
||||||
varying vec2 v_texcoord0;
|
varying vec2 v_texcoord0;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
// The parameters are hardcoded for now, but could be
|
// The parameters are hardcoded for now, but could be
|
||||||
// made into uniforms to control fromt he program.
|
// made into uniforms to control fromt he program.
|
||||||
float GAUSS_SPAN_MAX = 1.5;
|
float GAUSS_SPAN_MAX = 1.5;
|
||||||
|
|
||||||
//just a variable to describe the maximu
|
//just a variable to describe the maximu
|
||||||
float GAUSS_KERNEL_SIZE = 5.0;
|
float GAUSS_KERNEL_SIZE = 5.0;
|
||||||
//indices
|
//indices
|
||||||
// XX XX 00 XX XX
|
// XX XX 00 XX XX
|
||||||
// XX 01 02 03 XX
|
// XX 01 02 03 XX
|
||||||
// 04 05 06 07 08
|
// 04 05 06 07 08
|
||||||
// XX 09 10 11 XX
|
// XX 09 10 11 XX
|
||||||
// XX XX 12 XX XX
|
// XX XX 12 XX XX
|
||||||
|
|
||||||
//filter strength, rather smooth
|
//filter strength, rather smooth
|
||||||
// XX XX 01 XX XX
|
// XX XX 01 XX XX
|
||||||
// XX 03 08 03 XX
|
// XX 03 08 03 XX
|
||||||
// 01 08 10 08 01
|
// 01 08 10 08 01
|
||||||
// XX 03 08 03 XX
|
// XX 03 08 03 XX
|
||||||
// XX XX 01 XX XX
|
// XX XX 01 XX XX
|
||||||
|
|
||||||
vec2 offset = u_pixelDelta*GAUSS_SPAN_MAX/GAUSS_KERNEL_SIZE;
|
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 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 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 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 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 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 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 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 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 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 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 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 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 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 rgbSimple10= vec3(1.0,0.0,0.0);
|
||||||
//vec3 rgbSimple11= 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 rgbSimple12= vec3(1.0,0.0,0.0);
|
||||||
|
|
||||||
vec3 rgb = rgbSimple0 +
|
vec3 rgb = rgbSimple0 +
|
||||||
rgbSimple1 +
|
rgbSimple1 +
|
||||||
rgbSimple2 +
|
rgbSimple2 +
|
||||||
rgbSimple3 +
|
rgbSimple3 +
|
||||||
rgbSimple4 +
|
rgbSimple4 +
|
||||||
rgbSimple5 +
|
rgbSimple5 +
|
||||||
rgbSimple6 +
|
rgbSimple6 +
|
||||||
rgbSimple7 +
|
rgbSimple7 +
|
||||||
rgbSimple8 +
|
rgbSimple8 +
|
||||||
rgbSimple9 +
|
rgbSimple9 +
|
||||||
rgbSimple10 +
|
rgbSimple10 +
|
||||||
rgbSimple11 +
|
rgbSimple11 +
|
||||||
rgbSimple12;
|
rgbSimple12;
|
||||||
rgb = rgb / 58.0;
|
rgb = rgb / 58.0;
|
||||||
gl_FragColor.xyz=rgb;
|
gl_FragColor.xyz=rgb;
|
||||||
gl_FragColor.a = 1.0;
|
gl_FragColor.a = 1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,69 +1,69 @@
|
|||||||
// AA-Color shader, Modified to use in PPSSPP. Grabbed from:
|
// AA-Color shader, Modified to use in PPSSPP. Grabbed from:
|
||||||
// http://forums.ngemu.com/showthread.php?t=76098
|
// http://forums.ngemu.com/showthread.php?t=76098
|
||||||
|
|
||||||
// by guest(r) (guest.r@gmail.com)
|
// by guest(r) (guest.r@gmail.com)
|
||||||
// license: GNU-GPL
|
// license: GNU-GPL
|
||||||
|
|
||||||
// Color variables
|
// Color variables
|
||||||
|
|
||||||
#ifdef GL_ES
|
#ifdef GL_ES
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
precision mediump int;
|
precision mediump int;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const vec3 c_ch = vec3(1.0,1.0,1.0); // rgb color channel intensity
|
const vec3 c_ch = vec3(1.0,1.0,1.0); // rgb color channel intensity
|
||||||
const float a = 1.20 ; // saturation
|
const float a = 1.20 ; // saturation
|
||||||
const float b = 1.00 ; // brightness
|
const float b = 1.00 ; // brightness
|
||||||
const float c = 1.25 ; // contrast
|
const float c = 1.25 ; // contrast
|
||||||
|
|
||||||
// you can use contrast1,contrast2...contrast4 (or contrast0 for speedup)
|
// you can use contrast1,contrast2...contrast4 (or contrast0 for speedup)
|
||||||
|
|
||||||
float contrast0(float x)
|
float contrast0(float x)
|
||||||
{ return x; }
|
{ return x; }
|
||||||
|
|
||||||
float contrast1(float x)
|
float contrast1(float x)
|
||||||
{ x = x*1.1547-1.0;
|
{ x = x*1.1547-1.0;
|
||||||
return sign(x)*pow(abs(x),1.0/c)*0.86 + 0.86;}
|
return sign(x)*pow(abs(x),1.0/c)*0.86 + 0.86;}
|
||||||
|
|
||||||
float contrast2(float x)
|
float contrast2(float x)
|
||||||
{ return normalize(vec2(pow(x,c),pow(0.86,c))).x*1.72;}
|
{ return normalize(vec2(pow(x,c),pow(0.86,c))).x*1.72;}
|
||||||
|
|
||||||
float contrast3(float x)
|
float contrast3(float x)
|
||||||
{ return 1.73*pow(0.57735*x,c); }
|
{ return 1.73*pow(0.57735*x,c); }
|
||||||
|
|
||||||
float contrast4(float x)
|
float contrast4(float x)
|
||||||
{ return clamp(0.866 + c*(x-0.866),0.05, 1.73); }
|
{ return clamp(0.866 + c*(x-0.866),0.05, 1.73); }
|
||||||
|
|
||||||
uniform sampler2D sampler0;
|
uniform sampler2D sampler0;
|
||||||
|
|
||||||
varying vec4 v_texcoord0;
|
varying vec4 v_texcoord0;
|
||||||
varying vec4 v_texcoord1;
|
varying vec4 v_texcoord1;
|
||||||
varying vec4 v_texcoord2;
|
varying vec4 v_texcoord2;
|
||||||
varying vec4 v_texcoord3;
|
varying vec4 v_texcoord3;
|
||||||
varying vec4 v_texcoord4;
|
varying vec4 v_texcoord4;
|
||||||
varying vec4 v_texcoord5;
|
varying vec4 v_texcoord5;
|
||||||
varying vec4 v_texcoord6;
|
varying vec4 v_texcoord6;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vec3 c10 = texture2D(sampler0, v_texcoord1.xy).xyz;
|
vec3 c10 = texture2D(sampler0, v_texcoord1.xy).xyz;
|
||||||
vec3 c01 = texture2D(sampler0, v_texcoord4.xy).xyz;
|
vec3 c01 = texture2D(sampler0, v_texcoord4.xy).xyz;
|
||||||
vec3 c11 = texture2D(sampler0, v_texcoord0.xy).xyz;
|
vec3 c11 = texture2D(sampler0, v_texcoord0.xy).xyz;
|
||||||
vec3 c21 = texture2D(sampler0, v_texcoord5.xy).xyz;
|
vec3 c21 = texture2D(sampler0, v_texcoord5.xy).xyz;
|
||||||
vec3 c12 = texture2D(sampler0, v_texcoord2.xy).xyz;
|
vec3 c12 = texture2D(sampler0, v_texcoord2.xy).xyz;
|
||||||
|
|
||||||
vec3 dt = vec3(1.0,1.0,1.0);
|
vec3 dt = vec3(1.0,1.0,1.0);
|
||||||
float k1=dot(abs(c01-c21),dt);
|
float k1=dot(abs(c01-c21),dt);
|
||||||
float k2=dot(abs(c10-c12),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);
|
vec3 color = (k1*(c10+c12)+k2*(c01+c21)+0.001*c11)/(2.0*(k1+k2)+0.001);
|
||||||
|
|
||||||
float x = sqrt(dot(color,color));
|
float x = sqrt(dot(color,color));
|
||||||
|
|
||||||
color.r = pow(color.r+0.001,a);
|
color.r = pow(color.r+0.001,a);
|
||||||
color.g = pow(color.g+0.001,a);
|
color.g = pow(color.g+0.001,a);
|
||||||
color.b = pow(color.b+0.001,a);
|
color.b = pow(color.b+0.001,a);
|
||||||
|
|
||||||
gl_FragColor.rgb = contrast4(x)*normalize(color*c_ch)*b;
|
gl_FragColor.rgb = contrast4(x)*normalize(color*c_ch)*b;
|
||||||
gl_FragColor.a = 1.0;
|
gl_FragColor.a = 1.0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,38 +1,38 @@
|
|||||||
// by guest(r) - guest.r@gmail.com
|
// by guest(r) - guest.r@gmail.com
|
||||||
// license: GNU-GPL
|
// license: GNU-GPL
|
||||||
|
|
||||||
#ifdef GL_ES
|
#ifdef GL_ES
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
precision mediump int;
|
precision mediump int;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
attribute vec4 a_position;
|
attribute vec4 a_position;
|
||||||
attribute vec2 a_texcoord0;
|
attribute vec2 a_texcoord0;
|
||||||
uniform vec2 u_texelDelta;
|
uniform vec2 u_texelDelta;
|
||||||
|
|
||||||
varying vec4 v_texcoord0;
|
varying vec4 v_texcoord0;
|
||||||
varying vec4 v_texcoord1;
|
varying vec4 v_texcoord1;
|
||||||
varying vec4 v_texcoord2;
|
varying vec4 v_texcoord2;
|
||||||
varying vec4 v_texcoord3;
|
varying vec4 v_texcoord3;
|
||||||
varying vec4 v_texcoord4;
|
varying vec4 v_texcoord4;
|
||||||
varying vec4 v_texcoord5;
|
varying vec4 v_texcoord5;
|
||||||
varying vec4 v_texcoord6;
|
varying vec4 v_texcoord6;
|
||||||
|
|
||||||
float scaleoffset = 0.8;
|
float scaleoffset = 0.8;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
|
||||||
{
|
{
|
||||||
float x = u_texelDelta.x*scaleoffset;
|
float x = u_texelDelta.x*scaleoffset;
|
||||||
float y = u_texelDelta.y*scaleoffset;
|
float y = u_texelDelta.y*scaleoffset;
|
||||||
gl_Position = a_position;
|
gl_Position = a_position;
|
||||||
v_texcoord0 = a_texcoord0.xyxy;
|
v_texcoord0 = a_texcoord0.xyxy;
|
||||||
v_texcoord1 = v_texcoord0;
|
v_texcoord1 = v_texcoord0;
|
||||||
v_texcoord2 = v_texcoord0;
|
v_texcoord2 = v_texcoord0;
|
||||||
v_texcoord4 = v_texcoord0;
|
v_texcoord4 = v_texcoord0;
|
||||||
v_texcoord5 = v_texcoord0;
|
v_texcoord5 = v_texcoord0;
|
||||||
v_texcoord1.y-=y;
|
v_texcoord1.y-=y;
|
||||||
v_texcoord2.y+=y;
|
v_texcoord2.y+=y;
|
||||||
v_texcoord4.x-=x;
|
v_texcoord4.x-=x;
|
||||||
v_texcoord5.x+=x;
|
v_texcoord5.x+=x;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,47 +1,47 @@
|
|||||||
// Simple Bloom shader; created to use in PPSSPP.
|
// Simple Bloom shader; created to use in PPSSPP.
|
||||||
// Without excessive samples and complex nested loops
|
// Without excessive samples and complex nested loops
|
||||||
// (to make it compatible with low-end GPUs and to ensure ps_2_0 compatibility).
|
// (to make it compatible with low-end GPUs and to ensure ps_2_0 compatibility).
|
||||||
|
|
||||||
#ifdef GL_ES
|
#ifdef GL_ES
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
precision mediump int;
|
precision mediump int;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uniform sampler2D sampler0;
|
uniform sampler2D sampler0;
|
||||||
varying vec2 v_texcoord0;
|
varying vec2 v_texcoord0;
|
||||||
|
|
||||||
uniform vec4 u_setting;
|
uniform vec4 u_setting;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vec3 color = texture2D(sampler0, v_texcoord0.xy).xyz;
|
vec3 color = texture2D(sampler0, v_texcoord0.xy).xyz;
|
||||||
vec4 sum = vec4(0);
|
vec4 sum = vec4(0);
|
||||||
vec3 bloom;
|
vec3 bloom;
|
||||||
|
|
||||||
for(int i= -3 ;i < 3; i++)
|
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(-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(0, i)*0.004) * u_setting.x;
|
||||||
sum += texture2D(sampler0, v_texcoord0 + vec2(1, 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)
|
if (color.r < 0.3 && color.g < 0.3 && color.b < 0.3)
|
||||||
{
|
{
|
||||||
bloom = sum.xyz*sum.xyz*0.012 + color;
|
bloom = sum.xyz*sum.xyz*0.012 + color;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (color.r < 0.5 && color.g < 0.5 && color.b < 0.5)
|
if (color.r < 0.5 && color.g < 0.5 && color.b < 0.5)
|
||||||
{
|
{
|
||||||
bloom = sum.xyz*sum.xyz*0.009 + color;
|
bloom = sum.xyz*sum.xyz*0.009 + color;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
bloom = sum.xyz*sum.xyz*0.0075 + color;
|
bloom = sum.xyz*sum.xyz*0.0075 + color;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bloom = mix(color, bloom, u_setting.y);
|
bloom = mix(color, bloom, u_setting.y);
|
||||||
gl_FragColor.rgb = bloom;
|
gl_FragColor.rgb = bloom;
|
||||||
gl_FragColor.a = 1.0;
|
gl_FragColor.a = 1.0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,52 +1,52 @@
|
|||||||
// Modified to use in PPSSPP. Grabbed from:
|
// Modified to use in PPSSPP. Grabbed from:
|
||||||
// http://forums.ngemu.com/showthread.php?t=76098
|
// http://forums.ngemu.com/showthread.php?t=76098
|
||||||
|
|
||||||
// Advanced Cartoon shader I
|
// Advanced Cartoon shader I
|
||||||
// by guest(r) (guest.r@gmail.com)
|
// by guest(r) (guest.r@gmail.com)
|
||||||
// license: GNU-GPL
|
// license: GNU-GPL
|
||||||
|
|
||||||
#ifdef GL_ES
|
#ifdef GL_ES
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
precision mediump int;
|
precision mediump int;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uniform vec4 u_setting;
|
uniform vec4 u_setting;
|
||||||
|
|
||||||
uniform sampler2D sampler0;
|
uniform sampler2D sampler0;
|
||||||
|
|
||||||
varying vec4 v_texcoord0;
|
varying vec4 v_texcoord0;
|
||||||
varying vec4 v_texcoord1;
|
varying vec4 v_texcoord1;
|
||||||
varying vec4 v_texcoord2;
|
varying vec4 v_texcoord2;
|
||||||
varying vec4 v_texcoord3;
|
varying vec4 v_texcoord3;
|
||||||
varying vec4 v_texcoord4;
|
varying vec4 v_texcoord4;
|
||||||
varying vec4 v_texcoord5;
|
varying vec4 v_texcoord5;
|
||||||
varying vec4 v_texcoord6;
|
varying vec4 v_texcoord6;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vec3 c00 = texture2D(sampler0, v_texcoord5.xy).xyz;
|
vec3 c00 = texture2D(sampler0, v_texcoord5.xy).xyz;
|
||||||
vec3 c10 = texture2D(sampler0, v_texcoord1.xy).xyz;
|
vec3 c10 = texture2D(sampler0, v_texcoord1.xy).xyz;
|
||||||
vec3 c20 = texture2D(sampler0, v_texcoord2.zw).xyz;
|
vec3 c20 = texture2D(sampler0, v_texcoord2.zw).xyz;
|
||||||
vec3 c01 = texture2D(sampler0, v_texcoord3.xy).xyz;
|
vec3 c01 = texture2D(sampler0, v_texcoord3.xy).xyz;
|
||||||
vec3 c11 = texture2D(sampler0, v_texcoord0.xy).xyz;
|
vec3 c11 = texture2D(sampler0, v_texcoord0.xy).xyz;
|
||||||
vec3 c21 = texture2D(sampler0, v_texcoord4.xy).xyz;
|
vec3 c21 = texture2D(sampler0, v_texcoord4.xy).xyz;
|
||||||
vec3 c02 = texture2D(sampler0, v_texcoord1.zw).xyz;
|
vec3 c02 = texture2D(sampler0, v_texcoord1.zw).xyz;
|
||||||
vec3 c12 = texture2D(sampler0, v_texcoord2.xy).xyz;
|
vec3 c12 = texture2D(sampler0, v_texcoord2.xy).xyz;
|
||||||
vec3 c22 = texture2D(sampler0, v_texcoord6.xy).xyz;
|
vec3 c22 = texture2D(sampler0, v_texcoord6.xy).xyz;
|
||||||
vec3 dt = vec3(1.0,1.0,1.0);
|
vec3 dt = vec3(1.0,1.0,1.0);
|
||||||
|
|
||||||
float d1=dot(abs(c00-c22),dt);
|
float d1=dot(abs(c00-c22),dt);
|
||||||
float d2=dot(abs(c20-c02),dt);
|
float d2=dot(abs(c20-c02),dt);
|
||||||
float hl=dot(abs(c01-c21),dt);
|
float hl=dot(abs(c01-c21),dt);
|
||||||
float vl=dot(abs(c10-c12),dt);
|
float vl=dot(abs(c10-c12),dt);
|
||||||
float d = u_setting.x*(d1+d2+hl+vl)/(dot(c11,dt)+0.15);
|
float d = u_setting.x*(d1+d2+hl+vl)/(dot(c11,dt)+0.15);
|
||||||
|
|
||||||
float lc = 4.0*length(c11);
|
float lc = 4.0*length(c11);
|
||||||
float f = fract(lc); f*=f;
|
float f = fract(lc); f*=f;
|
||||||
lc = 0.25*(floor(lc) + f*f)+0.05;
|
lc = 0.25*(floor(lc) + f*f)+0.05;
|
||||||
c11 = 4.0*normalize(c11);
|
c11 = 4.0*normalize(c11);
|
||||||
vec3 frct = fract(c11); frct*=frct;
|
vec3 frct = fract(c11); frct*=frct;
|
||||||
c11 = floor(c11)+ 0.05*dt + frct*frct;
|
c11 = floor(c11)+ 0.05*dt + frct*frct;
|
||||||
gl_FragColor.rgb = 0.25*lc*(1.1-d*sqrt(d))*c11;
|
gl_FragColor.rgb = 0.25*lc*(1.1-d*sqrt(d))*c11;
|
||||||
gl_FragColor.a = 1.0;
|
gl_FragColor.a = 1.0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,39 +1,39 @@
|
|||||||
#ifdef GL_ES
|
#ifdef GL_ES
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
precision mediump int;
|
precision mediump int;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
attribute vec4 a_position;
|
attribute vec4 a_position;
|
||||||
attribute vec2 a_texcoord0;
|
attribute vec2 a_texcoord0;
|
||||||
uniform vec2 u_texelDelta;
|
uniform vec2 u_texelDelta;
|
||||||
|
|
||||||
varying vec4 v_texcoord0;
|
varying vec4 v_texcoord0;
|
||||||
varying vec4 v_texcoord1;
|
varying vec4 v_texcoord1;
|
||||||
varying vec4 v_texcoord2;
|
varying vec4 v_texcoord2;
|
||||||
varying vec4 v_texcoord3;
|
varying vec4 v_texcoord3;
|
||||||
varying vec4 v_texcoord4;
|
varying vec4 v_texcoord4;
|
||||||
varying vec4 v_texcoord5;
|
varying vec4 v_texcoord5;
|
||||||
varying vec4 v_texcoord6;
|
varying vec4 v_texcoord6;
|
||||||
|
|
||||||
float scaleoffset = 0.8; //edge detection offset
|
float scaleoffset = 0.8; //edge detection offset
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
float x = u_texelDelta.x*scaleoffset;
|
float x = u_texelDelta.x*scaleoffset;
|
||||||
float y = u_texelDelta.y*scaleoffset;
|
float y = u_texelDelta.y*scaleoffset;
|
||||||
vec2 dg1 = vec2( x,y);
|
vec2 dg1 = vec2( x,y);
|
||||||
vec2 dg2 = vec2(-x,y);
|
vec2 dg2 = vec2(-x,y);
|
||||||
vec2 dx = vec2(x,0.0);
|
vec2 dx = vec2(x,0.0);
|
||||||
vec2 dy = vec2(0.0,y);
|
vec2 dy = vec2(0.0,y);
|
||||||
gl_Position = a_position;
|
gl_Position = a_position;
|
||||||
v_texcoord0=a_texcoord0.xyxy;
|
v_texcoord0=a_texcoord0.xyxy;
|
||||||
v_texcoord1.xy = v_texcoord0.xy - dy;
|
v_texcoord1.xy = v_texcoord0.xy - dy;
|
||||||
v_texcoord2.xy = v_texcoord0.xy + dy;
|
v_texcoord2.xy = v_texcoord0.xy + dy;
|
||||||
v_texcoord3.xy = v_texcoord0.xy - dx;
|
v_texcoord3.xy = v_texcoord0.xy - dx;
|
||||||
v_texcoord4.xy = v_texcoord0.xy + dx;
|
v_texcoord4.xy = v_texcoord0.xy + dx;
|
||||||
v_texcoord5.xy = v_texcoord0.xy - dg1;
|
v_texcoord5.xy = v_texcoord0.xy - dg1;
|
||||||
v_texcoord6.xy = v_texcoord0.xy + dg1;
|
v_texcoord6.xy = v_texcoord0.xy + dg1;
|
||||||
v_texcoord1.zw = v_texcoord0.xy - dg2;
|
v_texcoord1.zw = v_texcoord0.xy - dg2;
|
||||||
v_texcoord2.zw = v_texcoord0.xy + dg2;
|
v_texcoord2.zw = v_texcoord0.xy + dg2;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,20 +1,20 @@
|
|||||||
// Color correction
|
// Color correction
|
||||||
|
|
||||||
#ifdef GL_ES
|
#ifdef GL_ES
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
precision mediump int;
|
precision mediump int;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uniform sampler2D sampler0;
|
uniform sampler2D sampler0;
|
||||||
varying vec2 v_texcoord0;
|
varying vec2 v_texcoord0;
|
||||||
|
|
||||||
uniform vec4 u_setting;
|
uniform vec4 u_setting;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vec3 rgb = texture2D( sampler0, v_texcoord0 ).xyz;
|
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 = 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;
|
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.rgb = pow(rgb, vec3(1.0/u_setting.w));
|
||||||
gl_FragColor.a = 1.0;
|
gl_FragColor.a = 1.0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,33 +1,33 @@
|
|||||||
// Retro (CRT) shader, created to use in PPSSPP.
|
// Retro (CRT) shader, created to use in PPSSPP.
|
||||||
|
|
||||||
#ifdef GL_ES
|
#ifdef GL_ES
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
precision mediump int;
|
precision mediump int;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uniform sampler2D sampler0;
|
uniform sampler2D sampler0;
|
||||||
varying vec2 v_texcoord0;
|
varying vec2 v_texcoord0;
|
||||||
uniform vec4 u_time;
|
uniform vec4 u_time;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
// scanlines
|
// scanlines
|
||||||
int vPos = int( ( v_texcoord0.y + u_time.x * 0.5 ) * 272.0 );
|
int vPos = int( ( v_texcoord0.y + u_time.x * 0.5 ) * 272.0 );
|
||||||
float line_intensity = mod( float(vPos), 2.0 );
|
float line_intensity = mod( float(vPos), 2.0 );
|
||||||
|
|
||||||
// color shift
|
// color shift
|
||||||
float off = line_intensity * 0.0005;
|
float off = line_intensity * 0.0005;
|
||||||
vec2 shift = vec2( off, 0 );
|
vec2 shift = vec2( off, 0 );
|
||||||
|
|
||||||
// shift R and G channels to simulate NTSC color bleed
|
// shift R and G channels to simulate NTSC color bleed
|
||||||
vec2 colorShift = vec2( 0.001, 0 );
|
vec2 colorShift = vec2( 0.001, 0 );
|
||||||
float r = texture2D( sampler0, v_texcoord0 + colorShift + shift ).x;
|
float r = texture2D( sampler0, v_texcoord0 + colorShift + shift ).x;
|
||||||
float g = texture2D( sampler0, v_texcoord0 - colorShift + shift ).y;
|
float g = texture2D( sampler0, v_texcoord0 - colorShift + shift ).y;
|
||||||
float b = texture2D( sampler0, v_texcoord0 ).z;
|
float b = texture2D( sampler0, v_texcoord0 ).z;
|
||||||
|
|
||||||
vec4 c = vec4( r, g * 0.99, b, 1.0 ) * clamp( line_intensity, 0.85, 1.0 );
|
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 );
|
float rollbar = sin( ( v_texcoord0.y + u_time.x ) * 4.0 );
|
||||||
|
|
||||||
gl_FragColor.rgba = c + (rollbar * 0.02);
|
gl_FragColor.rgba = c + (rollbar * 0.02);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,162 +1,163 @@
|
|||||||
# You can have multiple ini files if you want, it doesn't matter.
|
# You can have multiple ini files if you want, it doesn't matter.
|
||||||
[FXAA]
|
[FXAA]
|
||||||
Name=FXAA Antialiasing
|
Name=FXAA Antialiasing
|
||||||
Author=nVidia
|
Author=nVidia
|
||||||
Fragment=fxaa.fsh
|
Fragment=fxaa.fsh
|
||||||
Vertex=fxaa.vsh
|
Vertex=fxaa.vsh
|
||||||
[CRT]
|
[CRT]
|
||||||
Name=CRT Scanlines
|
Name=CRT Scanlines
|
||||||
Author=KillaMaaki
|
Author=KillaMaaki
|
||||||
Fragment=crt.fsh
|
Fragment=crt.fsh
|
||||||
Vertex=fxaa.vsh
|
Vertex=fxaa.vsh
|
||||||
60fps=True
|
60fps=True
|
||||||
[Natural]
|
[Natural]
|
||||||
Name=Natural Colors
|
Name=Natural Colors
|
||||||
Fragment=natural.fsh
|
Fragment=natural.fsh
|
||||||
Vertex=natural.vsh
|
Vertex=natural.vsh
|
||||||
[NaturalA]
|
[NaturalA]
|
||||||
Name=Natural Colors (No Blur)
|
Name=Natural Colors (No Blur)
|
||||||
Fragment=naturalA.fsh
|
Fragment=naturalA.fsh
|
||||||
Vertex=naturalA.vsh
|
Vertex=naturalA.vsh
|
||||||
[Vignette]
|
[Vignette]
|
||||||
Name=Vignette
|
Name=Vignette
|
||||||
Author=Henrik
|
Author=Henrik
|
||||||
Fragment=vignette.fsh
|
Fragment=vignette.fsh
|
||||||
Vertex=fxaa.vsh
|
Vertex=fxaa.vsh
|
||||||
[Grayscale]
|
[Grayscale]
|
||||||
Name=Grayscale
|
Name=Grayscale
|
||||||
Author=Henrik
|
Author=Henrik
|
||||||
Fragment=grayscale.fsh
|
Fragment=grayscale.fsh
|
||||||
Vertex=fxaa.vsh
|
Vertex=fxaa.vsh
|
||||||
[Bloom]
|
[Bloom]
|
||||||
Name=Bloom
|
Name=Bloom
|
||||||
Fragment=bloom.fsh
|
Fragment=bloom.fsh
|
||||||
Vertex=fxaa.vsh
|
Vertex=fxaa.vsh
|
||||||
SettingName1=Amount
|
SettingName1=Amount
|
||||||
SettingDefaultValue1=0.6
|
SettingDefaultValue1=0.6
|
||||||
SettingMaxValue1=1.0
|
SettingMaxValue1=1.0
|
||||||
SettingMinValue1=0.0
|
SettingMinValue1=0.0
|
||||||
SettingName2=Power
|
SettingName2=Power
|
||||||
SettingDefaultValue2=0.5
|
SettingDefaultValue2=0.5
|
||||||
SettingMaxValue2=1.0
|
SettingMaxValue2=1.0
|
||||||
SettingMinValue2=0.0
|
SettingMinValue2=0.0
|
||||||
[Sharpen]
|
[Sharpen]
|
||||||
Name=Sharpen
|
Name=Sharpen
|
||||||
Fragment=sharpen.fsh
|
Fragment=sharpen.fsh
|
||||||
Vertex=fxaa.vsh
|
Vertex=fxaa.vsh
|
||||||
SettingName1=Amount
|
SettingName1=Amount
|
||||||
SettingDefaultValue1=1.5
|
SettingDefaultValue1=1.5
|
||||||
SettingMaxValue1=3.0
|
SettingMaxValue1=3.0
|
||||||
SettingMinValue1=1.0
|
SettingMinValue1=1.0
|
||||||
SettingStep1=0.1
|
SettingStep1=0.1
|
||||||
[InverseColors]
|
[InverseColors]
|
||||||
Name=Inverse Colors
|
Name=Inverse Colors
|
||||||
Author=Henrik
|
Author=Henrik
|
||||||
Fragment=inversecolors.fsh
|
Fragment=inversecolors.fsh
|
||||||
Vertex=fxaa.vsh
|
Vertex=fxaa.vsh
|
||||||
[Scanlines]
|
[Scanlines]
|
||||||
Name=Scanlines (CRT)
|
Name=Scanlines (CRT)
|
||||||
Fragment=scanlines.fsh
|
Fragment=scanlines.fsh
|
||||||
Vertex=fxaa.vsh
|
Vertex=fxaa.vsh
|
||||||
OutputResolution=True
|
OutputResolution=True
|
||||||
SettingName1=Amount
|
SettingName1=Amount
|
||||||
SettingDefaultValue1=1.0
|
SettingDefaultValue1=1.0
|
||||||
SettingMaxValue1=1.0
|
SettingMaxValue1=1.0
|
||||||
SettingMinValue1=0.0
|
SettingMinValue1=0.0
|
||||||
SettingStep1=0.1
|
SettingStep1=0.1
|
||||||
SettingName2=Intensity
|
SettingName2=Intensity
|
||||||
SettingDefaultValue2=0.5
|
SettingDefaultValue2=0.5
|
||||||
SettingMaxValue2=1.0
|
SettingMaxValue2=1.0
|
||||||
SettingMinValue2=0.0
|
SettingMinValue2=0.0
|
||||||
SettingStep2=0.05
|
SettingStep2=0.05
|
||||||
[Cartoon]
|
[Cartoon]
|
||||||
Name=Cartoon
|
Name=Cartoon
|
||||||
Fragment=cartoon.fsh
|
Fragment=cartoon.fsh
|
||||||
Vertex=cartoon.vsh
|
Vertex=cartoon.vsh
|
||||||
SettingName1=Black border
|
SettingName1=Black border
|
||||||
SettingDefaultValue1=0.5
|
SettingDefaultValue1=0.5
|
||||||
SettingMaxValue1=1.0
|
SettingMaxValue1=1.0
|
||||||
SettingMinValue1=0.0
|
SettingMinValue1=0.0
|
||||||
[4xHqGLSL]
|
[4xHqGLSL]
|
||||||
Name=4xHqGLSL Upscaler
|
Name=4xHqGLSL Upscaler
|
||||||
Fragment=4xhqglsl.fsh
|
Fragment=4xhqglsl.fsh
|
||||||
Vertex=4xhqglsl.vsh
|
Vertex=4xhqglsl.vsh
|
||||||
OutputResolution=True
|
OutputResolution=True
|
||||||
Upscaling=True
|
Upscaling=True
|
||||||
[AAColor]
|
[AAColor]
|
||||||
Name=AA-Color
|
Name=AA-Color
|
||||||
Fragment=aacolor.fsh
|
Fragment=aacolor.fsh
|
||||||
Vertex=aacolor.vsh
|
Vertex=aacolor.vsh
|
||||||
[UpscaleSpline36]
|
[UpscaleSpline36]
|
||||||
Name=Spline36 Upscaler
|
Name=Spline36 Upscaler
|
||||||
Fragment=upscale_spline36.fsh
|
Fragment=upscale_spline36.fsh
|
||||||
Vertex=upscale_spline36.vsh
|
Vertex=upscale_spline36.vsh
|
||||||
OutputResolution=True
|
OutputResolution=True
|
||||||
RequiresIntSupport=True
|
RequiresIntSupport=True
|
||||||
Upscaling=True
|
Upscaling=True
|
||||||
[5xBR]
|
[5xBR]
|
||||||
Name=5xBR Upscaler
|
Name=5xBR Upscaler
|
||||||
Author=Hyllian
|
Author=Hyllian
|
||||||
Fragment=5xBR.fsh
|
Fragment=5xBR.fsh
|
||||||
Vertex=5xBR.vsh
|
Vertex=5xBR.vsh
|
||||||
OutputResolution=True
|
OutputResolution=True
|
||||||
Upscaling=True
|
Upscaling=True
|
||||||
[5xBR-lv2]
|
[5xBR-lv2]
|
||||||
Name=5xBR lv2 Upscaler
|
Name=5xBR lv2 Upscaler
|
||||||
Author=Hyllian (tweak by guest.r)
|
Author=Hyllian (tweak by guest.r)
|
||||||
Fragment=5xBR-lv2.fsh
|
Fragment=5xBR-lv2.fsh
|
||||||
Vertex=5xBR.vsh
|
Vertex=5xBR.vsh
|
||||||
OutputResolution=True
|
OutputResolution=True
|
||||||
Upscaling=True
|
Upscaling=True
|
||||||
[VideoSmoothingAA]
|
[VideoSmoothingAA]
|
||||||
Name=Video aware guest.r AA 4.o
|
Name=Video aware guest.r AA 4.o
|
||||||
Author=guest.r(tweak by LunaMoo)
|
Author=guest.r(tweak by LunaMoo)
|
||||||
Fragment=videoAA.fsh
|
Fragment=videoAA.fsh
|
||||||
Vertex=fxaa.vsh
|
Vertex=fxaa.vsh
|
||||||
OutputResolution=True
|
OutputResolution=True
|
||||||
[SSAA(Gauss)]
|
[SSAA(Gauss)]
|
||||||
Name=Super Sampling AA(Gauss)
|
Name=Super Sampling AA(Gauss)
|
||||||
Fragment=GaussianDownscale.fsh
|
Fragment=GaussianDownscale.fsh
|
||||||
Vertex=fxaa.vsh
|
Vertex=fxaa.vsh
|
||||||
OutputResolution=True
|
OutputResolution=True
|
||||||
SSAA=2
|
SSAA=2
|
||||||
[ColorCorrection]
|
[ColorCorrection]
|
||||||
Name=Color correction
|
Name=Color correction
|
||||||
Fragment=colorcorrection.fsh
|
Fragment=colorcorrection.fsh
|
||||||
Vertex=fxaa.vsh
|
Vertex=fxaa.vsh
|
||||||
SettingName1=Brightness
|
SettingName1=Brightness
|
||||||
SettingDefaultValue1=1.0
|
SettingDefaultValue1=1.0
|
||||||
SettingMaxValue1=2.0
|
SettingMaxValue1=2.0
|
||||||
SettingMinValue1=0.1
|
SettingMinValue1=0.1
|
||||||
SettingStep1=0.05
|
SettingStep1=0.05
|
||||||
SettingName2=Saturation
|
SettingName2=Saturation
|
||||||
SettingDefaultValue2=1.0
|
SettingDefaultValue2=1.0
|
||||||
SettingMaxValue2=2.0
|
SettingMaxValue2=2.0
|
||||||
SettingMinValue2=0.0
|
SettingMinValue2=0.0
|
||||||
SettingStep2=0.1
|
SettingStep2=0.1
|
||||||
SettingName3=Contrast
|
SettingName3=Contrast
|
||||||
SettingDefaultValue3=1.0
|
SettingDefaultValue3=1.0
|
||||||
SettingMaxValue3=3.0
|
SettingMaxValue3=3.0
|
||||||
SettingMinValue3=0.1
|
SettingMinValue3=0.1
|
||||||
SettingStep3=0.1
|
SettingStep3=0.1
|
||||||
SettingName4=Gamma
|
SettingName4=Gamma
|
||||||
SettingDefaultValue4=1.0
|
SettingDefaultValue4=1.0
|
||||||
SettingMaxValue4=2.0
|
SettingMaxValue4=2.0
|
||||||
SettingMinValue4=0.1
|
SettingMinValue4=0.1
|
||||||
SettingStep4=0.05
|
SettingStep4=0.05
|
||||||
[PSPColor]
|
[PSPColor]
|
||||||
Name=PSP Color
|
Name=PSP Color
|
||||||
Author=hunterk, Pokefan531 (ported by jdgleaver)
|
Author=hunterk, Pokefan531 (ported by jdgleaver)
|
||||||
Fragment=psp_color.fsh
|
Fragment=psp_color.fsh
|
||||||
Vertex=fxaa.vsh
|
Vertex=fxaa.vsh
|
||||||
[Tex4xBRZ]
|
[Tex4xBRZ]
|
||||||
Type=Texture
|
Type=Texture
|
||||||
Name=4xBRZ
|
Name=4xBRZ
|
||||||
Author=Hyllian
|
Author=Hyllian
|
||||||
Compute=tex_4xbrz.csh
|
Compute=tex_4xbrz.csh
|
||||||
[TexMMPX]
|
VendorBlacklist=ARM
|
||||||
Type=Texture
|
[TexMMPX]
|
||||||
Name=MMPX
|
Type=Texture
|
||||||
Author=Morgan McGuire and Mara Gagiu
|
Name=MMPX
|
||||||
Compute=tex_mmpx.csh
|
Author=Morgan McGuire and Mara Gagiu
|
||||||
MaxScale=2
|
Compute=tex_mmpx.csh
|
||||||
|
MaxScale=2
|
||||||
|
|||||||
@@ -1,68 +1,68 @@
|
|||||||
// PPSSPP: Grabbed from Processing and slightly modified.
|
// PPSSPP: Grabbed from Processing and slightly modified.
|
||||||
|
|
||||||
// FXAA shader, GLSL code adapted from:
|
// FXAA shader, GLSL code adapted from:
|
||||||
// http://horde3d.org/wiki/index.php5?title=Shading_Technique_-_FXAA
|
// http://horde3d.org/wiki/index.php5?title=Shading_Technique_-_FXAA
|
||||||
// Whitepaper describing the technique:
|
// Whitepaper describing the technique:
|
||||||
// http://developer.download.nvidia.com/assets/gamedev/files/sdk/11/FXAA_WhitePaper.pdf
|
// http://developer.download.nvidia.com/assets/gamedev/files/sdk/11/FXAA_WhitePaper.pdf
|
||||||
|
|
||||||
#ifdef GL_ES
|
#ifdef GL_ES
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
precision mediump int;
|
precision mediump int;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uniform sampler2D sampler0;
|
uniform sampler2D sampler0;
|
||||||
|
|
||||||
// The inverse of the texture dimensions along X and Y
|
// The inverse of the texture dimensions along X and Y
|
||||||
uniform vec2 u_texelDelta;
|
uniform vec2 u_texelDelta;
|
||||||
varying vec2 v_texcoord0;
|
varying vec2 v_texcoord0;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
// The parameters are hardcoded for now, but could be
|
// The parameters are hardcoded for now, but could be
|
||||||
// made into uniforms to control fromt he program.
|
// made into uniforms to control fromt he program.
|
||||||
float FXAA_SPAN_MAX = 8.0;
|
float FXAA_SPAN_MAX = 8.0;
|
||||||
float FXAA_REDUCE_MUL = 1.0/8.0;
|
float FXAA_REDUCE_MUL = 1.0/8.0;
|
||||||
float FXAA_REDUCE_MIN = (1.0/128.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 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 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 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 rgbSE = texture2D(sampler0, v_texcoord0.xy + (vec2(+1.0, +1.0) * u_texelDelta)).xyz;
|
||||||
vec3 rgbM = texture2D(sampler0, v_texcoord0.xy).xyz;
|
vec3 rgbM = texture2D(sampler0, v_texcoord0.xy).xyz;
|
||||||
|
|
||||||
vec3 luma = vec3(0.299, 0.587, 0.114);
|
vec3 luma = vec3(0.299, 0.587, 0.114);
|
||||||
float lumaNW = dot(rgbNW, luma);
|
float lumaNW = dot(rgbNW, luma);
|
||||||
float lumaNE = dot(rgbNE, luma);
|
float lumaNE = dot(rgbNE, luma);
|
||||||
float lumaSW = dot(rgbSW, luma);
|
float lumaSW = dot(rgbSW, luma);
|
||||||
float lumaSE = dot(rgbSE, luma);
|
float lumaSE = dot(rgbSE, luma);
|
||||||
float lumaM = dot( rgbM, luma);
|
float lumaM = dot( rgbM, luma);
|
||||||
|
|
||||||
float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));
|
float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));
|
||||||
float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));
|
float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));
|
||||||
|
|
||||||
vec2 dir;
|
vec2 dir;
|
||||||
dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));
|
dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));
|
||||||
dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));
|
dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));
|
||||||
|
|
||||||
float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) * (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);
|
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);
|
float rcpDirMin = 1.0/(min(abs(dir.x), abs(dir.y)) + dirReduce);
|
||||||
|
|
||||||
dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),
|
dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),
|
||||||
max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX), dir * rcpDirMin)) * u_texelDelta;
|
max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX), dir * rcpDirMin)) * u_texelDelta;
|
||||||
|
|
||||||
vec3 rgbA = (1.0/2.0) * (
|
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 * (1.0/3.0 - 0.5)).xyz +
|
||||||
texture2D(sampler0, v_texcoord0.xy + dir * (2.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) * (
|
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 * (0.0/3.0 - 0.5)).xyz +
|
||||||
texture2D(sampler0, v_texcoord0.xy + dir * (3.0/3.0 - 0.5)).xyz);
|
texture2D(sampler0, v_texcoord0.xy + dir * (3.0/3.0 - 0.5)).xyz);
|
||||||
float lumaB = dot(rgbB, luma);
|
float lumaB = dot(rgbB, luma);
|
||||||
|
|
||||||
if((lumaB < lumaMin) || (lumaB > lumaMax)){
|
if((lumaB < lumaMin) || (lumaB > lumaMax)){
|
||||||
gl_FragColor.xyz=rgbA;
|
gl_FragColor.xyz=rgbA;
|
||||||
} else {
|
} else {
|
||||||
gl_FragColor.xyz=rgbB;
|
gl_FragColor.xyz=rgbB;
|
||||||
}
|
}
|
||||||
gl_FragColor.a = 1.0;
|
gl_FragColor.a = 1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
#ifdef GL_ES
|
#ifdef GL_ES
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
precision mediump int;
|
precision mediump int;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
attribute vec4 a_position;
|
attribute vec4 a_position;
|
||||||
attribute vec2 a_texcoord0;
|
attribute vec2 a_texcoord0;
|
||||||
varying vec2 v_texcoord0;
|
varying vec2 v_texcoord0;
|
||||||
void main() {
|
void main() {
|
||||||
v_texcoord0 = a_texcoord0;
|
v_texcoord0 = a_texcoord0;
|
||||||
gl_Position = a_position;
|
gl_Position = a_position;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
// Simple grayscale shader
|
// Simple grayscale shader
|
||||||
|
|
||||||
#ifdef GL_ES
|
#ifdef GL_ES
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
precision mediump int;
|
precision mediump int;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uniform sampler2D sampler0;
|
uniform sampler2D sampler0;
|
||||||
varying vec2 v_texcoord0;
|
varying vec2 v_texcoord0;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
vec3 rgb = texture2D(sampler0, v_texcoord0.xy).xyz;
|
vec3 rgb = texture2D(sampler0, v_texcoord0.xy).xyz;
|
||||||
float luma = dot(rgb, vec3(0.299, 0.587, 0.114));
|
float luma = dot(rgb, vec3(0.299, 0.587, 0.114));
|
||||||
gl_FragColor.rgb = vec3(luma, luma, luma);
|
gl_FragColor.rgb = vec3(luma, luma, luma);
|
||||||
gl_FragColor.a = 1.0;
|
gl_FragColor.a = 1.0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,19 +1,19 @@
|
|||||||
// Simple false color shader
|
// Simple false color shader
|
||||||
|
|
||||||
#ifdef GL_ES
|
#ifdef GL_ES
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
precision mediump int;
|
precision mediump int;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uniform sampler2D sampler0;
|
uniform sampler2D sampler0;
|
||||||
varying vec2 v_texcoord0;
|
varying vec2 v_texcoord0;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
vec3 rgb = texture2D(sampler0, v_texcoord0.xy).xyz;
|
vec3 rgb = texture2D(sampler0, v_texcoord0.xy).xyz;
|
||||||
float luma = dot(rgb, vec3(0.299, 0.587, 0.114));
|
float luma = dot(rgb, vec3(0.299, 0.587, 0.114));
|
||||||
vec3 gray = vec3(luma, luma, luma) - 0.5;
|
vec3 gray = vec3(luma, luma, luma) - 0.5;
|
||||||
rgb -= vec3(0.5, 0.5, 0.5);
|
rgb -= vec3(0.5, 0.5, 0.5);
|
||||||
|
|
||||||
gl_FragColor.rgb = mix(rgb, gray, 2.0) + 0.5;
|
gl_FragColor.rgb = mix(rgb, gray, 2.0) + 0.5;
|
||||||
gl_FragColor.a = 1.0;
|
gl_FragColor.a = 1.0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,58 +1,58 @@
|
|||||||
// Natural Vision Shader, modified to use in PPSSPP.
|
// Natural Vision Shader, modified to use in PPSSPP.
|
||||||
|
|
||||||
// by ShadX (Modded by SimoneT)
|
// by ShadX (Modded by SimoneT)
|
||||||
// http://forums.ngemu.com/showthread.php?t=76098
|
// http://forums.ngemu.com/showthread.php?t=76098
|
||||||
|
|
||||||
#ifdef GL_ES
|
#ifdef GL_ES
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
precision mediump int;
|
precision mediump int;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uniform sampler2D sampler0;
|
uniform sampler2D sampler0;
|
||||||
varying vec4 v_texcoord0;
|
varying vec4 v_texcoord0;
|
||||||
varying vec4 v_texcoord1;
|
varying vec4 v_texcoord1;
|
||||||
varying vec4 v_texcoord2;
|
varying vec4 v_texcoord2;
|
||||||
varying vec4 v_texcoord3;
|
varying vec4 v_texcoord3;
|
||||||
|
|
||||||
const mat3 RGBtoYIQ = mat3(0.299, 0.596, 0.212,
|
const mat3 RGBtoYIQ = mat3(0.299, 0.596, 0.212,
|
||||||
0.587,-0.275,-0.523,
|
0.587,-0.275,-0.523,
|
||||||
0.114,-0.321, 0.311);
|
0.114,-0.321, 0.311);
|
||||||
|
|
||||||
const mat3 YIQtoRGB = mat3(1.0, 1.0, 1.0,
|
const mat3 YIQtoRGB = mat3(1.0, 1.0, 1.0,
|
||||||
0.95568806036115671171,-0.27158179694405859326,-1.1081773266826619523,
|
0.95568806036115671171,-0.27158179694405859326,-1.1081773266826619523,
|
||||||
0.61985809445637075388,-0.64687381613840131330, 1.7050645599191817149);
|
0.61985809445637075388,-0.64687381613840131330, 1.7050645599191817149);
|
||||||
|
|
||||||
const vec3 val00 = vec3( 1.2, 1.2, 1.2);
|
const vec3 val00 = vec3( 1.2, 1.2, 1.2);
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vec3 c0,c1;
|
vec3 c0,c1;
|
||||||
|
|
||||||
c0 = texture2D(sampler0,v_texcoord0.xy).xyz;
|
c0 = texture2D(sampler0,v_texcoord0.xy).xyz;
|
||||||
c0+=(texture2D(sampler0,v_texcoord0.zy).xyz)*0.25;
|
c0+=(texture2D(sampler0,v_texcoord0.zy).xyz)*0.25;
|
||||||
c0+=(texture2D(sampler0,v_texcoord0.xw).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_texcoord0.zw).xyz)*0.125;
|
||||||
|
|
||||||
c0+= texture2D(sampler0,v_texcoord1.xy).xyz;
|
c0+= texture2D(sampler0,v_texcoord1.xy).xyz;
|
||||||
c0+=(texture2D(sampler0,v_texcoord1.zy).xyz)*0.25;
|
c0+=(texture2D(sampler0,v_texcoord1.zy).xyz)*0.25;
|
||||||
c0+=(texture2D(sampler0,v_texcoord1.xw).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_texcoord1.zw).xyz)*0.125;
|
||||||
|
|
||||||
c0+= texture2D(sampler0,v_texcoord2.xy).xyz;
|
c0+= texture2D(sampler0,v_texcoord2.xy).xyz;
|
||||||
c0+=(texture2D(sampler0,v_texcoord2.zy).xyz)*0.25;
|
c0+=(texture2D(sampler0,v_texcoord2.zy).xyz)*0.25;
|
||||||
c0+=(texture2D(sampler0,v_texcoord2.xw).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_texcoord2.zw).xyz)*0.125;
|
||||||
|
|
||||||
c0+= texture2D(sampler0,v_texcoord3.xy).xyz;
|
c0+= texture2D(sampler0,v_texcoord3.xy).xyz;
|
||||||
c0+=(texture2D(sampler0,v_texcoord3.zy).xyz)*0.25;
|
c0+=(texture2D(sampler0,v_texcoord3.zy).xyz)*0.25;
|
||||||
c0+=(texture2D(sampler0,v_texcoord3.xw).xyz)*0.25;
|
c0+=(texture2D(sampler0,v_texcoord3.xw).xyz)*0.25;
|
||||||
c0+=(texture2D(sampler0,v_texcoord3.zw).xyz)*0.125;
|
c0+=(texture2D(sampler0,v_texcoord3.zw).xyz)*0.125;
|
||||||
c0*=0.153846153846;
|
c0*=0.153846153846;
|
||||||
|
|
||||||
c1=RGBtoYIQ*c0;
|
c1=RGBtoYIQ*c0;
|
||||||
|
|
||||||
c1=vec3(pow(c1.x,val00.x),c1.yz*val00.yz);
|
c1=vec3(pow(c1.x,val00.x),c1.yz*val00.yz);
|
||||||
|
|
||||||
gl_FragColor.rgb=YIQtoRGB*c1;
|
gl_FragColor.rgb=YIQtoRGB*c1;
|
||||||
gl_FragColor.a = 1.0;
|
gl_FragColor.a = 1.0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,24 +1,24 @@
|
|||||||
#ifdef GL_ES
|
#ifdef GL_ES
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
precision mediump int;
|
precision mediump int;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uniform vec2 u_texelDelta;
|
uniform vec2 u_texelDelta;
|
||||||
|
|
||||||
attribute vec4 a_position;
|
attribute vec4 a_position;
|
||||||
attribute vec2 a_texcoord0;
|
attribute vec2 a_texcoord0;
|
||||||
|
|
||||||
varying vec4 v_texcoord0;
|
varying vec4 v_texcoord0;
|
||||||
varying vec4 v_texcoord1;
|
varying vec4 v_texcoord1;
|
||||||
varying vec4 v_texcoord2;
|
varying vec4 v_texcoord2;
|
||||||
varying vec4 v_texcoord3;
|
varying vec4 v_texcoord3;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
gl_Position=a_position;
|
gl_Position=a_position;
|
||||||
|
|
||||||
v_texcoord0=a_texcoord0.xyxy+vec4(-0.5,-0.5,-1.5,-1.5)*u_texelDelta.xyxy;
|
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_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_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;
|
v_texcoord3=a_texcoord0.xyxy+vec4( 0.5, 0.5, 1.5, 1.5)*u_texelDelta.xyxy;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
#ifdef GL_ES
|
#ifdef GL_ES
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
precision mediump int;
|
precision mediump int;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
attribute vec4 a_position;
|
attribute vec4 a_position;
|
||||||
attribute vec2 a_texcoord0;
|
attribute vec2 a_texcoord0;
|
||||||
|
|
||||||
varying vec2 v_texcoord0;
|
varying vec2 v_texcoord0;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
gl_Position=a_position;
|
gl_Position=a_position;
|
||||||
v_texcoord0=a_texcoord0;
|
v_texcoord0=a_texcoord0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,58 +1,58 @@
|
|||||||
/*
|
/*
|
||||||
psp_color vertex shader
|
psp_color vertex shader
|
||||||
|
|
||||||
Original code written by hunterk, modified by Pokefan531 and
|
Original code written by hunterk, modified by Pokefan531 and
|
||||||
released into the public domain
|
released into the public domain
|
||||||
|
|
||||||
'Ported' (i.e. copy/paste) to PPSSPP format by jdgleaver
|
'Ported' (i.e. copy/paste) to PPSSPP format by jdgleaver
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
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
|
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)
|
Software Foundation; either version 2 of the License, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
Notes: This shader replicates the LCD dynamics of the PSP 1000 and PSP 2000
|
Notes: This shader replicates the LCD dynamics of the PSP 1000 and PSP 2000
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//================
|
//================
|
||||||
#ifdef GL_ES
|
#ifdef GL_ES
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
precision mediump int;
|
precision mediump int;
|
||||||
// For android, use this instead...
|
// For android, use this instead...
|
||||||
//precision highp float;
|
//precision highp float;
|
||||||
//precision highp int;
|
//precision highp int;
|
||||||
//
|
//
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//================
|
//================
|
||||||
#define target_gamma 2.21
|
#define target_gamma 2.21
|
||||||
#define display_gamma 2.2
|
#define display_gamma 2.2
|
||||||
#define r 0.98
|
#define r 0.98
|
||||||
#define g 0.795
|
#define g 0.795
|
||||||
#define b 0.98
|
#define b 0.98
|
||||||
#define rg 0.04
|
#define rg 0.04
|
||||||
#define rb 0.01
|
#define rb 0.01
|
||||||
#define gr 0.20
|
#define gr 0.20
|
||||||
#define gb 0.01
|
#define gb 0.01
|
||||||
#define br -0.18
|
#define br -0.18
|
||||||
#define bg 0.165
|
#define bg 0.165
|
||||||
|
|
||||||
//================
|
//================
|
||||||
uniform sampler2D sampler0;
|
uniform sampler2D sampler0;
|
||||||
varying vec2 v_texcoord0;
|
varying vec2 v_texcoord0;
|
||||||
|
|
||||||
//================
|
//================
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
// Apply colour correction
|
// Apply colour correction
|
||||||
vec3 screen = pow(texture2D(sampler0, v_texcoord0.xy).rgb, vec3(target_gamma));
|
vec3 screen = pow(texture2D(sampler0, v_texcoord0.xy).rgb, vec3(target_gamma));
|
||||||
// screen = clamp(screen, 0.0, 1.0);
|
// screen = clamp(screen, 0.0, 1.0);
|
||||||
screen = pow(
|
screen = pow(
|
||||||
mat3(r, rg, rb,
|
mat3(r, rg, rb,
|
||||||
gr, g, gb,
|
gr, g, gb,
|
||||||
br, bg, b) * screen,
|
br, bg, b) * screen,
|
||||||
vec3(1.0 / display_gamma)
|
vec3(1.0 / display_gamma)
|
||||||
);
|
);
|
||||||
|
|
||||||
gl_FragColor = vec4(screen, 1.0);
|
gl_FragColor = vec4(screen, 1.0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,29 +1,29 @@
|
|||||||
// Advanced Scanlines (CRT) shader, created to use in PPSSPP.
|
// Advanced Scanlines (CRT) shader, created to use in PPSSPP.
|
||||||
|
|
||||||
#ifdef GL_ES
|
#ifdef GL_ES
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
precision mediump int;
|
precision mediump int;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uniform sampler2D sampler0;
|
uniform sampler2D sampler0;
|
||||||
varying vec2 v_texcoord0;
|
varying vec2 v_texcoord0;
|
||||||
|
|
||||||
uniform vec4 u_setting;
|
uniform vec4 u_setting;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
float pos0 = ((v_texcoord0.y + 1.0) * 170.0*u_setting.x);
|
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;
|
float pos1 = cos((fract( pos0 ) - 0.5)*3.1415926*u_setting.y)*1.5;
|
||||||
vec4 rgb = texture2D( sampler0, v_texcoord0 );
|
vec4 rgb = texture2D( sampler0, v_texcoord0 );
|
||||||
|
|
||||||
// slight contrast curve
|
// slight contrast curve
|
||||||
vec4 color = rgb*0.5+0.5*rgb*rgb*1.2;
|
vec4 color = rgb*0.5+0.5*rgb*rgb*1.2;
|
||||||
|
|
||||||
// color tint
|
// color tint
|
||||||
color *= vec4(0.9,1.0,0.7, 0.0);
|
color *= vec4(0.9,1.0,0.7, 0.0);
|
||||||
|
|
||||||
// vignette
|
// vignette
|
||||||
color *= 1.1 - 0.6 * (dot(v_texcoord0 - 0.5, v_texcoord0 - 0.5) * 2.0);
|
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);
|
gl_FragColor.rgba = mix(vec4(0,0,0,0), color, pos1);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,19 +1,19 @@
|
|||||||
// Simple sharpen shader; created to use in PPSSPP
|
// Simple sharpen shader; created to use in PPSSPP
|
||||||
|
|
||||||
#ifdef GL_ES
|
#ifdef GL_ES
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
precision mediump int;
|
precision mediump int;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uniform sampler2D sampler0;
|
uniform sampler2D sampler0;
|
||||||
varying vec2 v_texcoord0;
|
varying vec2 v_texcoord0;
|
||||||
|
|
||||||
uniform vec4 u_setting;
|
uniform vec4 u_setting;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vec3 color = texture2D(sampler0, v_texcoord0.xy).xyz;
|
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;
|
||||||
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;
|
gl_FragColor.rgb = color;
|
||||||
}
|
}
|
||||||
|
|||||||
+279
-279
@@ -1,279 +1,279 @@
|
|||||||
// 4xBRZ shader - Copyright (C) 2014-2016 DeSmuME team (GPL2+)
|
// 4xBRZ shader - Copyright (C) 2014-2016 DeSmuME team (GPL2+)
|
||||||
// Hyllian's xBR-vertex code and texel mapping
|
// Hyllian's xBR-vertex code and texel mapping
|
||||||
// Copyright (C) 2011/2016 Hyllian - sergiogdb@gmail.com
|
// Copyright (C) 2011/2016 Hyllian - sergiogdb@gmail.com
|
||||||
#define BLEND_ALPHA 1
|
#define BLEND_ALPHA 1
|
||||||
#define BLEND_NONE 0
|
#define BLEND_NONE 0
|
||||||
#define BLEND_NORMAL 1
|
#define BLEND_NORMAL 1
|
||||||
#define BLEND_DOMINANT 2
|
#define BLEND_DOMINANT 2
|
||||||
#define LUMINANCE_WEIGHT 1.0
|
#define LUMINANCE_WEIGHT 1.0
|
||||||
#define EQUAL_COLOR_TOLERANCE 30.0/255.0
|
#define EQUAL_COLOR_TOLERANCE 30.0/255.0
|
||||||
#define STEEP_DIRECTION_THRESHOLD 2.2
|
#define STEEP_DIRECTION_THRESHOLD 2.2
|
||||||
#define DOMINANT_DIRECTION_THRESHOLD 3.6
|
#define DOMINANT_DIRECTION_THRESHOLD 3.6
|
||||||
|
|
||||||
float reduce(vec4 color) {
|
float reduce(vec4 color) {
|
||||||
return dot(color.rgb, vec3(65536.0, 256.0, 1.0));
|
return dot(color.rgb, vec3(65536.0, 256.0, 1.0));
|
||||||
}
|
}
|
||||||
|
|
||||||
float DistYCbCr(vec4 pixA, vec4 pixB) {
|
float DistYCbCr(vec4 pixA, vec4 pixB) {
|
||||||
// https://en.wikipedia.org/wiki/YCbCr#ITU-R_BT.2020_conversion
|
// https://en.wikipedia.org/wiki/YCbCr#ITU-R_BT.2020_conversion
|
||||||
const vec3 K = vec3(0.2627, 0.6780, 0.0593);
|
const vec3 K = vec3(0.2627, 0.6780, 0.0593);
|
||||||
const mat3 MATRIX = mat3(K,
|
const mat3 MATRIX = mat3(K,
|
||||||
-.5 * K.r / (1.0 - K.b), -.5 * K.g / (1.0 - K.b), .5,
|
-.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));
|
.5, -.5 * K.g / (1.0 - K.r), -.5 * K.b / (1.0 - K.r));
|
||||||
vec4 diff = pixA - pixB;
|
vec4 diff = pixA - pixB;
|
||||||
vec3 YCbCr = diff.rgb * MATRIX;
|
vec3 YCbCr = diff.rgb * MATRIX;
|
||||||
YCbCr.x *= LUMINANCE_WEIGHT;
|
YCbCr.x *= LUMINANCE_WEIGHT;
|
||||||
float d = length(YCbCr);
|
float d = length(YCbCr);
|
||||||
return sqrt(pixA.a * pixB.a * d * d + diff.a * diff.a);
|
return sqrt(pixA.a * pixB.a * d * d + diff.a * diff.a);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsPixEqual(const vec4 pixA, const vec4 pixB) {
|
bool IsPixEqual(const vec4 pixA, const vec4 pixB) {
|
||||||
return (DistYCbCr(pixA, pixB) < EQUAL_COLOR_TOLERANCE);
|
return (DistYCbCr(pixA, pixB) < EQUAL_COLOR_TOLERANCE);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsBlendingNeeded(const ivec4 blend) {
|
bool IsBlendingNeeded(const ivec4 blend) {
|
||||||
ivec4 diff = blend - ivec4(BLEND_NONE);
|
ivec4 diff = blend - ivec4(BLEND_NONE);
|
||||||
return diff.x != 0 || diff.y != 0 || diff.z != 0 || diff.w != 0;
|
return diff.x != 0 || diff.y != 0 || diff.z != 0 || diff.w != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
vec4 applyScalingf(uvec2 origxy, uvec2 xy) {
|
vec4 applyScalingf(uvec2 origxy, uvec2 xy) {
|
||||||
float dx = 1.0 / params.width;
|
float dx = 1.0 / params.width;
|
||||||
float dy = 1.0 / params.height;
|
float dy = 1.0 / params.height;
|
||||||
|
|
||||||
// A1 B1 C1
|
// A1 B1 C1
|
||||||
// A0 A B C C4
|
// A0 A B C C4
|
||||||
// D0 D E F F4
|
// D0 D E F F4
|
||||||
// G0 G H I I4
|
// G0 G H I I4
|
||||||
// G5 H5 I5
|
// G5 H5 I5
|
||||||
|
|
||||||
uvec4 t1 = uvec4(origxy.x - 1, origxy.x, origxy.x + 1, origxy.y - 2); // A1 B1 C1
|
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 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 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 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 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 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
|
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)));
|
vec2 f = fract(vec2(float(xy.x) / float(params.scale), float(xy.y) / float(params.scale)));
|
||||||
|
|
||||||
//---------------------------------------
|
//---------------------------------------
|
||||||
// Input Pixel Mapping: |21|22|23|
|
// Input Pixel Mapping: |21|22|23|
|
||||||
// 19|06|07|08|09
|
// 19|06|07|08|09
|
||||||
// 18|05|00|01|10
|
// 18|05|00|01|10
|
||||||
// 17|04|03|02|11
|
// 17|04|03|02|11
|
||||||
// |15|14|13|
|
// |15|14|13|
|
||||||
|
|
||||||
vec4 src[25];
|
vec4 src[25];
|
||||||
|
|
||||||
src[21] = readColorf(t1.xw);
|
src[21] = readColorf(t1.xw);
|
||||||
src[22] = readColorf(t1.yw);
|
src[22] = readColorf(t1.yw);
|
||||||
src[23] = readColorf(t1.zw);
|
src[23] = readColorf(t1.zw);
|
||||||
src[ 6] = readColorf(t2.xw);
|
src[ 6] = readColorf(t2.xw);
|
||||||
src[ 7] = readColorf(t2.yw);
|
src[ 7] = readColorf(t2.yw);
|
||||||
src[ 8] = readColorf(t2.zw);
|
src[ 8] = readColorf(t2.zw);
|
||||||
src[ 5] = readColorf(t3.xw);
|
src[ 5] = readColorf(t3.xw);
|
||||||
src[ 0] = readColorf(t3.yw);
|
src[ 0] = readColorf(t3.yw);
|
||||||
src[ 1] = readColorf(t3.zw);
|
src[ 1] = readColorf(t3.zw);
|
||||||
src[ 4] = readColorf(t4.xw);
|
src[ 4] = readColorf(t4.xw);
|
||||||
src[ 3] = readColorf(t4.yw);
|
src[ 3] = readColorf(t4.yw);
|
||||||
src[ 2] = readColorf(t4.zw);
|
src[ 2] = readColorf(t4.zw);
|
||||||
src[15] = readColorf(t5.xw);
|
src[15] = readColorf(t5.xw);
|
||||||
src[14] = readColorf(t5.yw);
|
src[14] = readColorf(t5.yw);
|
||||||
src[13] = readColorf(t5.zw);
|
src[13] = readColorf(t5.zw);
|
||||||
src[19] = readColorf(t6.xy);
|
src[19] = readColorf(t6.xy);
|
||||||
src[18] = readColorf(t6.xz);
|
src[18] = readColorf(t6.xz);
|
||||||
src[17] = readColorf(t6.xw);
|
src[17] = readColorf(t6.xw);
|
||||||
src[ 9] = readColorf(t7.xy);
|
src[ 9] = readColorf(t7.xy);
|
||||||
src[10] = readColorf(t7.xz);
|
src[10] = readColorf(t7.xz);
|
||||||
src[11] = readColorf(t7.xw);
|
src[11] = readColorf(t7.xw);
|
||||||
|
|
||||||
float v[9];
|
float v[9];
|
||||||
v[0] = reduce(src[0]);
|
v[0] = reduce(src[0]);
|
||||||
v[1] = reduce(src[1]);
|
v[1] = reduce(src[1]);
|
||||||
v[2] = reduce(src[2]);
|
v[2] = reduce(src[2]);
|
||||||
v[3] = reduce(src[3]);
|
v[3] = reduce(src[3]);
|
||||||
v[4] = reduce(src[4]);
|
v[4] = reduce(src[4]);
|
||||||
v[5] = reduce(src[5]);
|
v[5] = reduce(src[5]);
|
||||||
v[6] = reduce(src[6]);
|
v[6] = reduce(src[6]);
|
||||||
v[7] = reduce(src[7]);
|
v[7] = reduce(src[7]);
|
||||||
v[8] = reduce(src[8]);
|
v[8] = reduce(src[8]);
|
||||||
|
|
||||||
ivec4 blendResult = ivec4(BLEND_NONE);
|
ivec4 blendResult = ivec4(BLEND_NONE);
|
||||||
|
|
||||||
// Preprocess corners
|
// Preprocess corners
|
||||||
// Pixel Tap Mapping: --|--|--|--|--
|
// Pixel Tap Mapping: --|--|--|--|--
|
||||||
// --|--|07|08|--
|
// --|--|07|08|--
|
||||||
// --|05|00|01|10
|
// --|05|00|01|10
|
||||||
// --|04|03|02|11
|
// --|04|03|02|11
|
||||||
// --|--|14|13|--
|
// --|--|14|13|--
|
||||||
// Corner (1, 1)
|
// Corner (1, 1)
|
||||||
if ( ((v[0] == v[1] && v[3] == v[2]) || (v[0] == v[3] && v[1] == v[2])) == false) {
|
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_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]));
|
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;
|
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;
|
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: --|--|--|--|--
|
// Pixel Tap Mapping: --|--|--|--|--
|
||||||
// --|06|07|--|--
|
// --|06|07|--|--
|
||||||
// 18|05|00|01|--
|
// 18|05|00|01|--
|
||||||
// 17|04|03|02|--
|
// 17|04|03|02|--
|
||||||
// --|15|14|--|--
|
// --|15|14|--|--
|
||||||
// Corner (0, 1)
|
// Corner (0, 1)
|
||||||
if ( ((v[5] == v[0] && v[4] == v[3]) || (v[5] == v[4] && v[0] == v[3])) == false) {
|
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_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]));
|
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;
|
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;
|
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|--
|
// Pixel Tap Mapping: --|--|22|23|--
|
||||||
// --|06|07|08|09
|
// --|06|07|08|09
|
||||||
// --|05|00|01|10
|
// --|05|00|01|10
|
||||||
// --|--|03|02|--
|
// --|--|03|02|--
|
||||||
// --|--|--|--|--
|
// --|--|--|--|--
|
||||||
// Corner (1, 0)
|
// Corner (1, 0)
|
||||||
if ( ((v[7] == v[8] && v[0] == v[1]) || (v[7] == v[0] && v[8] == v[1])) == false) {
|
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_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]));
|
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;
|
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;
|
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|--|--
|
// Pixel Tap Mapping: --|21|22|--|--
|
||||||
// 19|06|07|08|--
|
// 19|06|07|08|--
|
||||||
// 18|05|00|01|--
|
// 18|05|00|01|--
|
||||||
// --|04|03|--|--
|
// --|04|03|--|--
|
||||||
// --|--|--|--|--
|
// --|--|--|--|--
|
||||||
// Corner (0, 0)
|
// Corner (0, 0)
|
||||||
if ( ((v[6] == v[7] && v[5] == v[0]) || (v[6] == v[5] && v[7] == v[0])) == false) {
|
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_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]));
|
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;
|
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;
|
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];
|
vec4 dst[16];
|
||||||
dst[ 0] = src[0];
|
dst[ 0] = src[0];
|
||||||
dst[ 1] = src[0];
|
dst[ 1] = src[0];
|
||||||
dst[ 2] = src[0];
|
dst[ 2] = src[0];
|
||||||
dst[ 3] = src[0];
|
dst[ 3] = src[0];
|
||||||
dst[ 4] = src[0];
|
dst[ 4] = src[0];
|
||||||
dst[ 5] = src[0];
|
dst[ 5] = src[0];
|
||||||
dst[ 6] = src[0];
|
dst[ 6] = src[0];
|
||||||
dst[ 7] = src[0];
|
dst[ 7] = src[0];
|
||||||
dst[ 8] = src[0];
|
dst[ 8] = src[0];
|
||||||
dst[ 9] = src[0];
|
dst[ 9] = src[0];
|
||||||
dst[10] = src[0];
|
dst[10] = src[0];
|
||||||
dst[11] = src[0];
|
dst[11] = src[0];
|
||||||
dst[12] = src[0];
|
dst[12] = src[0];
|
||||||
dst[13] = src[0];
|
dst[13] = src[0];
|
||||||
dst[14] = src[0];
|
dst[14] = src[0];
|
||||||
dst[15] = src[0];
|
dst[15] = src[0];
|
||||||
|
|
||||||
// Scale pixel
|
// Scale pixel
|
||||||
if (IsBlendingNeeded(blendResult) == true) {
|
if (IsBlendingNeeded(blendResult) == true) {
|
||||||
float dist_01_04 = DistYCbCr(src[1], src[4]);
|
float dist_01_04 = DistYCbCr(src[1], src[4]);
|
||||||
float dist_03_08 = DistYCbCr(src[3], src[8]);
|
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 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 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 needBlend = (blendResult[2] != BLEND_NONE);
|
||||||
bool doLineBlend = ( blendResult[2] >= BLEND_DOMINANT ||
|
bool doLineBlend = ( blendResult[2] >= BLEND_DOMINANT ||
|
||||||
((blendResult[1] != BLEND_NONE && !IsPixEqual(src[0], src[4])) ||
|
((blendResult[1] != BLEND_NONE && !IsPixEqual(src[0], src[4])) ||
|
||||||
(blendResult[3] != BLEND_NONE && !IsPixEqual(src[0], src[8])) ||
|
(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 );
|
(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];
|
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[ 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[ 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[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[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[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[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[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);
|
dst[15] = mix(dst[15], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.25 : 0.00);
|
||||||
|
|
||||||
dist_01_04 = DistYCbCr(src[7], src[2]);
|
dist_01_04 = DistYCbCr(src[7], src[2]);
|
||||||
dist_03_08 = DistYCbCr(src[1], src[6]);
|
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]);
|
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]);
|
haveSteepLine = (STEEP_DIRECTION_THRESHOLD * dist_03_08 <= dist_01_04) && (v[0] != v[6]) && (v[5] != v[6]);
|
||||||
needBlend = (blendResult[1] != BLEND_NONE);
|
needBlend = (blendResult[1] != BLEND_NONE);
|
||||||
doLineBlend = ( blendResult[1] >= BLEND_DOMINANT ||
|
doLineBlend = ( blendResult[1] >= BLEND_DOMINANT ||
|
||||||
!((blendResult[0] != BLEND_NONE && !IsPixEqual(src[0], src[2])) ||
|
!((blendResult[0] != BLEND_NONE && !IsPixEqual(src[0], src[2])) ||
|
||||||
(blendResult[2] != BLEND_NONE && !IsPixEqual(src[0], src[6])) ||
|
(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])) ) );
|
(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];
|
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[ 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[ 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[ 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[ 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[ 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[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[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);
|
dst[12] = mix(dst[12], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.25 : 0.00);
|
||||||
|
|
||||||
dist_01_04 = DistYCbCr(src[5], src[8]);
|
dist_01_04 = DistYCbCr(src[5], src[8]);
|
||||||
dist_03_08 = DistYCbCr(src[7], src[4]);
|
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]);
|
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]);
|
haveSteepLine = (STEEP_DIRECTION_THRESHOLD * dist_03_08 <= dist_01_04) && (v[0] != v[4]) && (v[3] != v[4]);
|
||||||
needBlend = (blendResult[0] != BLEND_NONE);
|
needBlend = (blendResult[0] != BLEND_NONE);
|
||||||
doLineBlend = ( blendResult[0] >= BLEND_DOMINANT ||
|
doLineBlend = ( blendResult[0] >= BLEND_DOMINANT ||
|
||||||
!((blendResult[3] != BLEND_NONE && !IsPixEqual(src[0], src[8])) ||
|
!((blendResult[3] != BLEND_NONE && !IsPixEqual(src[0], src[8])) ||
|
||||||
(blendResult[1] != BLEND_NONE && !IsPixEqual(src[0], src[4])) ||
|
(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])) ) );
|
(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];
|
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[ 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[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[ 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[ 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[ 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[ 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[ 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);
|
dst[ 9] = mix(dst[ 9], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.25 : 0.00);
|
||||||
|
|
||||||
dist_01_04 = DistYCbCr(src[3], src[6]);
|
dist_01_04 = DistYCbCr(src[3], src[6]);
|
||||||
dist_03_08 = DistYCbCr(src[5], src[2]);
|
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]);
|
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]);
|
haveSteepLine = (STEEP_DIRECTION_THRESHOLD * dist_03_08 <= dist_01_04) && (v[0] != v[2]) && (v[1] != v[2]);
|
||||||
needBlend = (blendResult[3] != BLEND_NONE);
|
needBlend = (blendResult[3] != BLEND_NONE);
|
||||||
doLineBlend = ( blendResult[3] >= BLEND_DOMINANT ||
|
doLineBlend = ( blendResult[3] >= BLEND_DOMINANT ||
|
||||||
!((blendResult[2] != BLEND_NONE && !IsPixEqual(src[0], src[6])) ||
|
!((blendResult[2] != BLEND_NONE && !IsPixEqual(src[0], src[6])) ||
|
||||||
(blendResult[0] != BLEND_NONE && !IsPixEqual(src[0], src[2])) ||
|
(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])) ) );
|
(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];
|
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[ 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[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[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[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[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[ 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[ 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);
|
dst[ 6] = mix(dst[ 6], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.25 : 0.00);
|
||||||
}
|
}
|
||||||
|
|
||||||
// select output pixel
|
// select output pixel
|
||||||
vec4 res = mix(mix(mix(mix(dst[ 6], dst[ 7], step(0.25, f.x)),
|
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)),
|
mix(dst[ 8], dst[ 9], step(0.75, f.x)),
|
||||||
step(0.50, f.x)),
|
step(0.50, f.x)),
|
||||||
mix(mix(dst[ 5], dst[ 0], step(0.25, f.x)),
|
mix(mix(dst[ 5], dst[ 0], step(0.25, f.x)),
|
||||||
mix(dst[ 1], dst[10], step(0.75, f.x)),
|
mix(dst[ 1], dst[10], step(0.75, f.x)),
|
||||||
step(0.50, f.x)),
|
step(0.50, f.x)),
|
||||||
step(0.25, f.y)),
|
step(0.25, f.y)),
|
||||||
mix(mix(mix(dst[ 4], dst[ 3], step(0.25, f.x)),
|
mix(mix(mix(dst[ 4], dst[ 3], step(0.25, f.x)),
|
||||||
mix(dst[ 2], dst[11], step(0.75, f.x)),
|
mix(dst[ 2], dst[11], step(0.75, f.x)),
|
||||||
step(0.50, f.x)),
|
step(0.50, f.x)),
|
||||||
mix(mix(dst[15], dst[14], step(0.25, f.x)),
|
mix(mix(dst[15], dst[14], step(0.25, f.x)),
|
||||||
mix(dst[13], dst[12], step(0.75, f.x)),
|
mix(dst[13], dst[12], step(0.75, f.x)),
|
||||||
step(0.50, f.x)),
|
step(0.50, f.x)),
|
||||||
step(0.75, f.y)),
|
step(0.75, f.y)),
|
||||||
step(0.50, f.y));
|
step(0.50, f.y));
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint applyScalingu(uvec2 origxy, uvec2 xy) {
|
uint applyScalingu(uvec2 origxy, uvec2 xy) {
|
||||||
return packUnorm4x8(applyScalingf(origxy, xy));
|
return packUnorm4x8(applyScalingf(origxy, xy));
|
||||||
}
|
}
|
||||||
|
|||||||
+117
-117
@@ -1,117 +1,117 @@
|
|||||||
/* MMPX.glc
|
/* MMPX.glc
|
||||||
Copyright 2020 Morgan McGuire & Mara Gagiu.
|
Copyright 2020 Morgan McGuire & Mara Gagiu.
|
||||||
Provided under the Open Source MIT license https://opensource.org/licenses/MIT
|
Provided under the Open Source MIT license https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
See js-demo.html for the commented source code.
|
See js-demo.html for the commented source code.
|
||||||
This is an optimized GLSL port of that version
|
This is an optimized GLSL port of that version
|
||||||
by Morgan McGuire and Mara Gagiu.
|
by Morgan McGuire and Mara Gagiu.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define ABGR8 uint
|
#define ABGR8 uint
|
||||||
|
|
||||||
ABGR8 src(int x, int y) {
|
ABGR8 src(int x, int y) {
|
||||||
return readColoru(uvec2(clamp(x, 0, params.width - 1), clamp(y, 0, params.height - 1)));
|
return readColoru(uvec2(clamp(x, 0, params.width - 1), clamp(y, 0, params.height - 1)));
|
||||||
}
|
}
|
||||||
|
|
||||||
uint luma(ABGR8 C) {
|
uint luma(ABGR8 C) {
|
||||||
uint alpha = (C & 0xFF000000u) >> 24;
|
uint alpha = (C & 0xFF000000u) >> 24;
|
||||||
return (((C & 0x00FF0000u) >> 16) + ((C & 0x0000FF00u) >> 8) + (C & 0x000000FFu) + 1u) * (256u - alpha);
|
return (((C & 0x00FF0000u) >> 16) + ((C & 0x0000FF00u) >> 8) + (C & 0x000000FFu) + 1u) * (256u - alpha);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool all_eq2(ABGR8 B, ABGR8 A0, ABGR8 A1) {
|
bool all_eq2(ABGR8 B, ABGR8 A0, ABGR8 A1) {
|
||||||
return ((B ^ A0) | (B ^ A1)) == 0u;
|
return ((B ^ A0) | (B ^ A1)) == 0u;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool all_eq3(ABGR8 B, ABGR8 A0, ABGR8 A1, ABGR8 A2) {
|
bool all_eq3(ABGR8 B, ABGR8 A0, ABGR8 A1, ABGR8 A2) {
|
||||||
return ((B ^ A0) | (B ^ A1) | (B ^ A2)) == 0u;
|
return ((B ^ A0) | (B ^ A1) | (B ^ A2)) == 0u;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool all_eq4(ABGR8 B, ABGR8 A0, ABGR8 A1, ABGR8 A2, ABGR8 A3) {
|
bool all_eq4(ABGR8 B, ABGR8 A0, ABGR8 A1, ABGR8 A2, ABGR8 A3) {
|
||||||
return ((B ^ A0) | (B ^ A1) | (B ^ A2) | (B ^ A3)) == 0u;
|
return ((B ^ A0) | (B ^ A1) | (B ^ A2) | (B ^ A3)) == 0u;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool any_eq3(ABGR8 B, ABGR8 A0, ABGR8 A1, ABGR8 A2) {
|
bool any_eq3(ABGR8 B, ABGR8 A0, ABGR8 A1, ABGR8 A2) {
|
||||||
return B == A0 || B == A1 || B == A2;
|
return B == A0 || B == A1 || B == A2;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool none_eq2(ABGR8 B, ABGR8 A0, ABGR8 A1) {
|
bool none_eq2(ABGR8 B, ABGR8 A0, ABGR8 A1) {
|
||||||
return (B != A0) && (B != A1);
|
return (B != A0) && (B != A1);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool none_eq4(ABGR8 B, ABGR8 A0, ABGR8 A1, ABGR8 A2, ABGR8 A3) {
|
bool none_eq4(ABGR8 B, ABGR8 A0, ABGR8 A1, ABGR8 A2, ABGR8 A3) {
|
||||||
return B != A0 && B != A1 && B != A2 && B != A3;
|
return B != A0 && B != A1 && B != A2 && B != A3;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint applyScalingu(uvec2 origxy, uvec2 xy) {
|
uint applyScalingu(uvec2 origxy, uvec2 xy) {
|
||||||
int srcX = int(origxy.x);
|
int srcX = int(origxy.x);
|
||||||
int srcY = int(origxy.y);
|
int srcY = int(origxy.y);
|
||||||
|
|
||||||
ABGR8 A = src(srcX - 1, srcY - 1), B = src(srcX, srcY - 1), C = src(srcX + 1, srcY - 1);
|
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 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 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;
|
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) {
|
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 P = src(srcX, srcY - 2), S = src(srcX, srcY + 2);
|
||||||
ABGR8 Q = src(srcX - 2, srcY), R = src(srcX + 2, srcY);
|
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);
|
ABGR8 Bl = luma(B), Dl = luma(D), El = luma(E), Fl = luma(F), Hl = luma(H);
|
||||||
|
|
||||||
// 1:1 slope rules
|
// 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 ((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 ((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 ((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;
|
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
|
// 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 != 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 != 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 != 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 ((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 (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 (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 (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;
|
if (Dl < El && all_eq4(E, C, F, I, R) && none_eq4(E, B, A, G, H)) J = L = D;
|
||||||
|
|
||||||
// 2:1 slope rules
|
// 2:1 slope rules
|
||||||
if (H != B) {
|
if (H != B) {
|
||||||
if (H != A && H != E && H != C) {
|
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, 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 (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 (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, 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;
|
if (all_eq3(B, C, D, Q) && none_eq2(B, F, src(srcX - 2, srcY + 1))) K = J;
|
||||||
}
|
}
|
||||||
} // H !== B
|
} // H !== B
|
||||||
|
|
||||||
if (F != D) {
|
if (F != D) {
|
||||||
if (D != I && D != E && D != C) {
|
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, 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 (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 (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, 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;
|
if (all_eq3(F, I, B, P) && none_eq2(F, H, src(srcX - 1, srcY - 2))) M = K;
|
||||||
}
|
}
|
||||||
} // F !== D
|
} // F !== D
|
||||||
} // not constant
|
} // not constant
|
||||||
|
|
||||||
// TODO: Write four pixels at once. For now, 1/4x speed.
|
// TODO: Write four pixels at once. For now, 1/4x speed.
|
||||||
if ((xy.y & 1u) == 0u) {
|
if ((xy.y & 1u) == 0u) {
|
||||||
if ((xy.x & 1u) == 0u) {
|
if ((xy.x & 1u) == 0u) {
|
||||||
return J;
|
return J;
|
||||||
}
|
}
|
||||||
return K;
|
return K;
|
||||||
}
|
}
|
||||||
if ((xy.x & 1u) == 0u) {
|
if ((xy.x & 1u) == 0u) {
|
||||||
return L;
|
return L;
|
||||||
}
|
}
|
||||||
return M;
|
return M;
|
||||||
}
|
}
|
||||||
|
|
||||||
vec4 applyScalingf(uvec2 origxy, uvec2 xy) {
|
vec4 applyScalingf(uvec2 origxy, uvec2 xy) {
|
||||||
return unpackUnorm4x8(applyScalingu(origxy, xy));
|
return unpackUnorm4x8(applyScalingu(origxy, xy));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,120 +1,120 @@
|
|||||||
// Spline36 upscaling shader.
|
// Spline36 upscaling shader.
|
||||||
// See issue #3921
|
// See issue #3921
|
||||||
|
|
||||||
#ifdef GL_ES
|
#ifdef GL_ES
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
precision mediump int;
|
precision mediump int;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uniform sampler2D sampler0;
|
uniform sampler2D sampler0;
|
||||||
varying vec2 v_position;
|
varying vec2 v_position;
|
||||||
|
|
||||||
uniform vec2 u_texelDelta;
|
uniform vec2 u_texelDelta;
|
||||||
uniform vec2 u_pixelDelta;
|
uniform vec2 u_pixelDelta;
|
||||||
|
|
||||||
const vec2 HALF_PIXEL = vec2(0.5, 0.5);
|
const vec2 HALF_PIXEL = vec2(0.5, 0.5);
|
||||||
|
|
||||||
float spline36_0_1(float x) {
|
float spline36_0_1(float x) {
|
||||||
return ((13.0 / 11.0 * x - 453.0 / 209.0) * x - 3.0 / 209.0) * x + 1.0;
|
return ((13.0 / 11.0 * x - 453.0 / 209.0) * x - 3.0 / 209.0) * x + 1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
float spline36_1_2(float x) {
|
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;
|
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) {
|
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;
|
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) {
|
vec4 rgb(int inputX, int inputY) {
|
||||||
return texture2D(sampler0, (vec2(inputX, inputY) + HALF_PIXEL) * u_texelDelta);
|
return texture2D(sampler0, (vec2(inputX, inputY) + HALF_PIXEL) * u_texelDelta);
|
||||||
}
|
}
|
||||||
|
|
||||||
vec4 interpolateHorizontally(vec2 inputPos, ivec2 inputPosFloor, int dy) {
|
vec4 interpolateHorizontally(vec2 inputPos, ivec2 inputPosFloor, int dy) {
|
||||||
float sumOfWeights = 0.0;
|
float sumOfWeights = 0.0;
|
||||||
vec4 sumOfWeightedPixel = vec4(0.0);
|
vec4 sumOfWeightedPixel = vec4(0.0);
|
||||||
|
|
||||||
float x;
|
float x;
|
||||||
float weight;
|
float weight;
|
||||||
|
|
||||||
x = inputPos.x - float(inputPosFloor.x - 2);
|
x = inputPos.x - float(inputPosFloor.x - 2);
|
||||||
weight = spline36_2_3(x);
|
weight = spline36_2_3(x);
|
||||||
sumOfWeights += weight;
|
sumOfWeights += weight;
|
||||||
sumOfWeightedPixel += weight * rgb(inputPosFloor.x - 2, inputPosFloor.y + dy);
|
sumOfWeightedPixel += weight * rgb(inputPosFloor.x - 2, inputPosFloor.y + dy);
|
||||||
|
|
||||||
--x;
|
--x;
|
||||||
weight = spline36_1_2(x);
|
weight = spline36_1_2(x);
|
||||||
sumOfWeights += weight;
|
sumOfWeights += weight;
|
||||||
sumOfWeightedPixel += weight * rgb(inputPosFloor.x - 1, inputPosFloor.y + dy);
|
sumOfWeightedPixel += weight * rgb(inputPosFloor.x - 1, inputPosFloor.y + dy);
|
||||||
|
|
||||||
--x;
|
--x;
|
||||||
weight = spline36_0_1(x);
|
weight = spline36_0_1(x);
|
||||||
sumOfWeights += weight;
|
sumOfWeights += weight;
|
||||||
sumOfWeightedPixel += weight * rgb(inputPosFloor.x + 0, inputPosFloor.y + dy);
|
sumOfWeightedPixel += weight * rgb(inputPosFloor.x + 0, inputPosFloor.y + dy);
|
||||||
|
|
||||||
x = 1.0 - x;
|
x = 1.0 - x;
|
||||||
weight = spline36_0_1(x);
|
weight = spline36_0_1(x);
|
||||||
sumOfWeights += weight;
|
sumOfWeights += weight;
|
||||||
sumOfWeightedPixel += weight * rgb(inputPosFloor.x + 1, inputPosFloor.y + dy);
|
sumOfWeightedPixel += weight * rgb(inputPosFloor.x + 1, inputPosFloor.y + dy);
|
||||||
|
|
||||||
++x;
|
++x;
|
||||||
weight = spline36_1_2(x);
|
weight = spline36_1_2(x);
|
||||||
sumOfWeights += weight;
|
sumOfWeights += weight;
|
||||||
sumOfWeightedPixel += weight * rgb(inputPosFloor.x + 2, inputPosFloor.y + dy);
|
sumOfWeightedPixel += weight * rgb(inputPosFloor.x + 2, inputPosFloor.y + dy);
|
||||||
|
|
||||||
++x;
|
++x;
|
||||||
weight = spline36_2_3(x);
|
weight = spline36_2_3(x);
|
||||||
sumOfWeights += weight;
|
sumOfWeights += weight;
|
||||||
sumOfWeightedPixel += weight * rgb(inputPosFloor.x + 3, inputPosFloor.y + dy);
|
sumOfWeightedPixel += weight * rgb(inputPosFloor.x + 3, inputPosFloor.y + dy);
|
||||||
|
|
||||||
return sumOfWeightedPixel / sumOfWeights;
|
return sumOfWeightedPixel / sumOfWeights;
|
||||||
}
|
}
|
||||||
|
|
||||||
vec4 process(vec2 outputPos) {
|
vec4 process(vec2 outputPos) {
|
||||||
vec2 inputPos = outputPos / u_texelDelta;
|
vec2 inputPos = outputPos / u_texelDelta;
|
||||||
ivec2 inputPosFloor = ivec2(inputPos);
|
ivec2 inputPosFloor = ivec2(inputPos);
|
||||||
|
|
||||||
// Vertical interporation
|
// Vertical interporation
|
||||||
float sumOfWeights = 0.0;
|
float sumOfWeights = 0.0;
|
||||||
vec4 sumOfWeightedPixel = vec4(0.0);
|
vec4 sumOfWeightedPixel = vec4(0.0);
|
||||||
|
|
||||||
float weight;
|
float weight;
|
||||||
float y;
|
float y;
|
||||||
|
|
||||||
y = inputPos.y - float(inputPosFloor.y - 2);
|
y = inputPos.y - float(inputPosFloor.y - 2);
|
||||||
weight = spline36_2_3(y);
|
weight = spline36_2_3(y);
|
||||||
sumOfWeights += weight;
|
sumOfWeights += weight;
|
||||||
sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, -2);
|
sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, -2);
|
||||||
|
|
||||||
--y;
|
--y;
|
||||||
weight = spline36_1_2(y);
|
weight = spline36_1_2(y);
|
||||||
sumOfWeights += weight;
|
sumOfWeights += weight;
|
||||||
sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, -1);
|
sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, -1);
|
||||||
|
|
||||||
--y;
|
--y;
|
||||||
weight = spline36_0_1(y);
|
weight = spline36_0_1(y);
|
||||||
sumOfWeights += weight;
|
sumOfWeights += weight;
|
||||||
sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, +0);
|
sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, +0);
|
||||||
|
|
||||||
y = 1.0 - y;
|
y = 1.0 - y;
|
||||||
weight = spline36_0_1(y);
|
weight = spline36_0_1(y);
|
||||||
sumOfWeights += weight;
|
sumOfWeights += weight;
|
||||||
sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, +1);
|
sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, +1);
|
||||||
|
|
||||||
++y;
|
++y;
|
||||||
weight = spline36_1_2(y);
|
weight = spline36_1_2(y);
|
||||||
sumOfWeights += weight;
|
sumOfWeights += weight;
|
||||||
sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, +2);
|
sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, +2);
|
||||||
|
|
||||||
++y;
|
++y;
|
||||||
weight = spline36_2_3(y);
|
weight = spline36_2_3(y);
|
||||||
sumOfWeights += weight;
|
sumOfWeights += weight;
|
||||||
sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, +3);
|
sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, +3);
|
||||||
|
|
||||||
return vec4((sumOfWeightedPixel / sumOfWeights).xyz, 1.0);
|
return vec4((sumOfWeightedPixel / sumOfWeights).xyz, 1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
gl_FragColor.rgba = process(v_position);
|
gl_FragColor.rgba = process(v_position);
|
||||||
}
|
}
|
||||||
@@ -1,16 +1,16 @@
|
|||||||
#ifdef GL_ES
|
#ifdef GL_ES
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
precision mediump int;
|
precision mediump int;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
attribute vec4 a_position;
|
attribute vec4 a_position;
|
||||||
attribute vec2 a_texcoord0;
|
attribute vec2 a_texcoord0;
|
||||||
|
|
||||||
varying vec2 v_position;
|
varying vec2 v_position;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
gl_Position = a_position;
|
gl_Position = a_position;
|
||||||
|
|
||||||
v_position = a_texcoord0;
|
v_position = a_texcoord0;
|
||||||
}
|
}
|
||||||
|
|||||||
+201
-201
@@ -1,201 +1,201 @@
|
|||||||
/*
|
/*
|
||||||
AA shader 4.o / AA shader 4.o - filtro
|
AA shader 4.o / AA shader 4.o - filtro
|
||||||
|
|
||||||
Copyright (C) 2014 guest(r) - guest.r@gmail.com
|
Copyright (C) 2014 guest(r) - guest.r@gmail.com
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or
|
This program is free software; you can redistribute it and/or
|
||||||
modify it under the terms of the GNU General Public License
|
modify it under the terms of the GNU General Public License
|
||||||
as published by the Free Software Foundation; either version 2
|
as published by the Free Software Foundation; either version 2
|
||||||
of the License, or (at your option) any later version.
|
of the License, or (at your option) any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
GNU General Public License for more details.
|
GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
// Modified as video aware smoothing effect for PPSSPP.
|
// 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.
|
// 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.
|
// Also auto translation fails with bool uniform, which is why u_video is defined as float.
|
||||||
|
|
||||||
#ifdef GL_ES
|
#ifdef GL_ES
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
precision mediump int;
|
precision mediump int;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uniform sampler2D sampler0;
|
uniform sampler2D sampler0;
|
||||||
uniform float u_video;
|
uniform float u_video;
|
||||||
|
|
||||||
|
|
||||||
//===========
|
//===========
|
||||||
varying vec2 v_texcoord0;
|
varying vec2 v_texcoord0;
|
||||||
|
|
||||||
const vec3 dt = vec3(1.0,1.0,1.0);
|
const vec3 dt = vec3(1.0,1.0,1.0);
|
||||||
|
|
||||||
vec3 texture2d (vec2 texcoord) {
|
vec3 texture2d (vec2 texcoord) {
|
||||||
|
|
||||||
float scale = 1.0;
|
float scale = 1.0;
|
||||||
if (u_video==1.0){
|
if (u_video==1.0){
|
||||||
scale = 2.0;
|
scale = 2.0;
|
||||||
} else {
|
} else {
|
||||||
scale = 7.0;
|
scale = 7.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
vec4 yx = vec4(1.0/480.0,1.0/272.0,-1.0/480.0,-1.0/272.0)/scale;
|
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;
|
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 s00 = texture2D(sampler0, texcoord + yx.zw).xyz;
|
||||||
vec3 s20 = texture2D(sampler0, texcoord + yx.xw).xyz;
|
vec3 s20 = texture2D(sampler0, texcoord + yx.xw).xyz;
|
||||||
vec3 s22 = texture2D(sampler0, texcoord + yx.xy).xyz;
|
vec3 s22 = texture2D(sampler0, texcoord + yx.xy).xyz;
|
||||||
vec3 s02 = texture2D(sampler0, texcoord + yx.zy).xyz;
|
vec3 s02 = texture2D(sampler0, texcoord + yx.zy).xyz;
|
||||||
|
|
||||||
float m1=dot(abs(s00-s22),dt)+0.001;
|
float m1=dot(abs(s00-s22),dt)+0.001;
|
||||||
float m2=dot(abs(s02-s20),dt)+0.001;
|
float m2=dot(abs(s02-s20),dt)+0.001;
|
||||||
|
|
||||||
return 0.5*(m2*(s00+s22)+m1*(s02+s20))/(m1+m2);
|
return 0.5*(m2*(s00+s22)+m1*(s02+s20))/(m1+m2);
|
||||||
}
|
}
|
||||||
vec3 texture2dd (vec2 texcoord) {
|
vec3 texture2dd (vec2 texcoord) {
|
||||||
|
|
||||||
float scale = 1.0;
|
float scale = 1.0;
|
||||||
if (u_video==1.0){
|
if (u_video==1.0){
|
||||||
scale = 2.0;
|
scale = 2.0;
|
||||||
} else {
|
} else {
|
||||||
scale = 7.0;
|
scale = 7.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
vec4 yx = vec4(1.0/480.0,1.0/272.0,-1.0/480.0,-1.0/272.0)/scale;
|
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;
|
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 c11 = texture2D(sampler0, texcoord ).xyz;
|
||||||
vec3 c00 = texture2D(sampler0, texcoord + xy.zw).xyz;
|
vec3 c00 = texture2D(sampler0, texcoord + xy.zw).xyz;
|
||||||
vec3 c20 = texture2D(sampler0, texcoord + xy.xw).xyz;
|
vec3 c20 = texture2D(sampler0, texcoord + xy.xw).xyz;
|
||||||
vec3 c22 = texture2D(sampler0, texcoord + xy.xy).xyz;
|
vec3 c22 = texture2D(sampler0, texcoord + xy.xy).xyz;
|
||||||
vec3 c02 = texture2D(sampler0, texcoord + xy.zy).xyz;
|
vec3 c02 = texture2D(sampler0, texcoord + xy.zy).xyz;
|
||||||
vec3 s00 = texture2D(sampler0, texcoord + yx.zw).xyz;
|
vec3 s00 = texture2D(sampler0, texcoord + yx.zw).xyz;
|
||||||
vec3 s20 = texture2D(sampler0, texcoord + yx.xw).xyz;
|
vec3 s20 = texture2D(sampler0, texcoord + yx.xw).xyz;
|
||||||
vec3 s22 = texture2D(sampler0, texcoord + yx.xy).xyz;
|
vec3 s22 = texture2D(sampler0, texcoord + yx.xy).xyz;
|
||||||
vec3 s02 = texture2D(sampler0, texcoord + yx.zy).xyz;
|
vec3 s02 = texture2D(sampler0, texcoord + yx.zy).xyz;
|
||||||
|
|
||||||
float d1=dot(abs(c00-c22),dt)+0.001;
|
float d1=dot(abs(c00-c22),dt)+0.001;
|
||||||
float d2=dot(abs(c20-c02),dt)+0.001;
|
float d2=dot(abs(c20-c02),dt)+0.001;
|
||||||
float m1=dot(abs(s00-s22),dt)+0.001;
|
float m1=dot(abs(s00-s22),dt)+0.001;
|
||||||
float m2=dot(abs(s02-s20),dt)+0.001;
|
float m2=dot(abs(s02-s20),dt)+0.001;
|
||||||
|
|
||||||
vec3 t2=(d1*(c20+c02)+d2*(c00+c22))/(2.0*(d1+d2));
|
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));
|
return 0.25*(c11+t2+(m2*(s00+s22)+m1*(s02+s20))/(m1+m2));
|
||||||
}
|
}
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
|
|
||||||
float scale = 7.0;
|
float scale = 7.0;
|
||||||
bool filtro = false;
|
bool filtro = false;
|
||||||
|
|
||||||
if (u_video==1.0){
|
if (u_video==1.0){
|
||||||
scale = 2.0;
|
scale = 2.0;
|
||||||
filtro = true;
|
filtro = true;
|
||||||
} else {
|
} else {
|
||||||
scale = 7.0;
|
scale = 7.0;
|
||||||
filtro = false;
|
filtro = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calculating texel coordinates
|
// Calculating texel coordinates
|
||||||
|
|
||||||
vec2 size = vec2(480.0,272.0)*scale;
|
vec2 size = vec2(480.0,272.0)*scale;
|
||||||
vec2 inv_size = vec2(1.0/480.0,1.0/272.0)/scale;
|
vec2 inv_size = vec2(1.0/480.0,1.0/272.0)/scale;
|
||||||
|
|
||||||
vec2 OGL2Pos = v_texcoord0 * size;
|
vec2 OGL2Pos = v_texcoord0 * size;
|
||||||
vec2 fp = fract(OGL2Pos);
|
vec2 fp = fract(OGL2Pos);
|
||||||
vec2 dx = vec2(inv_size.x,0.0);
|
vec2 dx = vec2(inv_size.x,0.0);
|
||||||
vec2 dy = vec2(0.0, inv_size.y);
|
vec2 dy = vec2(0.0, inv_size.y);
|
||||||
vec2 g1 = vec2(inv_size.x,inv_size.y);
|
vec2 g1 = vec2(inv_size.x,inv_size.y);
|
||||||
vec2 g2 = 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;
|
vec2 pC4 = floor(OGL2Pos) * inv_size + 0.5*inv_size;
|
||||||
|
|
||||||
// Reading the texels
|
// Reading the texels
|
||||||
vec3 C0 = texture2d(pC4 - g1);
|
vec3 C0 = texture2d(pC4 - g1);
|
||||||
vec3 C1 = texture2d(pC4 - dy);
|
vec3 C1 = texture2d(pC4 - dy);
|
||||||
vec3 C2 = texture2d(pC4 - g2);
|
vec3 C2 = texture2d(pC4 - g2);
|
||||||
vec3 C3 = texture2d(pC4 - dx);
|
vec3 C3 = texture2d(pC4 - dx);
|
||||||
vec3 C4 = texture2d(pC4 );
|
vec3 C4 = texture2d(pC4 );
|
||||||
vec3 C5 = texture2d(pC4 + dx);
|
vec3 C5 = texture2d(pC4 + dx);
|
||||||
vec3 C6 = texture2d(pC4 + g2);
|
vec3 C6 = texture2d(pC4 + g2);
|
||||||
vec3 C7 = texture2d(pC4 + dy);
|
vec3 C7 = texture2d(pC4 + dy);
|
||||||
vec3 C8 = texture2d(pC4 + g1);
|
vec3 C8 = texture2d(pC4 + g1);
|
||||||
|
|
||||||
vec3 ul, ur, dl, dr;
|
vec3 ul, ur, dl, dr;
|
||||||
float m1, m2;
|
float m1, m2;
|
||||||
|
|
||||||
m1 = dot(abs(C0-C4),dt)+0.001;
|
m1 = dot(abs(C0-C4),dt)+0.001;
|
||||||
m2 = dot(abs(C1-C3),dt)+0.001;
|
m2 = dot(abs(C1-C3),dt)+0.001;
|
||||||
ul = (m2*(C0+C4)+m1*(C1+C3))/(m1+m2);
|
ul = (m2*(C0+C4)+m1*(C1+C3))/(m1+m2);
|
||||||
|
|
||||||
m1 = dot(abs(C1-C5),dt)+0.001;
|
m1 = dot(abs(C1-C5),dt)+0.001;
|
||||||
m2 = dot(abs(C2-C4),dt)+0.001;
|
m2 = dot(abs(C2-C4),dt)+0.001;
|
||||||
ur = (m2*(C1+C5)+m1*(C2+C4))/(m1+m2);
|
ur = (m2*(C1+C5)+m1*(C2+C4))/(m1+m2);
|
||||||
|
|
||||||
m1 = dot(abs(C3-C7),dt)+0.001;
|
m1 = dot(abs(C3-C7),dt)+0.001;
|
||||||
m2 = dot(abs(C6-C4),dt)+0.001;
|
m2 = dot(abs(C6-C4),dt)+0.001;
|
||||||
dl = (m2*(C3+C7)+m1*(C6+C4))/(m1+m2);
|
dl = (m2*(C3+C7)+m1*(C6+C4))/(m1+m2);
|
||||||
|
|
||||||
m1 = dot(abs(C4-C8),dt)+0.001;
|
m1 = dot(abs(C4-C8),dt)+0.001;
|
||||||
m2 = dot(abs(C5-C7),dt)+0.001;
|
m2 = dot(abs(C5-C7),dt)+0.001;
|
||||||
dr = (m2*(C4+C8)+m1*(C5+C7))/(m1+m2);
|
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)));
|
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){
|
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));
|
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;;
|
inv_size = vec2(2.0/480.0,2.0/272.0)/scale;;
|
||||||
|
|
||||||
dx = vec2(inv_size.x,0.0);
|
dx = vec2(inv_size.x,0.0);
|
||||||
dy = vec2(0.0,inv_size.y);
|
dy = vec2(0.0,inv_size.y);
|
||||||
g1 = vec2( inv_size.x,inv_size.y);
|
g1 = vec2( inv_size.x,inv_size.y);
|
||||||
g2 = vec2(-inv_size.x,inv_size.y);
|
g2 = vec2(-inv_size.x,inv_size.y);
|
||||||
pC4 = v_texcoord0;
|
pC4 = v_texcoord0;
|
||||||
|
|
||||||
C0 = texture2dd(pC4-g1);
|
C0 = texture2dd(pC4-g1);
|
||||||
C1 = texture2dd(pC4-dy);
|
C1 = texture2dd(pC4-dy);
|
||||||
C2 = texture2dd(pC4-g2);
|
C2 = texture2dd(pC4-g2);
|
||||||
C3 = texture2dd(pC4-dx);
|
C3 = texture2dd(pC4-dx);
|
||||||
C4 = texture2dd(pC4 );
|
C4 = texture2dd(pC4 );
|
||||||
C5 = texture2dd(pC4+dx);
|
C5 = texture2dd(pC4+dx);
|
||||||
C6 = texture2dd(pC4+g2);
|
C6 = texture2dd(pC4+g2);
|
||||||
C7 = texture2dd(pC4+dy);
|
C7 = texture2dd(pC4+dy);
|
||||||
C8 = texture2dd(pC4+g1);
|
C8 = texture2dd(pC4+g1);
|
||||||
|
|
||||||
vec3 mn1 = min(min(C0,C1),C2);
|
vec3 mn1 = min(min(C0,C1),C2);
|
||||||
vec3 mn2 = min(min(C3,C4),C5);
|
vec3 mn2 = min(min(C3,C4),C5);
|
||||||
vec3 mn3 = min(min(C6,C7),C8);
|
vec3 mn3 = min(min(C6,C7),C8);
|
||||||
vec3 mx1 = max(max(C0,C1),C2);
|
vec3 mx1 = max(max(C0,C1),C2);
|
||||||
vec3 mx2 = max(max(C3,C4),C5);
|
vec3 mx2 = max(max(C3,C4),C5);
|
||||||
vec3 mx3 = max(max(C6,C7),C8);
|
vec3 mx3 = max(max(C6,C7),C8);
|
||||||
|
|
||||||
mn1 = min(min(mn1,mn2),mn3);
|
mn1 = min(min(mn1,mn2),mn3);
|
||||||
mx1 = max(max(mx1,mx2),mx3);
|
mx1 = max(max(mx1,mx2),mx3);
|
||||||
|
|
||||||
vec3 dif1 = abs(c11-mn1) + 0.0001*dt;
|
vec3 dif1 = abs(c11-mn1) + 0.0001*dt;
|
||||||
vec3 dif2 = abs(c11-mx1) + 0.0001*dt;
|
vec3 dif2 = abs(c11-mx1) + 0.0001*dt;
|
||||||
|
|
||||||
float filterparam = 2.0;
|
float filterparam = 2.0;
|
||||||
|
|
||||||
dif1=vec3(pow(dif1.x,filterparam),pow(dif1.y,filterparam),pow(dif1.z,filterparam));
|
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));
|
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.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.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);
|
c11.b = (dif1.z*mx1.z + dif2.z*mn1.z)/(dif1.z + dif2.z);
|
||||||
|
|
||||||
result = c11;
|
result = c11;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
gl_FragColor.xyz=result.xyz;
|
gl_FragColor.xyz=result.xyz;
|
||||||
gl_FragColor.a = 1.0;
|
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.
|
// Simple vignette shader - darker towards the corners like in the unprocessed output of a real camera.
|
||||||
|
|
||||||
#ifdef GL_ES
|
#ifdef GL_ES
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
precision mediump int;
|
precision mediump int;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uniform sampler2D sampler0;
|
uniform sampler2D sampler0;
|
||||||
varying vec2 v_texcoord0;
|
varying vec2 v_texcoord0;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
float vignette = 1.1 - 0.6 * (dot(v_texcoord0 - 0.5, v_texcoord0 - 0.5) * 2.0);
|
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;
|
vec3 rgb = texture2D(sampler0, v_texcoord0.xy).xyz;
|
||||||
gl_FragColor.rgb = vignette * rgb;
|
gl_FragColor.rgb = vignette * rgb;
|
||||||
gl_FragColor.a = 1.0;
|
gl_FragColor.a = 1.0;
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user