Added texture loaded menu and recoded texture_id

This commit is contained in:
KiritoDv 2021-08-23 00:57:09 -05:00
parent 86fa5603f9
commit 84fca27f6a
15 changed files with 1885 additions and 723 deletions

Binary file not shown.

BIN
fonts/Urbanist-Light.ttf Normal file

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,805 @@
// Generated by https://github.com/juliettef/IconFontCppHeaders script GenerateIconFontCppHeaders.py for languages C and C++
// from https://raw.githubusercontent.com/ForkAwesome/Fork-Awesome/master/src/icons/icons.yml
// for use with https://github.com/ForkAwesome/Fork-Awesome/blob/master/fonts/forkawesome-webfont.ttf
#pragma once
#define FONT_ICON_FILE_NAME_FK "forkawesome-webfont.ttf"
#define ICON_MIN_FK 0xf000
#define ICON_MAX_FK 0xf35f
#define ICON_FK_GLASS "\xef\x80\x80" // U+f000
#define ICON_FK_MUSIC "\xef\x80\x81" // U+f001
#define ICON_FK_SEARCH "\xef\x80\x82" // U+f002
#define ICON_FK_ENVELOPE_O "\xef\x80\x83" // U+f003
#define ICON_FK_HEART "\xef\x80\x84" // U+f004
#define ICON_FK_STAR "\xef\x80\x85" // U+f005
#define ICON_FK_STAR_O "\xef\x80\x86" // U+f006
#define ICON_FK_USER "\xef\x80\x87" // U+f007
#define ICON_FK_FILM "\xef\x80\x88" // U+f008
#define ICON_FK_TH_LARGE "\xef\x80\x89" // U+f009
#define ICON_FK_TH "\xef\x80\x8a" // U+f00a
#define ICON_FK_TH_LIST "\xef\x80\x8b" // U+f00b
#define ICON_FK_CHECK "\xef\x80\x8c" // U+f00c
#define ICON_FK_TIMES "\xef\x80\x8d" // U+f00d
#define ICON_FK_SEARCH_PLUS "\xef\x80\x8e" // U+f00e
#define ICON_FK_SEARCH_MINUS "\xef\x80\x90" // U+f010
#define ICON_FK_POWER_OFF "\xef\x80\x91" // U+f011
#define ICON_FK_SIGNAL "\xef\x80\x92" // U+f012
#define ICON_FK_COG "\xef\x80\x93" // U+f013
#define ICON_FK_TRASH_O "\xef\x80\x94" // U+f014
#define ICON_FK_HOME "\xef\x80\x95" // U+f015
#define ICON_FK_FILE_O "\xef\x80\x96" // U+f016
#define ICON_FK_CLOCK_O "\xef\x80\x97" // U+f017
#define ICON_FK_ROAD "\xef\x80\x98" // U+f018
#define ICON_FK_DOWNLOAD "\xef\x80\x99" // U+f019
#define ICON_FK_ARROW_CIRCLE_O_DOWN "\xef\x80\x9a" // U+f01a
#define ICON_FK_ARROW_CIRCLE_O_UP "\xef\x80\x9b" // U+f01b
#define ICON_FK_INBOX "\xef\x80\x9c" // U+f01c
#define ICON_FK_PLAY_CIRCLE_O "\xef\x80\x9d" // U+f01d
#define ICON_FK_REPEAT "\xef\x80\x9e" // U+f01e
#define ICON_FK_REFRESH "\xef\x80\xa1" // U+f021
#define ICON_FK_LIST_ALT "\xef\x80\xa2" // U+f022
#define ICON_FK_LOCK "\xef\x80\xa3" // U+f023
#define ICON_FK_FLAG "\xef\x80\xa4" // U+f024
#define ICON_FK_HEADPHONES "\xef\x80\xa5" // U+f025
#define ICON_FK_VOLUME_OFF "\xef\x80\xa6" // U+f026
#define ICON_FK_VOLUME_DOWN "\xef\x80\xa7" // U+f027
#define ICON_FK_VOLUME_UP "\xef\x80\xa8" // U+f028
#define ICON_FK_QRCODE "\xef\x80\xa9" // U+f029
#define ICON_FK_BARCODE "\xef\x80\xaa" // U+f02a
#define ICON_FK_TAG "\xef\x80\xab" // U+f02b
#define ICON_FK_TAGS "\xef\x80\xac" // U+f02c
#define ICON_FK_BOOK "\xef\x80\xad" // U+f02d
#define ICON_FK_BOOKMARK "\xef\x80\xae" // U+f02e
#define ICON_FK_PRINT "\xef\x80\xaf" // U+f02f
#define ICON_FK_CAMERA "\xef\x80\xb0" // U+f030
#define ICON_FK_FONT "\xef\x80\xb1" // U+f031
#define ICON_FK_BOLD "\xef\x80\xb2" // U+f032
#define ICON_FK_ITALIC "\xef\x80\xb3" // U+f033
#define ICON_FK_TEXT_HEIGHT "\xef\x80\xb4" // U+f034
#define ICON_FK_TEXT_WIDTH "\xef\x80\xb5" // U+f035
#define ICON_FK_ALIGN_LEFT "\xef\x80\xb6" // U+f036
#define ICON_FK_ALIGN_CENTER "\xef\x80\xb7" // U+f037
#define ICON_FK_ALIGN_RIGHT "\xef\x80\xb8" // U+f038
#define ICON_FK_ALIGN_JUSTIFY "\xef\x80\xb9" // U+f039
#define ICON_FK_LIST "\xef\x80\xba" // U+f03a
#define ICON_FK_OUTDENT "\xef\x80\xbb" // U+f03b
#define ICON_FK_INDENT "\xef\x80\xbc" // U+f03c
#define ICON_FK_VIDEO_CAMERA "\xef\x80\xbd" // U+f03d
#define ICON_FK_PICTURE_O "\xef\x80\xbe" // U+f03e
#define ICON_FK_PENCIL "\xef\x81\x80" // U+f040
#define ICON_FK_MAP_MARKER "\xef\x81\x81" // U+f041
#define ICON_FK_ADJUST "\xef\x81\x82" // U+f042
#define ICON_FK_TINT "\xef\x81\x83" // U+f043
#define ICON_FK_PENCIL_SQUARE_O "\xef\x81\x84" // U+f044
#define ICON_FK_SHARE_SQUARE_O "\xef\x81\x85" // U+f045
#define ICON_FK_CHECK_SQUARE_O "\xef\x81\x86" // U+f046
#define ICON_FK_ARROWS "\xef\x81\x87" // U+f047
#define ICON_FK_STEP_BACKWARD "\xef\x81\x88" // U+f048
#define ICON_FK_FAST_BACKWARD "\xef\x81\x89" // U+f049
#define ICON_FK_BACKWARD "\xef\x81\x8a" // U+f04a
#define ICON_FK_PLAY "\xef\x81\x8b" // U+f04b
#define ICON_FK_PAUSE "\xef\x81\x8c" // U+f04c
#define ICON_FK_STOP "\xef\x81\x8d" // U+f04d
#define ICON_FK_FORWARD "\xef\x81\x8e" // U+f04e
#define ICON_FK_FAST_FORWARD "\xef\x81\x90" // U+f050
#define ICON_FK_STEP_FORWARD "\xef\x81\x91" // U+f051
#define ICON_FK_EJECT "\xef\x81\x92" // U+f052
#define ICON_FK_CHEVRON_LEFT "\xef\x81\x93" // U+f053
#define ICON_FK_CHEVRON_RIGHT "\xef\x81\x94" // U+f054
#define ICON_FK_PLUS_CIRCLE "\xef\x81\x95" // U+f055
#define ICON_FK_MINUS_CIRCLE "\xef\x81\x96" // U+f056
#define ICON_FK_TIMES_CIRCLE "\xef\x81\x97" // U+f057
#define ICON_FK_CHECK_CIRCLE "\xef\x81\x98" // U+f058
#define ICON_FK_QUESTION_CIRCLE "\xef\x81\x99" // U+f059
#define ICON_FK_INFO_CIRCLE "\xef\x81\x9a" // U+f05a
#define ICON_FK_CROSSHAIRS "\xef\x81\x9b" // U+f05b
#define ICON_FK_TIMES_CIRCLE_O "\xef\x81\x9c" // U+f05c
#define ICON_FK_CHECK_CIRCLE_O "\xef\x81\x9d" // U+f05d
#define ICON_FK_BAN "\xef\x81\x9e" // U+f05e
#define ICON_FK_ARROW_LEFT "\xef\x81\xa0" // U+f060
#define ICON_FK_ARROW_RIGHT "\xef\x81\xa1" // U+f061
#define ICON_FK_ARROW_UP "\xef\x81\xa2" // U+f062
#define ICON_FK_ARROW_DOWN "\xef\x81\xa3" // U+f063
#define ICON_FK_SHARE "\xef\x81\xa4" // U+f064
#define ICON_FK_EXPAND "\xef\x81\xa5" // U+f065
#define ICON_FK_COMPRESS "\xef\x81\xa6" // U+f066
#define ICON_FK_PLUS "\xef\x81\xa7" // U+f067
#define ICON_FK_MINUS "\xef\x81\xa8" // U+f068
#define ICON_FK_ASTERISK "\xef\x81\xa9" // U+f069
#define ICON_FK_EXCLAMATION_CIRCLE "\xef\x81\xaa" // U+f06a
#define ICON_FK_GIFT "\xef\x81\xab" // U+f06b
#define ICON_FK_LEAF "\xef\x81\xac" // U+f06c
#define ICON_FK_FIRE "\xef\x81\xad" // U+f06d
#define ICON_FK_EYE "\xef\x81\xae" // U+f06e
#define ICON_FK_EYE_SLASH "\xef\x81\xb0" // U+f070
#define ICON_FK_EXCLAMATION_TRIANGLE "\xef\x81\xb1" // U+f071
#define ICON_FK_PLANE "\xef\x81\xb2" // U+f072
#define ICON_FK_CALENDAR "\xef\x81\xb3" // U+f073
#define ICON_FK_RANDOM "\xef\x81\xb4" // U+f074
#define ICON_FK_COMMENT "\xef\x81\xb5" // U+f075
#define ICON_FK_MAGNET "\xef\x81\xb6" // U+f076
#define ICON_FK_CHEVRON_UP "\xef\x81\xb7" // U+f077
#define ICON_FK_CHEVRON_DOWN "\xef\x81\xb8" // U+f078
#define ICON_FK_RETWEET "\xef\x81\xb9" // U+f079
#define ICON_FK_SHOPPING_CART "\xef\x81\xba" // U+f07a
#define ICON_FK_FOLDER "\xef\x81\xbb" // U+f07b
#define ICON_FK_FOLDER_OPEN "\xef\x81\xbc" // U+f07c
#define ICON_FK_ARROWS_V "\xef\x81\xbd" // U+f07d
#define ICON_FK_ARROWS_H "\xef\x81\xbe" // U+f07e
#define ICON_FK_BAR_CHART "\xef\x82\x80" // U+f080
#define ICON_FK_TWITTER_SQUARE "\xef\x82\x81" // U+f081
#define ICON_FK_FACEBOOK_SQUARE "\xef\x82\x82" // U+f082
#define ICON_FK_CAMERA_RETRO "\xef\x82\x83" // U+f083
#define ICON_FK_KEY "\xef\x82\x84" // U+f084
#define ICON_FK_COGS "\xef\x82\x85" // U+f085
#define ICON_FK_COMMENTS "\xef\x82\x86" // U+f086
#define ICON_FK_THUMBS_O_UP "\xef\x82\x87" // U+f087
#define ICON_FK_THUMBS_O_DOWN "\xef\x82\x88" // U+f088
#define ICON_FK_STAR_HALF "\xef\x82\x89" // U+f089
#define ICON_FK_HEART_O "\xef\x82\x8a" // U+f08a
#define ICON_FK_SIGN_OUT "\xef\x82\x8b" // U+f08b
#define ICON_FK_LINKEDIN_SQUARE "\xef\x82\x8c" // U+f08c
#define ICON_FK_THUMB_TACK "\xef\x82\x8d" // U+f08d
#define ICON_FK_EXTERNAL_LINK "\xef\x82\x8e" // U+f08e
#define ICON_FK_SIGN_IN "\xef\x82\x90" // U+f090
#define ICON_FK_TROPHY "\xef\x82\x91" // U+f091
#define ICON_FK_GITHUB_SQUARE "\xef\x82\x92" // U+f092
#define ICON_FK_UPLOAD "\xef\x82\x93" // U+f093
#define ICON_FK_LEMON_O "\xef\x82\x94" // U+f094
#define ICON_FK_PHONE "\xef\x82\x95" // U+f095
#define ICON_FK_SQUARE_O "\xef\x82\x96" // U+f096
#define ICON_FK_BOOKMARK_O "\xef\x82\x97" // U+f097
#define ICON_FK_PHONE_SQUARE "\xef\x82\x98" // U+f098
#define ICON_FK_TWITTER "\xef\x82\x99" // U+f099
#define ICON_FK_FACEBOOK "\xef\x82\x9a" // U+f09a
#define ICON_FK_GITHUB "\xef\x82\x9b" // U+f09b
#define ICON_FK_UNLOCK "\xef\x82\x9c" // U+f09c
#define ICON_FK_CREDIT_CARD "\xef\x82\x9d" // U+f09d
#define ICON_FK_RSS "\xef\x82\x9e" // U+f09e
#define ICON_FK_HDD_O "\xef\x82\xa0" // U+f0a0
#define ICON_FK_BULLHORN "\xef\x82\xa1" // U+f0a1
#define ICON_FK_BELL_O "\xef\x83\xb3" // U+f0f3
#define ICON_FK_CERTIFICATE "\xef\x82\xa3" // U+f0a3
#define ICON_FK_HAND_O_RIGHT "\xef\x82\xa4" // U+f0a4
#define ICON_FK_HAND_O_LEFT "\xef\x82\xa5" // U+f0a5
#define ICON_FK_HAND_O_UP "\xef\x82\xa6" // U+f0a6
#define ICON_FK_HAND_O_DOWN "\xef\x82\xa7" // U+f0a7
#define ICON_FK_ARROW_CIRCLE_LEFT "\xef\x82\xa8" // U+f0a8
#define ICON_FK_ARROW_CIRCLE_RIGHT "\xef\x82\xa9" // U+f0a9
#define ICON_FK_ARROW_CIRCLE_UP "\xef\x82\xaa" // U+f0aa
#define ICON_FK_ARROW_CIRCLE_DOWN "\xef\x82\xab" // U+f0ab
#define ICON_FK_GLOBE "\xef\x82\xac" // U+f0ac
#define ICON_FK_GLOBE_E "\xef\x8c\x84" // U+f304
#define ICON_FK_GLOBE_W "\xef\x8c\x85" // U+f305
#define ICON_FK_WRENCH "\xef\x82\xad" // U+f0ad
#define ICON_FK_TASKS "\xef\x82\xae" // U+f0ae
#define ICON_FK_FILTER "\xef\x82\xb0" // U+f0b0
#define ICON_FK_BRIEFCASE "\xef\x82\xb1" // U+f0b1
#define ICON_FK_ARROWS_ALT "\xef\x82\xb2" // U+f0b2
#define ICON_FK_USERS "\xef\x83\x80" // U+f0c0
#define ICON_FK_LINK "\xef\x83\x81" // U+f0c1
#define ICON_FK_CLOUD "\xef\x83\x82" // U+f0c2
#define ICON_FK_FLASK "\xef\x83\x83" // U+f0c3
#define ICON_FK_SCISSORS "\xef\x83\x84" // U+f0c4
#define ICON_FK_FILES_O "\xef\x83\x85" // U+f0c5
#define ICON_FK_PAPERCLIP "\xef\x83\x86" // U+f0c6
#define ICON_FK_FLOPPY_O "\xef\x83\x87" // U+f0c7
#define ICON_FK_SQUARE "\xef\x83\x88" // U+f0c8
#define ICON_FK_BARS "\xef\x83\x89" // U+f0c9
#define ICON_FK_LIST_UL "\xef\x83\x8a" // U+f0ca
#define ICON_FK_LIST_OL "\xef\x83\x8b" // U+f0cb
#define ICON_FK_STRIKETHROUGH "\xef\x83\x8c" // U+f0cc
#define ICON_FK_UNDERLINE "\xef\x83\x8d" // U+f0cd
#define ICON_FK_TABLE "\xef\x83\x8e" // U+f0ce
#define ICON_FK_MAGIC "\xef\x83\x90" // U+f0d0
#define ICON_FK_TRUCK "\xef\x83\x91" // U+f0d1
#define ICON_FK_PINTEREST "\xef\x83\x92" // U+f0d2
#define ICON_FK_PINTEREST_SQUARE "\xef\x83\x93" // U+f0d3
#define ICON_FK_GOOGLE_PLUS_SQUARE "\xef\x83\x94" // U+f0d4
#define ICON_FK_GOOGLE_PLUS "\xef\x83\x95" // U+f0d5
#define ICON_FK_MONEY "\xef\x83\x96" // U+f0d6
#define ICON_FK_CARET_DOWN "\xef\x83\x97" // U+f0d7
#define ICON_FK_CARET_UP "\xef\x83\x98" // U+f0d8
#define ICON_FK_CARET_LEFT "\xef\x83\x99" // U+f0d9
#define ICON_FK_CARET_RIGHT "\xef\x83\x9a" // U+f0da
#define ICON_FK_COLUMNS "\xef\x83\x9b" // U+f0db
#define ICON_FK_SORT "\xef\x83\x9c" // U+f0dc
#define ICON_FK_SORT_DESC "\xef\x83\x9d" // U+f0dd
#define ICON_FK_SORT_ASC "\xef\x83\x9e" // U+f0de
#define ICON_FK_ENVELOPE "\xef\x83\xa0" // U+f0e0
#define ICON_FK_LINKEDIN "\xef\x83\xa1" // U+f0e1
#define ICON_FK_UNDO "\xef\x83\xa2" // U+f0e2
#define ICON_FK_GAVEL "\xef\x83\xa3" // U+f0e3
#define ICON_FK_TACHOMETER "\xef\x83\xa4" // U+f0e4
#define ICON_FK_COMMENT_O "\xef\x83\xa5" // U+f0e5
#define ICON_FK_COMMENTS_O "\xef\x83\xa6" // U+f0e6
#define ICON_FK_BOLT "\xef\x83\xa7" // U+f0e7
#define ICON_FK_SITEMAP "\xef\x83\xa8" // U+f0e8
#define ICON_FK_UMBRELLA "\xef\x83\xa9" // U+f0e9
#define ICON_FK_CLIPBOARD "\xef\x83\xaa" // U+f0ea
#define ICON_FK_LIGHTBULB_O "\xef\x83\xab" // U+f0eb
#define ICON_FK_EXCHANGE "\xef\x83\xac" // U+f0ec
#define ICON_FK_CLOUD_DOWNLOAD "\xef\x83\xad" // U+f0ed
#define ICON_FK_CLOUD_UPLOAD "\xef\x83\xae" // U+f0ee
#define ICON_FK_USER_MD "\xef\x83\xb0" // U+f0f0
#define ICON_FK_STETHOSCOPE "\xef\x83\xb1" // U+f0f1
#define ICON_FK_SUITCASE "\xef\x83\xb2" // U+f0f2
#define ICON_FK_BELL "\xef\x82\xa2" // U+f0a2
#define ICON_FK_COFFEE "\xef\x83\xb4" // U+f0f4
#define ICON_FK_CUTLERY "\xef\x83\xb5" // U+f0f5
#define ICON_FK_FILE_TEXT_O "\xef\x83\xb6" // U+f0f6
#define ICON_FK_BUILDING_O "\xef\x83\xb7" // U+f0f7
#define ICON_FK_HOSPITAL_O "\xef\x83\xb8" // U+f0f8
#define ICON_FK_AMBULANCE "\xef\x83\xb9" // U+f0f9
#define ICON_FK_MEDKIT "\xef\x83\xba" // U+f0fa
#define ICON_FK_FIGHTER_JET "\xef\x83\xbb" // U+f0fb
#define ICON_FK_BEER "\xef\x83\xbc" // U+f0fc
#define ICON_FK_H_SQUARE "\xef\x83\xbd" // U+f0fd
#define ICON_FK_PLUS_SQUARE "\xef\x83\xbe" // U+f0fe
#define ICON_FK_ANGLE_DOUBLE_LEFT "\xef\x84\x80" // U+f100
#define ICON_FK_ANGLE_DOUBLE_RIGHT "\xef\x84\x81" // U+f101
#define ICON_FK_ANGLE_DOUBLE_UP "\xef\x84\x82" // U+f102
#define ICON_FK_ANGLE_DOUBLE_DOWN "\xef\x84\x83" // U+f103
#define ICON_FK_ANGLE_LEFT "\xef\x84\x84" // U+f104
#define ICON_FK_ANGLE_RIGHT "\xef\x84\x85" // U+f105
#define ICON_FK_ANGLE_UP "\xef\x84\x86" // U+f106
#define ICON_FK_ANGLE_DOWN "\xef\x84\x87" // U+f107
#define ICON_FK_DESKTOP "\xef\x84\x88" // U+f108
#define ICON_FK_LAPTOP "\xef\x84\x89" // U+f109
#define ICON_FK_TABLET "\xef\x84\x8a" // U+f10a
#define ICON_FK_MOBILE "\xef\x84\x8b" // U+f10b
#define ICON_FK_CIRCLE_O "\xef\x84\x8c" // U+f10c
#define ICON_FK_QUOTE_LEFT "\xef\x84\x8d" // U+f10d
#define ICON_FK_QUOTE_RIGHT "\xef\x84\x8e" // U+f10e
#define ICON_FK_SPINNER "\xef\x84\x90" // U+f110
#define ICON_FK_CIRCLE "\xef\x84\x91" // U+f111
#define ICON_FK_REPLY "\xef\x84\x92" // U+f112
#define ICON_FK_GITHUB_ALT "\xef\x84\x93" // U+f113
#define ICON_FK_FOLDER_O "\xef\x84\x94" // U+f114
#define ICON_FK_FOLDER_OPEN_O "\xef\x84\x95" // U+f115
#define ICON_FK_SMILE_O "\xef\x84\x98" // U+f118
#define ICON_FK_FROWN_O "\xef\x84\x99" // U+f119
#define ICON_FK_MEH_O "\xef\x84\x9a" // U+f11a
#define ICON_FK_GAMEPAD "\xef\x84\x9b" // U+f11b
#define ICON_FK_KEYBOARD_O "\xef\x84\x9c" // U+f11c
#define ICON_FK_FLAG_O "\xef\x84\x9d" // U+f11d
#define ICON_FK_FLAG_CHECKERED "\xef\x84\x9e" // U+f11e
#define ICON_FK_TERMINAL "\xef\x84\xa0" // U+f120
#define ICON_FK_CODE "\xef\x84\xa1" // U+f121
#define ICON_FK_REPLY_ALL "\xef\x84\xa2" // U+f122
#define ICON_FK_STAR_HALF_O "\xef\x84\xa3" // U+f123
#define ICON_FK_LOCATION_ARROW "\xef\x84\xa4" // U+f124
#define ICON_FK_CROP "\xef\x84\xa5" // U+f125
#define ICON_FK_CODE_FORK "\xef\x84\xa6" // U+f126
#define ICON_FK_CHAIN_BROKEN "\xef\x84\xa7" // U+f127
#define ICON_FK_QUESTION "\xef\x84\xa8" // U+f128
#define ICON_FK_INFO "\xef\x84\xa9" // U+f129
#define ICON_FK_EXCLAMATION "\xef\x84\xaa" // U+f12a
#define ICON_FK_SUPERSCRIPT "\xef\x84\xab" // U+f12b
#define ICON_FK_SUBSCRIPT "\xef\x84\xac" // U+f12c
#define ICON_FK_ERASER "\xef\x84\xad" // U+f12d
#define ICON_FK_PUZZLE_PIECE "\xef\x84\xae" // U+f12e
#define ICON_FK_MICROPHONE "\xef\x84\xb0" // U+f130
#define ICON_FK_MICROPHONE_SLASH "\xef\x84\xb1" // U+f131
#define ICON_FK_SHIELD "\xef\x84\xb2" // U+f132
#define ICON_FK_CALENDAR_O "\xef\x84\xb3" // U+f133
#define ICON_FK_FIRE_EXTINGUISHER "\xef\x84\xb4" // U+f134
#define ICON_FK_ROCKET "\xef\x84\xb5" // U+f135
#define ICON_FK_MAXCDN "\xef\x84\xb6" // U+f136
#define ICON_FK_CHEVRON_CIRCLE_LEFT "\xef\x84\xb7" // U+f137
#define ICON_FK_CHEVRON_CIRCLE_RIGHT "\xef\x84\xb8" // U+f138
#define ICON_FK_CHEVRON_CIRCLE_UP "\xef\x84\xb9" // U+f139
#define ICON_FK_CHEVRON_CIRCLE_DOWN "\xef\x84\xba" // U+f13a
#define ICON_FK_HTML5 "\xef\x84\xbb" // U+f13b
#define ICON_FK_CSS3 "\xef\x84\xbc" // U+f13c
#define ICON_FK_ANCHOR "\xef\x84\xbd" // U+f13d
#define ICON_FK_UNLOCK_ALT "\xef\x84\xbe" // U+f13e
#define ICON_FK_BULLSEYE "\xef\x85\x80" // U+f140
#define ICON_FK_ELLIPSIS_H "\xef\x85\x81" // U+f141
#define ICON_FK_ELLIPSIS_V "\xef\x85\x82" // U+f142
#define ICON_FK_RSS_SQUARE "\xef\x85\x83" // U+f143
#define ICON_FK_PLAY_CIRCLE "\xef\x85\x84" // U+f144
#define ICON_FK_TICKET "\xef\x85\x85" // U+f145
#define ICON_FK_MINUS_SQUARE "\xef\x85\x86" // U+f146
#define ICON_FK_MINUS_SQUARE_O "\xef\x85\x87" // U+f147
#define ICON_FK_LEVEL_UP "\xef\x85\x88" // U+f148
#define ICON_FK_LEVEL_DOWN "\xef\x85\x89" // U+f149
#define ICON_FK_CHECK_SQUARE "\xef\x85\x8a" // U+f14a
#define ICON_FK_PENCIL_SQUARE "\xef\x85\x8b" // U+f14b
#define ICON_FK_EXTERNAL_LINK_SQUARE "\xef\x85\x8c" // U+f14c
#define ICON_FK_SHARE_SQUARE "\xef\x85\x8d" // U+f14d
#define ICON_FK_COMPASS "\xef\x85\x8e" // U+f14e
#define ICON_FK_CARET_SQUARE_O_DOWN "\xef\x85\x90" // U+f150
#define ICON_FK_CARET_SQUARE_O_UP "\xef\x85\x91" // U+f151
#define ICON_FK_CARET_SQUARE_O_RIGHT "\xef\x85\x92" // U+f152
#define ICON_FK_EUR "\xef\x85\x93" // U+f153
#define ICON_FK_GBP "\xef\x85\x94" // U+f154
#define ICON_FK_USD "\xef\x85\x95" // U+f155
#define ICON_FK_INR "\xef\x85\x96" // U+f156
#define ICON_FK_JPY "\xef\x85\x97" // U+f157
#define ICON_FK_RUB "\xef\x85\x98" // U+f158
#define ICON_FK_KRW "\xef\x85\x99" // U+f159
#define ICON_FK_BTC "\xef\x85\x9a" // U+f15a
#define ICON_FK_FILE "\xef\x85\x9b" // U+f15b
#define ICON_FK_FILE_TEXT "\xef\x85\x9c" // U+f15c
#define ICON_FK_SORT_ALPHA_ASC "\xef\x85\x9d" // U+f15d
#define ICON_FK_SORT_ALPHA_DESC "\xef\x85\x9e" // U+f15e
#define ICON_FK_SORT_AMOUNT_ASC "\xef\x85\xa0" // U+f160
#define ICON_FK_SORT_AMOUNT_DESC "\xef\x85\xa1" // U+f161
#define ICON_FK_SORT_NUMERIC_ASC "\xef\x85\xa2" // U+f162
#define ICON_FK_SORT_NUMERIC_DESC "\xef\x85\xa3" // U+f163
#define ICON_FK_THUMBS_UP "\xef\x85\xa4" // U+f164
#define ICON_FK_THUMBS_DOWN "\xef\x85\xa5" // U+f165
#define ICON_FK_YOUTUBE_SQUARE "\xef\x85\xa6" // U+f166
#define ICON_FK_YOUTUBE "\xef\x85\xa7" // U+f167
#define ICON_FK_XING "\xef\x85\xa8" // U+f168
#define ICON_FK_XING_SQUARE "\xef\x85\xa9" // U+f169
#define ICON_FK_YOUTUBE_PLAY "\xef\x85\xaa" // U+f16a
#define ICON_FK_DROPBOX "\xef\x85\xab" // U+f16b
#define ICON_FK_STACK_OVERFLOW "\xef\x85\xac" // U+f16c
#define ICON_FK_INSTAGRAM "\xef\x85\xad" // U+f16d
#define ICON_FK_FLICKR "\xef\x85\xae" // U+f16e
#define ICON_FK_ADN "\xef\x85\xb0" // U+f170
#define ICON_FK_BITBUCKET "\xef\x85\xb1" // U+f171
#define ICON_FK_BITBUCKET_SQUARE "\xef\x85\xb2" // U+f172
#define ICON_FK_TUMBLR "\xef\x85\xb3" // U+f173
#define ICON_FK_TUMBLR_SQUARE "\xef\x85\xb4" // U+f174
#define ICON_FK_LONG_ARROW_DOWN "\xef\x85\xb5" // U+f175
#define ICON_FK_LONG_ARROW_UP "\xef\x85\xb6" // U+f176
#define ICON_FK_LONG_ARROW_LEFT "\xef\x85\xb7" // U+f177
#define ICON_FK_LONG_ARROW_RIGHT "\xef\x85\xb8" // U+f178
#define ICON_FK_APPLE "\xef\x85\xb9" // U+f179
#define ICON_FK_WINDOWS "\xef\x85\xba" // U+f17a
#define ICON_FK_ANDROID "\xef\x85\xbb" // U+f17b
#define ICON_FK_LINUX "\xef\x85\xbc" // U+f17c
#define ICON_FK_DRIBBBLE "\xef\x85\xbd" // U+f17d
#define ICON_FK_SKYPE "\xef\x85\xbe" // U+f17e
#define ICON_FK_FOURSQUARE "\xef\x86\x80" // U+f180
#define ICON_FK_TRELLO "\xef\x86\x81" // U+f181
#define ICON_FK_FEMALE "\xef\x86\x82" // U+f182
#define ICON_FK_MALE "\xef\x86\x83" // U+f183
#define ICON_FK_GRATIPAY "\xef\x86\x84" // U+f184
#define ICON_FK_SUN_O "\xef\x86\x85" // U+f185
#define ICON_FK_MOON_O "\xef\x86\x86" // U+f186
#define ICON_FK_ARCHIVE "\xef\x86\x87" // U+f187
#define ICON_FK_BUG "\xef\x86\x88" // U+f188
#define ICON_FK_VK "\xef\x86\x89" // U+f189
#define ICON_FK_WEIBO "\xef\x86\x8a" // U+f18a
#define ICON_FK_RENREN "\xef\x86\x8b" // U+f18b
#define ICON_FK_PAGELINES "\xef\x86\x8c" // U+f18c
#define ICON_FK_STACK_EXCHANGE "\xef\x86\x8d" // U+f18d
#define ICON_FK_ARROW_CIRCLE_O_RIGHT "\xef\x86\x8e" // U+f18e
#define ICON_FK_ARROW_CIRCLE_O_LEFT "\xef\x86\x90" // U+f190
#define ICON_FK_CARET_SQUARE_O_LEFT "\xef\x86\x91" // U+f191
#define ICON_FK_DOT_CIRCLE_O "\xef\x86\x92" // U+f192
#define ICON_FK_WHEELCHAIR "\xef\x86\x93" // U+f193
#define ICON_FK_VIMEO_SQUARE "\xef\x86\x94" // U+f194
#define ICON_FK_TRY "\xef\x86\x95" // U+f195
#define ICON_FK_PLUS_SQUARE_O "\xef\x86\x96" // U+f196
#define ICON_FK_SPACE_SHUTTLE "\xef\x86\x97" // U+f197
#define ICON_FK_SLACK "\xef\x86\x98" // U+f198
#define ICON_FK_ENVELOPE_SQUARE "\xef\x86\x99" // U+f199
#define ICON_FK_WORDPRESS "\xef\x86\x9a" // U+f19a
#define ICON_FK_OPENID "\xef\x86\x9b" // U+f19b
#define ICON_FK_UNIVERSITY "\xef\x86\x9c" // U+f19c
#define ICON_FK_GRADUATION_CAP "\xef\x86\x9d" // U+f19d
#define ICON_FK_YAHOO "\xef\x86\x9e" // U+f19e
#define ICON_FK_GOOGLE "\xef\x86\xa0" // U+f1a0
#define ICON_FK_REDDIT "\xef\x86\xa1" // U+f1a1
#define ICON_FK_REDDIT_SQUARE "\xef\x86\xa2" // U+f1a2
#define ICON_FK_STUMBLEUPON_CIRCLE "\xef\x86\xa3" // U+f1a3
#define ICON_FK_STUMBLEUPON "\xef\x86\xa4" // U+f1a4
#define ICON_FK_DELICIOUS "\xef\x86\xa5" // U+f1a5
#define ICON_FK_DIGG "\xef\x86\xa6" // U+f1a6
#define ICON_FK_DRUPAL "\xef\x86\xa9" // U+f1a9
#define ICON_FK_JOOMLA "\xef\x86\xaa" // U+f1aa
#define ICON_FK_LANGUAGE "\xef\x86\xab" // U+f1ab
#define ICON_FK_FAX "\xef\x86\xac" // U+f1ac
#define ICON_FK_BUILDING "\xef\x86\xad" // U+f1ad
#define ICON_FK_CHILD "\xef\x86\xae" // U+f1ae
#define ICON_FK_PAW "\xef\x86\xb0" // U+f1b0
#define ICON_FK_SPOON "\xef\x86\xb1" // U+f1b1
#define ICON_FK_CUBE "\xef\x86\xb2" // U+f1b2
#define ICON_FK_CUBES "\xef\x86\xb3" // U+f1b3
#define ICON_FK_BEHANCE "\xef\x86\xb4" // U+f1b4
#define ICON_FK_BEHANCE_SQUARE "\xef\x86\xb5" // U+f1b5
#define ICON_FK_STEAM "\xef\x86\xb6" // U+f1b6
#define ICON_FK_STEAM_SQUARE "\xef\x86\xb7" // U+f1b7
#define ICON_FK_RECYCLE "\xef\x86\xb8" // U+f1b8
#define ICON_FK_CAR "\xef\x86\xb9" // U+f1b9
#define ICON_FK_TAXI "\xef\x86\xba" // U+f1ba
#define ICON_FK_TREE "\xef\x86\xbb" // U+f1bb
#define ICON_FK_SPOTIFY "\xef\x86\xbc" // U+f1bc
#define ICON_FK_DEVIANTART "\xef\x86\xbd" // U+f1bd
#define ICON_FK_SOUNDCLOUD "\xef\x86\xbe" // U+f1be
#define ICON_FK_DATABASE "\xef\x87\x80" // U+f1c0
#define ICON_FK_FILE_PDF_O "\xef\x87\x81" // U+f1c1
#define ICON_FK_FILE_WORD_O "\xef\x87\x82" // U+f1c2
#define ICON_FK_FILE_EXCEL_O "\xef\x87\x83" // U+f1c3
#define ICON_FK_FILE_POWERPOINT_O "\xef\x87\x84" // U+f1c4
#define ICON_FK_FILE_IMAGE_O "\xef\x87\x85" // U+f1c5
#define ICON_FK_FILE_ARCHIVE_O "\xef\x87\x86" // U+f1c6
#define ICON_FK_FILE_AUDIO_O "\xef\x87\x87" // U+f1c7
#define ICON_FK_FILE_VIDEO_O "\xef\x87\x88" // U+f1c8
#define ICON_FK_FILE_CODE_O "\xef\x87\x89" // U+f1c9
#define ICON_FK_VINE "\xef\x87\x8a" // U+f1ca
#define ICON_FK_CODEPEN "\xef\x87\x8b" // U+f1cb
#define ICON_FK_JSFIDDLE "\xef\x87\x8c" // U+f1cc
#define ICON_FK_LIFE_RING "\xef\x87\x8d" // U+f1cd
#define ICON_FK_CIRCLE_O_NOTCH "\xef\x87\x8e" // U+f1ce
#define ICON_FK_REBEL "\xef\x87\x90" // U+f1d0
#define ICON_FK_EMPIRE "\xef\x87\x91" // U+f1d1
#define ICON_FK_GIT_SQUARE "\xef\x87\x92" // U+f1d2
#define ICON_FK_GIT "\xef\x87\x93" // U+f1d3
#define ICON_FK_HACKER_NEWS "\xef\x87\x94" // U+f1d4
#define ICON_FK_TENCENT_WEIBO "\xef\x87\x95" // U+f1d5
#define ICON_FK_QQ "\xef\x87\x96" // U+f1d6
#define ICON_FK_WEIXIN "\xef\x87\x97" // U+f1d7
#define ICON_FK_PAPER_PLANE "\xef\x87\x98" // U+f1d8
#define ICON_FK_PAPER_PLANE_O "\xef\x87\x99" // U+f1d9
#define ICON_FK_HISTORY "\xef\x87\x9a" // U+f1da
#define ICON_FK_CIRCLE_THIN "\xef\x87\x9b" // U+f1db
#define ICON_FK_HEADER "\xef\x87\x9c" // U+f1dc
#define ICON_FK_PARAGRAPH "\xef\x87\x9d" // U+f1dd
#define ICON_FK_SLIDERS "\xef\x87\x9e" // U+f1de
#define ICON_FK_SHARE_ALT "\xef\x87\xa0" // U+f1e0
#define ICON_FK_SHARE_ALT_SQUARE "\xef\x87\xa1" // U+f1e1
#define ICON_FK_BOMB "\xef\x87\xa2" // U+f1e2
#define ICON_FK_FUTBOL_O "\xef\x87\xa3" // U+f1e3
#define ICON_FK_TTY "\xef\x87\xa4" // U+f1e4
#define ICON_FK_BINOCULARS "\xef\x87\xa5" // U+f1e5
#define ICON_FK_PLUG "\xef\x87\xa6" // U+f1e6
#define ICON_FK_SLIDESHARE "\xef\x87\xa7" // U+f1e7
#define ICON_FK_TWITCH "\xef\x87\xa8" // U+f1e8
#define ICON_FK_YELP "\xef\x87\xa9" // U+f1e9
#define ICON_FK_NEWSPAPER_O "\xef\x87\xaa" // U+f1ea
#define ICON_FK_WIFI "\xef\x87\xab" // U+f1eb
#define ICON_FK_CALCULATOR "\xef\x87\xac" // U+f1ec
#define ICON_FK_PAYPAL "\xef\x87\xad" // U+f1ed
#define ICON_FK_GOOGLE_WALLET "\xef\x87\xae" // U+f1ee
#define ICON_FK_CC_VISA "\xef\x87\xb0" // U+f1f0
#define ICON_FK_CC_MASTERCARD "\xef\x87\xb1" // U+f1f1
#define ICON_FK_CC_DISCOVER "\xef\x87\xb2" // U+f1f2
#define ICON_FK_CC_AMEX "\xef\x87\xb3" // U+f1f3
#define ICON_FK_CC_PAYPAL "\xef\x87\xb4" // U+f1f4
#define ICON_FK_CC_STRIPE "\xef\x87\xb5" // U+f1f5
#define ICON_FK_BELL_SLASH "\xef\x87\xb6" // U+f1f6
#define ICON_FK_BELL_SLASH_O "\xef\x87\xb7" // U+f1f7
#define ICON_FK_TRASH "\xef\x87\xb8" // U+f1f8
#define ICON_FK_COPYRIGHT "\xef\x87\xb9" // U+f1f9
#define ICON_FK_AT "\xef\x87\xba" // U+f1fa
#define ICON_FK_EYEDROPPER "\xef\x87\xbb" // U+f1fb
#define ICON_FK_PAINT_BRUSH "\xef\x87\xbc" // U+f1fc
#define ICON_FK_BIRTHDAY_CAKE "\xef\x87\xbd" // U+f1fd
#define ICON_FK_AREA_CHART "\xef\x87\xbe" // U+f1fe
#define ICON_FK_PIE_CHART "\xef\x88\x80" // U+f200
#define ICON_FK_LINE_CHART "\xef\x88\x81" // U+f201
#define ICON_FK_LASTFM "\xef\x88\x82" // U+f202
#define ICON_FK_LASTFM_SQUARE "\xef\x88\x83" // U+f203
#define ICON_FK_TOGGLE_OFF "\xef\x88\x84" // U+f204
#define ICON_FK_TOGGLE_ON "\xef\x88\x85" // U+f205
#define ICON_FK_BICYCLE "\xef\x88\x86" // U+f206
#define ICON_FK_BUS "\xef\x88\x87" // U+f207
#define ICON_FK_IOXHOST "\xef\x88\x88" // U+f208
#define ICON_FK_ANGELLIST "\xef\x88\x89" // U+f209
#define ICON_FK_CC "\xef\x88\x8a" // U+f20a
#define ICON_FK_ILS "\xef\x88\x8b" // U+f20b
#define ICON_FK_MEANPATH "\xef\x88\x8c" // U+f20c
#define ICON_FK_BUYSELLADS "\xef\x88\x8d" // U+f20d
#define ICON_FK_CONNECTDEVELOP "\xef\x88\x8e" // U+f20e
#define ICON_FK_DASHCUBE "\xef\x88\x90" // U+f210
#define ICON_FK_FORUMBEE "\xef\x88\x91" // U+f211
#define ICON_FK_LEANPUB "\xef\x88\x92" // U+f212
#define ICON_FK_SELLSY "\xef\x88\x93" // U+f213
#define ICON_FK_SHIRTSINBULK "\xef\x88\x94" // U+f214
#define ICON_FK_SIMPLYBUILT "\xef\x88\x95" // U+f215
#define ICON_FK_SKYATLAS "\xef\x88\x96" // U+f216
#define ICON_FK_CART_PLUS "\xef\x88\x97" // U+f217
#define ICON_FK_CART_ARROW_DOWN "\xef\x88\x98" // U+f218
#define ICON_FK_DIAMOND "\xef\x88\x99" // U+f219
#define ICON_FK_SHIP "\xef\x88\x9a" // U+f21a
#define ICON_FK_USER_SECRET "\xef\x88\x9b" // U+f21b
#define ICON_FK_MOTORCYCLE "\xef\x88\x9c" // U+f21c
#define ICON_FK_STREET_VIEW "\xef\x88\x9d" // U+f21d
#define ICON_FK_HEARTBEAT "\xef\x88\x9e" // U+f21e
#define ICON_FK_VENUS "\xef\x88\xa1" // U+f221
#define ICON_FK_MARS "\xef\x88\xa2" // U+f222
#define ICON_FK_MERCURY "\xef\x88\xa3" // U+f223
#define ICON_FK_TRANSGENDER "\xef\x88\xa4" // U+f224
#define ICON_FK_TRANSGENDER_ALT "\xef\x88\xa5" // U+f225
#define ICON_FK_VENUS_DOUBLE "\xef\x88\xa6" // U+f226
#define ICON_FK_MARS_DOUBLE "\xef\x88\xa7" // U+f227
#define ICON_FK_VENUS_MARS "\xef\x88\xa8" // U+f228
#define ICON_FK_MARS_STROKE "\xef\x88\xa9" // U+f229
#define ICON_FK_MARS_STROKE_V "\xef\x88\xaa" // U+f22a
#define ICON_FK_MARS_STROKE_H "\xef\x88\xab" // U+f22b
#define ICON_FK_NEUTER "\xef\x88\xac" // U+f22c
#define ICON_FK_GENDERLESS "\xef\x88\xad" // U+f22d
#define ICON_FK_FACEBOOK_OFFICIAL "\xef\x88\xb0" // U+f230
#define ICON_FK_PINTEREST_P "\xef\x88\xb1" // U+f231
#define ICON_FK_WHATSAPP "\xef\x88\xb2" // U+f232
#define ICON_FK_SERVER "\xef\x88\xb3" // U+f233
#define ICON_FK_USER_PLUS "\xef\x88\xb4" // U+f234
#define ICON_FK_USER_TIMES "\xef\x88\xb5" // U+f235
#define ICON_FK_BED "\xef\x88\xb6" // U+f236
#define ICON_FK_VIACOIN "\xef\x88\xb7" // U+f237
#define ICON_FK_TRAIN "\xef\x88\xb8" // U+f238
#define ICON_FK_SUBWAY "\xef\x88\xb9" // U+f239
#define ICON_FK_MEDIUM "\xef\x88\xba" // U+f23a
#define ICON_FK_MEDIUM_SQUARE "\xef\x8b\xb8" // U+f2f8
#define ICON_FK_Y_COMBINATOR "\xef\x88\xbb" // U+f23b
#define ICON_FK_OPTIN_MONSTER "\xef\x88\xbc" // U+f23c
#define ICON_FK_OPENCART "\xef\x88\xbd" // U+f23d
#define ICON_FK_EXPEDITEDSSL "\xef\x88\xbe" // U+f23e
#define ICON_FK_BATTERY_FULL "\xef\x89\x80" // U+f240
#define ICON_FK_BATTERY_THREE_QUARTERS "\xef\x89\x81" // U+f241
#define ICON_FK_BATTERY_HALF "\xef\x89\x82" // U+f242
#define ICON_FK_BATTERY_QUARTER "\xef\x89\x83" // U+f243
#define ICON_FK_BATTERY_EMPTY "\xef\x89\x84" // U+f244
#define ICON_FK_MOUSE_POINTER "\xef\x89\x85" // U+f245
#define ICON_FK_I_CURSOR "\xef\x89\x86" // U+f246
#define ICON_FK_OBJECT_GROUP "\xef\x89\x87" // U+f247
#define ICON_FK_OBJECT_UNGROUP "\xef\x89\x88" // U+f248
#define ICON_FK_STICKY_NOTE "\xef\x89\x89" // U+f249
#define ICON_FK_STICKY_NOTE_O "\xef\x89\x8a" // U+f24a
#define ICON_FK_CC_JCB "\xef\x89\x8b" // U+f24b
#define ICON_FK_CC_DINERS_CLUB "\xef\x89\x8c" // U+f24c
#define ICON_FK_CLONE "\xef\x89\x8d" // U+f24d
#define ICON_FK_BALANCE_SCALE "\xef\x89\x8e" // U+f24e
#define ICON_FK_HOURGLASS_O "\xef\x89\x90" // U+f250
#define ICON_FK_HOURGLASS_START "\xef\x89\x91" // U+f251
#define ICON_FK_HOURGLASS_HALF "\xef\x89\x92" // U+f252
#define ICON_FK_HOURGLASS_END "\xef\x89\x93" // U+f253
#define ICON_FK_HOURGLASS "\xef\x89\x94" // U+f254
#define ICON_FK_HAND_ROCK_O "\xef\x89\x95" // U+f255
#define ICON_FK_HAND_PAPER_O "\xef\x89\x96" // U+f256
#define ICON_FK_HAND_SCISSORS_O "\xef\x89\x97" // U+f257
#define ICON_FK_HAND_LIZARD_O "\xef\x89\x98" // U+f258
#define ICON_FK_HAND_SPOCK_O "\xef\x89\x99" // U+f259
#define ICON_FK_HAND_POINTER_O "\xef\x89\x9a" // U+f25a
#define ICON_FK_HAND_PEACE_O "\xef\x89\x9b" // U+f25b
#define ICON_FK_TRADEMARK "\xef\x89\x9c" // U+f25c
#define ICON_FK_REGISTERED "\xef\x89\x9d" // U+f25d
#define ICON_FK_CREATIVE_COMMONS "\xef\x89\x9e" // U+f25e
#define ICON_FK_GG "\xef\x89\xa0" // U+f260
#define ICON_FK_GG_CIRCLE "\xef\x89\xa1" // U+f261
#define ICON_FK_TRIPADVISOR "\xef\x89\xa2" // U+f262
#define ICON_FK_ODNOKLASSNIKI "\xef\x89\xa3" // U+f263
#define ICON_FK_ODNOKLASSNIKI_SQUARE "\xef\x89\xa4" // U+f264
#define ICON_FK_GET_POCKET "\xef\x89\xa5" // U+f265
#define ICON_FK_WIKIPEDIA_W "\xef\x89\xa6" // U+f266
#define ICON_FK_SAFARI "\xef\x89\xa7" // U+f267
#define ICON_FK_CHROME "\xef\x89\xa8" // U+f268
#define ICON_FK_FIREFOX "\xef\x89\xa9" // U+f269
#define ICON_FK_OPERA "\xef\x89\xaa" // U+f26a
#define ICON_FK_INTERNET_EXPLORER "\xef\x89\xab" // U+f26b
#define ICON_FK_TELEVISION "\xef\x89\xac" // U+f26c
#define ICON_FK_CONTAO "\xef\x89\xad" // U+f26d
#define ICON_FK_500PX "\xef\x89\xae" // U+f26e
#define ICON_FK_AMAZON "\xef\x89\xb0" // U+f270
#define ICON_FK_CALENDAR_PLUS_O "\xef\x89\xb1" // U+f271
#define ICON_FK_CALENDAR_MINUS_O "\xef\x89\xb2" // U+f272
#define ICON_FK_CALENDAR_TIMES_O "\xef\x89\xb3" // U+f273
#define ICON_FK_CALENDAR_CHECK_O "\xef\x89\xb4" // U+f274
#define ICON_FK_INDUSTRY "\xef\x89\xb5" // U+f275
#define ICON_FK_MAP_PIN "\xef\x89\xb6" // U+f276
#define ICON_FK_MAP_SIGNS "\xef\x89\xb7" // U+f277
#define ICON_FK_MAP_O "\xef\x89\xb8" // U+f278
#define ICON_FK_MAP "\xef\x89\xb9" // U+f279
#define ICON_FK_COMMENTING "\xef\x89\xba" // U+f27a
#define ICON_FK_COMMENTING_O "\xef\x89\xbb" // U+f27b
#define ICON_FK_HOUZZ "\xef\x89\xbc" // U+f27c
#define ICON_FK_VIMEO "\xef\x89\xbd" // U+f27d
#define ICON_FK_BLACK_TIE "\xef\x89\xbe" // U+f27e
#define ICON_FK_FONTICONS "\xef\x8a\x80" // U+f280
#define ICON_FK_REDDIT_ALIEN "\xef\x8a\x81" // U+f281
#define ICON_FK_EDGE "\xef\x8a\x82" // U+f282
#define ICON_FK_CREDIT_CARD_ALT "\xef\x8a\x83" // U+f283
#define ICON_FK_CODIEPIE "\xef\x8a\x84" // U+f284
#define ICON_FK_MODX "\xef\x8a\x85" // U+f285
#define ICON_FK_FORT_AWESOME "\xef\x8a\x86" // U+f286
#define ICON_FK_USB "\xef\x8a\x87" // U+f287
#define ICON_FK_PRODUCT_HUNT "\xef\x8a\x88" // U+f288
#define ICON_FK_MIXCLOUD "\xef\x8a\x89" // U+f289
#define ICON_FK_SCRIBD "\xef\x8a\x8a" // U+f28a
#define ICON_FK_PAUSE_CIRCLE "\xef\x8a\x8b" // U+f28b
#define ICON_FK_PAUSE_CIRCLE_O "\xef\x8a\x8c" // U+f28c
#define ICON_FK_STOP_CIRCLE "\xef\x8a\x8d" // U+f28d
#define ICON_FK_STOP_CIRCLE_O "\xef\x8a\x8e" // U+f28e
#define ICON_FK_SHOPPING_BAG "\xef\x8a\x90" // U+f290
#define ICON_FK_SHOPPING_BASKET "\xef\x8a\x91" // U+f291
#define ICON_FK_HASHTAG "\xef\x8a\x92" // U+f292
#define ICON_FK_BLUETOOTH "\xef\x8a\x93" // U+f293
#define ICON_FK_BLUETOOTH_B "\xef\x8a\x94" // U+f294
#define ICON_FK_PERCENT "\xef\x8a\x95" // U+f295
#define ICON_FK_GITLAB "\xef\x8a\x96" // U+f296
#define ICON_FK_WPBEGINNER "\xef\x8a\x97" // U+f297
#define ICON_FK_WPFORMS "\xef\x8a\x98" // U+f298
#define ICON_FK_ENVIRA "\xef\x8a\x99" // U+f299
#define ICON_FK_UNIVERSAL_ACCESS "\xef\x8a\x9a" // U+f29a
#define ICON_FK_WHEELCHAIR_ALT "\xef\x8a\x9b" // U+f29b
#define ICON_FK_QUESTION_CIRCLE_O "\xef\x8a\x9c" // U+f29c
#define ICON_FK_BLIND "\xef\x8a\x9d" // U+f29d
#define ICON_FK_AUDIO_DESCRIPTION "\xef\x8a\x9e" // U+f29e
#define ICON_FK_VOLUME_CONTROL_PHONE "\xef\x8a\xa0" // U+f2a0
#define ICON_FK_BRAILLE "\xef\x8a\xa1" // U+f2a1
#define ICON_FK_ASSISTIVE_LISTENING_SYSTEMS "\xef\x8a\xa2" // U+f2a2
#define ICON_FK_AMERICAN_SIGN_LANGUAGE_INTERPRETING "\xef\x8a\xa3" // U+f2a3
#define ICON_FK_DEAF "\xef\x8a\xa4" // U+f2a4
#define ICON_FK_GLIDE "\xef\x8a\xa5" // U+f2a5
#define ICON_FK_GLIDE_G "\xef\x8a\xa6" // U+f2a6
#define ICON_FK_SIGN_LANGUAGE "\xef\x8a\xa7" // U+f2a7
#define ICON_FK_LOW_VISION "\xef\x8a\xa8" // U+f2a8
#define ICON_FK_VIADEO "\xef\x8a\xa9" // U+f2a9
#define ICON_FK_VIADEO_SQUARE "\xef\x8a\xaa" // U+f2aa
#define ICON_FK_SNAPCHAT "\xef\x8a\xab" // U+f2ab
#define ICON_FK_SNAPCHAT_GHOST "\xef\x8a\xac" // U+f2ac
#define ICON_FK_SNAPCHAT_SQUARE "\xef\x8a\xad" // U+f2ad
#define ICON_FK_FIRST_ORDER "\xef\x8a\xb0" // U+f2b0
#define ICON_FK_YOAST "\xef\x8a\xb1" // U+f2b1
#define ICON_FK_THEMEISLE "\xef\x8a\xb2" // U+f2b2
#define ICON_FK_GOOGLE_PLUS_OFFICIAL "\xef\x8a\xb3" // U+f2b3
#define ICON_FK_FONT_AWESOME "\xef\x8a\xb4" // U+f2b4
#define ICON_FK_HANDSHAKE_O "\xef\x8a\xb5" // U+f2b5
#define ICON_FK_ENVELOPE_OPEN "\xef\x8a\xb6" // U+f2b6
#define ICON_FK_ENVELOPE_OPEN_O "\xef\x8a\xb7" // U+f2b7
#define ICON_FK_LINODE "\xef\x8a\xb8" // U+f2b8
#define ICON_FK_ADDRESS_BOOK "\xef\x8a\xb9" // U+f2b9
#define ICON_FK_ADDRESS_BOOK_O "\xef\x8a\xba" // U+f2ba
#define ICON_FK_ADDRESS_CARD "\xef\x8a\xbb" // U+f2bb
#define ICON_FK_ADDRESS_CARD_O "\xef\x8a\xbc" // U+f2bc
#define ICON_FK_USER_CIRCLE "\xef\x8a\xbd" // U+f2bd
#define ICON_FK_USER_CIRCLE_O "\xef\x8a\xbe" // U+f2be
#define ICON_FK_USER_O "\xef\x8b\x80" // U+f2c0
#define ICON_FK_ID_BADGE "\xef\x8b\x81" // U+f2c1
#define ICON_FK_ID_CARD "\xef\x8b\x82" // U+f2c2
#define ICON_FK_ID_CARD_O "\xef\x8b\x83" // U+f2c3
#define ICON_FK_QUORA "\xef\x8b\x84" // U+f2c4
#define ICON_FK_FREE_CODE_CAMP "\xef\x8b\x85" // U+f2c5
#define ICON_FK_TELEGRAM "\xef\x8b\x86" // U+f2c6
#define ICON_FK_THERMOMETER_FULL "\xef\x8b\x87" // U+f2c7
#define ICON_FK_THERMOMETER_THREE_QUARTERS "\xef\x8b\x88" // U+f2c8
#define ICON_FK_THERMOMETER_HALF "\xef\x8b\x89" // U+f2c9
#define ICON_FK_THERMOMETER_QUARTER "\xef\x8b\x8a" // U+f2ca
#define ICON_FK_THERMOMETER_EMPTY "\xef\x8b\x8b" // U+f2cb
#define ICON_FK_SHOWER "\xef\x8b\x8c" // U+f2cc
#define ICON_FK_BATH "\xef\x8b\x8d" // U+f2cd
#define ICON_FK_PODCAST "\xef\x8b\x8e" // U+f2ce
#define ICON_FK_WINDOW_MAXIMIZE "\xef\x8b\x90" // U+f2d0
#define ICON_FK_WINDOW_MINIMIZE "\xef\x8b\x91" // U+f2d1
#define ICON_FK_WINDOW_RESTORE "\xef\x8b\x92" // U+f2d2
#define ICON_FK_WINDOW_CLOSE "\xef\x8b\x93" // U+f2d3
#define ICON_FK_WINDOW_CLOSE_O "\xef\x8b\x94" // U+f2d4
#define ICON_FK_BANDCAMP "\xef\x8b\x95" // U+f2d5
#define ICON_FK_GRAV "\xef\x8b\x96" // U+f2d6
#define ICON_FK_ETSY "\xef\x8b\x97" // U+f2d7
#define ICON_FK_IMDB "\xef\x8b\x98" // U+f2d8
#define ICON_FK_RAVELRY "\xef\x8b\x99" // U+f2d9
#define ICON_FK_EERCAST "\xef\x8b\x9a" // U+f2da
#define ICON_FK_MICROCHIP "\xef\x8b\x9b" // U+f2db
#define ICON_FK_SNOWFLAKE_O "\xef\x8b\x9c" // U+f2dc
#define ICON_FK_SUPERPOWERS "\xef\x8b\x9d" // U+f2dd
#define ICON_FK_WPEXPLORER "\xef\x8b\x9e" // U+f2de
#define ICON_FK_MEETUP "\xef\x8b\xa0" // U+f2e0
#define ICON_FK_MASTODON "\xef\x8b\xa1" // U+f2e1
#define ICON_FK_MASTODON_ALT "\xef\x8b\xa2" // U+f2e2
#define ICON_FK_FORK_AWESOME "\xef\x8b\xa3" // U+f2e3
#define ICON_FK_PEERTUBE "\xef\x8b\xa4" // U+f2e4
#define ICON_FK_DIASPORA "\xef\x8b\xa5" // U+f2e5
#define ICON_FK_FRIENDICA "\xef\x8b\xa6" // U+f2e6
#define ICON_FK_GNU_SOCIAL "\xef\x8b\xa7" // U+f2e7
#define ICON_FK_LIBERAPAY_SQUARE "\xef\x8b\xa8" // U+f2e8
#define ICON_FK_LIBERAPAY "\xef\x8b\xa9" // U+f2e9
#define ICON_FK_SCUTTLEBUTT "\xef\x8b\xaa" // U+f2ea
#define ICON_FK_HUBZILLA "\xef\x8b\xab" // U+f2eb
#define ICON_FK_SOCIAL_HOME "\xef\x8b\xac" // U+f2ec
#define ICON_FK_ARTSTATION "\xef\x8b\xad" // U+f2ed
#define ICON_FK_DISCORD "\xef\x8b\xae" // U+f2ee
#define ICON_FK_DISCORD_ALT "\xef\x8b\xaf" // U+f2ef
#define ICON_FK_PATREON "\xef\x8b\xb0" // U+f2f0
#define ICON_FK_SNOWDRIFT "\xef\x8b\xb1" // U+f2f1
#define ICON_FK_ACTIVITYPUB "\xef\x8b\xb2" // U+f2f2
#define ICON_FK_ETHEREUM "\xef\x8b\xb3" // U+f2f3
#define ICON_FK_KEYBASE "\xef\x8b\xb4" // U+f2f4
#define ICON_FK_SHAARLI "\xef\x8b\xb5" // U+f2f5
#define ICON_FK_SHAARLI_O "\xef\x8b\xb6" // U+f2f6
#define ICON_FK_KEY_MODERN "\xef\x8b\xb7" // U+f2f7
#define ICON_FK_XMPP "\xef\x8b\xb9" // U+f2f9
#define ICON_FK_ARCHIVE_ORG "\xef\x8b\xbc" // U+f2fc
#define ICON_FK_FREEDOMBOX "\xef\x8b\xbd" // U+f2fd
#define ICON_FK_FACEBOOK_MESSENGER "\xef\x8b\xbe" // U+f2fe
#define ICON_FK_DEBIAN "\xef\x8b\xbf" // U+f2ff
#define ICON_FK_MASTODON_SQUARE "\xef\x8c\x80" // U+f300
#define ICON_FK_TIPEEE "\xef\x8c\x81" // U+f301
#define ICON_FK_REACT "\xef\x8c\x82" // U+f302
#define ICON_FK_DOGMAZIC "\xef\x8c\x83" // U+f303
#define ICON_FK_ZOTERO "\xef\x8c\x89" // U+f309
#define ICON_FK_NODEJS "\xef\x8c\x88" // U+f308
#define ICON_FK_NEXTCLOUD "\xef\x8c\x86" // U+f306
#define ICON_FK_NEXTCLOUD_SQUARE "\xef\x8c\x87" // U+f307
#define ICON_FK_HACKADAY "\xef\x8c\x8a" // U+f30a
#define ICON_FK_LARAVEL "\xef\x8c\x8b" // U+f30b
#define ICON_FK_SIGNALAPP "\xef\x8c\x8c" // U+f30c
#define ICON_FK_GNUPG "\xef\x8c\x8d" // U+f30d
#define ICON_FK_PHP "\xef\x8c\x8e" // U+f30e
#define ICON_FK_FFMPEG "\xef\x8c\x8f" // U+f30f
#define ICON_FK_JOPLIN "\xef\x8c\x90" // U+f310
#define ICON_FK_SYNCTHING "\xef\x8c\x91" // U+f311
#define ICON_FK_INKSCAPE "\xef\x8c\x92" // U+f312
#define ICON_FK_MATRIX_ORG "\xef\x8c\x93" // U+f313
#define ICON_FK_PIXELFED "\xef\x8c\x94" // U+f314
#define ICON_FK_BOOTSTRAP "\xef\x8c\x95" // U+f315
#define ICON_FK_DEV_TO "\xef\x8c\x96" // U+f316
#define ICON_FK_HASHNODE "\xef\x8c\x97" // U+f317
#define ICON_FK_JIRAFEAU "\xef\x8c\x98" // U+f318
#define ICON_FK_EMBY "\xef\x8c\x99" // U+f319
#define ICON_FK_WIKIDATA "\xef\x8c\x9a" // U+f31a
#define ICON_FK_GIMP "\xef\x8c\x9b" // U+f31b
#define ICON_FK_C "\xef\x8c\x9c" // U+f31c
#define ICON_FK_DIGITALOCEAN "\xef\x8c\x9d" // U+f31d
#define ICON_FK_ATT "\xef\x8c\x9e" // U+f31e
#define ICON_FK_GITEA "\xef\x8c\x9f" // U+f31f
#define ICON_FK_FILE_EPUB "\xef\x8c\xa1" // U+f321
#define ICON_FK_PYTHON "\xef\x8c\xa2" // U+f322
#define ICON_FK_ARCHLINUX "\xef\x8c\xa3" // U+f323
#define ICON_FK_PLEROMA "\xef\x8c\xa4" // U+f324
#define ICON_FK_UNSPLASH "\xef\x8c\xa5" // U+f325
#define ICON_FK_HACKSTER "\xef\x8c\xa6" // U+f326
#define ICON_FK_SPELL_CHECK "\xef\x8c\xa7" // U+f327
#define ICON_FK_MOON "\xef\x8c\xa8" // U+f328
#define ICON_FK_SUN "\xef\x8c\xa9" // U+f329
#define ICON_FK_F_DROID "\xef\x8c\xaa" // U+f32a
#define ICON_FK_BIOMETRIC "\xef\x8c\xab" // U+f32b
#define ICON_FK_WIRE "\xef\x8c\xac" // U+f32c
#define ICON_FK_TOR_ONION "\xef\x8c\xae" // U+f32e
#define ICON_FK_VOLUME_MUTE "\xef\x8c\xaf" // U+f32f
#define ICON_FK_BELL_RINGING "\xef\x8c\xad" // U+f32d
#define ICON_FK_BELL_RINGING_O "\xef\x8c\xb0" // U+f330
#define ICON_FK_HAL "\xef\x8c\xb3" // U+f333
#define ICON_FK_JUPYTER "\xef\x8c\xb5" // U+f335
#define ICON_FK_JULIA "\xef\x8c\xb4" // U+f334
#define ICON_FK_CLASSICPRESS "\xef\x8c\xb1" // U+f331
#define ICON_FK_CLASSICPRESS_CIRCLE "\xef\x8c\xb2" // U+f332
#define ICON_FK_OPEN_COLLECTIVE "\xef\x8c\xb6" // U+f336
#define ICON_FK_ORCID "\xef\x8c\xb7" // U+f337
#define ICON_FK_RESEARCHGATE "\xef\x8c\xb8" // U+f338
#define ICON_FK_FUNKWHALE "\xef\x8c\xb9" // U+f339
#define ICON_FK_ASKFM "\xef\x8c\xba" // U+f33a
#define ICON_FK_BLOCKSTACK "\xef\x8c\xbb" // U+f33b
#define ICON_FK_BOARDGAMEGEEK "\xef\x8c\xbc" // U+f33c
#define ICON_FK_BUNNY "\xef\x8d\x9f" // U+f35f
#define ICON_FK_BUYMEACOFFEE "\xef\x8c\xbd" // U+f33d
#define ICON_FK_CC_BY "\xef\x8c\xbe" // U+f33e
#define ICON_FK_CC_CC "\xef\x8c\xbf" // U+f33f
#define ICON_FK_CC_NC_EU "\xef\x8d\x81" // U+f341
#define ICON_FK_CC_NC_JP "\xef\x8d\x82" // U+f342
#define ICON_FK_CC_NC "\xef\x8d\x80" // U+f340
#define ICON_FK_CC_ND "\xef\x8d\x83" // U+f343
#define ICON_FK_CC_PD "\xef\x8d\x84" // U+f344
#define ICON_FK_CC_REMIX "\xef\x8d\x85" // U+f345
#define ICON_FK_CC_SA "\xef\x8d\x86" // U+f346
#define ICON_FK_CC_SHARE "\xef\x8d\x87" // U+f347
#define ICON_FK_CC_ZERO "\xef\x8d\x88" // U+f348
#define ICON_FK_CONWAY_GLIDER "\xef\x8d\x89" // U+f349
#define ICON_FK_CSHARP "\xef\x8d\x8a" // U+f34a
#define ICON_FK_EMAIL_BULK "\xef\x8d\x8b" // U+f34b
#define ICON_FK_EMAIL_BULK_O "\xef\x8d\x8c" // U+f34c
#define ICON_FK_GNU "\xef\x8d\x8d" // U+f34d
#define ICON_FK_GOOGLE_PLAY "\xef\x8d\x8e" // U+f34e
#define ICON_FK_HEROKU "\xef\x8d\x8f" // U+f34f
#define ICON_FK_HOME_ASSISTANT "\xef\x8d\x90" // U+f350
#define ICON_FK_JAVA "\xef\x8d\x91" // U+f351
#define ICON_FK_MARIADB "\xef\x8d\x92" // U+f352
#define ICON_FK_MARKDOWN "\xef\x8d\x93" // U+f353
#define ICON_FK_MYSQL "\xef\x8d\x94" // U+f354
#define ICON_FK_NORDCAST "\xef\x8d\x95" // U+f355
#define ICON_FK_PLUME "\xef\x8d\x96" // U+f356
#define ICON_FK_POSTGRESQL "\xef\x8d\x97" // U+f357
#define ICON_FK_SASS_ALT "\xef\x8d\x99" // U+f359
#define ICON_FK_SASS "\xef\x8d\x98" // U+f358
#define ICON_FK_SKATE "\xef\x8d\x9a" // U+f35a
#define ICON_FK_SKETCHFAB "\xef\x8d\x9b" // U+f35b
#define ICON_FK_TEX "\xef\x8d\x9c" // U+f35c
#define ICON_FK_TEXTPATTERN "\xef\x8d\x9d" // U+f35d
#define ICON_FK_UNITY "\xef\x8d\x9e" // U+f35e

View File

@ -0,0 +1,939 @@
// Generated by https://github.com/juliettef/IconFontCppHeaders script GenerateIconFontCppHeaders.py for languages C and C++
// from https://raw.githubusercontent.com/google/material-design-icons/master/iconfont/codepoints
// for use with https://github.com/google/material-design-icons/blob/master/iconfont/MaterialIcons-Regular.ttf
#define FONT_ICON_FILE_NAME_MD "MaterialIcons-Regular.ttf"
#define ICON_MIN_MD 0xe000
#define ICON_MAX_MD 0xeb4c
#define ICON_MD_3D_ROTATION "\xee\xa1\x8d"
#define ICON_MD_AC_UNIT "\xee\xac\xbb"
#define ICON_MD_ACCESS_ALARM "\xee\x86\x90"
#define ICON_MD_ACCESS_ALARMS "\xee\x86\x91"
#define ICON_MD_ACCESS_TIME "\xee\x86\x92"
#define ICON_MD_ACCESSIBILITY "\xee\xa1\x8e"
#define ICON_MD_ACCESSIBLE "\xee\xa4\x94"
#define ICON_MD_ACCOUNT_BALANCE "\xee\xa1\x8f"
#define ICON_MD_ACCOUNT_BALANCE_WALLET "\xee\xa1\x90"
#define ICON_MD_ACCOUNT_BOX "\xee\xa1\x91"
#define ICON_MD_ACCOUNT_CIRCLE "\xee\xa1\x93"
#define ICON_MD_ADB "\xee\x98\x8e"
#define ICON_MD_ADD "\xee\x85\x85"
#define ICON_MD_ADD_A_PHOTO "\xee\x90\xb9"
#define ICON_MD_ADD_ALARM "\xee\x86\x93"
#define ICON_MD_ADD_ALERT "\xee\x80\x83"
#define ICON_MD_ADD_BOX "\xee\x85\x86"
#define ICON_MD_ADD_CIRCLE "\xee\x85\x87"
#define ICON_MD_ADD_CIRCLE_OUTLINE "\xee\x85\x88"
#define ICON_MD_ADD_LOCATION "\xee\x95\xa7"
#define ICON_MD_ADD_SHOPPING_CART "\xee\xa1\x94"
#define ICON_MD_ADD_TO_PHOTOS "\xee\x8e\x9d"
#define ICON_MD_ADD_TO_QUEUE "\xee\x81\x9c"
#define ICON_MD_ADJUST "\xee\x8e\x9e"
#define ICON_MD_AIRLINE_SEAT_FLAT "\xee\x98\xb0"
#define ICON_MD_AIRLINE_SEAT_FLAT_ANGLED "\xee\x98\xb1"
#define ICON_MD_AIRLINE_SEAT_INDIVIDUAL_SUITE "\xee\x98\xb2"
#define ICON_MD_AIRLINE_SEAT_LEGROOM_EXTRA "\xee\x98\xb3"
#define ICON_MD_AIRLINE_SEAT_LEGROOM_NORMAL "\xee\x98\xb4"
#define ICON_MD_AIRLINE_SEAT_LEGROOM_REDUCED "\xee\x98\xb5"
#define ICON_MD_AIRLINE_SEAT_RECLINE_EXTRA "\xee\x98\xb6"
#define ICON_MD_AIRLINE_SEAT_RECLINE_NORMAL "\xee\x98\xb7"
#define ICON_MD_AIRPLANEMODE_ACTIVE "\xee\x86\x95"
#define ICON_MD_AIRPLANEMODE_INACTIVE "\xee\x86\x94"
#define ICON_MD_AIRPLAY "\xee\x81\x95"
#define ICON_MD_AIRPORT_SHUTTLE "\xee\xac\xbc"
#define ICON_MD_ALARM "\xee\xa1\x95"
#define ICON_MD_ALARM_ADD "\xee\xa1\x96"
#define ICON_MD_ALARM_OFF "\xee\xa1\x97"
#define ICON_MD_ALARM_ON "\xee\xa1\x98"
#define ICON_MD_ALBUM "\xee\x80\x99"
#define ICON_MD_ALL_INCLUSIVE "\xee\xac\xbd"
#define ICON_MD_ALL_OUT "\xee\xa4\x8b"
#define ICON_MD_ANDROID "\xee\xa1\x99"
#define ICON_MD_ANNOUNCEMENT "\xee\xa1\x9a"
#define ICON_MD_APPS "\xee\x97\x83"
#define ICON_MD_ARCHIVE "\xee\x85\x89"
#define ICON_MD_ARROW_BACK "\xee\x97\x84"
#define ICON_MD_ARROW_DOWNWARD "\xee\x97\x9b"
#define ICON_MD_ARROW_DROP_DOWN "\xee\x97\x85"
#define ICON_MD_ARROW_DROP_DOWN_CIRCLE "\xee\x97\x86"
#define ICON_MD_ARROW_DROP_UP "\xee\x97\x87"
#define ICON_MD_ARROW_FORWARD "\xee\x97\x88"
#define ICON_MD_ARROW_UPWARD "\xee\x97\x98"
#define ICON_MD_ART_TRACK "\xee\x81\xa0"
#define ICON_MD_ASPECT_RATIO "\xee\xa1\x9b"
#define ICON_MD_ASSESSMENT "\xee\xa1\x9c"
#define ICON_MD_ASSIGNMENT "\xee\xa1\x9d"
#define ICON_MD_ASSIGNMENT_IND "\xee\xa1\x9e"
#define ICON_MD_ASSIGNMENT_LATE "\xee\xa1\x9f"
#define ICON_MD_ASSIGNMENT_RETURN "\xee\xa1\xa0"
#define ICON_MD_ASSIGNMENT_RETURNED "\xee\xa1\xa1"
#define ICON_MD_ASSIGNMENT_TURNED_IN "\xee\xa1\xa2"
#define ICON_MD_ASSISTANT "\xee\x8e\x9f"
#define ICON_MD_ASSISTANT_PHOTO "\xee\x8e\xa0"
#define ICON_MD_ATTACH_FILE "\xee\x88\xa6"
#define ICON_MD_ATTACH_MONEY "\xee\x88\xa7"
#define ICON_MD_ATTACHMENT "\xee\x8a\xbc"
#define ICON_MD_AUDIOTRACK "\xee\x8e\xa1"
#define ICON_MD_AUTORENEW "\xee\xa1\xa3"
#define ICON_MD_AV_TIMER "\xee\x80\x9b"
#define ICON_MD_BACKSPACE "\xee\x85\x8a"
#define ICON_MD_BACKUP "\xee\xa1\xa4"
#define ICON_MD_BATTERY_ALERT "\xee\x86\x9c"
#define ICON_MD_BATTERY_CHARGING_FULL "\xee\x86\xa3"
#define ICON_MD_BATTERY_FULL "\xee\x86\xa4"
#define ICON_MD_BATTERY_STD "\xee\x86\xa5"
#define ICON_MD_BATTERY_UNKNOWN "\xee\x86\xa6"
#define ICON_MD_BEACH_ACCESS "\xee\xac\xbe"
#define ICON_MD_BEENHERE "\xee\x94\xad"
#define ICON_MD_BLOCK "\xee\x85\x8b"
#define ICON_MD_BLUETOOTH "\xee\x86\xa7"
#define ICON_MD_BLUETOOTH_AUDIO "\xee\x98\x8f"
#define ICON_MD_BLUETOOTH_CONNECTED "\xee\x86\xa8"
#define ICON_MD_BLUETOOTH_DISABLED "\xee\x86\xa9"
#define ICON_MD_BLUETOOTH_SEARCHING "\xee\x86\xaa"
#define ICON_MD_BLUR_CIRCULAR "\xee\x8e\xa2"
#define ICON_MD_BLUR_LINEAR "\xee\x8e\xa3"
#define ICON_MD_BLUR_OFF "\xee\x8e\xa4"
#define ICON_MD_BLUR_ON "\xee\x8e\xa5"
#define ICON_MD_BOOK "\xee\xa1\xa5"
#define ICON_MD_BOOKMARK "\xee\xa1\xa6"
#define ICON_MD_BOOKMARK_BORDER "\xee\xa1\xa7"
#define ICON_MD_BORDER_ALL "\xee\x88\xa8"
#define ICON_MD_BORDER_BOTTOM "\xee\x88\xa9"
#define ICON_MD_BORDER_CLEAR "\xee\x88\xaa"
#define ICON_MD_BORDER_COLOR "\xee\x88\xab"
#define ICON_MD_BORDER_HORIZONTAL "\xee\x88\xac"
#define ICON_MD_BORDER_INNER "\xee\x88\xad"
#define ICON_MD_BORDER_LEFT "\xee\x88\xae"
#define ICON_MD_BORDER_OUTER "\xee\x88\xaf"
#define ICON_MD_BORDER_RIGHT "\xee\x88\xb0"
#define ICON_MD_BORDER_STYLE "\xee\x88\xb1"
#define ICON_MD_BORDER_TOP "\xee\x88\xb2"
#define ICON_MD_BORDER_VERTICAL "\xee\x88\xb3"
#define ICON_MD_BRANDING_WATERMARK "\xee\x81\xab"
#define ICON_MD_BRIGHTNESS_1 "\xee\x8e\xa6"
#define ICON_MD_BRIGHTNESS_2 "\xee\x8e\xa7"
#define ICON_MD_BRIGHTNESS_3 "\xee\x8e\xa8"
#define ICON_MD_BRIGHTNESS_4 "\xee\x8e\xa9"
#define ICON_MD_BRIGHTNESS_5 "\xee\x8e\xaa"
#define ICON_MD_BRIGHTNESS_6 "\xee\x8e\xab"
#define ICON_MD_BRIGHTNESS_7 "\xee\x8e\xac"
#define ICON_MD_BRIGHTNESS_AUTO "\xee\x86\xab"
#define ICON_MD_BRIGHTNESS_HIGH "\xee\x86\xac"
#define ICON_MD_BRIGHTNESS_LOW "\xee\x86\xad"
#define ICON_MD_BRIGHTNESS_MEDIUM "\xee\x86\xae"
#define ICON_MD_BROKEN_IMAGE "\xee\x8e\xad"
#define ICON_MD_BRUSH "\xee\x8e\xae"
#define ICON_MD_BUBBLE_CHART "\xee\x9b\x9d"
#define ICON_MD_BUG_REPORT "\xee\xa1\xa8"
#define ICON_MD_BUILD "\xee\xa1\xa9"
#define ICON_MD_BURST_MODE "\xee\x90\xbc"
#define ICON_MD_BUSINESS "\xee\x82\xaf"
#define ICON_MD_BUSINESS_CENTER "\xee\xac\xbf"
#define ICON_MD_CACHED "\xee\xa1\xaa"
#define ICON_MD_CAKE "\xee\x9f\xa9"
#define ICON_MD_CALL "\xee\x82\xb0"
#define ICON_MD_CALL_END "\xee\x82\xb1"
#define ICON_MD_CALL_MADE "\xee\x82\xb2"
#define ICON_MD_CALL_MERGE "\xee\x82\xb3"
#define ICON_MD_CALL_MISSED "\xee\x82\xb4"
#define ICON_MD_CALL_MISSED_OUTGOING "\xee\x83\xa4"
#define ICON_MD_CALL_RECEIVED "\xee\x82\xb5"
#define ICON_MD_CALL_SPLIT "\xee\x82\xb6"
#define ICON_MD_CALL_TO_ACTION "\xee\x81\xac"
#define ICON_MD_CAMERA "\xee\x8e\xaf"
#define ICON_MD_CAMERA_ALT "\xee\x8e\xb0"
#define ICON_MD_CAMERA_ENHANCE "\xee\xa3\xbc"
#define ICON_MD_CAMERA_FRONT "\xee\x8e\xb1"
#define ICON_MD_CAMERA_REAR "\xee\x8e\xb2"
#define ICON_MD_CAMERA_ROLL "\xee\x8e\xb3"
#define ICON_MD_CANCEL "\xee\x97\x89"
#define ICON_MD_CARD_GIFTCARD "\xee\xa3\xb6"
#define ICON_MD_CARD_MEMBERSHIP "\xee\xa3\xb7"
#define ICON_MD_CARD_TRAVEL "\xee\xa3\xb8"
#define ICON_MD_CASINO "\xee\xad\x80"
#define ICON_MD_CAST "\xee\x8c\x87"
#define ICON_MD_CAST_CONNECTED "\xee\x8c\x88"
#define ICON_MD_CENTER_FOCUS_STRONG "\xee\x8e\xb4"
#define ICON_MD_CENTER_FOCUS_WEAK "\xee\x8e\xb5"
#define ICON_MD_CHANGE_HISTORY "\xee\xa1\xab"
#define ICON_MD_CHAT "\xee\x82\xb7"
#define ICON_MD_CHAT_BUBBLE "\xee\x83\x8a"
#define ICON_MD_CHAT_BUBBLE_OUTLINE "\xee\x83\x8b"
#define ICON_MD_CHECK "\xee\x97\x8a"
#define ICON_MD_CHECK_BOX "\xee\xa0\xb4"
#define ICON_MD_CHECK_BOX_OUTLINE_BLANK "\xee\xa0\xb5"
#define ICON_MD_CHECK_CIRCLE "\xee\xa1\xac"
#define ICON_MD_CHEVRON_LEFT "\xee\x97\x8b"
#define ICON_MD_CHEVRON_RIGHT "\xee\x97\x8c"
#define ICON_MD_CHILD_CARE "\xee\xad\x81"
#define ICON_MD_CHILD_FRIENDLY "\xee\xad\x82"
#define ICON_MD_CHROME_READER_MODE "\xee\xa1\xad"
#define ICON_MD_CLASS "\xee\xa1\xae"
#define ICON_MD_CLEAR "\xee\x85\x8c"
#define ICON_MD_CLEAR_ALL "\xee\x82\xb8"
#define ICON_MD_CLOSE "\xee\x97\x8d"
#define ICON_MD_CLOSED_CAPTION "\xee\x80\x9c"
#define ICON_MD_CLOUD "\xee\x8a\xbd"
#define ICON_MD_CLOUD_CIRCLE "\xee\x8a\xbe"
#define ICON_MD_CLOUD_DONE "\xee\x8a\xbf"
#define ICON_MD_CLOUD_DOWNLOAD "\xee\x8b\x80"
#define ICON_MD_CLOUD_OFF "\xee\x8b\x81"
#define ICON_MD_CLOUD_QUEUE "\xee\x8b\x82"
#define ICON_MD_CLOUD_UPLOAD "\xee\x8b\x83"
#define ICON_MD_CODE "\xee\xa1\xaf"
#define ICON_MD_COLLECTIONS "\xee\x8e\xb6"
#define ICON_MD_COLLECTIONS_BOOKMARK "\xee\x90\xb1"
#define ICON_MD_COLOR_LENS "\xee\x8e\xb7"
#define ICON_MD_COLORIZE "\xee\x8e\xb8"
#define ICON_MD_COMMENT "\xee\x82\xb9"
#define ICON_MD_COMPARE "\xee\x8e\xb9"
#define ICON_MD_COMPARE_ARROWS "\xee\xa4\x95"
#define ICON_MD_COMPUTER "\xee\x8c\x8a"
#define ICON_MD_CONFIRMATION_NUMBER "\xee\x98\xb8"
#define ICON_MD_CONTACT_MAIL "\xee\x83\x90"
#define ICON_MD_CONTACT_PHONE "\xee\x83\x8f"
#define ICON_MD_CONTACTS "\xee\x82\xba"
#define ICON_MD_CONTENT_COPY "\xee\x85\x8d"
#define ICON_MD_CONTENT_CUT "\xee\x85\x8e"
#define ICON_MD_CONTENT_PASTE "\xee\x85\x8f"
#define ICON_MD_CONTROL_POINT "\xee\x8e\xba"
#define ICON_MD_CONTROL_POINT_DUPLICATE "\xee\x8e\xbb"
#define ICON_MD_COPYRIGHT "\xee\xa4\x8c"
#define ICON_MD_CREATE "\xee\x85\x90"
#define ICON_MD_CREATE_NEW_FOLDER "\xee\x8b\x8c"
#define ICON_MD_CREDIT_CARD "\xee\xa1\xb0"
#define ICON_MD_CROP "\xee\x8e\xbe"
#define ICON_MD_CROP_16_9 "\xee\x8e\xbc"
#define ICON_MD_CROP_3_2 "\xee\x8e\xbd"
#define ICON_MD_CROP_5_4 "\xee\x8e\xbf"
#define ICON_MD_CROP_7_5 "\xee\x8f\x80"
#define ICON_MD_CROP_DIN "\xee\x8f\x81"
#define ICON_MD_CROP_FREE "\xee\x8f\x82"
#define ICON_MD_CROP_LANDSCAPE "\xee\x8f\x83"
#define ICON_MD_CROP_ORIGINAL "\xee\x8f\x84"
#define ICON_MD_CROP_PORTRAIT "\xee\x8f\x85"
#define ICON_MD_CROP_ROTATE "\xee\x90\xb7"
#define ICON_MD_CROP_SQUARE "\xee\x8f\x86"
#define ICON_MD_DASHBOARD "\xee\xa1\xb1"
#define ICON_MD_DATA_USAGE "\xee\x86\xaf"
#define ICON_MD_DATE_RANGE "\xee\xa4\x96"
#define ICON_MD_DEHAZE "\xee\x8f\x87"
#define ICON_MD_DELETE "\xee\xa1\xb2"
#define ICON_MD_DELETE_FOREVER "\xee\xa4\xab"
#define ICON_MD_DELETE_SWEEP "\xee\x85\xac"
#define ICON_MD_DESCRIPTION "\xee\xa1\xb3"
#define ICON_MD_DESKTOP_MAC "\xee\x8c\x8b"
#define ICON_MD_DESKTOP_WINDOWS "\xee\x8c\x8c"
#define ICON_MD_DETAILS "\xee\x8f\x88"
#define ICON_MD_DEVELOPER_BOARD "\xee\x8c\x8d"
#define ICON_MD_DEVELOPER_MODE "\xee\x86\xb0"
#define ICON_MD_DEVICE_HUB "\xee\x8c\xb5"
#define ICON_MD_DEVICES "\xee\x86\xb1"
#define ICON_MD_DEVICES_OTHER "\xee\x8c\xb7"
#define ICON_MD_DIALER_SIP "\xee\x82\xbb"
#define ICON_MD_DIALPAD "\xee\x82\xbc"
#define ICON_MD_DIRECTIONS "\xee\x94\xae"
#define ICON_MD_DIRECTIONS_BIKE "\xee\x94\xaf"
#define ICON_MD_DIRECTIONS_BOAT "\xee\x94\xb2"
#define ICON_MD_DIRECTIONS_BUS "\xee\x94\xb0"
#define ICON_MD_DIRECTIONS_CAR "\xee\x94\xb1"
#define ICON_MD_DIRECTIONS_RAILWAY "\xee\x94\xb4"
#define ICON_MD_DIRECTIONS_RUN "\xee\x95\xa6"
#define ICON_MD_DIRECTIONS_SUBWAY "\xee\x94\xb3"
#define ICON_MD_DIRECTIONS_TRANSIT "\xee\x94\xb5"
#define ICON_MD_DIRECTIONS_WALK "\xee\x94\xb6"
#define ICON_MD_DISC_FULL "\xee\x98\x90"
#define ICON_MD_DNS "\xee\xa1\xb5"
#define ICON_MD_DO_NOT_DISTURB "\xee\x98\x92"
#define ICON_MD_DO_NOT_DISTURB_ALT "\xee\x98\x91"
#define ICON_MD_DO_NOT_DISTURB_OFF "\xee\x99\x83"
#define ICON_MD_DO_NOT_DISTURB_ON "\xee\x99\x84"
#define ICON_MD_DOCK "\xee\x8c\x8e"
#define ICON_MD_DOMAIN "\xee\x9f\xae"
#define ICON_MD_DONE "\xee\xa1\xb6"
#define ICON_MD_DONE_ALL "\xee\xa1\xb7"
#define ICON_MD_DONUT_LARGE "\xee\xa4\x97"
#define ICON_MD_DONUT_SMALL "\xee\xa4\x98"
#define ICON_MD_DRAFTS "\xee\x85\x91"
#define ICON_MD_DRAG_HANDLE "\xee\x89\x9d"
#define ICON_MD_DRIVE_ETA "\xee\x98\x93"
#define ICON_MD_DVR "\xee\x86\xb2"
#define ICON_MD_EDIT "\xee\x8f\x89"
#define ICON_MD_EDIT_LOCATION "\xee\x95\xa8"
#define ICON_MD_EJECT "\xee\xa3\xbb"
#define ICON_MD_EMAIL "\xee\x82\xbe"
#define ICON_MD_ENHANCED_ENCRYPTION "\xee\x98\xbf"
#define ICON_MD_EQUALIZER "\xee\x80\x9d"
#define ICON_MD_ERROR "\xee\x80\x80"
#define ICON_MD_ERROR_OUTLINE "\xee\x80\x81"
#define ICON_MD_EURO_SYMBOL "\xee\xa4\xa6"
#define ICON_MD_EV_STATION "\xee\x95\xad"
#define ICON_MD_EVENT "\xee\xa1\xb8"
#define ICON_MD_EVENT_AVAILABLE "\xee\x98\x94"
#define ICON_MD_EVENT_BUSY "\xee\x98\x95"
#define ICON_MD_EVENT_NOTE "\xee\x98\x96"
#define ICON_MD_EVENT_SEAT "\xee\xa4\x83"
#define ICON_MD_EXIT_TO_APP "\xee\xa1\xb9"
#define ICON_MD_EXPAND_LESS "\xee\x97\x8e"
#define ICON_MD_EXPAND_MORE "\xee\x97\x8f"
#define ICON_MD_EXPLICIT "\xee\x80\x9e"
#define ICON_MD_EXPLORE "\xee\xa1\xba"
#define ICON_MD_EXPOSURE "\xee\x8f\x8a"
#define ICON_MD_EXPOSURE_NEG_1 "\xee\x8f\x8b"
#define ICON_MD_EXPOSURE_NEG_2 "\xee\x8f\x8c"
#define ICON_MD_EXPOSURE_PLUS_1 "\xee\x8f\x8d"
#define ICON_MD_EXPOSURE_PLUS_2 "\xee\x8f\x8e"
#define ICON_MD_EXPOSURE_ZERO "\xee\x8f\x8f"
#define ICON_MD_EXTENSION "\xee\xa1\xbb"
#define ICON_MD_FACE "\xee\xa1\xbc"
#define ICON_MD_FAST_FORWARD "\xee\x80\x9f"
#define ICON_MD_FAST_REWIND "\xee\x80\xa0"
#define ICON_MD_FAVORITE "\xee\xa1\xbd"
#define ICON_MD_FAVORITE_BORDER "\xee\xa1\xbe"
#define ICON_MD_FEATURED_PLAY_LIST "\xee\x81\xad"
#define ICON_MD_FEATURED_VIDEO "\xee\x81\xae"
#define ICON_MD_FEEDBACK "\xee\xa1\xbf"
#define ICON_MD_FIBER_DVR "\xee\x81\x9d"
#define ICON_MD_FIBER_MANUAL_RECORD "\xee\x81\xa1"
#define ICON_MD_FIBER_NEW "\xee\x81\x9e"
#define ICON_MD_FIBER_PIN "\xee\x81\xaa"
#define ICON_MD_FIBER_SMART_RECORD "\xee\x81\xa2"
#define ICON_MD_FILE_DOWNLOAD "\xee\x8b\x84"
#define ICON_MD_FILE_UPLOAD "\xee\x8b\x86"
#define ICON_MD_FILTER "\xee\x8f\x93"
#define ICON_MD_FILTER_1 "\xee\x8f\x90"
#define ICON_MD_FILTER_2 "\xee\x8f\x91"
#define ICON_MD_FILTER_3 "\xee\x8f\x92"
#define ICON_MD_FILTER_4 "\xee\x8f\x94"
#define ICON_MD_FILTER_5 "\xee\x8f\x95"
#define ICON_MD_FILTER_6 "\xee\x8f\x96"
#define ICON_MD_FILTER_7 "\xee\x8f\x97"
#define ICON_MD_FILTER_8 "\xee\x8f\x98"
#define ICON_MD_FILTER_9 "\xee\x8f\x99"
#define ICON_MD_FILTER_9_PLUS "\xee\x8f\x9a"
#define ICON_MD_FILTER_B_AND_W "\xee\x8f\x9b"
#define ICON_MD_FILTER_CENTER_FOCUS "\xee\x8f\x9c"
#define ICON_MD_FILTER_DRAMA "\xee\x8f\x9d"
#define ICON_MD_FILTER_FRAMES "\xee\x8f\x9e"
#define ICON_MD_FILTER_HDR "\xee\x8f\x9f"
#define ICON_MD_FILTER_LIST "\xee\x85\x92"
#define ICON_MD_FILTER_NONE "\xee\x8f\xa0"
#define ICON_MD_FILTER_TILT_SHIFT "\xee\x8f\xa2"
#define ICON_MD_FILTER_VINTAGE "\xee\x8f\xa3"
#define ICON_MD_FIND_IN_PAGE "\xee\xa2\x80"
#define ICON_MD_FIND_REPLACE "\xee\xa2\x81"
#define ICON_MD_FINGERPRINT "\xee\xa4\x8d"
#define ICON_MD_FIRST_PAGE "\xee\x97\x9c"
#define ICON_MD_FITNESS_CENTER "\xee\xad\x83"
#define ICON_MD_FLAG "\xee\x85\x93"
#define ICON_MD_FLARE "\xee\x8f\xa4"
#define ICON_MD_FLASH_AUTO "\xee\x8f\xa5"
#define ICON_MD_FLASH_OFF "\xee\x8f\xa6"
#define ICON_MD_FLASH_ON "\xee\x8f\xa7"
#define ICON_MD_FLIGHT "\xee\x94\xb9"
#define ICON_MD_FLIGHT_LAND "\xee\xa4\x84"
#define ICON_MD_FLIGHT_TAKEOFF "\xee\xa4\x85"
#define ICON_MD_FLIP "\xee\x8f\xa8"
#define ICON_MD_FLIP_TO_BACK "\xee\xa2\x82"
#define ICON_MD_FLIP_TO_FRONT "\xee\xa2\x83"
#define ICON_MD_FOLDER "\xee\x8b\x87"
#define ICON_MD_FOLDER_OPEN "\xee\x8b\x88"
#define ICON_MD_FOLDER_SHARED "\xee\x8b\x89"
#define ICON_MD_FOLDER_SPECIAL "\xee\x98\x97"
#define ICON_MD_FONT_DOWNLOAD "\xee\x85\xa7"
#define ICON_MD_FORMAT_ALIGN_CENTER "\xee\x88\xb4"
#define ICON_MD_FORMAT_ALIGN_JUSTIFY "\xee\x88\xb5"
#define ICON_MD_FORMAT_ALIGN_LEFT "\xee\x88\xb6"
#define ICON_MD_FORMAT_ALIGN_RIGHT "\xee\x88\xb7"
#define ICON_MD_FORMAT_BOLD "\xee\x88\xb8"
#define ICON_MD_FORMAT_CLEAR "\xee\x88\xb9"
#define ICON_MD_FORMAT_COLOR_FILL "\xee\x88\xba"
#define ICON_MD_FORMAT_COLOR_RESET "\xee\x88\xbb"
#define ICON_MD_FORMAT_COLOR_TEXT "\xee\x88\xbc"
#define ICON_MD_FORMAT_INDENT_DECREASE "\xee\x88\xbd"
#define ICON_MD_FORMAT_INDENT_INCREASE "\xee\x88\xbe"
#define ICON_MD_FORMAT_ITALIC "\xee\x88\xbf"
#define ICON_MD_FORMAT_LINE_SPACING "\xee\x89\x80"
#define ICON_MD_FORMAT_LIST_BULLETED "\xee\x89\x81"
#define ICON_MD_FORMAT_LIST_NUMBERED "\xee\x89\x82"
#define ICON_MD_FORMAT_PAINT "\xee\x89\x83"
#define ICON_MD_FORMAT_QUOTE "\xee\x89\x84"
#define ICON_MD_FORMAT_SHAPES "\xee\x89\x9e"
#define ICON_MD_FORMAT_SIZE "\xee\x89\x85"
#define ICON_MD_FORMAT_STRIKETHROUGH "\xee\x89\x86"
#define ICON_MD_FORMAT_TEXTDIRECTION_L_TO_R "\xee\x89\x87"
#define ICON_MD_FORMAT_TEXTDIRECTION_R_TO_L "\xee\x89\x88"
#define ICON_MD_FORMAT_UNDERLINED "\xee\x89\x89"
#define ICON_MD_FORUM "\xee\x82\xbf"
#define ICON_MD_FORWARD "\xee\x85\x94"
#define ICON_MD_FORWARD_10 "\xee\x81\x96"
#define ICON_MD_FORWARD_30 "\xee\x81\x97"
#define ICON_MD_FORWARD_5 "\xee\x81\x98"
#define ICON_MD_FREE_BREAKFAST "\xee\xad\x84"
#define ICON_MD_FULLSCREEN "\xee\x97\x90"
#define ICON_MD_FULLSCREEN_EXIT "\xee\x97\x91"
#define ICON_MD_FUNCTIONS "\xee\x89\x8a"
#define ICON_MD_G_TRANSLATE "\xee\xa4\xa7"
#define ICON_MD_GAMEPAD "\xee\x8c\x8f"
#define ICON_MD_GAMES "\xee\x80\xa1"
#define ICON_MD_GAVEL "\xee\xa4\x8e"
#define ICON_MD_GESTURE "\xee\x85\x95"
#define ICON_MD_GET_APP "\xee\xa2\x84"
#define ICON_MD_GIF "\xee\xa4\x88"
#define ICON_MD_GOLF_COURSE "\xee\xad\x85"
#define ICON_MD_GPS_FIXED "\xee\x86\xb3"
#define ICON_MD_GPS_NOT_FIXED "\xee\x86\xb4"
#define ICON_MD_GPS_OFF "\xee\x86\xb5"
#define ICON_MD_GRADE "\xee\xa2\x85"
#define ICON_MD_GRADIENT "\xee\x8f\xa9"
#define ICON_MD_GRAIN "\xee\x8f\xaa"
#define ICON_MD_GRAPHIC_EQ "\xee\x86\xb8"
#define ICON_MD_GRID_OFF "\xee\x8f\xab"
#define ICON_MD_GRID_ON "\xee\x8f\xac"
#define ICON_MD_GROUP "\xee\x9f\xaf"
#define ICON_MD_GROUP_ADD "\xee\x9f\xb0"
#define ICON_MD_GROUP_WORK "\xee\xa2\x86"
#define ICON_MD_HD "\xee\x81\x92"
#define ICON_MD_HDR_OFF "\xee\x8f\xad"
#define ICON_MD_HDR_ON "\xee\x8f\xae"
#define ICON_MD_HDR_STRONG "\xee\x8f\xb1"
#define ICON_MD_HDR_WEAK "\xee\x8f\xb2"
#define ICON_MD_HEADSET "\xee\x8c\x90"
#define ICON_MD_HEADSET_MIC "\xee\x8c\x91"
#define ICON_MD_HEALING "\xee\x8f\xb3"
#define ICON_MD_HEARING "\xee\x80\xa3"
#define ICON_MD_HELP "\xee\xa2\x87"
#define ICON_MD_HELP_OUTLINE "\xee\xa3\xbd"
#define ICON_MD_HIGH_QUALITY "\xee\x80\xa4"
#define ICON_MD_HIGHLIGHT "\xee\x89\x9f"
#define ICON_MD_HIGHLIGHT_OFF "\xee\xa2\x88"
#define ICON_MD_HISTORY "\xee\xa2\x89"
#define ICON_MD_HOME "\xee\xa2\x8a"
#define ICON_MD_HOT_TUB "\xee\xad\x86"
#define ICON_MD_HOTEL "\xee\x94\xba"
#define ICON_MD_HOURGLASS_EMPTY "\xee\xa2\x8b"
#define ICON_MD_HOURGLASS_FULL "\xee\xa2\x8c"
#define ICON_MD_HTTP "\xee\xa4\x82"
#define ICON_MD_HTTPS "\xee\xa2\x8d"
#define ICON_MD_IMAGE "\xee\x8f\xb4"
#define ICON_MD_IMAGE_ASPECT_RATIO "\xee\x8f\xb5"
#define ICON_MD_IMPORT_CONTACTS "\xee\x83\xa0"
#define ICON_MD_IMPORT_EXPORT "\xee\x83\x83"
#define ICON_MD_IMPORTANT_DEVICES "\xee\xa4\x92"
#define ICON_MD_INBOX "\xee\x85\x96"
#define ICON_MD_INDETERMINATE_CHECK_BOX "\xee\xa4\x89"
#define ICON_MD_INFO "\xee\xa2\x8e"
#define ICON_MD_INFO_OUTLINE "\xee\xa2\x8f"
#define ICON_MD_INPUT "\xee\xa2\x90"
#define ICON_MD_INSERT_CHART "\xee\x89\x8b"
#define ICON_MD_INSERT_COMMENT "\xee\x89\x8c"
#define ICON_MD_INSERT_DRIVE_FILE "\xee\x89\x8d"
#define ICON_MD_INSERT_EMOTICON "\xee\x89\x8e"
#define ICON_MD_INSERT_INVITATION "\xee\x89\x8f"
#define ICON_MD_INSERT_LINK "\xee\x89\x90"
#define ICON_MD_INSERT_PHOTO "\xee\x89\x91"
#define ICON_MD_INVERT_COLORS "\xee\xa2\x91"
#define ICON_MD_INVERT_COLORS_OFF "\xee\x83\x84"
#define ICON_MD_ISO "\xee\x8f\xb6"
#define ICON_MD_KEYBOARD "\xee\x8c\x92"
#define ICON_MD_KEYBOARD_ARROW_DOWN "\xee\x8c\x93"
#define ICON_MD_KEYBOARD_ARROW_LEFT "\xee\x8c\x94"
#define ICON_MD_KEYBOARD_ARROW_RIGHT "\xee\x8c\x95"
#define ICON_MD_KEYBOARD_ARROW_UP "\xee\x8c\x96"
#define ICON_MD_KEYBOARD_BACKSPACE "\xee\x8c\x97"
#define ICON_MD_KEYBOARD_CAPSLOCK "\xee\x8c\x98"
#define ICON_MD_KEYBOARD_HIDE "\xee\x8c\x9a"
#define ICON_MD_KEYBOARD_RETURN "\xee\x8c\x9b"
#define ICON_MD_KEYBOARD_TAB "\xee\x8c\x9c"
#define ICON_MD_KEYBOARD_VOICE "\xee\x8c\x9d"
#define ICON_MD_KITCHEN "\xee\xad\x87"
#define ICON_MD_LABEL "\xee\xa2\x92"
#define ICON_MD_LABEL_OUTLINE "\xee\xa2\x93"
#define ICON_MD_LANDSCAPE "\xee\x8f\xb7"
#define ICON_MD_LANGUAGE "\xee\xa2\x94"
#define ICON_MD_LAPTOP "\xee\x8c\x9e"
#define ICON_MD_LAPTOP_CHROMEBOOK "\xee\x8c\x9f"
#define ICON_MD_LAPTOP_MAC "\xee\x8c\xa0"
#define ICON_MD_LAPTOP_WINDOWS "\xee\x8c\xa1"
#define ICON_MD_LAST_PAGE "\xee\x97\x9d"
#define ICON_MD_LAUNCH "\xee\xa2\x95"
#define ICON_MD_LAYERS "\xee\x94\xbb"
#define ICON_MD_LAYERS_CLEAR "\xee\x94\xbc"
#define ICON_MD_LEAK_ADD "\xee\x8f\xb8"
#define ICON_MD_LEAK_REMOVE "\xee\x8f\xb9"
#define ICON_MD_LENS "\xee\x8f\xba"
#define ICON_MD_LIBRARY_ADD "\xee\x80\xae"
#define ICON_MD_LIBRARY_BOOKS "\xee\x80\xaf"
#define ICON_MD_LIBRARY_MUSIC "\xee\x80\xb0"
#define ICON_MD_LIGHTBULB_OUTLINE "\xee\xa4\x8f"
#define ICON_MD_LINE_STYLE "\xee\xa4\x99"
#define ICON_MD_LINE_WEIGHT "\xee\xa4\x9a"
#define ICON_MD_LINEAR_SCALE "\xee\x89\xa0"
#define ICON_MD_LINK "\xee\x85\x97"
#define ICON_MD_LINKED_CAMERA "\xee\x90\xb8"
#define ICON_MD_LIST "\xee\xa2\x96"
#define ICON_MD_LIVE_HELP "\xee\x83\x86"
#define ICON_MD_LIVE_TV "\xee\x98\xb9"
#define ICON_MD_LOCAL_ACTIVITY "\xee\x94\xbf"
#define ICON_MD_LOCAL_AIRPORT "\xee\x94\xbd"
#define ICON_MD_LOCAL_ATM "\xee\x94\xbe"
#define ICON_MD_LOCAL_BAR "\xee\x95\x80"
#define ICON_MD_LOCAL_CAFE "\xee\x95\x81"
#define ICON_MD_LOCAL_CAR_WASH "\xee\x95\x82"
#define ICON_MD_LOCAL_CONVENIENCE_STORE "\xee\x95\x83"
#define ICON_MD_LOCAL_DINING "\xee\x95\x96"
#define ICON_MD_LOCAL_DRINK "\xee\x95\x84"
#define ICON_MD_LOCAL_FLORIST "\xee\x95\x85"
#define ICON_MD_LOCAL_GAS_STATION "\xee\x95\x86"
#define ICON_MD_LOCAL_GROCERY_STORE "\xee\x95\x87"
#define ICON_MD_LOCAL_HOSPITAL "\xee\x95\x88"
#define ICON_MD_LOCAL_HOTEL "\xee\x95\x89"
#define ICON_MD_LOCAL_LAUNDRY_SERVICE "\xee\x95\x8a"
#define ICON_MD_LOCAL_LIBRARY "\xee\x95\x8b"
#define ICON_MD_LOCAL_MALL "\xee\x95\x8c"
#define ICON_MD_LOCAL_MOVIES "\xee\x95\x8d"
#define ICON_MD_LOCAL_OFFER "\xee\x95\x8e"
#define ICON_MD_LOCAL_PARKING "\xee\x95\x8f"
#define ICON_MD_LOCAL_PHARMACY "\xee\x95\x90"
#define ICON_MD_LOCAL_PHONE "\xee\x95\x91"
#define ICON_MD_LOCAL_PIZZA "\xee\x95\x92"
#define ICON_MD_LOCAL_PLAY "\xee\x95\x93"
#define ICON_MD_LOCAL_POST_OFFICE "\xee\x95\x94"
#define ICON_MD_LOCAL_PRINTSHOP "\xee\x95\x95"
#define ICON_MD_LOCAL_SEE "\xee\x95\x97"
#define ICON_MD_LOCAL_SHIPPING "\xee\x95\x98"
#define ICON_MD_LOCAL_TAXI "\xee\x95\x99"
#define ICON_MD_LOCATION_CITY "\xee\x9f\xb1"
#define ICON_MD_LOCATION_DISABLED "\xee\x86\xb6"
#define ICON_MD_LOCATION_OFF "\xee\x83\x87"
#define ICON_MD_LOCATION_ON "\xee\x83\x88"
#define ICON_MD_LOCATION_SEARCHING "\xee\x86\xb7"
#define ICON_MD_LOCK "\xee\xa2\x97"
#define ICON_MD_LOCK_OPEN "\xee\xa2\x98"
#define ICON_MD_LOCK_OUTLINE "\xee\xa2\x99"
#define ICON_MD_LOOKS "\xee\x8f\xbc"
#define ICON_MD_LOOKS_3 "\xee\x8f\xbb"
#define ICON_MD_LOOKS_4 "\xee\x8f\xbd"
#define ICON_MD_LOOKS_5 "\xee\x8f\xbe"
#define ICON_MD_LOOKS_6 "\xee\x8f\xbf"
#define ICON_MD_LOOKS_ONE "\xee\x90\x80"
#define ICON_MD_LOOKS_TWO "\xee\x90\x81"
#define ICON_MD_LOOP "\xee\x80\xa8"
#define ICON_MD_LOUPE "\xee\x90\x82"
#define ICON_MD_LOW_PRIORITY "\xee\x85\xad"
#define ICON_MD_LOYALTY "\xee\xa2\x9a"
#define ICON_MD_MAIL "\xee\x85\x98"
#define ICON_MD_MAIL_OUTLINE "\xee\x83\xa1"
#define ICON_MD_MAP "\xee\x95\x9b"
#define ICON_MD_MARKUNREAD "\xee\x85\x99"
#define ICON_MD_MARKUNREAD_MAILBOX "\xee\xa2\x9b"
#define ICON_MD_MEMORY "\xee\x8c\xa2"
#define ICON_MD_MENU "\xee\x97\x92"
#define ICON_MD_MERGE_TYPE "\xee\x89\x92"
#define ICON_MD_MESSAGE "\xee\x83\x89"
#define ICON_MD_MIC "\xee\x80\xa9"
#define ICON_MD_MIC_NONE "\xee\x80\xaa"
#define ICON_MD_MIC_OFF "\xee\x80\xab"
#define ICON_MD_MMS "\xee\x98\x98"
#define ICON_MD_MODE_COMMENT "\xee\x89\x93"
#define ICON_MD_MODE_EDIT "\xee\x89\x94"
#define ICON_MD_MONETIZATION_ON "\xee\x89\xa3"
#define ICON_MD_MONEY_OFF "\xee\x89\x9c"
#define ICON_MD_MONOCHROME_PHOTOS "\xee\x90\x83"
#define ICON_MD_MOOD "\xee\x9f\xb2"
#define ICON_MD_MOOD_BAD "\xee\x9f\xb3"
#define ICON_MD_MORE "\xee\x98\x99"
#define ICON_MD_MORE_HORIZ "\xee\x97\x93"
#define ICON_MD_MORE_VERT "\xee\x97\x94"
#define ICON_MD_MOTORCYCLE "\xee\xa4\x9b"
#define ICON_MD_MOUSE "\xee\x8c\xa3"
#define ICON_MD_MOVE_TO_INBOX "\xee\x85\xa8"
#define ICON_MD_MOVIE "\xee\x80\xac"
#define ICON_MD_MOVIE_CREATION "\xee\x90\x84"
#define ICON_MD_MOVIE_FILTER "\xee\x90\xba"
#define ICON_MD_MULTILINE_CHART "\xee\x9b\x9f"
#define ICON_MD_MUSIC_NOTE "\xee\x90\x85"
#define ICON_MD_MUSIC_VIDEO "\xee\x81\xa3"
#define ICON_MD_MY_LOCATION "\xee\x95\x9c"
#define ICON_MD_NATURE "\xee\x90\x86"
#define ICON_MD_NATURE_PEOPLE "\xee\x90\x87"
#define ICON_MD_NAVIGATE_BEFORE "\xee\x90\x88"
#define ICON_MD_NAVIGATE_NEXT "\xee\x90\x89"
#define ICON_MD_NAVIGATION "\xee\x95\x9d"
#define ICON_MD_NEAR_ME "\xee\x95\xa9"
#define ICON_MD_NETWORK_CELL "\xee\x86\xb9"
#define ICON_MD_NETWORK_CHECK "\xee\x99\x80"
#define ICON_MD_NETWORK_LOCKED "\xee\x98\x9a"
#define ICON_MD_NETWORK_WIFI "\xee\x86\xba"
#define ICON_MD_NEW_RELEASES "\xee\x80\xb1"
#define ICON_MD_NEXT_WEEK "\xee\x85\xaa"
#define ICON_MD_NFC "\xee\x86\xbb"
#define ICON_MD_NO_ENCRYPTION "\xee\x99\x81"
#define ICON_MD_NO_SIM "\xee\x83\x8c"
#define ICON_MD_NOT_INTERESTED "\xee\x80\xb3"
#define ICON_MD_NOTE "\xee\x81\xaf"
#define ICON_MD_NOTE_ADD "\xee\xa2\x9c"
#define ICON_MD_NOTIFICATIONS "\xee\x9f\xb4"
#define ICON_MD_NOTIFICATIONS_ACTIVE "\xee\x9f\xb7"
#define ICON_MD_NOTIFICATIONS_NONE "\xee\x9f\xb5"
#define ICON_MD_NOTIFICATIONS_OFF "\xee\x9f\xb6"
#define ICON_MD_NOTIFICATIONS_PAUSED "\xee\x9f\xb8"
#define ICON_MD_OFFLINE_PIN "\xee\xa4\x8a"
#define ICON_MD_ONDEMAND_VIDEO "\xee\x98\xba"
#define ICON_MD_OPACITY "\xee\xa4\x9c"
#define ICON_MD_OPEN_IN_BROWSER "\xee\xa2\x9d"
#define ICON_MD_OPEN_IN_NEW "\xee\xa2\x9e"
#define ICON_MD_OPEN_WITH "\xee\xa2\x9f"
#define ICON_MD_PAGES "\xee\x9f\xb9"
#define ICON_MD_PAGEVIEW "\xee\xa2\xa0"
#define ICON_MD_PALETTE "\xee\x90\x8a"
#define ICON_MD_PAN_TOOL "\xee\xa4\xa5"
#define ICON_MD_PANORAMA "\xee\x90\x8b"
#define ICON_MD_PANORAMA_FISH_EYE "\xee\x90\x8c"
#define ICON_MD_PANORAMA_HORIZONTAL "\xee\x90\x8d"
#define ICON_MD_PANORAMA_VERTICAL "\xee\x90\x8e"
#define ICON_MD_PANORAMA_WIDE_ANGLE "\xee\x90\x8f"
#define ICON_MD_PARTY_MODE "\xee\x9f\xba"
#define ICON_MD_PAUSE "\xee\x80\xb4"
#define ICON_MD_PAUSE_CIRCLE_FILLED "\xee\x80\xb5"
#define ICON_MD_PAUSE_CIRCLE_OUTLINE "\xee\x80\xb6"
#define ICON_MD_PAYMENT "\xee\xa2\xa1"
#define ICON_MD_PEOPLE "\xee\x9f\xbb"
#define ICON_MD_PEOPLE_OUTLINE "\xee\x9f\xbc"
#define ICON_MD_PERM_CAMERA_MIC "\xee\xa2\xa2"
#define ICON_MD_PERM_CONTACT_CALENDAR "\xee\xa2\xa3"
#define ICON_MD_PERM_DATA_SETTING "\xee\xa2\xa4"
#define ICON_MD_PERM_DEVICE_INFORMATION "\xee\xa2\xa5"
#define ICON_MD_PERM_IDENTITY "\xee\xa2\xa6"
#define ICON_MD_PERM_MEDIA "\xee\xa2\xa7"
#define ICON_MD_PERM_PHONE_MSG "\xee\xa2\xa8"
#define ICON_MD_PERM_SCAN_WIFI "\xee\xa2\xa9"
#define ICON_MD_PERSON "\xee\x9f\xbd"
#define ICON_MD_PERSON_ADD "\xee\x9f\xbe"
#define ICON_MD_PERSON_OUTLINE "\xee\x9f\xbf"
#define ICON_MD_PERSON_PIN "\xee\x95\x9a"
#define ICON_MD_PERSON_PIN_CIRCLE "\xee\x95\xaa"
#define ICON_MD_PERSONAL_VIDEO "\xee\x98\xbb"
#define ICON_MD_PETS "\xee\xa4\x9d"
#define ICON_MD_PHONE "\xee\x83\x8d"
#define ICON_MD_PHONE_ANDROID "\xee\x8c\xa4"
#define ICON_MD_PHONE_BLUETOOTH_SPEAKER "\xee\x98\x9b"
#define ICON_MD_PHONE_FORWARDED "\xee\x98\x9c"
#define ICON_MD_PHONE_IN_TALK "\xee\x98\x9d"
#define ICON_MD_PHONE_IPHONE "\xee\x8c\xa5"
#define ICON_MD_PHONE_LOCKED "\xee\x98\x9e"
#define ICON_MD_PHONE_MISSED "\xee\x98\x9f"
#define ICON_MD_PHONE_PAUSED "\xee\x98\xa0"
#define ICON_MD_PHONELINK "\xee\x8c\xa6"
#define ICON_MD_PHONELINK_ERASE "\xee\x83\x9b"
#define ICON_MD_PHONELINK_LOCK "\xee\x83\x9c"
#define ICON_MD_PHONELINK_OFF "\xee\x8c\xa7"
#define ICON_MD_PHONELINK_RING "\xee\x83\x9d"
#define ICON_MD_PHONELINK_SETUP "\xee\x83\x9e"
#define ICON_MD_PHOTO "\xee\x90\x90"
#define ICON_MD_PHOTO_ALBUM "\xee\x90\x91"
#define ICON_MD_PHOTO_CAMERA "\xee\x90\x92"
#define ICON_MD_PHOTO_FILTER "\xee\x90\xbb"
#define ICON_MD_PHOTO_LIBRARY "\xee\x90\x93"
#define ICON_MD_PHOTO_SIZE_SELECT_ACTUAL "\xee\x90\xb2"
#define ICON_MD_PHOTO_SIZE_SELECT_LARGE "\xee\x90\xb3"
#define ICON_MD_PHOTO_SIZE_SELECT_SMALL "\xee\x90\xb4"
#define ICON_MD_PICTURE_AS_PDF "\xee\x90\x95"
#define ICON_MD_PICTURE_IN_PICTURE "\xee\xa2\xaa"
#define ICON_MD_PICTURE_IN_PICTURE_ALT "\xee\xa4\x91"
#define ICON_MD_PIE_CHART "\xee\x9b\x84"
#define ICON_MD_PIE_CHART_OUTLINED "\xee\x9b\x85"
#define ICON_MD_PIN_DROP "\xee\x95\x9e"
#define ICON_MD_PLACE "\xee\x95\x9f"
#define ICON_MD_PLAY_ARROW "\xee\x80\xb7"
#define ICON_MD_PLAY_CIRCLE_FILLED "\xee\x80\xb8"
#define ICON_MD_PLAY_CIRCLE_OUTLINE "\xee\x80\xb9"
#define ICON_MD_PLAY_FOR_WORK "\xee\xa4\x86"
#define ICON_MD_PLAYLIST_ADD "\xee\x80\xbb"
#define ICON_MD_PLAYLIST_ADD_CHECK "\xee\x81\xa5"
#define ICON_MD_PLAYLIST_PLAY "\xee\x81\x9f"
#define ICON_MD_PLUS_ONE "\xee\xa0\x80"
#define ICON_MD_POLL "\xee\xa0\x81"
#define ICON_MD_POLYMER "\xee\xa2\xab"
#define ICON_MD_POOL "\xee\xad\x88"
#define ICON_MD_PORTABLE_WIFI_OFF "\xee\x83\x8e"
#define ICON_MD_PORTRAIT "\xee\x90\x96"
#define ICON_MD_POWER "\xee\x98\xbc"
#define ICON_MD_POWER_INPUT "\xee\x8c\xb6"
#define ICON_MD_POWER_SETTINGS_NEW "\xee\xa2\xac"
#define ICON_MD_PREGNANT_WOMAN "\xee\xa4\x9e"
#define ICON_MD_PRESENT_TO_ALL "\xee\x83\x9f"
#define ICON_MD_PRINT "\xee\xa2\xad"
#define ICON_MD_PRIORITY_HIGH "\xee\x99\x85"
#define ICON_MD_PUBLIC "\xee\xa0\x8b"
#define ICON_MD_PUBLISH "\xee\x89\x95"
#define ICON_MD_QUERY_BUILDER "\xee\xa2\xae"
#define ICON_MD_QUESTION_ANSWER "\xee\xa2\xaf"
#define ICON_MD_QUEUE "\xee\x80\xbc"
#define ICON_MD_QUEUE_MUSIC "\xee\x80\xbd"
#define ICON_MD_QUEUE_PLAY_NEXT "\xee\x81\xa6"
#define ICON_MD_RADIO "\xee\x80\xbe"
#define ICON_MD_RADIO_BUTTON_CHECKED "\xee\xa0\xb7"
#define ICON_MD_RADIO_BUTTON_UNCHECKED "\xee\xa0\xb6"
#define ICON_MD_RATE_REVIEW "\xee\x95\xa0"
#define ICON_MD_RECEIPT "\xee\xa2\xb0"
#define ICON_MD_RECENT_ACTORS "\xee\x80\xbf"
#define ICON_MD_RECORD_VOICE_OVER "\xee\xa4\x9f"
#define ICON_MD_REDEEM "\xee\xa2\xb1"
#define ICON_MD_REDO "\xee\x85\x9a"
#define ICON_MD_REFRESH "\xee\x97\x95"
#define ICON_MD_REMOVE "\xee\x85\x9b"
#define ICON_MD_REMOVE_CIRCLE "\xee\x85\x9c"
#define ICON_MD_REMOVE_CIRCLE_OUTLINE "\xee\x85\x9d"
#define ICON_MD_REMOVE_FROM_QUEUE "\xee\x81\xa7"
#define ICON_MD_REMOVE_RED_EYE "\xee\x90\x97"
#define ICON_MD_REMOVE_SHOPPING_CART "\xee\xa4\xa8"
#define ICON_MD_REORDER "\xee\xa3\xbe"
#define ICON_MD_REPEAT "\xee\x81\x80"
#define ICON_MD_REPEAT_ONE "\xee\x81\x81"
#define ICON_MD_REPLAY "\xee\x81\x82"
#define ICON_MD_REPLAY_10 "\xee\x81\x99"
#define ICON_MD_REPLAY_30 "\xee\x81\x9a"
#define ICON_MD_REPLAY_5 "\xee\x81\x9b"
#define ICON_MD_REPLY "\xee\x85\x9e"
#define ICON_MD_REPLY_ALL "\xee\x85\x9f"
#define ICON_MD_REPORT "\xee\x85\xa0"
#define ICON_MD_REPORT_PROBLEM "\xee\xa2\xb2"
#define ICON_MD_RESTAURANT "\xee\x95\xac"
#define ICON_MD_RESTAURANT_MENU "\xee\x95\xa1"
#define ICON_MD_RESTORE "\xee\xa2\xb3"
#define ICON_MD_RESTORE_PAGE "\xee\xa4\xa9"
#define ICON_MD_RING_VOLUME "\xee\x83\x91"
#define ICON_MD_ROOM "\xee\xa2\xb4"
#define ICON_MD_ROOM_SERVICE "\xee\xad\x89"
#define ICON_MD_ROTATE_90_DEGREES_CCW "\xee\x90\x98"
#define ICON_MD_ROTATE_LEFT "\xee\x90\x99"
#define ICON_MD_ROTATE_RIGHT "\xee\x90\x9a"
#define ICON_MD_ROUNDED_CORNER "\xee\xa4\xa0"
#define ICON_MD_ROUTER "\xee\x8c\xa8"
#define ICON_MD_ROWING "\xee\xa4\xa1"
#define ICON_MD_RSS_FEED "\xee\x83\xa5"
#define ICON_MD_RV_HOOKUP "\xee\x99\x82"
#define ICON_MD_SATELLITE "\xee\x95\xa2"
#define ICON_MD_SAVE "\xee\x85\xa1"
#define ICON_MD_SCANNER "\xee\x8c\xa9"
#define ICON_MD_SCHEDULE "\xee\xa2\xb5"
#define ICON_MD_SCHOOL "\xee\xa0\x8c"
#define ICON_MD_SCREEN_LOCK_LANDSCAPE "\xee\x86\xbe"
#define ICON_MD_SCREEN_LOCK_PORTRAIT "\xee\x86\xbf"
#define ICON_MD_SCREEN_LOCK_ROTATION "\xee\x87\x80"
#define ICON_MD_SCREEN_ROTATION "\xee\x87\x81"
#define ICON_MD_SCREEN_SHARE "\xee\x83\xa2"
#define ICON_MD_SD_CARD "\xee\x98\xa3"
#define ICON_MD_SD_STORAGE "\xee\x87\x82"
#define ICON_MD_SEARCH "\xee\xa2\xb6"
#define ICON_MD_SECURITY "\xee\x8c\xaa"
#define ICON_MD_SELECT_ALL "\xee\x85\xa2"
#define ICON_MD_SEND "\xee\x85\xa3"
#define ICON_MD_SENTIMENT_DISSATISFIED "\xee\xa0\x91"
#define ICON_MD_SENTIMENT_NEUTRAL "\xee\xa0\x92"
#define ICON_MD_SENTIMENT_SATISFIED "\xee\xa0\x93"
#define ICON_MD_SENTIMENT_VERY_DISSATISFIED "\xee\xa0\x94"
#define ICON_MD_SENTIMENT_VERY_SATISFIED "\xee\xa0\x95"
#define ICON_MD_SETTINGS "\xee\xa2\xb8"
#define ICON_MD_SETTINGS_APPLICATIONS "\xee\xa2\xb9"
#define ICON_MD_SETTINGS_BACKUP_RESTORE "\xee\xa2\xba"
#define ICON_MD_SETTINGS_BLUETOOTH "\xee\xa2\xbb"
#define ICON_MD_SETTINGS_BRIGHTNESS "\xee\xa2\xbd"
#define ICON_MD_SETTINGS_CELL "\xee\xa2\xbc"
#define ICON_MD_SETTINGS_ETHERNET "\xee\xa2\xbe"
#define ICON_MD_SETTINGS_INPUT_ANTENNA "\xee\xa2\xbf"
#define ICON_MD_SETTINGS_INPUT_COMPONENT "\xee\xa3\x80"
#define ICON_MD_SETTINGS_INPUT_COMPOSITE "\xee\xa3\x81"
#define ICON_MD_SETTINGS_INPUT_HDMI "\xee\xa3\x82"
#define ICON_MD_SETTINGS_INPUT_SVIDEO "\xee\xa3\x83"
#define ICON_MD_SETTINGS_OVERSCAN "\xee\xa3\x84"
#define ICON_MD_SETTINGS_PHONE "\xee\xa3\x85"
#define ICON_MD_SETTINGS_POWER "\xee\xa3\x86"
#define ICON_MD_SETTINGS_REMOTE "\xee\xa3\x87"
#define ICON_MD_SETTINGS_SYSTEM_DAYDREAM "\xee\x87\x83"
#define ICON_MD_SETTINGS_VOICE "\xee\xa3\x88"
#define ICON_MD_SHARE "\xee\xa0\x8d"
#define ICON_MD_SHOP "\xee\xa3\x89"
#define ICON_MD_SHOP_TWO "\xee\xa3\x8a"
#define ICON_MD_SHOPPING_BASKET "\xee\xa3\x8b"
#define ICON_MD_SHOPPING_CART "\xee\xa3\x8c"
#define ICON_MD_SHORT_TEXT "\xee\x89\xa1"
#define ICON_MD_SHOW_CHART "\xee\x9b\xa1"
#define ICON_MD_SHUFFLE "\xee\x81\x83"
#define ICON_MD_SIGNAL_CELLULAR_4_BAR "\xee\x87\x88"
#define ICON_MD_SIGNAL_CELLULAR_CONNECTED_NO_INTERNET_4_BAR "\xee\x87\x8d"
#define ICON_MD_SIGNAL_CELLULAR_NO_SIM "\xee\x87\x8e"
#define ICON_MD_SIGNAL_CELLULAR_NULL "\xee\x87\x8f"
#define ICON_MD_SIGNAL_CELLULAR_OFF "\xee\x87\x90"
#define ICON_MD_SIGNAL_WIFI_4_BAR "\xee\x87\x98"
#define ICON_MD_SIGNAL_WIFI_4_BAR_LOCK "\xee\x87\x99"
#define ICON_MD_SIGNAL_WIFI_OFF "\xee\x87\x9a"
#define ICON_MD_SIM_CARD "\xee\x8c\xab"
#define ICON_MD_SIM_CARD_ALERT "\xee\x98\xa4"
#define ICON_MD_SKIP_NEXT "\xee\x81\x84"
#define ICON_MD_SKIP_PREVIOUS "\xee\x81\x85"
#define ICON_MD_SLIDESHOW "\xee\x90\x9b"
#define ICON_MD_SLOW_MOTION_VIDEO "\xee\x81\xa8"
#define ICON_MD_SMARTPHONE "\xee\x8c\xac"
#define ICON_MD_SMOKE_FREE "\xee\xad\x8a"
#define ICON_MD_SMOKING_ROOMS "\xee\xad\x8b"
#define ICON_MD_SMS "\xee\x98\xa5"
#define ICON_MD_SMS_FAILED "\xee\x98\xa6"
#define ICON_MD_SNOOZE "\xee\x81\x86"
#define ICON_MD_SORT "\xee\x85\xa4"
#define ICON_MD_SORT_BY_ALPHA "\xee\x81\x93"
#define ICON_MD_SPA "\xee\xad\x8c"
#define ICON_MD_SPACE_BAR "\xee\x89\x96"
#define ICON_MD_SPEAKER "\xee\x8c\xad"
#define ICON_MD_SPEAKER_GROUP "\xee\x8c\xae"
#define ICON_MD_SPEAKER_NOTES "\xee\xa3\x8d"
#define ICON_MD_SPEAKER_NOTES_OFF "\xee\xa4\xaa"
#define ICON_MD_SPEAKER_PHONE "\xee\x83\x92"
#define ICON_MD_SPELLCHECK "\xee\xa3\x8e"
#define ICON_MD_STAR "\xee\xa0\xb8"
#define ICON_MD_STAR_BORDER "\xee\xa0\xba"
#define ICON_MD_STAR_HALF "\xee\xa0\xb9"
#define ICON_MD_STARS "\xee\xa3\x90"
#define ICON_MD_STAY_CURRENT_LANDSCAPE "\xee\x83\x93"
#define ICON_MD_STAY_CURRENT_PORTRAIT "\xee\x83\x94"
#define ICON_MD_STAY_PRIMARY_LANDSCAPE "\xee\x83\x95"
#define ICON_MD_STAY_PRIMARY_PORTRAIT "\xee\x83\x96"
#define ICON_MD_STOP "\xee\x81\x87"
#define ICON_MD_STOP_SCREEN_SHARE "\xee\x83\xa3"
#define ICON_MD_STORAGE "\xee\x87\x9b"
#define ICON_MD_STORE "\xee\xa3\x91"
#define ICON_MD_STORE_MALL_DIRECTORY "\xee\x95\xa3"
#define ICON_MD_STRAIGHTEN "\xee\x90\x9c"
#define ICON_MD_STREETVIEW "\xee\x95\xae"
#define ICON_MD_STRIKETHROUGH_S "\xee\x89\x97"
#define ICON_MD_STYLE "\xee\x90\x9d"
#define ICON_MD_SUBDIRECTORY_ARROW_LEFT "\xee\x97\x99"
#define ICON_MD_SUBDIRECTORY_ARROW_RIGHT "\xee\x97\x9a"
#define ICON_MD_SUBJECT "\xee\xa3\x92"
#define ICON_MD_SUBSCRIPTIONS "\xee\x81\xa4"
#define ICON_MD_SUBTITLES "\xee\x81\x88"
#define ICON_MD_SUBWAY "\xee\x95\xaf"
#define ICON_MD_SUPERVISOR_ACCOUNT "\xee\xa3\x93"
#define ICON_MD_SURROUND_SOUND "\xee\x81\x89"
#define ICON_MD_SWAP_CALLS "\xee\x83\x97"
#define ICON_MD_SWAP_HORIZ "\xee\xa3\x94"
#define ICON_MD_SWAP_VERT "\xee\xa3\x95"
#define ICON_MD_SWAP_VERTICAL_CIRCLE "\xee\xa3\x96"
#define ICON_MD_SWITCH_CAMERA "\xee\x90\x9e"
#define ICON_MD_SWITCH_VIDEO "\xee\x90\x9f"
#define ICON_MD_SYNC "\xee\x98\xa7"
#define ICON_MD_SYNC_DISABLED "\xee\x98\xa8"
#define ICON_MD_SYNC_PROBLEM "\xee\x98\xa9"
#define ICON_MD_SYSTEM_UPDATE "\xee\x98\xaa"
#define ICON_MD_SYSTEM_UPDATE_ALT "\xee\xa3\x97"
#define ICON_MD_TAB "\xee\xa3\x98"
#define ICON_MD_TAB_UNSELECTED "\xee\xa3\x99"
#define ICON_MD_TABLET "\xee\x8c\xaf"
#define ICON_MD_TABLET_ANDROID "\xee\x8c\xb0"
#define ICON_MD_TABLET_MAC "\xee\x8c\xb1"
#define ICON_MD_TAG_FACES "\xee\x90\xa0"
#define ICON_MD_TAP_AND_PLAY "\xee\x98\xab"
#define ICON_MD_TERRAIN "\xee\x95\xa4"
#define ICON_MD_TEXT_FIELDS "\xee\x89\xa2"
#define ICON_MD_TEXT_FORMAT "\xee\x85\xa5"
#define ICON_MD_TEXTSMS "\xee\x83\x98"
#define ICON_MD_TEXTURE "\xee\x90\xa1"
#define ICON_MD_THEATERS "\xee\xa3\x9a"
#define ICON_MD_THUMB_DOWN "\xee\xa3\x9b"
#define ICON_MD_THUMB_UP "\xee\xa3\x9c"
#define ICON_MD_THUMBS_UP_DOWN "\xee\xa3\x9d"
#define ICON_MD_TIME_TO_LEAVE "\xee\x98\xac"
#define ICON_MD_TIMELAPSE "\xee\x90\xa2"
#define ICON_MD_TIMELINE "\xee\xa4\xa2"
#define ICON_MD_TIMER "\xee\x90\xa5"
#define ICON_MD_TIMER_10 "\xee\x90\xa3"
#define ICON_MD_TIMER_3 "\xee\x90\xa4"
#define ICON_MD_TIMER_OFF "\xee\x90\xa6"
#define ICON_MD_TITLE "\xee\x89\xa4"
#define ICON_MD_TOC "\xee\xa3\x9e"
#define ICON_MD_TODAY "\xee\xa3\x9f"
#define ICON_MD_TOLL "\xee\xa3\xa0"
#define ICON_MD_TONALITY "\xee\x90\xa7"
#define ICON_MD_TOUCH_APP "\xee\xa4\x93"
#define ICON_MD_TOYS "\xee\x8c\xb2"
#define ICON_MD_TRACK_CHANGES "\xee\xa3\xa1"
#define ICON_MD_TRAFFIC "\xee\x95\xa5"
#define ICON_MD_TRAIN "\xee\x95\xb0"
#define ICON_MD_TRAM "\xee\x95\xb1"
#define ICON_MD_TRANSFER_WITHIN_A_STATION "\xee\x95\xb2"
#define ICON_MD_TRANSFORM "\xee\x90\xa8"
#define ICON_MD_TRANSLATE "\xee\xa3\xa2"
#define ICON_MD_TRENDING_DOWN "\xee\xa3\xa3"
#define ICON_MD_TRENDING_FLAT "\xee\xa3\xa4"
#define ICON_MD_TRENDING_UP "\xee\xa3\xa5"
#define ICON_MD_TUNE "\xee\x90\xa9"
#define ICON_MD_TURNED_IN "\xee\xa3\xa6"
#define ICON_MD_TURNED_IN_NOT "\xee\xa3\xa7"
#define ICON_MD_TV "\xee\x8c\xb3"
#define ICON_MD_UNARCHIVE "\xee\x85\xa9"
#define ICON_MD_UNDO "\xee\x85\xa6"
#define ICON_MD_UNFOLD_LESS "\xee\x97\x96"
#define ICON_MD_UNFOLD_MORE "\xee\x97\x97"
#define ICON_MD_UPDATE "\xee\xa4\xa3"
#define ICON_MD_USB "\xee\x87\xa0"
#define ICON_MD_VERIFIED_USER "\xee\xa3\xa8"
#define ICON_MD_VERTICAL_ALIGN_BOTTOM "\xee\x89\x98"
#define ICON_MD_VERTICAL_ALIGN_CENTER "\xee\x89\x99"
#define ICON_MD_VERTICAL_ALIGN_TOP "\xee\x89\x9a"
#define ICON_MD_VIBRATION "\xee\x98\xad"
#define ICON_MD_VIDEO_CALL "\xee\x81\xb0"
#define ICON_MD_VIDEO_LABEL "\xee\x81\xb1"
#define ICON_MD_VIDEO_LIBRARY "\xee\x81\x8a"
#define ICON_MD_VIDEOCAM "\xee\x81\x8b"
#define ICON_MD_VIDEOCAM_OFF "\xee\x81\x8c"
#define ICON_MD_VIDEOGAME_ASSET "\xee\x8c\xb8"
#define ICON_MD_VIEW_AGENDA "\xee\xa3\xa9"
#define ICON_MD_VIEW_ARRAY "\xee\xa3\xaa"
#define ICON_MD_VIEW_CAROUSEL "\xee\xa3\xab"
#define ICON_MD_VIEW_COLUMN "\xee\xa3\xac"
#define ICON_MD_VIEW_COMFY "\xee\x90\xaa"
#define ICON_MD_VIEW_COMPACT "\xee\x90\xab"
#define ICON_MD_VIEW_DAY "\xee\xa3\xad"
#define ICON_MD_VIEW_HEADLINE "\xee\xa3\xae"
#define ICON_MD_VIEW_LIST "\xee\xa3\xaf"
#define ICON_MD_VIEW_MODULE "\xee\xa3\xb0"
#define ICON_MD_VIEW_QUILT "\xee\xa3\xb1"
#define ICON_MD_VIEW_STREAM "\xee\xa3\xb2"
#define ICON_MD_VIEW_WEEK "\xee\xa3\xb3"
#define ICON_MD_VIGNETTE "\xee\x90\xb5"
#define ICON_MD_VISIBILITY "\xee\xa3\xb4"
#define ICON_MD_VISIBILITY_OFF "\xee\xa3\xb5"
#define ICON_MD_VOICE_CHAT "\xee\x98\xae"
#define ICON_MD_VOICEMAIL "\xee\x83\x99"
#define ICON_MD_VOLUME_DOWN "\xee\x81\x8d"
#define ICON_MD_VOLUME_MUTE "\xee\x81\x8e"
#define ICON_MD_VOLUME_OFF "\xee\x81\x8f"
#define ICON_MD_VOLUME_UP "\xee\x81\x90"
#define ICON_MD_VPN_KEY "\xee\x83\x9a"
#define ICON_MD_VPN_LOCK "\xee\x98\xaf"
#define ICON_MD_WALLPAPER "\xee\x86\xbc"
#define ICON_MD_WARNING "\xee\x80\x82"
#define ICON_MD_WATCH "\xee\x8c\xb4"
#define ICON_MD_WATCH_LATER "\xee\xa4\xa4"
#define ICON_MD_WB_AUTO "\xee\x90\xac"
#define ICON_MD_WB_CLOUDY "\xee\x90\xad"
#define ICON_MD_WB_INCANDESCENT "\xee\x90\xae"
#define ICON_MD_WB_IRIDESCENT "\xee\x90\xb6"
#define ICON_MD_WB_SUNNY "\xee\x90\xb0"
#define ICON_MD_WC "\xee\x98\xbd"
#define ICON_MD_WEB "\xee\x81\x91"
#define ICON_MD_WEB_ASSET "\xee\x81\xa9"
#define ICON_MD_WEEKEND "\xee\x85\xab"
#define ICON_MD_WHATSHOT "\xee\xa0\x8e"
#define ICON_MD_WIDGETS "\xee\x86\xbd"
#define ICON_MD_WIFI "\xee\x98\xbe"
#define ICON_MD_WIFI_LOCK "\xee\x87\xa1"
#define ICON_MD_WIFI_TETHERING "\xee\x87\xa2"
#define ICON_MD_WORK "\xee\xa3\xb9"
#define ICON_MD_WRAP_TEXT "\xee\x89\x9b"
#define ICON_MD_YOUTUBE_SEARCHED_FOR "\xee\xa3\xba"
#define ICON_MD_ZOOM_IN "\xee\xa3\xbf"
#define ICON_MD_ZOOM_OUT "\xee\xa4\x80"
#define ICON_MD_ZOOM_OUT_MAP "\xee\x95\xab"

View File

@ -1,5 +1,6 @@
#include "imgui_impl.h"
#include <map>
#include <string>
#include <iostream>
@ -11,6 +12,9 @@
#include "moon/mod-engine/hooks/hook.h"
#include "moon/mod-engine/textures/mod-texture.h"
#include "moon/mod-engine/engine.h"
#include "icons/IconsForkAwesome.h"
#include "icons/IconsMaterialDesign.h"
#include <SDL2/SDL.h>
#ifdef __MINGW32__
@ -64,6 +68,7 @@ using namespace std;
bool showMenu = true;
bool showWindowMoon = true;
bool showWindowDemo = false;
bool showWindowDebug = false;
SDL_Window* window = nullptr;
ImGuiIO io;
@ -120,6 +125,31 @@ namespace MoonNX {
namespace MoonInternal {
map<string, ImFont*> fontMap;
void setupFonts() {
ImGuiIO& io = ImGui::GetIO();
// for (auto entry = Moon::fonts.begin(); entry != Moon::fonts.end(); entry++){
// if(entry->first == FONT_ICON_FILE_NAME_FK) continue;
//
// ImFontConfig font_cfg;
// ImFont* tmp = io.Fonts->AddFontFromMemoryTTF((void*) entry->second->data, entry->second->size, 18.f, &font_cfg);
// cout << "Loading font: " << entry->first << endl;
// fontMap[entry->first] = tmp;
// }
//
// io.FontDefault = fontMap["monogram.ttf"];
// Setup Material Design Icons
static const ImWchar icons_ranges[] = { ICON_MIN_MD, ICON_MAX_MD, 0 };
io.Fonts->AddFontDefault();
ImFontConfig config;
config.GlyphOffset = ImVec2(0.0f, 6.0f);
config.MergeMode = true;
io.Fonts->AddFontFromMemoryTTF((void*) Moon::fonts[FONT_ICON_FILE_NAME_MD]->data, Moon::fonts[FONT_ICON_FILE_NAME_MD]->size, 20.f, &config, icons_ranges);
io.Fonts->Build();
}
void setupImGuiModule(string status) {
MoonInternal::setupWindowHook(status);
if(status == "PreStartup"){
@ -130,13 +160,10 @@ namespace MoonInternal {
io = ImGui::GetIO(); (void)io;
io.WantSetMousePos = false;
io.ConfigWindowsMoveFromTitleBarOnly = true;
for (auto entry = Moon::fonts.begin(); entry != Moon::fonts.end(); entry++){
ImFontConfig font_cfg;
font_cfg.FontDataOwnedByAtlas = false;
io.Fonts->AddFontFromMemoryTTF((void*) entry->second->data, entry->second->size, 18.f, &font_cfg);
}
ImGui::StyleColorsLightGreen();
setupFonts();
MoonInternal::bindHook(IMGUI_API_INIT);
MoonInternal::initBindHook(1,
(struct HookParameter){.name = "io", .parameter = (void*) &io}
@ -167,7 +194,6 @@ namespace MoonInternal {
Moon::registerHookListener({ GFX_POST_END_FRAME, [](HookCall call){
// recv(socketID, NULL, 1, MSG_PEEK | MSG_DONTWAIT) != 0
// bool retval = 0;
ImGui_ImplOpenGL3_NewFrame();
ImGui_ImplSDL2_NewFrame(window);
ImGui::NewFrame();
@ -185,6 +211,7 @@ namespace MoonInternal {
ImGui::BeginMainMenuBar();
ImGui::MenuItem("Moon64", NULL, &showWindowMoon);
ImGui::MenuItem("ImGui Demo", NULL, &showWindowDemo);
ImGui::MenuItem("Texture Debug", NULL, &showWindowDebug);
ImGui::EndMainMenuBar();
if (showWindowMoon){
@ -199,6 +226,36 @@ namespace MoonInternal {
ImGui::PopStyleColor();
}
}
if(showWindowDebug) {
ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0, 0, 0, 0));
ImGui::Begin("Loaded textures", NULL, ImGuiWindowFlags_None);
if (ImGui::BeginTable("table1", 3, ImGuiTableFlags_Borders)) {
ImGui::TableSetupColumn("Image", ImGuiTableColumnFlags_WidthFixed, 64.0f);
ImGui::TableSetupColumn("Path");
ImGui::TableSetupColumn("", ImGuiTableColumnFlags_WidthFixed, 64.0f);
ImGui::TableHeadersRow();
for(auto &entry : textureMap){
if(entry.second == nullptr) continue;
ImGui::TableNextRow();
ImGui::TableSetColumnIndex(0);
ImGui::Image((ImTextureID) entry.second->texture_id, ImVec2(64, 64 * entry.second->height / entry.second->width));
ImGui::TableSetColumnIndex(1);
ImGui::Text("%s", entry.second->texture_addr);
ImGui::TableSetColumnIndex(2);
if(ImGui::Button(ICON_MD_EDIT, ImVec2(64, 64))){
if(ImGui::BeginPopupContextWindow("options")){
if (ImGui::Selectable("Clear")) {
}
ImGui::EndPopup();
}
}
}
ImGui::EndTable();
}
ImGui::End();
ImGui::PopStyleColor();
}
#endif
ImGui::Render();
GLint last_program;

View File

@ -27,11 +27,10 @@ using namespace std;
using json = nlohmann::json;
std::map<std::string, EntryFileData*> baseGameTextures;
map<string, TextureModifier*> textureMods;
map<string, TextureData*> textureMap;
map<string, BitModule*> textureCache;
map<string, TextureModifier*> textureMods;
namespace Moon {
void saveAddonTexture(BitModule *addon, std::string texturePath, EntryFileData* data){
addon->textures.insert(pair<string, EntryFileData*>(texturePath, data));
@ -117,13 +116,15 @@ namespace MoonInternal {
}
}
void loadTexture(int tile, const char *fullpath, struct GfxRenderingAPI *gfx_rapi){
void loadTexture(int tile, const char *fullpath, const char *rawpath, struct GfxRenderingAPI *gfx_rapi){
int w, h;
u64 imgsize = 0;
string path(fullpath);
if(!strcmp(fullpath, "gfx/mod-icons://Moon64.png")){
textureMap[string(rawpath)]->width = moon64_logo.width;
textureMap[string(rawpath)]->height = moon64_logo.height;
gfx_rapi->upload_texture(moon64_logo.pixel_data, moon64_logo.width, moon64_logo.height);
return;
}
@ -134,6 +135,8 @@ namespace MoonInternal {
EntryFileData * imgdata = getTextureData(fixedPath.c_str());
if (imgdata) {
u8 *data = stbi_load_from_memory(reinterpret_cast<const stbi_uc *>(imgdata->data), imgdata->size, &w, &h, NULL, 4);
textureMap[string(rawpath)]->width = w;
textureMap[string(rawpath)]->height = h;
if (data) {
@ -177,6 +180,9 @@ namespace MoonInternal {
textureCache.insert(pair<string, BitModule*>(entry->first, addon));
}
}
for(auto &tex : textureMap)
gfx_get_current_rendering_api()->delete_texture(tex.second->texture_id);
textureMap.clear();
}

View File

@ -24,7 +24,7 @@ namespace Moon {
namespace MoonInternal {
EntryFileData *getTextureData(const char *fullpath);
void loadTexture(int tile, const char *fullpath, struct GfxRenderingAPI *gfx_rapi);
void loadTexture(int tile, const char *fullpath, const char *rawpath, struct GfxRenderingAPI *gfx_rapi);
void saveTexture(TextureData *data, std::string texturePath);
void buildTextureCache(std::vector<int> order);
void setupTextureEngine( std::string state );

View File

@ -104,8 +104,8 @@ void moon_load_base_texture(char* data, long size, char* texture){
}
void moon_load_texture(int tile, const char *fullpath, struct GfxRenderingAPI *gfx_rapi){
MoonInternal::loadTexture(tile, fullpath, gfx_rapi);
void moon_load_texture(int tile, const char *fullpath, const char *rawpath, struct GfxRenderingAPI *gfx_rapi){
MoonInternal::loadTexture(tile, fullpath, rawpath, gfx_rapi);
}
}

View File

@ -47,7 +47,7 @@ void moon_save_texture(struct TextureData* data, char* tex);
struct TextureData* moon_get_texture(char* tex);
struct TextureData* moon_create_texture();
void moon_load_base_texture(char* data, long size, char* texture);
void moon_load_texture(int tile, const char *fullpath, struct GfxRenderingAPI *gfx_rapi);
void moon_load_texture(int tile, const char *fullpath, const char *rawpath, struct GfxRenderingAPI *gfx_rapi);
#endif
#endif

View File

@ -38,6 +38,10 @@
#include "gfx_rendering_api.h"
#include "moon/mod-engine/hooks/hook.h"
#include <map>
#include <iostream>
using namespace std;
#define TEX_CACHE_STEP 512
struct ShaderProgram {
@ -63,13 +67,10 @@ static struct ShaderProgram shader_program_pool[64];
static uint8_t shader_program_pool_size;
static GLuint opengl_vbo;
static int tex_cache_size = 0;
static int num_textures = 0;
static struct GLTexture *tex_cache = NULL;
static struct ShaderProgram *opengl_prg = NULL;
static struct GLTexture *opengl_tex[2];
static int opengl_curtex = 0;
static struct GLTexture* opengl_texture;
map<GLuint, GLTexture*> texture_map;
static uint32_t frame_count;
@ -94,9 +95,9 @@ static inline void gfx_opengl_set_shader_uniforms(struct ShaderProgram *prg) {
}
static inline void gfx_opengl_set_texture_uniforms(struct ShaderProgram *prg, const int tile) {
if (prg->used_textures[tile] && opengl_tex[tile]) {
glUniform2f(prg->uniform_locations[tile*2 + 0], opengl_tex[tile]->size[0], opengl_tex[tile]->size[1]);
glUniform1i(prg->uniform_locations[tile*2 + 1], opengl_tex[tile]->filter);
if (prg->used_textures[tile] && opengl_texture) {
glUniform2f(prg->uniform_locations[tile*2 + 0], opengl_texture->size[0], opengl_texture->size[1]);
glUniform1i(prg->uniform_locations[tile*2 + 1], opengl_texture->filter);
}
}
@ -512,30 +513,32 @@ static void gfx_opengl_shader_get_info(struct ShaderProgram *prg, uint8_t *num_i
}
static GLuint gfx_opengl_new_texture(void) {
if (num_textures >= tex_cache_size) {
tex_cache_size += TEX_CACHE_STEP;
tex_cache = realloc(tex_cache, sizeof(struct GLTexture) * tex_cache_size);
if (!tex_cache) sys_fatal("out of memory allocating texture cache");
// invalidate these because they might be pointing to garbage now
opengl_tex[0] = NULL;
opengl_tex[1] = NULL;
}
glGenTextures(1, &tex_cache[num_textures].gltex);
return num_textures++;
GLuint texture_id;
glGenTextures(1, &texture_id);
cout << texture_id << endl;
texture_map[texture_id] = new GLTexture();
return texture_id;
}
static void gfx_opengl_delete_texture(GLuint texture_id) {
if(texture_id > 0)
glDeleteTextures(1, &texture_id);
}
static void gfx_opengl_select_texture(int tile, GLuint texture_id) {
opengl_tex[tile] = tex_cache + texture_id;
opengl_curtex = tile;
glActiveTexture(GL_TEXTURE0 + tile);
glBindTexture(GL_TEXTURE_2D, opengl_tex[tile]->gltex);
gfx_opengl_set_texture_uniforms(opengl_prg, tile);
opengl_texture = texture_map[texture_id];
opengl_texture->gltex = texture_id;
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, opengl_texture->gltex);
gfx_opengl_set_texture_uniforms(opengl_prg, tile);
}
static void gfx_opengl_upload_texture(uint8_t *rgba32_buf, int width, int height) {
static void gfx_opengl_upload_texture(const unsigned char *rgba32_buf, int width, int height) {
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, rgba32_buf);
opengl_tex[opengl_curtex]->size[0] = width;
opengl_tex[opengl_curtex]->size[1] = height;
opengl_texture->size[0] = width;
opengl_texture->size[1] = height;
}
static uint32_t gfx_cm_to_opengl(uint32_t val) {
@ -552,9 +555,8 @@ static void gfx_opengl_set_sampler_parameters(int tile, bool linear_filter, uint
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, gfx_cm_to_opengl(cms));
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, gfx_cm_to_opengl(cmt));
opengl_curtex = tile;
if (opengl_tex[tile]) {
opengl_tex[tile]->filter = linear_filter;
if (opengl_texture) {
opengl_texture->filter = linear_filter;
gfx_opengl_set_texture_uniforms(opengl_prg, tile);
}
}
@ -622,19 +624,15 @@ static void gfx_opengl_init(void) {
#if FOR_WINDOWS || defined(OSX_BUILD)
GLenum err;
if ((err = glewInit()) != GLEW_OK)
sys_fatal("could not init GLEW:\n%s", glewGetErrorString(err));
printf("could not init GLEW:\n%s", glewGetErrorString(err));
#endif
tex_cache_size = TEX_CACHE_STEP;
tex_cache = calloc(tex_cache_size, sizeof(struct GLTexture));
if (!tex_cache) sys_fatal("out of memory allocating texture cache");
// check GL version
int vmajor, vminor;
bool is_es = false;
gl_get_version(&vmajor, &vminor, &is_es);
if (vmajor < 2 && vminor < 1 && !is_es)
sys_fatal("OpenGL 2.1+ is required.\nReported version: %s%d.%d", is_es ? "ES" : "", vmajor, vminor);
printf("OpenGL 2.1+ is required.\nReported version: %s%d.%d", is_es ? "ES" : "", vmajor, vminor);
glGenBuffers(1, &opengl_vbo);
@ -643,25 +641,23 @@ static void gfx_opengl_init(void) {
glDepthFunc(GL_LEQUAL);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
moon_bind_hook(GFX_INIT);
moon_init_hook(0);
moon_call_hook(0);
MoonInternal::bindHook(GFX_INIT);
MoonInternal::initBindHook(0);
MoonInternal::callBindHook(0);
}
static void gfx_opengl_on_resize(void) {
moon_bind_hook(GFX_ON_REZISE);
moon_init_hook(0);
moon_call_hook(0);
MoonInternal::bindHook(GFX_ON_REZISE);
MoonInternal::initBindHook(0);
MoonInternal::callBindHook(0);
}
static void gfx_opengl_start_frame(void) {
moon_bind_hook(GFX_PRE_START_FRAME);
moon_init_hook(0);
if(moon_call_hook(0)){
return;
}
MoonInternal::bindHook(GFX_PRE_START_FRAME);
MoonInternal::initBindHook(0);
if(MoonInternal::callBindHook(0)) return;
frame_count++;
@ -676,28 +672,28 @@ static void gfx_opengl_start_frame(void) {
else
glDisable(GL_MULTISAMPLE);
#endif
moon_bind_hook(GFX_POST_START_FRAME);
moon_init_hook(0);
moon_call_hook(0);
MoonInternal::bindHook(GFX_POST_START_FRAME);
MoonInternal::initBindHook(0);
MoonInternal::callBindHook(0);
}
static void gfx_opengl_end_frame(void) {
moon_bind_hook(GFX_PRE_END_FRAME);
moon_init_hook(0);
moon_call_hook(0);
MoonInternal::bindHook(GFX_PRE_END_FRAME);
MoonInternal::initBindHook(0);
MoonInternal::callBindHook(0);
moon_bind_hook(GFX_POST_END_FRAME);
moon_init_hook(0);
moon_call_hook(0);
MoonInternal::bindHook(GFX_POST_END_FRAME);
MoonInternal::initBindHook(0);
MoonInternal::callBindHook(0);
}
static void gfx_opengl_finish_render(void) {
}
static void gfx_opengl_shutdown(void) {
moon_bind_hook(GFX_SHUTDOWN);
moon_init_hook(0);
moon_call_hook(0);
MoonInternal::bindHook(GFX_SHUTDOWN);
MoonInternal::initBindHook(0);
MoonInternal::callBindHook(0);
}
@ -710,6 +706,7 @@ struct GfxRenderingAPI gfx_opengl_api = {
gfx_opengl_shader_get_info,
gfx_opengl_new_texture,
gfx_opengl_select_texture,
gfx_opengl_delete_texture,
gfx_opengl_upload_texture,
gfx_opengl_set_sampler_parameters,
gfx_opengl_set_depth_test,

View File

@ -1,646 +0,0 @@
#ifdef RAPI_GL_LEGACY
#include <stdint.h>
#include <stdbool.h>
#include <assert.h>
#ifndef _LANGUAGE_C
# define _LANGUAGE_C
#endif
#include <PR/gbi.h>
#ifdef __MINGW32__
# define FOR_WINDOWS 1
#else
# define FOR_WINDOWS 0
#endif
#include <SDL2/SDL.h>
#if FOR_WINDOWS || defined(OSX_BUILD)
# define GLEW_STATIC
# include <GL/glew.h>
#endif
#define GL_GLEXT_PROTOTYPES 1
#include <SDL2/SDL_opengl.h>
// redefine this if using a different GL loader
#define mglGetProcAddress(name) SDL_GL_GetProcAddress(name)
// we'll define and load it manually in init, just in case
typedef void (*PFNMGLFOGCOORDPOINTERPROC)(GLenum type, GLsizei stride, const void *pointer);
static PFNMGLFOGCOORDPOINTERPROC mglFogCoordPointer = NULL;
// since these can have different names, might as well redefine them to a single one
#undef GL_FOG_COORD_SRC
#undef GL_FOG_COORD
#undef GL_FOG_COORD_ARRAY
#define GL_FOG_COORD_SRC 0x8450
#define GL_FOG_COORD 0x8451
#define GL_FOG_COORD_ARRAY 0x8457
#include "../platform.h"
#include "gfx_cc.h"
#include "macros.h"
#include "gfx_rendering_api.h"
#include "moon/mod-engine/hooks/hook.h"
enum MixFlags {
SH_MF_OVERRIDE_ALPHA = 1,
SH_MF_MULTIPLY = 2,
SH_MF_MIX = 4,
SH_MF_SINGLE = 8,
SH_MF_MULTIPLY_ALPHA = 16,
SH_MF_MIX_ALPHA = 32,
SH_MF_SINGLE_ALPHA = 64,
SH_MF_INPUT_ALPHA = 128,
};
enum MixType {
SH_MT_NONE,
SH_MT_TEXTURE,
SH_MT_COLOR,
SH_MT_TEXTURE_TEXTURE,
SH_MT_TEXTURE_COLOR,
SH_MT_COLOR_COLOR,
};
struct ShaderProgram {
uint32_t shader_id;
enum MixType mix;
uint32_t mix_flags;
bool texture_used[2];
int num_inputs;
};
static struct ShaderProgram shader_program_pool[64];
static uint8_t shader_program_pool_size;
static struct ShaderProgram *cur_shader = NULL;
static const float *cur_buf = NULL;
static const float *cur_fog_ofs = NULL;
static size_t cur_buf_size = 0;
static size_t cur_buf_num_tris = 0;
static size_t cur_buf_stride = 0;
static bool gl_blend = false;
static bool gl_adv_fog = false;
static const float c_white[] = { 1.f, 1.f, 1.f, 1.f };
static bool gfx_opengl_z_is_from_0_to_1(void) {
return false;
}
#define TEXENV_COMBINE_ON() glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE)
#define TEXENV_COMBINE_OFF() glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE)
#define TEXENV_COMBINE_OP(num, cval, aval) \
do { \
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND ## num ## _RGB, cval); \
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND ## num ## _ALPHA, aval); \
} while (0)
#define TEXENV_COMBINE_SET1(what, mode, val) \
do { \
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ ## what, mode); \
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ ## what, val); \
} while (0)
#define TEXENV_COMBINE_SET2(what, mode, val1, val2) \
do { \
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ ## what, mode); \
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ ## what, val1); \
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_ ## what, val2); \
} while (0)
#define TEXENV_COMBINE_SET3(what, mode, val1, val2, val3) \
do { \
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ ## what, mode); \
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ ## what, val1); \
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_ ## what, val2); \
glTexEnvi(GL_TEXTURE_ENV, GL_SRC2_ ## what, val3); \
} while (0)
static inline void texenv_set_texture_color(struct ShaderProgram *prg) {
glActiveTexture(GL_TEXTURE0);
if (prg->mix_flags & SH_MF_OVERRIDE_ALPHA) {
TEXENV_COMBINE_ON();
if (prg->mix_flags & SH_MF_SINGLE_ALPHA) {
if (prg->mix_flags & SH_MF_MULTIPLY) {
// keep the alpha but modulate the color
const GLenum alphasrc = (prg->mix_flags & SH_MF_INPUT_ALPHA) ? GL_PRIMARY_COLOR : GL_TEXTURE;
TEXENV_COMBINE_SET2(RGB, GL_MODULATE, GL_TEXTURE, GL_PRIMARY_COLOR);
TEXENV_COMBINE_SET1(ALPHA, GL_REPLACE, alphasrc);
} else {
// somehow makes it keep the color while taking the alpha from primary color
TEXENV_COMBINE_SET1(RGB, GL_REPLACE, GL_TEXTURE);
}
} else { // if (prg->mix_flags & SH_MF_SINGLE) {
if (prg->mix_flags & SH_MF_MULTIPLY_ALPHA) {
// modulate the alpha but keep the color
TEXENV_COMBINE_SET2(ALPHA, GL_MODULATE, GL_TEXTURE, GL_PRIMARY_COLOR);
TEXENV_COMBINE_SET1(RGB, GL_REPLACE, GL_TEXTURE);
} else {
// somehow makes it keep the alpha
TEXENV_COMBINE_SET1(ALPHA, GL_REPLACE, GL_TEXTURE);
}
}
// TODO: MIX and the other one
} else if (prg->mix_flags & SH_MF_MULTIPLY) {
// TODO: is this right?
TEXENV_COMBINE_OFF();
} else if (prg->mix_flags & SH_MF_MIX) {
TEXENV_COMBINE_ON();
// HACK: determine this using flags and not this crap
if (prg->num_inputs > 1) {
// out.rgb = mix(color0.rgb, color1.rgb, texel0.rgb);
// no color1 tho, so mix with white (texenv color is set in init())
TEXENV_COMBINE_OP(2, GL_SRC_COLOR, GL_SRC_ALPHA);
TEXENV_COMBINE_SET3(RGB, GL_INTERPOLATE, GL_CONSTANT, GL_PRIMARY_COLOR, GL_TEXTURE);
TEXENV_COMBINE_SET1(ALPHA, GL_REPLACE, GL_CONSTANT);
} else {
// out.rgb = mix(color0.rgb, texel0.rgb, texel0.a);
TEXENV_COMBINE_OP(2, GL_SRC_ALPHA, GL_SRC_ALPHA);
TEXENV_COMBINE_SET3(RGB, GL_INTERPOLATE, GL_TEXTURE, GL_PRIMARY_COLOR, GL_TEXTURE);
}
} else {
TEXENV_COMBINE_OFF();
}
}
static inline void texenv_set_texture_texture(UNUSED struct ShaderProgram *prg) {
glActiveTexture(GL_TEXTURE0);
TEXENV_COMBINE_OFF();
glActiveTexture(GL_TEXTURE1);
TEXENV_COMBINE_ON();
// out.rgb = mix(texel0.rgb, texel1.rgb, color0.rgb);
TEXENV_COMBINE_OP(2, GL_SRC_COLOR, GL_SRC_ALPHA);
TEXENV_COMBINE_SET3(RGB, GL_INTERPOLATE, GL_PREVIOUS, GL_TEXTURE, GL_PRIMARY_COLOR);
// out.a = texel0.a;
TEXENV_COMBINE_SET1(ALPHA, GL_REPLACE, GL_PREVIOUS);
}
static void gfx_opengl_apply_shader(struct ShaderProgram *prg) {
const float *ofs = cur_buf;
// vertices are always there
glVertexPointer(4, GL_FLOAT, cur_buf_stride, ofs);
ofs += 4;
// have texture(s), specify same texcoords for every active texture
for (int i = 0; i < 2; ++i) {
if (prg->texture_used[i]) {
glEnable(GL_TEXTURE0 + i);
glClientActiveTexture(GL_TEXTURE0 + i);
glActiveTexture(GL_TEXTURE0 + i);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, cur_buf_stride, ofs);
glEnable(GL_TEXTURE_2D);
ofs += 2;
}
}
if (prg->shader_id & SHADER_OPT_FOG) {
// fog requested, we can deal with it in one of two ways
if (gl_adv_fog) {
// if GL_EXT_fog_coord is available, use the provided fog factor as scaled depth for GL fog
const float fogrgb[] = { ofs[0], ofs[1], ofs[2] };
glEnable(GL_FOG);
glFogfv(GL_FOG_COLOR, fogrgb); // color is the same for all verts, only intensity is different
glEnableClientState(GL_FOG_COORD_ARRAY);
mglFogCoordPointer(GL_FLOAT, cur_buf_stride, ofs + 3); // point it to alpha, which is fog factor
} else {
// if there's no fog coords available, blend it on top of normal tris later
cur_fog_ofs = ofs;
}
ofs += 4;
}
if (prg->num_inputs) {
// have colors
// TODO: more than one color (maybe glSecondaryColorPointer?)
// HACK: if there's a texture and two colors, one of them is likely for speculars or some shit (see mario head)
// if there's two colors but no texture, the real color is likely the second one
const int hack = (prg->num_inputs > 1) * (4 - (int)prg->texture_used[0]);
glEnableClientState(GL_COLOR_ARRAY);
glColorPointer(4, GL_FLOAT, cur_buf_stride, ofs + hack);
ofs += 4 * prg->num_inputs;
}
if (prg->shader_id & SHADER_OPT_TEXTURE_EDGE) {
// (horrible) alpha discard
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, 0.3f);
}
// configure formulae
switch (prg->mix) {
case SH_MT_TEXTURE:
glActiveTexture(GL_TEXTURE0);
TEXENV_COMBINE_OFF();
break;
case SH_MT_TEXTURE_COLOR:
texenv_set_texture_color(prg);
break;
case SH_MT_TEXTURE_TEXTURE:
texenv_set_texture_texture(prg);
break;
default:
break;
}
}
static void gfx_opengl_unload_shader(struct ShaderProgram *old_prg) {
if (cur_shader == old_prg || old_prg == NULL)
cur_shader = NULL;
glClientActiveTexture(GL_TEXTURE0);
glActiveTexture(GL_TEXTURE0);
glDisable(GL_TEXTURE_2D);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glClientActiveTexture(GL_TEXTURE1);
glActiveTexture(GL_TEXTURE1);
glDisable(GL_TEXTURE_2D);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisable(GL_TEXTURE1);
glDisable(GL_TEXTURE0);
glDisable(GL_TEXTURE_2D);
glDisable(GL_ALPHA_TEST);
glDisable(GL_FOG);
cur_fog_ofs = NULL; // clear fog colors
glDisableClientState(GL_COLOR_ARRAY);
if (gl_adv_fog) glDisableClientState(GL_FOG_COORD_ARRAY);
}
static void gfx_opengl_load_shader(struct ShaderProgram *new_prg) {
cur_shader = new_prg;
// gfx_opengl_apply_shader(cur_shader);
}
static struct ShaderProgram *gfx_opengl_create_and_load_new_shader(uint32_t shader_id) {
uint8_t c[2][4];
for (int i = 0; i < 4; i++) {
c[0][i] = (shader_id >> (i * 3)) & 7;
c[1][i] = (shader_id >> (12 + i * 3)) & 7;
}
bool used_textures[2] = {0, 0};
int num_inputs = 0;
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 4; j++) {
if (c[i][j] >= SHADER_INPUT_1 && c[i][j] <= SHADER_INPUT_4) {
if (c[i][j] > num_inputs) {
num_inputs = c[i][j];
}
}
if (c[i][j] == SHADER_TEXEL0 || c[i][j] == SHADER_TEXEL0A) {
used_textures[0] = true;
}
if (c[i][j] == SHADER_TEXEL1) {
used_textures[1] = true;
}
}
}
const bool color_alpha_same = (shader_id & 0xfff) == ((shader_id >> 12) & 0xfff);
const bool do_multiply[2] = {c[0][1] == 0 && c[0][3] == 0, c[1][1] == 0 && c[1][3] == 0};
const bool do_mix[2] = {c[0][1] == c[0][3], c[1][1] == c[1][3]};
const bool do_single[2] = {c[0][2] == 0, c[1][2] == 0};
struct ShaderProgram *prg = &shader_program_pool[shader_program_pool_size++];
prg->shader_id = shader_id;
prg->num_inputs = num_inputs;
prg->texture_used[0] = used_textures[0];
prg->texture_used[1] = used_textures[1];
if (used_textures[0] && used_textures[1])
prg->mix = SH_MT_TEXTURE_TEXTURE;
else if (used_textures[0] && num_inputs)
prg->mix = SH_MT_TEXTURE_COLOR;
else if (used_textures[0])
prg->mix = SH_MT_TEXTURE;
else if (num_inputs > 1)
prg->mix = SH_MT_COLOR_COLOR;
else if (num_inputs)
prg->mix = SH_MT_COLOR;
if (do_single[0]) prg->mix_flags |= SH_MF_SINGLE;
if (do_multiply[0]) prg->mix_flags |= SH_MF_MULTIPLY;
if (do_mix[0]) prg->mix_flags |= SH_MF_MIX;
if (!color_alpha_same && (shader_id & SHADER_OPT_ALPHA)) {
prg->mix_flags |= SH_MF_OVERRIDE_ALPHA;
if (do_single[1]) prg->mix_flags |= SH_MF_SINGLE_ALPHA;
if (do_multiply[1]) prg->mix_flags |= SH_MF_MULTIPLY_ALPHA;
if (do_mix[1]) prg->mix_flags |= SH_MF_MIX_ALPHA;
if (c[1][3] < SHADER_TEXEL0) prg->mix_flags |= SH_MF_INPUT_ALPHA;
}
gfx_opengl_load_shader(prg);
return prg;
}
static struct ShaderProgram *gfx_opengl_lookup_shader(uint32_t shader_id) {
for (size_t i = 0; i < shader_program_pool_size; i++) {
if (shader_program_pool[i].shader_id == shader_id) {
return &shader_program_pool[i];
}
}
return NULL;
}
static void gfx_opengl_shader_get_info(struct ShaderProgram *prg, uint8_t *num_inputs, bool used_textures[2]) {
*num_inputs = prg->num_inputs;
used_textures[0] = prg->texture_used[0];
used_textures[1] = prg->texture_used[1];
}
static GLuint gfx_opengl_new_texture(void) {
GLuint ret;
glGenTextures(1, &ret);
return ret;
}
static void gfx_opengl_select_texture(int tile, GLuint texture_id) {
glActiveTexture(GL_TEXTURE0 + tile);
glBindTexture(GL_TEXTURE_2D, texture_id);
}
static void gfx_opengl_upload_texture(uint8_t *rgba32_buf, int width, int height) {
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, rgba32_buf);
}
static uint32_t gfx_cm_to_opengl(uint32_t val) {
if (val & G_TX_CLAMP)
return GL_CLAMP_TO_EDGE;
return (val & G_TX_MIRROR) ? GL_MIRRORED_REPEAT : GL_REPEAT;
}
static void gfx_opengl_set_sampler_parameters(int tile, bool linear_filter, uint32_t cms, uint32_t cmt) {
const GLenum filter = linear_filter ? GL_LINEAR : GL_NEAREST;
glActiveTexture(GL_TEXTURE0 + tile);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, gfx_cm_to_opengl(cms));
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, gfx_cm_to_opengl(cmt));
}
static void gfx_opengl_set_depth_test(bool depth_test) {
if (depth_test) {
glEnable(GL_DEPTH_TEST);
} else {
glDisable(GL_DEPTH_TEST);
}
}
static void gfx_opengl_set_depth_mask(bool z_upd) {
glDepthMask(z_upd ? GL_TRUE : GL_FALSE);
}
static void gfx_opengl_set_zmode_decal(bool zmode_decal) {
if (zmode_decal) {
glPolygonOffset(-2, -2);
glEnable(GL_POLYGON_OFFSET_FILL);
} else {
glPolygonOffset(0, 0);
glDisable(GL_POLYGON_OFFSET_FILL);
}
}
static void gfx_opengl_set_viewport(int x, int y, int width, int height) {
glViewport(x, y, width, height);
}
static void gfx_opengl_set_scissor(int x, int y, int width, int height) {
glScissor(x, y, width, height);
}
static void gfx_opengl_set_use_alpha(bool use_alpha) {
gl_blend = use_alpha;
if (use_alpha) {
glEnable(GL_BLEND);
} else {
glDisable(GL_BLEND);
}
}
// draws the same triangles as plain fog color + fog intensity as alpha
// on top of the normal tris and blends them to achieve sort of the same effect
// as fog would
static inline void gfx_opengl_blend_fog_tris(void) {
// if a texture was used, replace it with fog color instead, but still keep the alpha
if (cur_shader->texture_used[0]) {
glActiveTexture(GL_TEXTURE0);
TEXENV_COMBINE_ON();
// out.rgb = input0.rgb
TEXENV_COMBINE_SET1(RGB, GL_REPLACE, GL_PRIMARY_COLOR);
// out.a = texel0.a * input0.a
TEXENV_COMBINE_SET2(ALPHA, GL_MODULATE, GL_TEXTURE, GL_PRIMARY_COLOR);
}
glEnableClientState(GL_COLOR_ARRAY); // enable color array temporarily
glColorPointer(4, GL_FLOAT, cur_buf_stride, cur_fog_ofs); // set fog colors as primary colors
if (!gl_blend) glEnable(GL_BLEND); // enable blending temporarily
glDepthFunc(GL_LEQUAL); // Z is the same as the base triangles
glDrawArrays(GL_TRIANGLES, 0, 3 * cur_buf_num_tris);
glDepthFunc(GL_LESS); // set back to default
if (!gl_blend) glDisable(GL_BLEND); // disable blending if it was disabled
glDisableClientState(GL_COLOR_ARRAY); // will get reenabled later anyway
}
static void gfx_opengl_draw_triangles(float buf_vbo[], size_t buf_vbo_len, size_t buf_vbo_num_tris) {
//printf("flushing %d tris\n", buf_vbo_num_tris);
cur_buf = buf_vbo;
cur_buf_size = buf_vbo_len * 4;
cur_buf_num_tris = buf_vbo_num_tris;
cur_buf_stride = cur_buf_size / (3 * cur_buf_num_tris);
gfx_opengl_apply_shader(cur_shader);
glDrawArrays(GL_TRIANGLES, 0, 3 * cur_buf_num_tris);
// cur_fog_ofs is only set if GL_EXT_fog_coord isn't used
if (cur_fog_ofs) gfx_opengl_blend_fog_tris();
}
static inline bool gl_check_ext(const char *name) {
static const char *extstr = NULL;
if (extstr == NULL)
extstr = (const char *)glGetString(GL_EXTENSIONS);
if (!strstr(extstr, name)) {
fprintf(stderr, "GL extension not supported: %s\n", name);
return false;
}
printf("GL extension detected: %s\n", name);
return true;
}
static inline bool gl_get_version(int *major, int *minor, bool *is_es) {
const char *vstr = (const char *)glGetString(GL_VERSION);
if (!vstr || !vstr[0]) return false;
if (!strncmp(vstr, "OpenGL ES ", 10)) {
vstr += 10;
*is_es = true;
} else if (!strncmp(vstr, "OpenGL ES-CM ", 13)) {
vstr += 13;
*is_es = true;
}
return (sscanf(vstr, "%d.%d", major, minor) == 2);
}
static void gfx_opengl_init(void) {
#if FOR_WINDOWS || defined(OSX_BUILD)
GLenum err;
if ((err = glewInit()) != GLEW_OK)
sys_fatal("could not init GLEW:\n%s", glewGetErrorString(err));
#endif
// check GL version
int vmajor, vminor;
bool is_es = false;
gl_get_version(&vmajor, &vminor, &is_es);
if (vmajor < 2 && vminor < 2 && !is_es)
sys_fatal("OpenGL 1.2+ is required.\nReported version: %s%d.%d", is_es ? "ES" : "", vmajor, vminor);
// check extensions that we need
const bool supported =
gl_check_ext("GL_ARB_multitexture") &&
gl_check_ext("GL_ARB_texture_env_combine");
if (!supported)
sys_fatal("required GL extensions are not supported");
gl_adv_fog = false;
// check whether we can use advanced fog shit
const bool fog_ext =
vmajor > 1 || vminor > 3 ||
gl_check_ext("GL_EXT_fog_coord") ||
gl_check_ext("GL_ARB_fog_coord");
if (fog_ext) {
// try to load manually, as this might be an extension, and even then the ext list may lie
mglFogCoordPointer = mglGetProcAddress("glFogCoordPointer");
if (!mglFogCoordPointer) mglFogCoordPointer = mglGetProcAddress("glFogCoordPointerEXT");
if (!mglFogCoordPointer) mglFogCoordPointer = mglGetProcAddress("glFogCoordPointerARB");
if (!mglFogCoordPointer)
printf("glFogCoordPointer is not actually available, it won't be used.\n");
else
gl_adv_fog = true; // appears to be all good
}
printf("GL_VERSION = %s\n", glGetString(GL_VERSION));
printf("GL_EXTENSIONS =\n%s\n", glGetString(GL_EXTENSIONS));
if (gl_adv_fog) {
// set fog params, they never change
printf("GL_EXT_fog_coord available, using that for fog\n");
glFogi(GL_FOG_COORD_SRC, GL_FOG_COORD);
glFogi(GL_FOG_MODE, GL_LINEAR);
glFogf(GL_FOG_START, 0.0f);
glFogf(GL_FOG_END, 1.0f);
}
// these also never change
glEnableClientState(GL_VERTEX_ARRAY);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, c_white);
TEXENV_COMBINE_OP(0, GL_SRC_COLOR, GL_SRC_ALPHA);
TEXENV_COMBINE_OP(1, GL_SRC_COLOR, GL_SRC_ALPHA);
moon_bind_hook(GFX_INIT);
moon_init_hook(0);
moon_call_hook(0);
}
static void gfx_opengl_on_resize(void) {
moon_bind_hook(GFX_ON_REZISE);
moon_init_hook(0);
moon_call_hook(0);
}
static void gfx_opengl_start_frame(void) {
moon_bind_hook(GFX_PRE_START_FRAME);
moon_init_hook(0);
if(moon_call_hook(0)){
return;
}
glDisable(GL_SCISSOR_TEST);
glDepthMask(GL_TRUE); // Must be set to clear Z-buffer
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_SCISSOR_TEST);
moon_bind_hook(GFX_POST_START_FRAME);
moon_init_hook(0);
moon_call_hook(0);
}
static void gfx_opengl_end_frame(void) {
moon_bind_hook(GFX_PRE_END_FRAME);
moon_init_hook(0);
moon_call_hook(0);
moon_bind_hook(GFX_POST_END_FRAME);
moon_init_hook(0);
moon_call_hook(0);
}
static void gfx_opengl_finish_render(void) {
}
static void gfx_opengl_shutdown(void) {
moon_bind_hook(GFX_SHUTDOWN);
moon_init_hook(0);
moon_call_hook(0);
}
struct GfxRenderingAPI gfx_opengl_api = {
gfx_opengl_z_is_from_0_to_1,
gfx_opengl_unload_shader,
gfx_opengl_load_shader,
gfx_opengl_create_and_load_new_shader,
gfx_opengl_lookup_shader,
gfx_opengl_shader_get_info,
gfx_opengl_new_texture,
gfx_opengl_select_texture,
gfx_opengl_upload_texture,
gfx_opengl_set_sampler_parameters,
gfx_opengl_set_depth_test,
gfx_opengl_set_depth_mask,
gfx_opengl_set_zmode_decal,
gfx_opengl_set_viewport,
gfx_opengl_set_scissor,
gfx_opengl_set_use_alpha,
gfx_opengl_draw_triangles,
gfx_opengl_init,
gfx_opengl_on_resize,
gfx_opengl_start_frame,
gfx_opengl_end_frame,
gfx_opengl_finish_render,
gfx_opengl_shutdown
};
#endif // RAPI_GL_LEGACY

View File

@ -259,13 +259,16 @@ static bool gfx_texture_cache_lookup(int tile, struct TextureData **n, const uin
struct TextureData *node = moon_get_texture(orig_addr);
if(node != NULL){
if(tile)
printf("Tile: %d\n", tile);
gfx_rapi->select_texture(tile, node->texture_id);
if(n != NULL) *n = node;
return true;
} else node = moon_create_texture();
if (node->texture_addr == NULL)
node->texture_id = gfx_rapi->new_texture();
node->texture_id = gfx_rapi->new_texture();
gfx_rapi->select_texture(tile, node->texture_id);
gfx_rapi->set_sampler_parameters(tile, false, 0, 0);
@ -298,15 +301,14 @@ static inline void load_memory_texture(void *imgdata, long size) {
struct TextureData * forceTextureLoad(char* path) {
struct TextureData *node = NULL;
if (gfx_texture_cache_lookup(0, &node, path, 0, 0)) {
if (gfx_texture_cache_lookup(0, &node, path, 0, 0))
return node;
}
// the "texture data" is actually a C string with the path to our texture in it
// load it from an external image in our data path
char texname[SYS_MAX_PATH];
snprintf(texname, sizeof(texname), FS_TEXTUREDIR "/%s.png", (const char*)path);
moon_load_texture(0, texname, gfx_rapi);
moon_load_texture(0, texname, (const char*) path, gfx_rapi);
return node;
}
@ -325,7 +327,7 @@ static void import_texture(int tile) {
// load it from an external image in our data path
char texname[SYS_MAX_PATH];
snprintf(texname, sizeof(texname), FS_TEXTUREDIR "/%s.png", (const char*)rdp.loaded_texture[tile].addr);
moon_load_texture(tile, texname, gfx_rapi);
moon_load_texture(tile, texname, (const char*) rdp.loaded_texture[tile].addr, gfx_rapi);
}
static void gfx_normalize_vector(float v[3]) {

View File

@ -24,6 +24,7 @@ struct TextureData {
uint32_t texture_id;
uint8_t cms, cmt;
char linear_filter;
int width, height;
};
extern struct GfxDimensions gfx_current_dimensions;

View File

@ -16,6 +16,7 @@ struct GfxRenderingAPI {
void (*shader_get_info)(struct ShaderProgram *prg, uint8_t *num_inputs, bool used_textures[2]);
uint32_t (*new_texture)(void);
void (*select_texture)(int tile, uint32_t texture_id);
void (*delete_texture)(uint32_t texture_id);
void (*upload_texture)(const uint8_t *rgba32_buf, int width, int height);
void (*set_sampler_parameters)(int sampler, bool linear_filter, uint32_t cms, uint32_t cmt);
void (*set_depth_test)(bool depth_test);