mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-02-12 05:56:12 -06:00
PPSSPP : v1.12.2
This commit is contained in:
@@ -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.
@@ -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,
|
||||||
|
|||||||
@@ -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!
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,61 +1,61 @@
|
|||||||
[LangRegionNames]
|
[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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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