summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/ir_print_metal_visitor.cpp12
-rw-r--r--3rdparty/bgfx/3rdparty/iconfontheaders/.gitignore58
-rw-r--r--3rdparty/bgfx/3rdparty/iconfontheaders/GenerateIconFontCppHeaders.py183
-rw-r--r--3rdparty/bgfx/3rdparty/iconfontheaders/LICENSE22
-rw-r--r--3rdparty/bgfx/3rdparty/iconfontheaders/README.md29
-rw-r--r--3rdparty/bgfx/3rdparty/iconfontheaders/icons_font_awesome.h611
-rw-r--r--3rdparty/bgfx/3rdparty/iconfontheaders/icons_kenney.h234
-rw-r--r--3rdparty/bgfx/3rdparty/iconfontheaders/icons_material_design.h938
-rw-r--r--3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.cpp7
-rw-r--r--3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_demo.cpp12
-rw-r--r--3rdparty/bgfx/README.md3
-rw-r--r--3rdparty/bgfx/examples/10-font/font.cpp26
-rw-r--r--3rdparty/bgfx/examples/common/bounds.cpp96
-rw-r--r--3rdparty/bgfx/examples/common/bounds.h6
-rw-r--r--3rdparty/bgfx/examples/common/entry/entry_sdl.cpp2
-rw-r--r--3rdparty/bgfx/examples/common/imgui/imgui.cpp7
-rw-r--r--3rdparty/bgfx/examples/common/imgui/imgui.h24
-rw-r--r--3rdparty/bgfx/examples/common/imgui/ocornut_imgui.cpp10
-rw-r--r--3rdparty/bgfx/examples/runtime/font/kenney-icon-font.ttfbin0 -> 46184 bytes
-rw-r--r--3rdparty/bgfx/include/bgfx/bgfx.h23
-rw-r--r--3rdparty/bgfx/include/bgfx/bgfxdefines.h10
-rw-r--r--3rdparty/bgfx/include/bgfx/bgfxplatform.h3
-rw-r--r--3rdparty/bgfx/include/bgfx/c99/bgfx.h11
-rw-r--r--3rdparty/bgfx/include/bgfx/c99/bgfxplatform.h2
-rw-r--r--3rdparty/bgfx/scripts/bgfx.lua8
-rw-r--r--3rdparty/bgfx/scripts/example-common.lua5
-rw-r--r--3rdparty/bgfx/scripts/genie.lua10
-rw-r--r--3rdparty/bgfx/src/bgfx.cpp32
-rw-r--r--3rdparty/bgfx/src/bgfx_p.h32
-rw-r--r--3rdparty/bgfx/src/image.cpp52
-rw-r--r--3rdparty/bgfx/src/renderer_d3d11.cpp43
-rw-r--r--3rdparty/bgfx/src/renderer_d3d11.h4
-rw-r--r--3rdparty/bgfx/src/renderer_d3d12.cpp10
-rw-r--r--3rdparty/bgfx/src/renderer_d3d12.h4
-rw-r--r--3rdparty/bgfx/src/renderer_d3d9.cpp10
-rw-r--r--3rdparty/bgfx/src/renderer_d3d9.h2
-rw-r--r--3rdparty/bgfx/src/renderer_gl.cpp30
-rw-r--r--3rdparty/bgfx/src/renderer_gl.h5
-rw-r--r--3rdparty/bgfx/src/renderer_mtl.h2
-rw-r--r--3rdparty/bgfx/src/renderer_mtl.mm8
-rw-r--r--3rdparty/bgfx/src/renderer_null.cpp2
-rw-r--r--3rdparty/bgfx/tools/geometryc/geometryc.cpp2
-rw-r--r--3rdparty/bx/include/bx/fpumath.h79
-rw-r--r--3rdparty/bx/include/bx/hash.h2
-rw-r--r--3rdparty/bx/scripts/toolchain.lua8
-rw-r--r--3rdparty/bx/tools/bin/darwin/geniebin422176 -> 422176 bytes
-rw-r--r--3rdparty/bx/tools/bin/linux/geniebin396856 -> 396856 bytes
-rw-r--r--3rdparty/bx/tools/bin/windows/genie.exebin400384 -> 400896 bytes
48 files changed, 2505 insertions, 174 deletions
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/ir_print_metal_visitor.cpp b/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/ir_print_metal_visitor.cpp
index f9988a31f61..9f7071d9564 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/ir_print_metal_visitor.cpp
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/ir_print_metal_visitor.cpp
@@ -1020,7 +1020,17 @@ void ir_print_metal_visitor::visit(ir_expression *ir)
const bool halfCast = (arg_prec == glsl_precision_medium || arg_prec == glsl_precision_low);
buffer.asprintf_append (halfCast ? "((half)1.0/(" : "(1.0/(");
} else {
- buffer.asprintf_append ("%s(", operator_glsl_strs[ir->operation]);
+ switch(ir->operation) {
+ case ir_unop_dFdy:
+ case ir_unop_dFdy_coarse:
+ case ir_unop_dFdy_fine:
+ buffer.asprintf_append ("%s(-", operator_glsl_strs[ir->operation]);
+ break;
+
+ default:
+ buffer.asprintf_append ("%s(", operator_glsl_strs[ir->operation]);
+ break;
+ }
}
if (ir->operands[0])
ir->operands[0]->accept(this);
diff --git a/3rdparty/bgfx/3rdparty/iconfontheaders/.gitignore b/3rdparty/bgfx/3rdparty/iconfontheaders/.gitignore
new file mode 100644
index 00000000000..31b83a9bc9a
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/iconfontheaders/.gitignore
@@ -0,0 +1,58 @@
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+env/
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+*.egg-info/
+.installed.cfg
+*.egg
+
+# PyInstaller
+# Usually these files are written by a python script from a template
+# before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*,cover
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+target/
+.idea/
diff --git a/3rdparty/bgfx/3rdparty/iconfontheaders/GenerateIconFontCppHeaders.py b/3rdparty/bgfx/3rdparty/iconfontheaders/GenerateIconFontCppHeaders.py
new file mode 100644
index 00000000000..09eae5c4566
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/iconfontheaders/GenerateIconFontCppHeaders.py
@@ -0,0 +1,183 @@
+#!/usr/bin/python
+# Convert Font Awesome, Google Material Design and Kenney Game icon font
+# parameters to C++11 and C89 compatible formats.
+#
+#------------------------------------------------------------------------------
+# 1 - Source material
+#
+# 1.1 - Font Awesome - https://raw.githubusercontent.com/FortAwesome/Font-Awesome/master/src/icons.yml
+# 1.2 - Material Design - https://raw.githubusercontent.com/google/material-design-icons/master/iconfont/codepoints
+# 1.3 - Kenney icons - https://raw.githubusercontent.com/SamBrishes/kenney-icon-font/master/css/kenney-icons.css
+#
+#------------------------------------------------------------------------------
+# 2 - Data samples
+#
+# 2.1 - Font Awesome
+# - input: - name: Music
+# id: music
+# unicode: f001
+# created: 1.0
+# filter:
+# - note
+# - sound
+# categories:
+# - Web Application Icons
+# - output C++11: #define ICON_FA_MUSIC u8"\uf001"
+# - output C89: #define ICON_FA_MUSIC "\xEF\x80\x81"
+#
+# 2.2 - Google Material Design icons
+# - input: 3d_rotation e84d
+# - output C++11: #define ICON_MD_3D_ROTATION u8"\ue84d"
+# - output C89: #define ICON_MD_3D_ROTATION "\xEE\xA1\x8D"
+#
+# 2.3 - Kenney Game icons
+# - input: .ki-home:before{ content: "\e900"; }
+# - output C++11: #define ICON_KI_HOME u8"\ue900"
+# - output C89: #define ICON_KI_HOME "\xEE\xA4\x80"
+#
+# 2.4 - All fonts
+# - computed min and max unicode fonts ICON_MIN and ICON_MAX
+# - output: #define ICON_MIN_FA 0xf000
+# #define ICON_MAX_FA 0xf295
+#
+#------------------------------------------------------------------------------
+# 3 - Script dependencies
+#
+# 3.1 - Python 2.7 - https://www.python.org/download/releases/2.7/
+# 3.2 - Requests - http://docs.python-requests.org/
+# 3.3 - PyYAML - http://pyyaml.org/
+#
+#------------------------------------------------------------------------------
+
+
+import requests
+import yaml
+
+
+LINE_FORMAT_MINMAX = '#define ICON_{!s}_{!s} 0x{!s}\n'
+
+UNICODE_MIN = 'ffff'
+UNICODE_MAX = '0'
+TIMEOUT = 2
+
+MESSAGE_SUCCESS = '{!s} fonts - conversion success: {!s}'
+MESSAGE_ERROR = '{!s} fonts - error \n\t{!s}'
+
+
+def get_prelude( url ):
+ prelude = '// Generated by GenerateIconFontCppHeaders.py \n// from {!s}\n#pragma once\n\n'.format( url )
+ return prelude
+
+
+def line_format( font_abbr, font, unicode, cpp11 = True ):
+ if cpp11:
+ result = '#define ICON_{!s}_{!s} u8"\u{!s}"\n'.format( font_abbr, font, unicode )
+ else:
+ unicode_base = ''.join([ '{0:x}'.format( ord( x )) for x in unichr( int( unicode, 16 )).encode( 'utf-8' )]).upper()
+ unicode = '\\x' + unicode_base[ :2 ] + '\\x' + unicode_base[ 2:4 ] + '\\x' + unicode_base[ 4: ]
+ result = '#define ICON_{!s}_{!s} "{!s}"\n'.format( font_abbr, font, unicode )
+ return result
+
+
+def convert_font_awesome( font_name, font_abbr, source_url, output_file, cpp11 ):
+ try:
+ response = requests.get( source_url, timeout = TIMEOUT )
+ if response.status_code == 200:
+ input = yaml.safe_load( response.content )
+ min = UNICODE_MIN
+ max = UNICODE_MAX
+ output_fonts = ''
+ for item in input[ 'icons' ]:
+ font = ''
+ for char in item[ 'id' ]:
+ font += '_' if ( char == '-' ) else str.upper( char )
+ unicode = item[ 'unicode' ]
+ if unicode < min:
+ min = unicode
+ elif unicode >= max:
+ max = unicode
+ output_fonts += line_format( font_abbr, font, unicode, cpp11 )
+ output = get_prelude( source_url ) + \
+ LINE_FORMAT_MINMAX.format( 'MIN', font_abbr, min ) + \
+ LINE_FORMAT_MINMAX.format( 'MAX', font_abbr, max ) + \
+ output_fonts
+ with open( output_file, 'w' ) as f:
+ f.write( output )
+ print( MESSAGE_SUCCESS.format( font_name, output_file ))
+ except Exception as e:
+ print( MESSAGE_ERROR.format( font_name, e ))
+
+
+def convert_material_design( font_name, font_abbr, source_url, output_file, cpp11 ):
+ try:
+ response = requests.get( source_url, timeout = TIMEOUT )
+ if response.status_code == 200:
+ input = str.split( response.content, '\n' )
+ min = UNICODE_MIN
+ max = UNICODE_MAX
+ output_fonts = ''
+ for line in input:
+ words = str.split( line )
+ if words:
+ font = ''
+ for char in words[ 0 ]:
+ font += '_' if ( char == '-' ) else str.upper( char )
+ unicode = words[ 1 ]
+ if unicode < min:
+ min = unicode
+ elif unicode >= max:
+ max = unicode
+ output_fonts += line_format( font_abbr, font, unicode, cpp11 )
+ output = get_prelude( source_url ) + \
+ LINE_FORMAT_MINMAX.format( 'MIN', font_abbr, min ) + \
+ LINE_FORMAT_MINMAX.format( 'MAX', font_abbr, max ) + \
+ output_fonts
+ with open( output_file, 'w' ) as f:
+ f.write( output )
+ print( MESSAGE_SUCCESS.format( font_name, output_file ))
+ except Exception as e:
+ print( MESSAGE_ERROR.format( font_name, e ))
+
+
+def convert_kenney( font_name, font_abbr, source_url, output_file, cpp11 ):
+ try:
+ response = requests.get( source_url, timeout = TIMEOUT )
+ if response.status_code == 200:
+ input = str.split( response.content, '\n' )
+ min = UNICODE_MIN
+ max = UNICODE_MAX
+ output_fonts = ''
+ font_begin= '.ki-'
+ font_end = ':before'
+ unicode_begin = '"\\'
+ unicode_end = '";'
+ for line in input:
+ words = str.split( line )
+ if words:
+ if font_begin in words[ 0 ]:
+ font = ''
+ word = words[ 0 ][( words[ 0 ].find( font_begin ) + len( font_begin )) : ( words[ 0 ].find( font_end ))]
+ for char in word:
+ font += '_' if ( char == '-' ) else str.upper( char )
+ unicode = str( words[ 2 ][( words[ 2 ].find( unicode_begin ) + len( unicode_begin )) : words[ 2 ].find( unicode_end )])
+ if unicode < min:
+ min = unicode
+ elif unicode >= max:
+ max = unicode
+ output_fonts += line_format( font_abbr, font, unicode, cpp11 )
+ output = get_prelude( source_url ) + \
+ LINE_FORMAT_MINMAX.format( 'MIN', font_abbr, min ) + \
+ LINE_FORMAT_MINMAX.format( 'MAX', font_abbr, max ) + \
+ output_fonts
+ with open( output_file, 'w' ) as f:
+ f.write( output )
+ print( MESSAGE_SUCCESS.format( font_name, output_file ))
+ except Exception as e:
+ print( MESSAGE_ERROR.format( font_name, e ))
+
+
+# Main
+
+convert_font_awesome( 'Font Awesome', 'FA', 'https://raw.githubusercontent.com/FortAwesome/Font-Awesome/master/src/icons.yml', 'icons_font_awesome.h', False )
+convert_material_design( 'Material Design', 'MD', 'https://raw.githubusercontent.com/google/material-design-icons/master/iconfont/codepoints', 'icons_material_design.h', False )
+convert_kenney( 'Kenney', 'KI', 'https://raw.githubusercontent.com/SamBrishes/kenney-icon-font/master/css/kenney-icons.css', 'icons_kenney.h', False )
diff --git a/3rdparty/bgfx/3rdparty/iconfontheaders/LICENSE b/3rdparty/bgfx/3rdparty/iconfontheaders/LICENSE
new file mode 100644
index 00000000000..f54b795b715
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/iconfontheaders/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Juliette Foucaut
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/3rdparty/bgfx/3rdparty/iconfontheaders/README.md b/3rdparty/bgfx/3rdparty/iconfontheaders/README.md
new file mode 100644
index 00000000000..2170dee402f
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/iconfontheaders/README.md
@@ -0,0 +1,29 @@
+# IconFontCHeaders
+C++11 and C89 headers for icon fonts Font Awesome, Google Material Design icons and Kenney game icons.
+
+A set of header files for using icon fonts in C and C++, along with the python generator used to create the files.
+
+Each header contains defines for one font, with each icon code point defined as ICON_*, along with the min and max code points for font loading purposes.
+
+## Fonts
+
+* [Font Awesome](http://fortawesome.github.io/Font-Awesome/) - [github repository](https://github.com/FortAwesome/Font-Awesome/)
+* [Google Material Design icons](https://design.google.com/icons/) - [github repository](https://github.com/google/material-design-icons/)
+* [Kenney Game icons](http://kenney.nl/assets/game-icons) and [Game icons expansion](http://kenney.nl/assets/game-icons-expansion) - [github repository](https://github.com/SamBrishes/kenney-icon-font)
+
+## Usage
+
+Using [dear imgui](https://github.com/ocornut/imgui) as an example UI library:
+
+ #include "IconsFontAwesome.h"
+
+ ImGuiIO& io = ImGui::GetIO();
+ io.Fonts->AddFontDefault();
+
+ // merge in icons from Font Awesome
+ static const ImWchar icons_ranges[] = { ICON_MIN_FA, ICON_MAX_FA, 0 };
+ ImFontConfig icons_config; icons_config.MergeMode = true; icons_config.PixelSnapH = true;
+ io.Fonts->AddFontFromFileTTF( fontFile.c_str(), 16.0f, &icons_config, icons_ranges);
+
+ // in an imgui window somewhere...
+ ImGui::Text( ICON_FA_FILE " File" ); // use string literal concatenation, ouputs a file icon and File as a string.
diff --git a/3rdparty/bgfx/3rdparty/iconfontheaders/icons_font_awesome.h b/3rdparty/bgfx/3rdparty/iconfontheaders/icons_font_awesome.h
new file mode 100644
index 00000000000..346358f0044
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/iconfontheaders/icons_font_awesome.h
@@ -0,0 +1,611 @@
+// Generated by GenerateIconFontCppHeaders.py
+// from https://raw.githubusercontent.com/FortAwesome/Font-Awesome/master/src/icons.yml
+#pragma once
+
+#define ICON_MIN_FA 0xf000
+#define ICON_MAX_FA 0xf295
+#define ICON_FA_GLASS "\xEF\x80\x80"
+#define ICON_FA_MUSIC "\xEF\x80\x81"
+#define ICON_FA_SEARCH "\xEF\x80\x82"
+#define ICON_FA_ENVELOPE_O "\xEF\x80\x83"
+#define ICON_FA_HEART "\xEF\x80\x84"
+#define ICON_FA_STAR "\xEF\x80\x85"
+#define ICON_FA_STAR_O "\xEF\x80\x86"
+#define ICON_FA_USER "\xEF\x80\x87"
+#define ICON_FA_FILM "\xEF\x80\x88"
+#define ICON_FA_TH_LARGE "\xEF\x80\x89"
+#define ICON_FA_TH "\xEF\x80\x8A"
+#define ICON_FA_TH_LIST "\xEF\x80\x8B"
+#define ICON_FA_CHECK "\xEF\x80\x8C"
+#define ICON_FA_TIMES "\xEF\x80\x8D"
+#define ICON_FA_SEARCH_PLUS "\xEF\x80\x8E"
+#define ICON_FA_SEARCH_MINUS "\xEF\x80\x90"
+#define ICON_FA_POWER_OFF "\xEF\x80\x91"
+#define ICON_FA_SIGNAL "\xEF\x80\x92"
+#define ICON_FA_COG "\xEF\x80\x93"
+#define ICON_FA_TRASH_O "\xEF\x80\x94"
+#define ICON_FA_HOME "\xEF\x80\x95"
+#define ICON_FA_FILE_O "\xEF\x80\x96"
+#define ICON_FA_CLOCK_O "\xEF\x80\x97"
+#define ICON_FA_ROAD "\xEF\x80\x98"
+#define ICON_FA_DOWNLOAD "\xEF\x80\x99"
+#define ICON_FA_ARROW_CIRCLE_O_DOWN "\xEF\x80\x9A"
+#define ICON_FA_ARROW_CIRCLE_O_UP "\xEF\x80\x9B"
+#define ICON_FA_INBOX "\xEF\x80\x9C"
+#define ICON_FA_PLAY_CIRCLE_O "\xEF\x80\x9D"
+#define ICON_FA_REPEAT "\xEF\x80\x9E"
+#define ICON_FA_REFRESH "\xEF\x80\xA1"
+#define ICON_FA_LIST_ALT "\xEF\x80\xA2"
+#define ICON_FA_LOCK "\xEF\x80\xA3"
+#define ICON_FA_FLAG "\xEF\x80\xA4"
+#define ICON_FA_HEADPHONES "\xEF\x80\xA5"
+#define ICON_FA_VOLUME_OFF "\xEF\x80\xA6"
+#define ICON_FA_VOLUME_DOWN "\xEF\x80\xA7"
+#define ICON_FA_VOLUME_UP "\xEF\x80\xA8"
+#define ICON_FA_QRCODE "\xEF\x80\xA9"
+#define ICON_FA_BARCODE "\xEF\x80\xAA"
+#define ICON_FA_TAG "\xEF\x80\xAB"
+#define ICON_FA_TAGS "\xEF\x80\xAC"
+#define ICON_FA_BOOK "\xEF\x80\xAD"
+#define ICON_FA_BOOKMARK "\xEF\x80\xAE"
+#define ICON_FA_PRINT "\xEF\x80\xAF"
+#define ICON_FA_CAMERA "\xEF\x80\xB0"
+#define ICON_FA_FONT "\xEF\x80\xB1"
+#define ICON_FA_BOLD "\xEF\x80\xB2"
+#define ICON_FA_ITALIC "\xEF\x80\xB3"
+#define ICON_FA_TEXT_HEIGHT "\xEF\x80\xB4"
+#define ICON_FA_TEXT_WIDTH "\xEF\x80\xB5"
+#define ICON_FA_ALIGN_LEFT "\xEF\x80\xB6"
+#define ICON_FA_ALIGN_CENTER "\xEF\x80\xB7"
+#define ICON_FA_ALIGN_RIGHT "\xEF\x80\xB8"
+#define ICON_FA_ALIGN_JUSTIFY "\xEF\x80\xB9"
+#define ICON_FA_LIST "\xEF\x80\xBA"
+#define ICON_FA_OUTDENT "\xEF\x80\xBB"
+#define ICON_FA_INDENT "\xEF\x80\xBC"
+#define ICON_FA_VIDEO_CAMERA "\xEF\x80\xBD"
+#define ICON_FA_PICTURE_O "\xEF\x80\xBE"
+#define ICON_FA_PENCIL "\xEF\x81\x80"
+#define ICON_FA_MAP_MARKER "\xEF\x81\x81"
+#define ICON_FA_ADJUST "\xEF\x81\x82"
+#define ICON_FA_TINT "\xEF\x81\x83"
+#define ICON_FA_PENCIL_SQUARE_O "\xEF\x81\x84"
+#define ICON_FA_SHARE_SQUARE_O "\xEF\x81\x85"
+#define ICON_FA_CHECK_SQUARE_O "\xEF\x81\x86"
+#define ICON_FA_ARROWS "\xEF\x81\x87"
+#define ICON_FA_STEP_BACKWARD "\xEF\x81\x88"
+#define ICON_FA_FAST_BACKWARD "\xEF\x81\x89"
+#define ICON_FA_BACKWARD "\xEF\x81\x8A"
+#define ICON_FA_PLAY "\xEF\x81\x8B"
+#define ICON_FA_PAUSE "\xEF\x81\x8C"
+#define ICON_FA_STOP "\xEF\x81\x8D"
+#define ICON_FA_FORWARD "\xEF\x81\x8E"
+#define ICON_FA_FAST_FORWARD "\xEF\x81\x90"
+#define ICON_FA_STEP_FORWARD "\xEF\x81\x91"
+#define ICON_FA_EJECT "\xEF\x81\x92"
+#define ICON_FA_CHEVRON_LEFT "\xEF\x81\x93"
+#define ICON_FA_CHEVRON_RIGHT "\xEF\x81\x94"
+#define ICON_FA_PLUS_CIRCLE "\xEF\x81\x95"
+#define ICON_FA_MINUS_CIRCLE "\xEF\x81\x96"
+#define ICON_FA_TIMES_CIRCLE "\xEF\x81\x97"
+#define ICON_FA_CHECK_CIRCLE "\xEF\x81\x98"
+#define ICON_FA_QUESTION_CIRCLE "\xEF\x81\x99"
+#define ICON_FA_INFO_CIRCLE "\xEF\x81\x9A"
+#define ICON_FA_CROSSHAIRS "\xEF\x81\x9B"
+#define ICON_FA_TIMES_CIRCLE_O "\xEF\x81\x9C"
+#define ICON_FA_CHECK_CIRCLE_O "\xEF\x81\x9D"
+#define ICON_FA_BAN "\xEF\x81\x9E"
+#define ICON_FA_ARROW_LEFT "\xEF\x81\xA0"
+#define ICON_FA_ARROW_RIGHT "\xEF\x81\xA1"
+#define ICON_FA_ARROW_UP "\xEF\x81\xA2"
+#define ICON_FA_ARROW_DOWN "\xEF\x81\xA3"
+#define ICON_FA_SHARE "\xEF\x81\xA4"
+#define ICON_FA_EXPAND "\xEF\x81\xA5"
+#define ICON_FA_COMPRESS "\xEF\x81\xA6"
+#define ICON_FA_PLUS "\xEF\x81\xA7"
+#define ICON_FA_MINUS "\xEF\x81\xA8"
+#define ICON_FA_ASTERISK "\xEF\x81\xA9"
+#define ICON_FA_EXCLAMATION_CIRCLE "\xEF\x81\xAA"
+#define ICON_FA_GIFT "\xEF\x81\xAB"
+#define ICON_FA_LEAF "\xEF\x81\xAC"
+#define ICON_FA_FIRE "\xEF\x81\xAD"
+#define ICON_FA_EYE "\xEF\x81\xAE"
+#define ICON_FA_EYE_SLASH "\xEF\x81\xB0"
+#define ICON_FA_EXCLAMATION_TRIANGLE "\xEF\x81\xB1"
+#define ICON_FA_PLANE "\xEF\x81\xB2"
+#define ICON_FA_CALENDAR "\xEF\x81\xB3"
+#define ICON_FA_RANDOM "\xEF\x81\xB4"
+#define ICON_FA_COMMENT "\xEF\x81\xB5"
+#define ICON_FA_MAGNET "\xEF\x81\xB6"
+#define ICON_FA_CHEVRON_UP "\xEF\x81\xB7"
+#define ICON_FA_CHEVRON_DOWN "\xEF\x81\xB8"
+#define ICON_FA_RETWEET "\xEF\x81\xB9"
+#define ICON_FA_SHOPPING_CART "\xEF\x81\xBA"
+#define ICON_FA_FOLDER "\xEF\x81\xBB"
+#define ICON_FA_FOLDER_OPEN "\xEF\x81\xBC"
+#define ICON_FA_ARROWS_V "\xEF\x81\xBD"
+#define ICON_FA_ARROWS_H "\xEF\x81\xBE"
+#define ICON_FA_BAR_CHART "\xEF\x82\x80"
+#define ICON_FA_TWITTER_SQUARE "\xEF\x82\x81"
+#define ICON_FA_FACEBOOK_SQUARE "\xEF\x82\x82"
+#define ICON_FA_CAMERA_RETRO "\xEF\x82\x83"
+#define ICON_FA_KEY "\xEF\x82\x84"
+#define ICON_FA_COGS "\xEF\x82\x85"
+#define ICON_FA_COMMENTS "\xEF\x82\x86"
+#define ICON_FA_THUMBS_O_UP "\xEF\x82\x87"
+#define ICON_FA_THUMBS_O_DOWN "\xEF\x82\x88"
+#define ICON_FA_STAR_HALF "\xEF\x82\x89"
+#define ICON_FA_HEART_O "\xEF\x82\x8A"
+#define ICON_FA_SIGN_OUT "\xEF\x82\x8B"
+#define ICON_FA_LINKEDIN_SQUARE "\xEF\x82\x8C"
+#define ICON_FA_THUMB_TACK "\xEF\x82\x8D"
+#define ICON_FA_EXTERNAL_LINK "\xEF\x82\x8E"
+#define ICON_FA_SIGN_IN "\xEF\x82\x90"
+#define ICON_FA_TROPHY "\xEF\x82\x91"
+#define ICON_FA_GITHUB_SQUARE "\xEF\x82\x92"
+#define ICON_FA_UPLOAD "\xEF\x82\x93"
+#define ICON_FA_LEMON_O "\xEF\x82\x94"
+#define ICON_FA_PHONE "\xEF\x82\x95"
+#define ICON_FA_SQUARE_O "\xEF\x82\x96"
+#define ICON_FA_BOOKMARK_O "\xEF\x82\x97"
+#define ICON_FA_PHONE_SQUARE "\xEF\x82\x98"
+#define ICON_FA_TWITTER "\xEF\x82\x99"
+#define ICON_FA_FACEBOOK "\xEF\x82\x9A"
+#define ICON_FA_GITHUB "\xEF\x82\x9B"
+#define ICON_FA_UNLOCK "\xEF\x82\x9C"
+#define ICON_FA_CREDIT_CARD "\xEF\x82\x9D"
+#define ICON_FA_RSS "\xEF\x82\x9E"
+#define ICON_FA_HDD_O "\xEF\x82\xA0"
+#define ICON_FA_BULLHORN "\xEF\x82\xA1"
+#define ICON_FA_BELL "\xEF\x83\xB3"
+#define ICON_FA_CERTIFICATE "\xEF\x82\xA3"
+#define ICON_FA_HAND_O_RIGHT "\xEF\x82\xA4"
+#define ICON_FA_HAND_O_LEFT "\xEF\x82\xA5"
+#define ICON_FA_HAND_O_UP "\xEF\x82\xA6"
+#define ICON_FA_HAND_O_DOWN "\xEF\x82\xA7"
+#define ICON_FA_ARROW_CIRCLE_LEFT "\xEF\x82\xA8"
+#define ICON_FA_ARROW_CIRCLE_RIGHT "\xEF\x82\xA9"
+#define ICON_FA_ARROW_CIRCLE_UP "\xEF\x82\xAA"
+#define ICON_FA_ARROW_CIRCLE_DOWN "\xEF\x82\xAB"
+#define ICON_FA_GLOBE "\xEF\x82\xAC"
+#define ICON_FA_WRENCH "\xEF\x82\xAD"
+#define ICON_FA_TASKS "\xEF\x82\xAE"
+#define ICON_FA_FILTER "\xEF\x82\xB0"
+#define ICON_FA_BRIEFCASE "\xEF\x82\xB1"
+#define ICON_FA_ARROWS_ALT "\xEF\x82\xB2"
+#define ICON_FA_USERS "\xEF\x83\x80"
+#define ICON_FA_LINK "\xEF\x83\x81"
+#define ICON_FA_CLOUD "\xEF\x83\x82"
+#define ICON_FA_FLASK "\xEF\x83\x83"
+#define ICON_FA_SCISSORS "\xEF\x83\x84"
+#define ICON_FA_FILES_O "\xEF\x83\x85"
+#define ICON_FA_PAPERCLIP "\xEF\x83\x86"
+#define ICON_FA_FLOPPY_O "\xEF\x83\x87"
+#define ICON_FA_SQUARE "\xEF\x83\x88"
+#define ICON_FA_BARS "\xEF\x83\x89"
+#define ICON_FA_LIST_UL "\xEF\x83\x8A"
+#define ICON_FA_LIST_OL "\xEF\x83\x8B"
+#define ICON_FA_STRIKETHROUGH "\xEF\x83\x8C"
+#define ICON_FA_UNDERLINE "\xEF\x83\x8D"
+#define ICON_FA_TABLE "\xEF\x83\x8E"
+#define ICON_FA_MAGIC "\xEF\x83\x90"
+#define ICON_FA_TRUCK "\xEF\x83\x91"
+#define ICON_FA_PINTEREST "\xEF\x83\x92"
+#define ICON_FA_PINTEREST_SQUARE "\xEF\x83\x93"
+#define ICON_FA_GOOGLE_PLUS_SQUARE "\xEF\x83\x94"
+#define ICON_FA_GOOGLE_PLUS "\xEF\x83\x95"
+#define ICON_FA_MONEY "\xEF\x83\x96"
+#define ICON_FA_CARET_DOWN "\xEF\x83\x97"
+#define ICON_FA_CARET_UP "\xEF\x83\x98"
+#define ICON_FA_CARET_LEFT "\xEF\x83\x99"
+#define ICON_FA_CARET_RIGHT "\xEF\x83\x9A"
+#define ICON_FA_COLUMNS "\xEF\x83\x9B"
+#define ICON_FA_SORT "\xEF\x83\x9C"
+#define ICON_FA_SORT_DESC "\xEF\x83\x9D"
+#define ICON_FA_SORT_ASC "\xEF\x83\x9E"
+#define ICON_FA_ENVELOPE "\xEF\x83\xA0"
+#define ICON_FA_LINKEDIN "\xEF\x83\xA1"
+#define ICON_FA_UNDO "\xEF\x83\xA2"
+#define ICON_FA_GAVEL "\xEF\x83\xA3"
+#define ICON_FA_TACHOMETER "\xEF\x83\xA4"
+#define ICON_FA_COMMENT_O "\xEF\x83\xA5"
+#define ICON_FA_COMMENTS_O "\xEF\x83\xA6"
+#define ICON_FA_BOLT "\xEF\x83\xA7"
+#define ICON_FA_SITEMAP "\xEF\x83\xA8"
+#define ICON_FA_UMBRELLA "\xEF\x83\xA9"
+#define ICON_FA_CLIPBOARD "\xEF\x83\xAA"
+#define ICON_FA_LIGHTBULB_O "\xEF\x83\xAB"
+#define ICON_FA_EXCHANGE "\xEF\x83\xAC"
+#define ICON_FA_CLOUD_DOWNLOAD "\xEF\x83\xAD"
+#define ICON_FA_CLOUD_UPLOAD "\xEF\x83\xAE"
+#define ICON_FA_USER_MD "\xEF\x83\xB0"
+#define ICON_FA_STETHOSCOPE "\xEF\x83\xB1"
+#define ICON_FA_SUITCASE "\xEF\x83\xB2"
+#define ICON_FA_BELL_O "\xEF\x82\xA2"
+#define ICON_FA_COFFEE "\xEF\x83\xB4"
+#define ICON_FA_CUTLERY "\xEF\x83\xB5"
+#define ICON_FA_FILE_TEXT_O "\xEF\x83\xB6"
+#define ICON_FA_BUILDING_O "\xEF\x83\xB7"
+#define ICON_FA_HOSPITAL_O "\xEF\x83\xB8"
+#define ICON_FA_AMBULANCE "\xEF\x83\xB9"
+#define ICON_FA_MEDKIT "\xEF\x83\xBA"
+#define ICON_FA_FIGHTER_JET "\xEF\x83\xBB"
+#define ICON_FA_BEER "\xEF\x83\xBC"
+#define ICON_FA_H_SQUARE "\xEF\x83\xBD"
+#define ICON_FA_PLUS_SQUARE "\xEF\x83\xBE"
+#define ICON_FA_ANGLE_DOUBLE_LEFT "\xEF\x84\x80"
+#define ICON_FA_ANGLE_DOUBLE_RIGHT "\xEF\x84\x81"
+#define ICON_FA_ANGLE_DOUBLE_UP "\xEF\x84\x82"
+#define ICON_FA_ANGLE_DOUBLE_DOWN "\xEF\x84\x83"
+#define ICON_FA_ANGLE_LEFT "\xEF\x84\x84"
+#define ICON_FA_ANGLE_RIGHT "\xEF\x84\x85"
+#define ICON_FA_ANGLE_UP "\xEF\x84\x86"
+#define ICON_FA_ANGLE_DOWN "\xEF\x84\x87"
+#define ICON_FA_DESKTOP "\xEF\x84\x88"
+#define ICON_FA_LAPTOP "\xEF\x84\x89"
+#define ICON_FA_TABLET "\xEF\x84\x8A"
+#define ICON_FA_MOBILE "\xEF\x84\x8B"
+#define ICON_FA_CIRCLE_O "\xEF\x84\x8C"
+#define ICON_FA_QUOTE_LEFT "\xEF\x84\x8D"
+#define ICON_FA_QUOTE_RIGHT "\xEF\x84\x8E"
+#define ICON_FA_SPINNER "\xEF\x84\x90"
+#define ICON_FA_CIRCLE "\xEF\x84\x91"
+#define ICON_FA_REPLY "\xEF\x84\x92"
+#define ICON_FA_GITHUB_ALT "\xEF\x84\x93"
+#define ICON_FA_FOLDER_O "\xEF\x84\x94"
+#define ICON_FA_FOLDER_OPEN_O "\xEF\x84\x95"
+#define ICON_FA_SMILE_O "\xEF\x84\x98"
+#define ICON_FA_FROWN_O "\xEF\x84\x99"
+#define ICON_FA_MEH_O "\xEF\x84\x9A"
+#define ICON_FA_GAMEPAD "\xEF\x84\x9B"
+#define ICON_FA_KEYBOARD_O "\xEF\x84\x9C"
+#define ICON_FA_FLAG_O "\xEF\x84\x9D"
+#define ICON_FA_FLAG_CHECKERED "\xEF\x84\x9E"
+#define ICON_FA_TERMINAL "\xEF\x84\xA0"
+#define ICON_FA_CODE "\xEF\x84\xA1"
+#define ICON_FA_REPLY_ALL "\xEF\x84\xA2"
+#define ICON_FA_STAR_HALF_O "\xEF\x84\xA3"
+#define ICON_FA_LOCATION_ARROW "\xEF\x84\xA4"
+#define ICON_FA_CROP "\xEF\x84\xA5"
+#define ICON_FA_CODE_FORK "\xEF\x84\xA6"
+#define ICON_FA_CHAIN_BROKEN "\xEF\x84\xA7"
+#define ICON_FA_QUESTION "\xEF\x84\xA8"
+#define ICON_FA_INFO "\xEF\x84\xA9"
+#define ICON_FA_EXCLAMATION "\xEF\x84\xAA"
+#define ICON_FA_SUPERSCRIPT "\xEF\x84\xAB"
+#define ICON_FA_SUBSCRIPT "\xEF\x84\xAC"
+#define ICON_FA_ERASER "\xEF\x84\xAD"
+#define ICON_FA_PUZZLE_PIECE "\xEF\x84\xAE"
+#define ICON_FA_MICROPHONE "\xEF\x84\xB0"
+#define ICON_FA_MICROPHONE_SLASH "\xEF\x84\xB1"
+#define ICON_FA_SHIELD "\xEF\x84\xB2"
+#define ICON_FA_CALENDAR_O "\xEF\x84\xB3"
+#define ICON_FA_FIRE_EXTINGUISHER "\xEF\x84\xB4"
+#define ICON_FA_ROCKET "\xEF\x84\xB5"
+#define ICON_FA_MAXCDN "\xEF\x84\xB6"
+#define ICON_FA_CHEVRON_CIRCLE_LEFT "\xEF\x84\xB7"
+#define ICON_FA_CHEVRON_CIRCLE_RIGHT "\xEF\x84\xB8"
+#define ICON_FA_CHEVRON_CIRCLE_UP "\xEF\x84\xB9"
+#define ICON_FA_CHEVRON_CIRCLE_DOWN "\xEF\x84\xBA"
+#define ICON_FA_HTML5 "\xEF\x84\xBB"
+#define ICON_FA_CSS3 "\xEF\x84\xBC"
+#define ICON_FA_ANCHOR "\xEF\x84\xBD"
+#define ICON_FA_UNLOCK_ALT "\xEF\x84\xBE"
+#define ICON_FA_BULLSEYE "\xEF\x85\x80"
+#define ICON_FA_ELLIPSIS_H "\xEF\x85\x81"
+#define ICON_FA_ELLIPSIS_V "\xEF\x85\x82"
+#define ICON_FA_RSS_SQUARE "\xEF\x85\x83"
+#define ICON_FA_PLAY_CIRCLE "\xEF\x85\x84"
+#define ICON_FA_TICKET "\xEF\x85\x85"
+#define ICON_FA_MINUS_SQUARE "\xEF\x85\x86"
+#define ICON_FA_MINUS_SQUARE_O "\xEF\x85\x87"
+#define ICON_FA_LEVEL_UP "\xEF\x85\x88"
+#define ICON_FA_LEVEL_DOWN "\xEF\x85\x89"
+#define ICON_FA_CHECK_SQUARE "\xEF\x85\x8A"
+#define ICON_FA_PENCIL_SQUARE "\xEF\x85\x8B"
+#define ICON_FA_EXTERNAL_LINK_SQUARE "\xEF\x85\x8C"
+#define ICON_FA_SHARE_SQUARE "\xEF\x85\x8D"
+#define ICON_FA_COMPASS "\xEF\x85\x8E"
+#define ICON_FA_CARET_SQUARE_O_DOWN "\xEF\x85\x90"
+#define ICON_FA_CARET_SQUARE_O_UP "\xEF\x85\x91"
+#define ICON_FA_CARET_SQUARE_O_RIGHT "\xEF\x85\x92"
+#define ICON_FA_EUR "\xEF\x85\x93"
+#define ICON_FA_GBP "\xEF\x85\x94"
+#define ICON_FA_USD "\xEF\x85\x95"
+#define ICON_FA_INR "\xEF\x85\x96"
+#define ICON_FA_JPY "\xEF\x85\x97"
+#define ICON_FA_RUB "\xEF\x85\x98"
+#define ICON_FA_KRW "\xEF\x85\x99"
+#define ICON_FA_BTC "\xEF\x85\x9A"
+#define ICON_FA_FILE "\xEF\x85\x9B"
+#define ICON_FA_FILE_TEXT "\xEF\x85\x9C"
+#define ICON_FA_SORT_ALPHA_ASC "\xEF\x85\x9D"
+#define ICON_FA_SORT_ALPHA_DESC "\xEF\x85\x9E"
+#define ICON_FA_SORT_AMOUNT_ASC "\xEF\x85\xA0"
+#define ICON_FA_SORT_AMOUNT_DESC "\xEF\x85\xA1"
+#define ICON_FA_SORT_NUMERIC_ASC "\xEF\x85\xA2"
+#define ICON_FA_SORT_NUMERIC_DESC "\xEF\x85\xA3"
+#define ICON_FA_THUMBS_UP "\xEF\x85\xA4"
+#define ICON_FA_THUMBS_DOWN "\xEF\x85\xA5"
+#define ICON_FA_YOUTUBE_SQUARE "\xEF\x85\xA6"
+#define ICON_FA_YOUTUBE "\xEF\x85\xA7"
+#define ICON_FA_XING "\xEF\x85\xA8"
+#define ICON_FA_XING_SQUARE "\xEF\x85\xA9"
+#define ICON_FA_YOUTUBE_PLAY "\xEF\x85\xAA"
+#define ICON_FA_DROPBOX "\xEF\x85\xAB"
+#define ICON_FA_STACK_OVERFLOW "\xEF\x85\xAC"
+#define ICON_FA_INSTAGRAM "\xEF\x85\xAD"
+#define ICON_FA_FLICKR "\xEF\x85\xAE"
+#define ICON_FA_ADN "\xEF\x85\xB0"
+#define ICON_FA_BITBUCKET "\xEF\x85\xB1"
+#define ICON_FA_BITBUCKET_SQUARE "\xEF\x85\xB2"
+#define ICON_FA_TUMBLR "\xEF\x85\xB3"
+#define ICON_FA_TUMBLR_SQUARE "\xEF\x85\xB4"
+#define ICON_FA_LONG_ARROW_DOWN "\xEF\x85\xB5"
+#define ICON_FA_LONG_ARROW_UP "\xEF\x85\xB6"
+#define ICON_FA_LONG_ARROW_LEFT "\xEF\x85\xB7"
+#define ICON_FA_LONG_ARROW_RIGHT "\xEF\x85\xB8"
+#define ICON_FA_APPLE "\xEF\x85\xB9"
+#define ICON_FA_WINDOWS "\xEF\x85\xBA"
+#define ICON_FA_ANDROID "\xEF\x85\xBB"
+#define ICON_FA_LINUX "\xEF\x85\xBC"
+#define ICON_FA_DRIBBBLE "\xEF\x85\xBD"
+#define ICON_FA_SKYPE "\xEF\x85\xBE"
+#define ICON_FA_FOURSQUARE "\xEF\x86\x80"
+#define ICON_FA_TRELLO "\xEF\x86\x81"
+#define ICON_FA_FEMALE "\xEF\x86\x82"
+#define ICON_FA_MALE "\xEF\x86\x83"
+#define ICON_FA_GRATIPAY "\xEF\x86\x84"
+#define ICON_FA_SUN_O "\xEF\x86\x85"
+#define ICON_FA_MOON_O "\xEF\x86\x86"
+#define ICON_FA_ARCHIVE "\xEF\x86\x87"
+#define ICON_FA_BUG "\xEF\x86\x88"
+#define ICON_FA_VK "\xEF\x86\x89"
+#define ICON_FA_WEIBO "\xEF\x86\x8A"
+#define ICON_FA_RENREN "\xEF\x86\x8B"
+#define ICON_FA_PAGELINES "\xEF\x86\x8C"
+#define ICON_FA_STACK_EXCHANGE "\xEF\x86\x8D"
+#define ICON_FA_ARROW_CIRCLE_O_RIGHT "\xEF\x86\x8E"
+#define ICON_FA_ARROW_CIRCLE_O_LEFT "\xEF\x86\x90"
+#define ICON_FA_CARET_SQUARE_O_LEFT "\xEF\x86\x91"
+#define ICON_FA_DOT_CIRCLE_O "\xEF\x86\x92"
+#define ICON_FA_WHEELCHAIR "\xEF\x86\x93"
+#define ICON_FA_VIMEO_SQUARE "\xEF\x86\x94"
+#define ICON_FA_TRY "\xEF\x86\x95"
+#define ICON_FA_PLUS_SQUARE_O "\xEF\x86\x96"
+#define ICON_FA_SPACE_SHUTTLE "\xEF\x86\x97"
+#define ICON_FA_SLACK "\xEF\x86\x98"
+#define ICON_FA_ENVELOPE_SQUARE "\xEF\x86\x99"
+#define ICON_FA_WORDPRESS "\xEF\x86\x9A"
+#define ICON_FA_OPENID "\xEF\x86\x9B"
+#define ICON_FA_UNIVERSITY "\xEF\x86\x9C"
+#define ICON_FA_GRADUATION_CAP "\xEF\x86\x9D"
+#define ICON_FA_YAHOO "\xEF\x86\x9E"
+#define ICON_FA_GOOGLE "\xEF\x86\xA0"
+#define ICON_FA_REDDIT "\xEF\x86\xA1"
+#define ICON_FA_REDDIT_SQUARE "\xEF\x86\xA2"
+#define ICON_FA_STUMBLEUPON_CIRCLE "\xEF\x86\xA3"
+#define ICON_FA_STUMBLEUPON "\xEF\x86\xA4"
+#define ICON_FA_DELICIOUS "\xEF\x86\xA5"
+#define ICON_FA_DIGG "\xEF\x86\xA6"
+#define ICON_FA_PIED_PIPER "\xEF\x86\xA7"
+#define ICON_FA_PIED_PIPER_ALT "\xEF\x86\xA8"
+#define ICON_FA_DRUPAL "\xEF\x86\xA9"
+#define ICON_FA_JOOMLA "\xEF\x86\xAA"
+#define ICON_FA_LANGUAGE "\xEF\x86\xAB"
+#define ICON_FA_FAX "\xEF\x86\xAC"
+#define ICON_FA_BUILDING "\xEF\x86\xAD"
+#define ICON_FA_CHILD "\xEF\x86\xAE"
+#define ICON_FA_PAW "\xEF\x86\xB0"
+#define ICON_FA_SPOON "\xEF\x86\xB1"
+#define ICON_FA_CUBE "\xEF\x86\xB2"
+#define ICON_FA_CUBES "\xEF\x86\xB3"
+#define ICON_FA_BEHANCE "\xEF\x86\xB4"
+#define ICON_FA_BEHANCE_SQUARE "\xEF\x86\xB5"
+#define ICON_FA_STEAM "\xEF\x86\xB6"
+#define ICON_FA_STEAM_SQUARE "\xEF\x86\xB7"
+#define ICON_FA_RECYCLE "\xEF\x86\xB8"
+#define ICON_FA_CAR "\xEF\x86\xB9"
+#define ICON_FA_TAXI "\xEF\x86\xBA"
+#define ICON_FA_TREE "\xEF\x86\xBB"
+#define ICON_FA_SPOTIFY "\xEF\x86\xBC"
+#define ICON_FA_DEVIANTART "\xEF\x86\xBD"
+#define ICON_FA_SOUNDCLOUD "\xEF\x86\xBE"
+#define ICON_FA_DATABASE "\xEF\x87\x80"
+#define ICON_FA_FILE_PDF_O "\xEF\x87\x81"
+#define ICON_FA_FILE_WORD_O "\xEF\x87\x82"
+#define ICON_FA_FILE_EXCEL_O "\xEF\x87\x83"
+#define ICON_FA_FILE_POWERPOINT_O "\xEF\x87\x84"
+#define ICON_FA_FILE_IMAGE_O "\xEF\x87\x85"
+#define ICON_FA_FILE_ARCHIVE_O "\xEF\x87\x86"
+#define ICON_FA_FILE_AUDIO_O "\xEF\x87\x87"
+#define ICON_FA_FILE_VIDEO_O "\xEF\x87\x88"
+#define ICON_FA_FILE_CODE_O "\xEF\x87\x89"
+#define ICON_FA_VINE "\xEF\x87\x8A"
+#define ICON_FA_CODEPEN "\xEF\x87\x8B"
+#define ICON_FA_JSFIDDLE "\xEF\x87\x8C"
+#define ICON_FA_LIFE_RING "\xEF\x87\x8D"
+#define ICON_FA_CIRCLE_O_NOTCH "\xEF\x87\x8E"
+#define ICON_FA_REBEL "\xEF\x87\x90"
+#define ICON_FA_EMPIRE "\xEF\x87\x91"
+#define ICON_FA_GIT_SQUARE "\xEF\x87\x92"
+#define ICON_FA_GIT "\xEF\x87\x93"
+#define ICON_FA_HACKER_NEWS "\xEF\x87\x94"
+#define ICON_FA_TENCENT_WEIBO "\xEF\x87\x95"
+#define ICON_FA_QQ "\xEF\x87\x96"
+#define ICON_FA_WEIXIN "\xEF\x87\x97"
+#define ICON_FA_PAPER_PLANE "\xEF\x87\x98"
+#define ICON_FA_PAPER_PLANE_O "\xEF\x87\x99"
+#define ICON_FA_HISTORY "\xEF\x87\x9A"
+#define ICON_FA_CIRCLE_THIN "\xEF\x87\x9B"
+#define ICON_FA_HEADER "\xEF\x87\x9C"
+#define ICON_FA_PARAGRAPH "\xEF\x87\x9D"
+#define ICON_FA_SLIDERS "\xEF\x87\x9E"
+#define ICON_FA_SHARE_ALT "\xEF\x87\xA0"
+#define ICON_FA_SHARE_ALT_SQUARE "\xEF\x87\xA1"
+#define ICON_FA_BOMB "\xEF\x87\xA2"
+#define ICON_FA_FUTBOL_O "\xEF\x87\xA3"
+#define ICON_FA_TTY "\xEF\x87\xA4"
+#define ICON_FA_BINOCULARS "\xEF\x87\xA5"
+#define ICON_FA_PLUG "\xEF\x87\xA6"
+#define ICON_FA_SLIDESHARE "\xEF\x87\xA7"
+#define ICON_FA_TWITCH "\xEF\x87\xA8"
+#define ICON_FA_YELP "\xEF\x87\xA9"
+#define ICON_FA_NEWSPAPER_O "\xEF\x87\xAA"
+#define ICON_FA_WIFI "\xEF\x87\xAB"
+#define ICON_FA_CALCULATOR "\xEF\x87\xAC"
+#define ICON_FA_PAYPAL "\xEF\x87\xAD"
+#define ICON_FA_GOOGLE_WALLET "\xEF\x87\xAE"
+#define ICON_FA_CC_VISA "\xEF\x87\xB0"
+#define ICON_FA_CC_MASTERCARD "\xEF\x87\xB1"
+#define ICON_FA_CC_DISCOVER "\xEF\x87\xB2"
+#define ICON_FA_CC_AMEX "\xEF\x87\xB3"
+#define ICON_FA_CC_PAYPAL "\xEF\x87\xB4"
+#define ICON_FA_CC_STRIPE "\xEF\x87\xB5"
+#define ICON_FA_BELL_SLASH "\xEF\x87\xB6"
+#define ICON_FA_BELL_SLASH_O "\xEF\x87\xB7"
+#define ICON_FA_TRASH "\xEF\x87\xB8"
+#define ICON_FA_COPYRIGHT "\xEF\x87\xB9"
+#define ICON_FA_AT "\xEF\x87\xBA"
+#define ICON_FA_EYEDROPPER "\xEF\x87\xBB"
+#define ICON_FA_PAINT_BRUSH "\xEF\x87\xBC"
+#define ICON_FA_BIRTHDAY_CAKE "\xEF\x87\xBD"
+#define ICON_FA_AREA_CHART "\xEF\x87\xBE"
+#define ICON_FA_PIE_CHART "\xEF\x88\x80"
+#define ICON_FA_LINE_CHART "\xEF\x88\x81"
+#define ICON_FA_LASTFM "\xEF\x88\x82"
+#define ICON_FA_LASTFM_SQUARE "\xEF\x88\x83"
+#define ICON_FA_TOGGLE_OFF "\xEF\x88\x84"
+#define ICON_FA_TOGGLE_ON "\xEF\x88\x85"
+#define ICON_FA_BICYCLE "\xEF\x88\x86"
+#define ICON_FA_BUS "\xEF\x88\x87"
+#define ICON_FA_IOXHOST "\xEF\x88\x88"
+#define ICON_FA_ANGELLIST "\xEF\x88\x89"
+#define ICON_FA_CC "\xEF\x88\x8A"
+#define ICON_FA_ILS "\xEF\x88\x8B"
+#define ICON_FA_MEANPATH "\xEF\x88\x8C"
+#define ICON_FA_BUYSELLADS "\xEF\x88\x8D"
+#define ICON_FA_CONNECTDEVELOP "\xEF\x88\x8E"
+#define ICON_FA_DASHCUBE "\xEF\x88\x90"
+#define ICON_FA_FORUMBEE "\xEF\x88\x91"
+#define ICON_FA_LEANPUB "\xEF\x88\x92"
+#define ICON_FA_SELLSY "\xEF\x88\x93"
+#define ICON_FA_SHIRTSINBULK "\xEF\x88\x94"
+#define ICON_FA_SIMPLYBUILT "\xEF\x88\x95"
+#define ICON_FA_SKYATLAS "\xEF\x88\x96"
+#define ICON_FA_CART_PLUS "\xEF\x88\x97"
+#define ICON_FA_CART_ARROW_DOWN "\xEF\x88\x98"
+#define ICON_FA_DIAMOND "\xEF\x88\x99"
+#define ICON_FA_SHIP "\xEF\x88\x9A"
+#define ICON_FA_USER_SECRET "\xEF\x88\x9B"
+#define ICON_FA_MOTORCYCLE "\xEF\x88\x9C"
+#define ICON_FA_STREET_VIEW "\xEF\x88\x9D"
+#define ICON_FA_HEARTBEAT "\xEF\x88\x9E"
+#define ICON_FA_VENUS "\xEF\x88\xA1"
+#define ICON_FA_MARS "\xEF\x88\xA2"
+#define ICON_FA_MERCURY "\xEF\x88\xA3"
+#define ICON_FA_TRANSGENDER "\xEF\x88\xA4"
+#define ICON_FA_TRANSGENDER_ALT "\xEF\x88\xA5"
+#define ICON_FA_VENUS_DOUBLE "\xEF\x88\xA6"
+#define ICON_FA_MARS_DOUBLE "\xEF\x88\xA7"
+#define ICON_FA_VENUS_MARS "\xEF\x88\xA8"
+#define ICON_FA_MARS_STROKE "\xEF\x88\xA9"
+#define ICON_FA_MARS_STROKE_V "\xEF\x88\xAA"
+#define ICON_FA_MARS_STROKE_H "\xEF\x88\xAB"
+#define ICON_FA_NEUTER "\xEF\x88\xAC"
+#define ICON_FA_GENDERLESS "\xEF\x88\xAD"
+#define ICON_FA_FACEBOOK_OFFICIAL "\xEF\x88\xB0"
+#define ICON_FA_PINTEREST_P "\xEF\x88\xB1"
+#define ICON_FA_WHATSAPP "\xEF\x88\xB2"
+#define ICON_FA_SERVER "\xEF\x88\xB3"
+#define ICON_FA_USER_PLUS "\xEF\x88\xB4"
+#define ICON_FA_USER_TIMES "\xEF\x88\xB5"
+#define ICON_FA_BED "\xEF\x88\xB6"
+#define ICON_FA_VIACOIN "\xEF\x88\xB7"
+#define ICON_FA_TRAIN "\xEF\x88\xB8"
+#define ICON_FA_SUBWAY "\xEF\x88\xB9"
+#define ICON_FA_MEDIUM "\xEF\x88\xBA"
+#define ICON_FA_Y_COMBINATOR "\xEF\x88\xBB"
+#define ICON_FA_OPTIN_MONSTER "\xEF\x88\xBC"
+#define ICON_FA_OPENCART "\xEF\x88\xBD"
+#define ICON_FA_EXPEDITEDSSL "\xEF\x88\xBE"
+#define ICON_FA_BATTERY_FULL "\xEF\x89\x80"
+#define ICON_FA_BATTERY_THREE_QUARTERS "\xEF\x89\x81"
+#define ICON_FA_BATTERY_HALF "\xEF\x89\x82"
+#define ICON_FA_BATTERY_QUARTER "\xEF\x89\x83"
+#define ICON_FA_BATTERY_EMPTY "\xEF\x89\x84"
+#define ICON_FA_MOUSE_POINTER "\xEF\x89\x85"
+#define ICON_FA_I_CURSOR "\xEF\x89\x86"
+#define ICON_FA_OBJECT_GROUP "\xEF\x89\x87"
+#define ICON_FA_OBJECT_UNGROUP "\xEF\x89\x88"
+#define ICON_FA_STICKY_NOTE "\xEF\x89\x89"
+#define ICON_FA_STICKY_NOTE_O "\xEF\x89\x8A"
+#define ICON_FA_CC_JCB "\xEF\x89\x8B"
+#define ICON_FA_CC_DINERS_CLUB "\xEF\x89\x8C"
+#define ICON_FA_CLONE "\xEF\x89\x8D"
+#define ICON_FA_BALANCE_SCALE "\xEF\x89\x8E"
+#define ICON_FA_HOURGLASS_O "\xEF\x89\x90"
+#define ICON_FA_HOURGLASS_START "\xEF\x89\x91"
+#define ICON_FA_HOURGLASS_HALF "\xEF\x89\x92"
+#define ICON_FA_HOURGLASS_END "\xEF\x89\x93"
+#define ICON_FA_HOURGLASS "\xEF\x89\x94"
+#define ICON_FA_HAND_ROCK_O "\xEF\x89\x95"
+#define ICON_FA_HAND_PAPER_O "\xEF\x89\x96"
+#define ICON_FA_HAND_SCISSORS_O "\xEF\x89\x97"
+#define ICON_FA_HAND_LIZARD_O "\xEF\x89\x98"
+#define ICON_FA_HAND_SPOCK_O "\xEF\x89\x99"
+#define ICON_FA_HAND_POINTER_O "\xEF\x89\x9A"
+#define ICON_FA_HAND_PEACE_O "\xEF\x89\x9B"
+#define ICON_FA_TRADEMARK "\xEF\x89\x9C"
+#define ICON_FA_REGISTERED "\xEF\x89\x9D"
+#define ICON_FA_CREATIVE_COMMONS "\xEF\x89\x9E"
+#define ICON_FA_GG "\xEF\x89\xA0"
+#define ICON_FA_GG_CIRCLE "\xEF\x89\xA1"
+#define ICON_FA_TRIPADVISOR "\xEF\x89\xA2"
+#define ICON_FA_ODNOKLASSNIKI "\xEF\x89\xA3"
+#define ICON_FA_ODNOKLASSNIKI_SQUARE "\xEF\x89\xA4"
+#define ICON_FA_GET_POCKET "\xEF\x89\xA5"
+#define ICON_FA_WIKIPEDIA_W "\xEF\x89\xA6"
+#define ICON_FA_SAFARI "\xEF\x89\xA7"
+#define ICON_FA_CHROME "\xEF\x89\xA8"
+#define ICON_FA_FIREFOX "\xEF\x89\xA9"
+#define ICON_FA_OPERA "\xEF\x89\xAA"
+#define ICON_FA_INTERNET_EXPLORER "\xEF\x89\xAB"
+#define ICON_FA_TELEVISION "\xEF\x89\xAC"
+#define ICON_FA_CONTAO "\xEF\x89\xAD"
+#define ICON_FA_500PX "\xEF\x89\xAE"
+#define ICON_FA_AMAZON "\xEF\x89\xB0"
+#define ICON_FA_CALENDAR_PLUS_O "\xEF\x89\xB1"
+#define ICON_FA_CALENDAR_MINUS_O "\xEF\x89\xB2"
+#define ICON_FA_CALENDAR_TIMES_O "\xEF\x89\xB3"
+#define ICON_FA_CALENDAR_CHECK_O "\xEF\x89\xB4"
+#define ICON_FA_INDUSTRY "\xEF\x89\xB5"
+#define ICON_FA_MAP_PIN "\xEF\x89\xB6"
+#define ICON_FA_MAP_SIGNS "\xEF\x89\xB7"
+#define ICON_FA_MAP_O "\xEF\x89\xB8"
+#define ICON_FA_MAP "\xEF\x89\xB9"
+#define ICON_FA_COMMENTING "\xEF\x89\xBA"
+#define ICON_FA_COMMENTING_O "\xEF\x89\xBB"
+#define ICON_FA_HOUZZ "\xEF\x89\xBC"
+#define ICON_FA_VIMEO "\xEF\x89\xBD"
+#define ICON_FA_BLACK_TIE "\xEF\x89\xBE"
+#define ICON_FA_FONTICONS "\xEF\x8A\x80"
+#define ICON_FA_REDDIT_ALIEN "\xEF\x8A\x81"
+#define ICON_FA_EDGE "\xEF\x8A\x82"
+#define ICON_FA_CREDIT_CARD_ALT "\xEF\x8A\x83"
+#define ICON_FA_CODIEPIE "\xEF\x8A\x84"
+#define ICON_FA_MODX "\xEF\x8A\x85"
+#define ICON_FA_FORT_AWESOME "\xEF\x8A\x86"
+#define ICON_FA_USB "\xEF\x8A\x87"
+#define ICON_FA_PRODUCT_HUNT "\xEF\x8A\x88"
+#define ICON_FA_MIXCLOUD "\xEF\x8A\x89"
+#define ICON_FA_SCRIBD "\xEF\x8A\x8A"
+#define ICON_FA_PAUSE_CIRCLE "\xEF\x8A\x8B"
+#define ICON_FA_PAUSE_CIRCLE_O "\xEF\x8A\x8C"
+#define ICON_FA_STOP_CIRCLE "\xEF\x8A\x8D"
+#define ICON_FA_STOP_CIRCLE_O "\xEF\x8A\x8E"
+#define ICON_FA_SHOPPING_BAG "\xEF\x8A\x90"
+#define ICON_FA_SHOPPING_BASKET "\xEF\x8A\x91"
+#define ICON_FA_HASHTAG "\xEF\x8A\x92"
+#define ICON_FA_BLUETOOTH "\xEF\x8A\x93"
+#define ICON_FA_BLUETOOTH_B "\xEF\x8A\x94"
+#define ICON_FA_PERCENT "\xEF\x8A\x95"
diff --git a/3rdparty/bgfx/3rdparty/iconfontheaders/icons_kenney.h b/3rdparty/bgfx/3rdparty/iconfontheaders/icons_kenney.h
new file mode 100644
index 00000000000..dbbcb48d904
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/iconfontheaders/icons_kenney.h
@@ -0,0 +1,234 @@
+// Generated by GenerateIconFontCppHeaders.py
+// from https://raw.githubusercontent.com/SamBrishes/kenney-icon-font/master/css/kenney-icons.css
+#pragma once
+
+#define ICON_MIN_KI 0xe900
+#define ICON_MAX_KI 0xe9e3
+#define ICON_KI_HOME "\xEE\xA4\x80"
+#define ICON_KI_ADJUST "\xEE\xA4\x81"
+#define ICON_KI_WRENCH "\xEE\xA4\x82"
+#define ICON_KI_COG "\xEE\xA4\x83"
+#define ICON_KI_OFF "\xEE\xA4\x84"
+#define ICON_KI_EXPAND "\xEE\xA4\x85"
+#define ICON_KI_REDUCE "\xEE\xA4\x86"
+#define ICON_KI_MOVIE "\xEE\xA4\x87"
+#define ICON_KI_FLAP "\xEE\xA4\x88"
+#define ICON_KI_SHOPPING_CART "\xEE\xA4\x89"
+#define ICON_KI_SHOPPING_CASE "\xEE\xA4\x8A"
+#define ICON_KI_EXTERNAL "\xEE\xA4\x8B"
+#define ICON_KI_NETWORK "\xEE\xA4\x8C"
+#define ICON_KI_CHECK "\xEE\xA4\x8D"
+#define ICON_KI_TIMES "\xEE\xA4\x8E"
+#define ICON_KI_TIMES_CIRCLE "\xEE\xA4\x8F"
+#define ICON_KI_PLUS "\xEE\xA4\x90"
+#define ICON_KI_PLUS_CIRCLE "\xEE\xA4\x91"
+#define ICON_KI_MINUS "\xEE\xA4\x92"
+#define ICON_KI_MINUS_CIRCLE "\xEE\xA4\x93"
+#define ICON_KI_INFO "\xEE\xA4\x94"
+#define ICON_KI_INFO_CIRCLE "\xEE\xA4\x95"
+#define ICON_KI_QUESTION "\xEE\xA4\x96"
+#define ICON_KI_QUESTION_CIRCLE "\xEE\xA4\x97"
+#define ICON_KI_EXLAMATION "\xEE\xA4\x98"
+#define ICON_KI_EXCLAMATION_CIRCLE "\xEE\xA4\x99"
+#define ICON_KI_EXCLAMATION_TRIANGLE "\xEE\xA4\x9A"
+#define ICON_KI_PAINT_BRUSH "\xEE\xA4\x9B"
+#define ICON_KI_PENCIL "\xEE\xA4\x9C"
+#define ICON_KI_CHECKBOX "\xEE\xA4\x9D"
+#define ICON_KI_CHECKBOX_CHECKED "\xEE\xA4\x9E"
+#define ICON_KI_RADIO "\xEE\xA4\x9F"
+#define ICON_KI_RADIO_CHECKED "\xEE\xA4\xA0"
+#define ICON_KI_SORT_VERTICAL "\xEE\xA4\xA1"
+#define ICON_KI_SORT_HORIZONTAL "\xEE\xA4\xA2"
+#define ICON_KI_GRID "\xEE\xA4\xA3"
+#define ICON_KI_LIST "\xEE\xA4\xA4"
+#define ICON_KI_ROWS "\xEE\xA4\xA5"
+#define ICON_KI_CELLS "\xEE\xA4\xA6"
+#define ICON_KI_SIGNAL_LOW "\xEE\xA4\xA7"
+#define ICON_KI_SIGNAL_MEDIUM "\xEE\xA4\xA8"
+#define ICON_KI_SIGNAL_HIGH "\xEE\xA4\xA9"
+#define ICON_KI_TRASH "\xEE\xA4\xAA"
+#define ICON_KI_TRASH_ALT "\xEE\xA4\xAB"
+#define ICON_KI_RELOAD_INVERSE "\xEE\xA4\xAC"
+#define ICON_KI_RELOAD "\xEE\xA4\xAD"
+#define ICON_KI_TOP "\xEE\xA4\xAE"
+#define ICON_KI_BOTTOM "\xEE\xA4\xAF"
+#define ICON_KI_UPLOAD "\xEE\xA4\xB0"
+#define ICON_KI_DOWNLOAD "\xEE\xA4\xB1"
+#define ICON_KI_CLOUD "\xEE\xA4\xB2"
+#define ICON_KI_CLOUD_UPLOAD "\xEE\xA4\xB3"
+#define ICON_KI_CLOUD_DOWNLOAD "\xEE\xA4\xB4"
+#define ICON_KI_SEARCH "\xEE\xA4\xB5"
+#define ICON_KI_SEARCH_PLUS "\xEE\xA4\xB6"
+#define ICON_KI_SEARCH_MINUS "\xEE\xA4\xB7"
+#define ICON_KI_SEARCH_EQUAL "\xEE\xA4\xB8"
+#define ICON_KI_LOCK "\xEE\xA4\xB9"
+#define ICON_KI_UNLOCK "\xEE\xA4\xBA"
+#define ICON_KI_USER "\xEE\xA4\xBB"
+#define ICON_KI_USERS "\xEE\xA4\xBC"
+#define ICON_KI_USERS_ALT "\xEE\xA4\xBD"
+#define ICON_KI_SIGN_IN "\xEE\xA4\xBE"
+#define ICON_KI_SIGN_IN_INVERSE "\xEE\xA4\xBF"
+#define ICON_KI_SIGN_OUT "\xEE\xA5\x80"
+#define ICON_KI_SIGN_OUT_INVERSE "\xEE\xA5\x81"
+#define ICON_KI_ARROW_TOP "\xEE\xA5\x82"
+#define ICON_KI_ARROW_RIGHT "\xEE\xA5\x83"
+#define ICON_KI_ARROW_BOTTOM "\xEE\xA5\x84"
+#define ICON_KI_ARROW_LEFT "\xEE\xA5\x85"
+#define ICON_KI_ARROW_TOP_LEFT "\xEE\xA5\x86"
+#define ICON_KI_ARROW_TOP_RIGHT "\xEE\xA5\x87"
+#define ICON_KI_ARROW_BOTTOM_RIGHT "\xEE\xA5\x88"
+#define ICON_KI_ARROW_BOTTOM_LEFT "\xEE\xA5\x89"
+#define ICON_KI_CARET_TOP "\xEE\xA5\x8A"
+#define ICON_KI_CARET_RIGHT "\xEE\xA5\x8B"
+#define ICON_KI_CARET_BOTTOM "\xEE\xA5\x8C"
+#define ICON_KI_CARET_LEFT "\xEE\xA5\x8D"
+#define ICON_KI_NEXT_ALT "\xEE\xA5\x8E"
+#define ICON_KI_NEXT "\xEE\xA5\x8F"
+#define ICON_KI_PREVIOUS "\xEE\xA5\x90"
+#define ICON_KI_PREVIOUS_ALT "\xEE\xA5\x91"
+#define ICON_KI_FILL "\xEE\xA5\x92"
+#define ICON_KI_ERASER "\xEE\xA5\x93"
+#define ICON_KI_SAVE "\xEE\xA5\x94"
+#define ICON_KI_STEP_BACKWARD "\xEE\xA5\x95"
+#define ICON_KI_BACKWARD "\xEE\xA5\x96"
+#define ICON_KI_PAUSE "\xEE\xA5\x97"
+#define ICON_KI_FORWARD "\xEE\xA5\x98"
+#define ICON_KI_STEP_FORWARD "\xEE\xA5\x99"
+#define ICON_KI_STOP "\xEE\xA5\x9A"
+#define ICON_KI_REC "\xEE\xA5\x9B"
+#define ICON_KI_CURSOR "\xEE\xA5\x9C"
+#define ICON_KI_POINTER "\xEE\xA5\x9D"
+#define ICON_KI_EXIT "\xEE\xA5\x9E"
+#define ICON_KI_FIGURE "\xEE\xA5\x9F"
+#define ICON_KI_CAR "\xEE\xA5\xA0"
+#define ICON_KI_COIN "\xEE\xA5\xA1"
+#define ICON_KI_KEY "\xEE\xA5\xA2"
+#define ICON_KI_CUB "\xEE\xA5\xA3"
+#define ICON_KI_DIAMOND "\xEE\xA5\xA4"
+#define ICON_KI_BADGE "\xEE\xA5\xA5"
+#define ICON_KI_BADGE_ALT "\xEE\xA5\xA6"
+#define ICON_KI_PODIUM "\xEE\xA5\xA7"
+#define ICON_KI_PODIUM_ALT "\xEE\xA5\xA8"
+#define ICON_KI_FLAG "\xEE\xA5\xA9"
+#define ICON_KI_FIST "\xEE\xA5\xAA"
+#define ICON_KI_FIST_CIRCLE "\xEE\xA5\xAB"
+#define ICON_KI_HEART "\xEE\xA5\xAC"
+#define ICON_KI_HEART_HALF "\xEE\xA5\xAD"
+#define ICON_KI_HEART_HALF_O "\xEE\xA5\xAE"
+#define ICON_KI_HEART_O "\xEE\xA5\xAF"
+#define ICON_KI_STAR "\xEE\xA5\xB0"
+#define ICON_KI_STAR_HALF "\xEE\xA5\xB1"
+#define ICON_KI_STAR_HALF_O "\xEE\xA5\xB2"
+#define ICON_KI_STAR_O "\xEE\xA5\xB3"
+#define ICON_KI_BUTTON_B "\xEE\xA5\xB4"
+#define ICON_KI_MUSIC_ON "\xEE\xA5\xB5"
+#define ICON_KI_MUSIC_OFF "\xEE\xA5\xB6"
+#define ICON_KI_SOUND_ON "\xEE\xA5\xB7"
+#define ICON_KI_SOUND_OFF "\xEE\xA5\xB8"
+#define ICON_KI_SOUND_OFF_ALT "\xEE\xA5\xB9"
+#define ICON_KI_ROBOT "\xEE\xA5\xBA"
+#define ICON_KI_COMPUTER "\xEE\xA5\xBB"
+#define ICON_KI_TABLET "\xEE\xA5\xBC"
+#define ICON_KI_SMARTPHONE "\xEE\xA5\xBD"
+#define ICON_KI_DEVICE "\xEE\xA5\xBE"
+#define ICON_KI_DEVICE_TILT_LEFT "\xEE\xA5\xBF"
+#define ICON_KI_DEVICE_TILT_RIGHT "\xEE\xA6\x80"
+#define ICON_KI_GAMEPAD "\xEE\xA6\x81"
+#define ICON_KI_GAMEPAD_ALT "\xEE\xA6\x82"
+#define ICON_KI_GAMEPAD_TILT_LEFT "\xEE\xA6\x83"
+#define ICON_KI_GAMEPAD_TILT_RIGHT "\xEE\xA6\x84"
+#define ICON_KI_PLAYER_ONE "\xEE\xA6\x85"
+#define ICON_KI_PLAYER_TWO "\xEE\xA6\x86"
+#define ICON_KI_PLAYER_THREE "\xEE\xA6\x87"
+#define ICON_KI_PLAYER_FOUR "\xEE\xA6\x88"
+#define ICON_KI_JOYSTICK "\xEE\xA6\x89"
+#define ICON_KI_JOYSTICK_ALT "\xEE\xA6\x8A"
+#define ICON_KI_JOYSTICK_LEFT "\xEE\xA6\x8B"
+#define ICON_KI_JOYSTICK_RIGHT "\xEE\xA6\x8C"
+#define ICON_KI_MOUSE_ALT "\xEE\xA6\x8D"
+#define ICON_KI_MOUSE "\xEE\xA6\x8E"
+#define ICON_KI_MOUSE_LEFT_BUTTON "\xEE\xA6\x8F"
+#define ICON_KI_MOUSE_RIGHT_BUTTON "\xEE\xA6\x90"
+#define ICON_KI_BUTTON_ONE "\xEE\xA6\x91"
+#define ICON_KI_BUTTON_TWO "\xEE\xA6\x92"
+#define ICON_KI_BUTTON_THREE "\xEE\xA6\x93"
+#define ICON_KI_BUTTON_A "\xEE\xA6\x94"
+#define ICON_KI_BUTTON_X "\xEE\xA6\x95"
+#define ICON_KI_BUTON_Y "\xEE\xA6\x96"
+#define ICON_KI_BUTTON_TIMES "\xEE\xA6\x97"
+#define ICON_KI_BUTTON_SQUARE "\xEE\xA6\x98"
+#define ICON_KI_BUTTON_CIRCLE "\xEE\xA6\x99"
+#define ICON_KI_BUTTON_TRIANGLE "\xEE\xA6\x9A"
+#define ICON_KI_BUTTON_LEFT "\xEE\xA6\x9B"
+#define ICON_KI_BUTTON_L "\xEE\xA6\x9C"
+#define ICON_KI_BUTTON_L1 "\xEE\xA6\x9D"
+#define ICON_KI_BUTTON_L2 "\xEE\xA6\x9E"
+#define ICON_KI_BUTTON_LB "\xEE\xA6\x9F"
+#define ICON_KI_BUTTON_LT "\xEE\xA6\xA0"
+#define ICON_KI_BUTTON_RT "\xEE\xA6\xA1"
+#define ICON_KI_BUTTON_RB "\xEE\xA6\xA2"
+#define ICON_KI_BUTTON_R2 "\xEE\xA6\xA3"
+#define ICON_KI_BUTTON_R1 "\xEE\xA6\xA4"
+#define ICON_KI_BUTTON_R "\xEE\xA6\xA5"
+#define ICON_KI_BUTTON_RIGHT "\xEE\xA6\xA6"
+#define ICON_KI_BUTTON_EMPTY "\xEE\xA6\xA7"
+#define ICON_KI_BUTTON_START "\xEE\xA6\xA8"
+#define ICON_KI_BUTTON_SELECT "\xEE\xA6\xA9"
+#define ICON_KI_DPAD "\xEE\xA6\xAA"
+#define ICON_KI_DPAD_ALT "\xEE\xA6\xAB"
+#define ICON_KI_DPAD_TOP "\xEE\xA6\xAC"
+#define ICON_KI_DPAD_RIGHT "\xEE\xA6\xAD"
+#define ICON_KI_DPAD_BOTTOM "\xEE\xA6\xAE"
+#define ICON_KI_DPAD_LEFT "\xEE\xA6\xAF"
+#define ICON_KI_KEY_LARGE "\xEE\xA6\xB0"
+#define ICON_KI_KEY_LARGE_3D "\xEE\xA6\xB1"
+#define ICON_KI_KEY_SMALL "\xEE\xA6\xB2"
+#define ICON_KI_KEY_SMALL_3D "\xEE\xA6\xB3"
+#define ICON_KI_STICK_LEFT_TOP "\xEE\xA6\xB4"
+#define ICON_KI_STICK_LEFT_SIDE "\xEE\xA6\xB5"
+#define ICON_KI_STICK_RIGHT_SIDE "\xEE\xA6\xB6"
+#define ICON_KI_STICK_RIGHT_TOP "\xEE\xA6\xB7"
+#define ICON_KI_STICK_SIDE "\xEE\xA6\xB8"
+#define ICON_KI_STICK_TILT_LEFT "\xEE\xA6\xB9"
+#define ICON_KI_STICK_TILT_RIGHT "\xEE\xA6\xBA"
+#define ICON_KI_MOVE_BL "\xEE\xA6\xBB"
+#define ICON_KI_MOVE_BR "\xEE\xA6\xBC"
+#define ICON_KI_MOVE_BT "\xEE\xA6\xBD"
+#define ICON_KI_MOVE_BT_ALT "\xEE\xA6\xBE"
+#define ICON_KI_MOVE_LB "\xEE\xA6\xBF"
+#define ICON_KI_MOVE_LR "\xEE\xA7\x80"
+#define ICON_KI_MOVE_LR_ALT "\xEE\xA7\x81"
+#define ICON_KI_MOVE_LT "\xEE\xA7\x82"
+#define ICON_KI_MOVE_RB "\xEE\xA7\x83"
+#define ICON_KI_MOVE_RL "\xEE\xA7\x84"
+#define ICON_KI_MOVE_RL_ALT "\xEE\xA7\x85"
+#define ICON_KI_MOVE_RT "\xEE\xA7\x86"
+#define ICON_KI_MOVE_TB "\xEE\xA7\x87"
+#define ICON_KI_MOVE_TB_ALT "\xEE\xA7\x88"
+#define ICON_KI_MOVE_TL "\xEE\xA7\x89"
+#define ICON_KI_MOVE_TR "\xEE\xA7\x8A"
+#define ICON_KI_STICK_MOVE_BL "\xEE\xA7\x8B"
+#define ICON_KI_STICK_MOVE_BR "\xEE\xA7\x8C"
+#define ICON_KI_STICK_MOVE_BT "\xEE\xA7\x8D"
+#define ICON_KI_STICK_MOVE_BT_ALT "\xEE\xA7\x8E"
+#define ICON_KI_STICK_MOVE_LB "\xEE\xA7\x8F"
+#define ICON_KI_STICK_MOVE_LR "\xEE\xA7\x90"
+#define ICON_KI_STICK_MOVE_LR_ALT "\xEE\xA7\x91"
+#define ICON_KI_STICK_MOVE_LT "\xEE\xA7\x92"
+#define ICON_KI_STICK_MOVE_RB "\xEE\xA7\x93"
+#define ICON_KI_STICK_MOVE_RL "\xEE\xA7\x94"
+#define ICON_KI_STICK_MOVE_RL_ALT "\xEE\xA7\x95"
+#define ICON_KI_STICK_MOVE_RT "\xEE\xA7\x96"
+#define ICON_KI_STICK_MOVE_TB "\xEE\xA7\x97"
+#define ICON_KI_STICK_MOVE_TB_ALT "\xEE\xA7\x98"
+#define ICON_KI_STICK_MOVE_TL "\xEE\xA7\x99"
+#define ICON_KI_STICK_MOVE_TR "\xEE\xA7\x9A"
+#define ICON_KI_GITHUB "\xEE\xA7\x9B"
+#define ICON_KI_GITHUB_ALT "\xEE\xA7\x9C"
+#define ICON_KI_TWITTER "\xEE\xA7\x9D"
+#define ICON_KI_FACEBOOK "\xEE\xA7\x9E"
+#define ICON_KI_GOOGLE_PLUS "\xEE\xA7\x9F"
+#define ICON_KI_YOUTUBE "\xEE\xA7\xA2"
+#define ICON_KI_WE_HEART "\xEE\xA7\xA3"
+#define ICON_KI_WOLFCMS "\xEE\xA7\xA0"
+#define ICON_KI_WOLFCMS_ALT "\xEE\xA7\xA1"
diff --git a/3rdparty/bgfx/3rdparty/iconfontheaders/icons_material_design.h b/3rdparty/bgfx/3rdparty/iconfontheaders/icons_material_design.h
new file mode 100644
index 00000000000..00ec9f68e91
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/iconfontheaders/icons_material_design.h
@@ -0,0 +1,938 @@
+// Generated by GenerateIconFontCppHeaders.py
+// from https://raw.githubusercontent.com/google/material-design-icons/master/iconfont/codepoints
+#pragma once
+
+#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"
diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.cpp b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.cpp
index 0949fe7de96..aa8d8f1d657 100644
--- a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.cpp
+++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.cpp
@@ -830,10 +830,9 @@ int ImStrnicmp(const char* str1, const char* str2, int count)
char* ImStrdup(const char *str)
{
- char *buff = (char*)ImGui::MemAlloc(strlen(str) + 1);
- IM_ASSERT(buff);
- strcpy(buff, str);
- return buff;
+ size_t len = strlen(str) + 1;
+ void* buff = ImGui::MemAlloc(len);
+ return (char*)memcpy(buff, (const void*)str, len);
}
int ImStrlenW(const ImWchar* str)
diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_demo.cpp b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_demo.cpp
index 8fd48b0b01b..7c9653772d9 100644
--- a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_demo.cpp
+++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_demo.cpp
@@ -1894,6 +1894,11 @@ struct ExampleAppConsole
free(History[i]);
}
+ // Portable helpers
+ static int Stricmp(const char* str1, const char* str2) { int d; while ((d = toupper(*str2) - toupper(*str1)) == 0 && *str1) { str1++; str2++; } return d; }
+ static int Strnicmp(const char* str1, const char* str2, int n) { int d = 0; while (n > 0 && (d = toupper(*str2) - toupper(*str1)) == 0 && *str1) { str1++; str2++; n--; } return d; }
+ static char* Strdup(const char *str) { size_t len = strlen(str) + 1; void* buff = ImGui::MemAlloc(len); return (char*)memcpy(buff, (const void*)str, len); }
+
void ClearLog()
{
for (int i = 0; i < Items.Size; i++)
@@ -1910,7 +1915,7 @@ struct ExampleAppConsole
vsnprintf(buf, IM_ARRAYSIZE(buf), fmt, args);
buf[IM_ARRAYSIZE(buf)-1] = 0;
va_end(args);
- Items.push_back(strdup(buf));
+ Items.push_back(Strdup(buf));
ScrollToBottom = true;
}
@@ -1987,9 +1992,6 @@ struct ExampleAppConsole
ImGui::End();
}
- static int Stricmp(const char* str1, const char* str2) { int d; while ((d = toupper(*str2) - toupper(*str1)) == 0 && *str1) { str1++; str2++; } return d; }
- static int Strnicmp(const char* str1, const char* str2, int count) { int d = 0; while (count > 0 && (d = toupper(*str2) - toupper(*str1)) == 0 && *str1) { str1++; str2++; count--; } return d; }
-
void ExecCommand(const char* command_line)
{
AddLog("# %s\n", command_line);
@@ -2003,7 +2005,7 @@ struct ExampleAppConsole
History.erase(History.begin() + i);
break;
}
- History.push_back(strdup(command_line));
+ History.push_back(Strdup(command_line));
// Process command
if (Stricmp(command_line, "CLEAR") == 0)
diff --git a/3rdparty/bgfx/README.md b/3rdparty/bgfx/README.md
index 2b444eb809f..521853b6f2b 100644
--- a/3rdparty/bgfx/README.md
+++ b/3rdparty/bgfx/README.md
@@ -37,6 +37,7 @@ Supported platforms:
* Native Client (PPAPI 37+, ARM, x86, x64, PNaCl)
* OSX (10.9+)
* RaspberryPi
+ * SteamLink
* Windows (XP, Vista, 7, 8, 10)
* WinRT (WinPhone 8.0+)
@@ -99,7 +100,7 @@ deployment model of web with the performance of native code and GPU acceleration
https://github.com/nem0/LumixEngine LumixEngine is a MIT licensed 3D engine.
The main goal is performance and Unity-like usability.
-![LumixEngine screenshot](https://cloud.githubusercontent.com/assets/153526/10109455/450c51be-63c7-11e5-9c87-96d9d00efe02.png)
+![LumixEngine screenshot](https://cloud.githubusercontent.com/assets/153526/12904252/3fcf130e-cece-11e5-878b-c9fe24c1b11a.png)
https://github.com/podgorskiy/KeplerOrbits KeplerOrbits - Tool that calculates
positions of celestial bodies using their orbital elements. [Web Demo](http://podgorskiy.com/KeplerOrbits/KeplerOrbits.html)
diff --git a/3rdparty/bgfx/examples/10-font/font.cpp b/3rdparty/bgfx/examples/10-font/font.cpp
index 97111e1b175..a15cef4baae 100644
--- a/3rdparty/bgfx/examples/10-font/font.cpp
+++ b/3rdparty/bgfx/examples/10-font/font.cpp
@@ -14,6 +14,9 @@
#include "font/text_buffer_manager.h"
#include "entry/input.h"
+#include <iconfontheaders/icons_font_awesome.h>
+#include <iconfontheaders/icons_kenney.h>
+
#include <stdio.h>
#include <wchar.h>
@@ -105,10 +108,12 @@ int _main_(int _argc, char** _argv)
}
TrueTypeHandle fontAwesomeTtf = loadTtf(fontManager, "font/fontawesome-webfont.ttf");
+ TrueTypeHandle fontKenneyTtf = loadTtf(fontManager, "font/kenney-icon-font.ttf");
// This font doesn't have any preloaded glyph's but the truetype file
// is loaded so glyph will be generated as needed.
FontHandle fontAwesome72 = fontManager->createFontByPixelSize(fontAwesomeTtf, 0, 72);
+ FontHandle fontKenney64 = fontManager->createFontByPixelSize(fontKenneyTtf, 0, 64);
TrueTypeHandle visitorTtf = loadTtf(fontManager, "font/visitor1.ttf");
@@ -160,7 +165,24 @@ int _main_(int _argc, char** _argv)
textBufferManager->appendText(staticText, fonts[0], L"dog\n");
textBufferManager->setStyle(staticText, STYLE_NORMAL);
- textBufferManager->appendText(staticText, fontAwesome72, L"\xf011 \xf02e \xf061 \xf087 \xf0d9 \xf099 \xf05c \xf021 \xf113\n");
+ textBufferManager->appendText(staticText, fontAwesome72,
+ " " ICON_FA_POWER_OFF
+ " " ICON_FA_TWITTER_SQUARE
+ " " ICON_FA_CERTIFICATE
+ " " ICON_FA_FLOPPY_O
+ " " ICON_FA_GITHUB
+ " " ICON_FA_GITHUB_ALT
+ "\n"
+ );
+ textBufferManager->appendText(staticText, fontKenney64,
+ " " ICON_KI_COMPUTER
+ " " ICON_KI_JOYSTICK
+ " " ICON_KI_EXLAMATION
+ " " ICON_KI_STAR
+ " " ICON_KI_BUTTON_START
+ " " ICON_KI_DOWNLOAD
+ "\n"
+ );
// Create a transient buffer for real-time data.
TextBufferHandle transientText = textBufferManager->createTextBuffer(FONT_TYPE_ALPHA, BufferType::Transient);
@@ -242,10 +264,12 @@ int _main_(int _argc, char** _argv)
bgfx::frame();
}
+ fontManager->destroyTtf(fontKenneyTtf);
fontManager->destroyTtf(fontAwesomeTtf);
fontManager->destroyTtf(visitorTtf);
// Destroy the fonts.
+ fontManager->destroyFont(fontKenney64);
fontManager->destroyFont(fontAwesome72);
fontManager->destroyFont(visitor10);
for (uint32_t ii = 0; ii < numFonts; ++ii)
diff --git a/3rdparty/bgfx/examples/common/bounds.cpp b/3rdparty/bgfx/examples/common/bounds.cpp
index d2228e7eb63..3937b550567 100644
--- a/3rdparty/bgfx/examples/common/bounds.cpp
+++ b/3rdparty/bgfx/examples/common/bounds.cpp
@@ -277,6 +277,102 @@ void calcMinBoundingSphere(Sphere& _sphere, const void* _vertices, uint32_t _num
_sphere.m_radius = bx::fsqrt(maxDistSq);
}
+void buildFrustumPlanes(Plane* _result, const float* _viewProj)
+{
+ const float xw = _viewProj[ 3];
+ const float yw = _viewProj[ 7];
+ const float zw = _viewProj[11];
+ const float ww = _viewProj[15];
+
+ const float xz = _viewProj[ 2];
+ const float yz = _viewProj[ 6];
+ const float zz = _viewProj[10];
+ const float wz = _viewProj[14];
+
+ Plane& near = _result[0];
+ Plane& far = _result[1];
+ Plane& left = _result[2];
+ Plane& right = _result[3];
+ Plane& top = _result[4];
+ Plane& bottom = _result[5];
+
+ near.m_normal[0] = xw - xz;
+ near.m_normal[1] = yw - yz;
+ near.m_normal[2] = zw - zz;
+ near.m_dist = ww - wz;
+
+ far.m_normal[0] = xw + xz;
+ far.m_normal[1] = yw + yz;
+ far.m_normal[2] = zw + zz;
+ far.m_dist = ww + wz;
+
+ const float xx = _viewProj[ 0];
+ const float yx = _viewProj[ 4];
+ const float zx = _viewProj[ 8];
+ const float wx = _viewProj[12];
+
+ left.m_normal[0] = xw - xx;
+ left.m_normal[1] = yw - yx;
+ left.m_normal[2] = zw - zx;
+ left.m_dist = ww - wx;
+
+ right.m_normal[0] = xw + xx;
+ right.m_normal[1] = yw + yx;
+ right.m_normal[2] = zw + zx;
+ right.m_dist = ww + wx;
+
+ const float xy = _viewProj[ 1];
+ const float yy = _viewProj[ 5];
+ const float zy = _viewProj[ 9];
+ const float wy = _viewProj[13];
+
+ top.m_normal[0] = xw + xy;
+ top.m_normal[1] = yw + yy;
+ top.m_normal[2] = zw + zy;
+ top.m_dist = ww + wy;
+
+ bottom.m_normal[0] = xw - xy;
+ bottom.m_normal[1] = yw - yy;
+ bottom.m_normal[2] = zw - zy;
+ bottom.m_dist = ww - wy;
+
+ Plane* plane = _result;
+ for (uint32_t ii = 0; ii < 6; ++ii)
+ {
+ float invLen = 1.0f / bx::vec3Norm(plane->m_normal, plane->m_normal);
+ plane->m_dist *= invLen;
+ ++plane;
+ }
+}
+
+void intersectPlanes(float _result[3], const Plane& _pa, const Plane& _pb, const Plane& _pc)
+{
+ float axb[3];
+ bx::vec3Cross(axb, _pa.m_normal, _pb.m_normal);
+
+ float bxc[3];
+ bx::vec3Cross(bxc, _pb.m_normal, _pc.m_normal);
+
+ float cxa[3];
+ bx::vec3Cross(cxa, _pc.m_normal, _pa.m_normal);
+
+ float tmp0[3];
+ bx::vec3Mul(tmp0, bxc, _pa.m_dist);
+
+ float tmp1[3];
+ bx::vec3Mul(tmp1, cxa, _pb.m_dist);
+
+ float tmp2[3];
+ bx::vec3Mul(tmp2, axb, _pc.m_dist);
+
+ float tmp[3];
+ bx::vec3Add(tmp, tmp0, tmp1);
+ bx::vec3Add(tmp0, tmp, tmp2);
+
+ float denom = bx::vec3Dot(_pa.m_normal, bxc);
+ bx::vec3Mul(_result, tmp0, -1.0f/denom);
+}
+
Ray makeRay(float _x, float _y, const float* _invVp)
{
Ray ray;
diff --git a/3rdparty/bgfx/examples/common/bounds.h b/3rdparty/bgfx/examples/common/bounds.h
index f59c2b2230f..24f23414f10 100644
--- a/3rdparty/bgfx/examples/common/bounds.h
+++ b/3rdparty/bgfx/examples/common/bounds.h
@@ -94,6 +94,12 @@ void calcMaxBoundingSphere(Sphere& _sphere, const void* _vertices, uint32_t _num
/// Calculate minimum bounding sphere.
void calcMinBoundingSphere(Sphere& _sphere, const void* _vertices, uint32_t _numVertices, uint32_t _stride, float _step = 0.01f);
+/// Returns 6 (near, far, left, right, top, bottom) planes representing frustum planes.
+void buildFrustumPlanes(Plane* _planes, const float* _viewProj);
+
+/// Returns point from 3 intersecting planes.
+void intersectPlanes(float _result[3], const Plane& _pa, const Plane& _pb, const Plane& _pc);
+
/// Make screen space ray from x, y coordinate and inverse view-projection matrix.
Ray makeRay(float _x, float _y, const float* _invVp);
diff --git a/3rdparty/bgfx/examples/common/entry/entry_sdl.cpp b/3rdparty/bgfx/examples/common/entry/entry_sdl.cpp
index 2bff902302c..989d0ae0667 100644
--- a/3rdparty/bgfx/examples/common/entry/entry_sdl.cpp
+++ b/3rdparty/bgfx/examples/common/entry/entry_sdl.cpp
@@ -218,6 +218,8 @@ namespace entry
return wmi.info.cocoa.window;
# elif BX_PLATFORM_WINDOWS
return wmi.info.win.window;
+# elif BX_PLATFORM_STEAMLINK
+ return wmi.info.vivante.window;
# endif // BX_PLATFORM_
}
diff --git a/3rdparty/bgfx/examples/common/imgui/imgui.cpp b/3rdparty/bgfx/examples/common/imgui/imgui.cpp
index 2655e6ce0a1..4cdc5f30fe5 100644
--- a/3rdparty/bgfx/examples/common/imgui/imgui.cpp
+++ b/3rdparty/bgfx/examples/common/imgui/imgui.cpp
@@ -3572,3 +3572,10 @@ bool imguiMouseOverArea()
{
return s_imgui.m_insideArea;
}
+
+bgfx::ProgramHandle imguiGetImageProgram(uint8_t _mip)
+{
+ const float lodEnabled[4] = { float(_mip), 1.0f, 0.0f, 0.0f };
+ bgfx::setUniform(s_imgui.u_imageLodEnabled, lodEnabled);
+ return s_imgui.m_imageProgram;
+}
diff --git a/3rdparty/bgfx/examples/common/imgui/imgui.h b/3rdparty/bgfx/examples/common/imgui/imgui.h
index 75269500c85..0ab18cb9f8a 100644
--- a/3rdparty/bgfx/examples/common/imgui/imgui.h
+++ b/3rdparty/bgfx/examples/common/imgui/imgui.h
@@ -208,12 +208,13 @@ bool imguiMouseOverArea();
namespace ImGui
{
-#define IMGUI_FLAGS_NONE UINT16_C(0x0000)
-#define IMGUI_FLAGS_ALPHA_BLEND UINT16_C(0x0001)
+#define IMGUI_FLAGS_NONE UINT8_C(0x00)
+#define IMGUI_FLAGS_ALPHA_BLEND UINT8_C(0x01)
// Helper function for passing bgfx::TextureHandle to ImGui::Image.
inline void Image(bgfx::TextureHandle _handle
- , uint16_t _flags
+ , uint8_t _flags
+ , uint8_t _mip
, const ImVec2& _size
, const ImVec2& _uv0 = ImVec2(0.0f, 0.0f)
, const ImVec2& _uv1 = ImVec2(1.0f, 1.0f)
@@ -221,9 +222,10 @@ namespace ImGui
, const ImVec4& _borderCol = ImVec4(0.0f, 0.0f, 0.0f, 0.0f)
)
{
- union { struct { uint16_t flags; bgfx::TextureHandle handle; } s; ImTextureID ptr; } texture;
- texture.s.flags = _flags;
+ union { struct { bgfx::TextureHandle handle; uint8_t flags; uint8_t mip; } s; ImTextureID ptr; } texture;
texture.s.handle = _handle;
+ texture.s.flags = _flags;
+ texture.s.mip = _mip;
Image(texture.ptr, _size, _uv0, _uv1, _tintCol, _borderCol);
}
@@ -236,12 +238,13 @@ namespace ImGui
, const ImVec4& _borderCol = ImVec4(0.0f, 0.0f, 0.0f, 0.0f)
)
{
- Image(_handle, IMGUI_FLAGS_ALPHA_BLEND, _size, _uv0, _uv1, _tintCol, _borderCol);
+ Image(_handle, IMGUI_FLAGS_ALPHA_BLEND, 0, _size, _uv0, _uv1, _tintCol, _borderCol);
}
// Helper function for passing bgfx::TextureHandle to ImGui::ImageButton.
inline bool ImageButton(bgfx::TextureHandle _handle
- , uint16_t _flags
+ , uint8_t _flags
+ , uint8_t _mip
, const ImVec2& _size
, const ImVec2& _uv0 = ImVec2(0.0f, 0.0f)
, const ImVec2& _uv1 = ImVec2(1.0f, 1.0f)
@@ -250,9 +253,10 @@ namespace ImGui
, const ImVec4& _tintCol = ImVec4(1.0f, 1.0f, 1.0f, 1.0f)
)
{
- union { struct { uint16_t flags; bgfx::TextureHandle handle; } s; ImTextureID ptr; } texture;
- texture.s.flags = _flags;
+ union { struct { bgfx::TextureHandle handle; uint8_t flags; uint8_t mip; } s; ImTextureID ptr; } texture;
texture.s.handle = _handle;
+ texture.s.flags = _flags;
+ texture.s.mip = _mip;
return ImageButton(texture.ptr, _size, _uv0, _uv1, _framePadding, _bgCol, _tintCol);
}
@@ -266,7 +270,7 @@ namespace ImGui
, const ImVec4& _tintCol = ImVec4(1.0f, 1.0f, 1.0f, 1.0f)
)
{
- return ImageButton(_handle, IMGUI_FLAGS_ALPHA_BLEND, _size, _uv0, _uv1, _framePadding, _bgCol, _tintCol);
+ return ImageButton(_handle, IMGUI_FLAGS_ALPHA_BLEND, 0, _size, _uv0, _uv1, _framePadding, _bgCol, _tintCol);
}
} // namespace ImGui
diff --git a/3rdparty/bgfx/examples/common/imgui/ocornut_imgui.cpp b/3rdparty/bgfx/examples/common/imgui/ocornut_imgui.cpp
index 4545bb998a0..f6f0a4e2bdd 100644
--- a/3rdparty/bgfx/examples/common/imgui/ocornut_imgui.cpp
+++ b/3rdparty/bgfx/examples/common/imgui/ocornut_imgui.cpp
@@ -305,15 +305,21 @@ struct OcornutImguiContext
;
bgfx::TextureHandle th = m_texture;
+ bgfx::ProgramHandle program = m_program;
if (NULL != cmd->TextureId)
{
- union { ImTextureID ptr; struct { uint16_t flags; bgfx::TextureHandle handle; } s; } texture = { cmd->TextureId };
+ union { ImTextureID ptr; struct { bgfx::TextureHandle handle; uint8_t flags; uint8_t mip; } s; } texture = { cmd->TextureId };
state |= 0 != (IMGUI_FLAGS_ALPHA_BLEND & texture.s.flags)
? BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_SRC_ALPHA, BGFX_STATE_BLEND_INV_SRC_ALPHA)
: BGFX_STATE_NONE
;
th = texture.s.handle;
+ if (0 != texture.s.mip)
+ {
+ extern bgfx::ProgramHandle imguiGetImageProgram(uint8_t _mip);
+ program = imguiGetImageProgram(texture.s.mip);
+ }
}
else
{
@@ -331,7 +337,7 @@ struct OcornutImguiContext
bgfx::setTexture(0, s_tex, th);
bgfx::setVertexBuffer(&tvb, 0, numVertices);
bgfx::setIndexBuffer(&tib, offset, cmd->ElemCount);
- bgfx::submit(cmd->ViewId, m_program);
+ bgfx::submit(cmd->ViewId, program);
}
offset += cmd->ElemCount;
diff --git a/3rdparty/bgfx/examples/runtime/font/kenney-icon-font.ttf b/3rdparty/bgfx/examples/runtime/font/kenney-icon-font.ttf
new file mode 100644
index 00000000000..9a3e406003c
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/font/kenney-icon-font.ttf
Binary files differ
diff --git a/3rdparty/bgfx/include/bgfx/bgfx.h b/3rdparty/bgfx/include/bgfx/bgfx.h
index 16c5e46a6e7..e30d7417158 100644
--- a/3rdparty/bgfx/include/bgfx/bgfx.h
+++ b/3rdparty/bgfx/include/bgfx/bgfx.h
@@ -532,6 +532,14 @@ namespace bgfx
bool cubeMap; //!< Texture is cubemap.
};
+ ///
+ struct Attachment
+ {
+ TextureHandle handle; //!< Texture handle.
+ uint16_t mip; //!< Mip level.
+ uint16_t layer; //!< Cubemap side or depth layer/slice.
+ };
+
/// Transform data.
///
/// @attention C99 equivalent is `bgfx_transform_t`.
@@ -1362,8 +1370,8 @@ namespace bgfx
/// Update Cube texture.
///
/// @param[in] _handle Texture handle.
- /// @param[in] _side Cubemap side, where 0 is +X, 1 is -X, 2 is +Y, 3 is
- /// -Y, 4 is +Z, and 5 is -Z.
+ /// @param[in] _side Cubemap side `BGFX_CUBE_MAP_<POSITIVE or NEGATIVE>_<X, Y or Z>`,
+ /// where 0 is +X, 1 is -X, 2 is +Y, 3 is -Y, 4 is +Z, and 5 is -Z.
///
/// +----------+
/// |-z 2|
@@ -1470,6 +1478,17 @@ namespace bgfx
///
FrameBufferHandle createFrameBuffer(uint8_t _num, const TextureHandle* _handles, bool _destroyTextures = false);
+ /// Create frame buffer.
+ ///
+ /// @param[in] _num Number of texture attachments.
+ /// @param[in] _attachment Attachment info. See: `Attachment`.
+ /// @param[in] _destroyTextures If true, textures will be destroyed when
+ /// frame buffer is destroyed.
+ ///
+ /// @attention C99 equivalent is `bgfx_create_frame_buffer_from_handles`.
+ ///
+ FrameBufferHandle createFrameBuffer(uint8_t _num, const Attachment* _attachment, bool _destroyTextures = false);
+
/// Create frame buffer for multiple window rendering.
///
/// @param[in] _nwh OS' target native window handle.
diff --git a/3rdparty/bgfx/include/bgfx/bgfxdefines.h b/3rdparty/bgfx/include/bgfx/bgfxdefines.h
index 3c1b3671a6b..b80622743a6 100644
--- a/3rdparty/bgfx/include/bgfx/bgfxdefines.h
+++ b/3rdparty/bgfx/include/bgfx/bgfxdefines.h
@@ -6,7 +6,7 @@
#ifndef BGFX_DEFINES_H_HEADER_GUARD
#define BGFX_DEFINES_H_HEADER_GUARD
-#define BGFX_API_VERSION UINT32_C(7)
+#define BGFX_API_VERSION UINT32_C(9)
///
#define BGFX_STATE_RGB_WRITE UINT64_C(0x0000000000000001) //!< Enable RGB write.
@@ -422,4 +422,12 @@
#define BGFX_HMD_DEVICE_RESOLUTION UINT8_C(0x01) //!< Has HMD native resolution.
#define BGFX_HMD_RENDERING UINT8_C(0x02) //!< Rendering to HMD.
+///
+#define BGFX_CUBE_MAP_POSITIVE_X UINT8_C(0x00) //!< Cubemap +x.
+#define BGFX_CUBE_MAP_NEGATIVE_X UINT8_C(0x01) //!< Cubemap -x.
+#define BGFX_CUBE_MAP_POSITIVE_Y UINT8_C(0x02) //!< Cubemap +y.
+#define BGFX_CUBE_MAP_NEGATIVE_Y UINT8_C(0x03) //!< Cubemap -y.
+#define BGFX_CUBE_MAP_POSITIVE_Z UINT8_C(0x04) //!< Cubemap +z.
+#define BGFX_CUBE_MAP_NEGATIVE_Z UINT8_C(0x05) //!< Cubemap -z.
+
#endif // BGFX_DEFINES_H_HEADER_GUARD
diff --git a/3rdparty/bgfx/include/bgfx/bgfxplatform.h b/3rdparty/bgfx/include/bgfx/bgfxplatform.h
index 1b6e336b675..52b330112d5 100644
--- a/3rdparty/bgfx/include/bgfx/bgfxplatform.h
+++ b/3rdparty/bgfx/include/bgfx/bgfxplatform.h
@@ -279,6 +279,9 @@ namespace bgfx
# elif BX_PLATFORM_WINDOWS
pd.ndt = NULL;
pd.nwh = wmi.info.win.window;
+# elif BX_PLATFORM_STEAMLINK
+ pd.ndt = wmi.info.vivante.display;
+ pd.nwh = wmi.info.vivante.window;
# endif // BX_PLATFORM_
pd.context = NULL;
pd.backBuffer = NULL;
diff --git a/3rdparty/bgfx/include/bgfx/c99/bgfx.h b/3rdparty/bgfx/include/bgfx/c99/bgfx.h
index fa585759ce9..cba442ef0be 100644
--- a/3rdparty/bgfx/include/bgfx/c99/bgfx.h
+++ b/3rdparty/bgfx/include/bgfx/c99/bgfx.h
@@ -350,6 +350,15 @@ typedef struct bgfx_texture_info
} bgfx_texture_info_t;
/**/
+typedef struct bgfx_attachment
+{
+ bgfx_texture_handle_t handle;
+ uint16_t mip;
+ uint16_t layer;
+
+} bgfx_attachment_t;
+
+/**/
typedef struct bgfx_caps_gpu
{
uint16_t vendorId;
@@ -639,7 +648,7 @@ BGFX_C_API bgfx_frame_buffer_handle_t bgfx_create_frame_buffer(uint16_t _width,
BGFX_C_API bgfx_frame_buffer_handle_t bgfx_create_frame_buffer_scaled(bgfx_backbuffer_ratio_t _ratio, bgfx_texture_format_t _format, uint32_t _textureFlags);
/**/
-BGFX_C_API bgfx_frame_buffer_handle_t bgfx_create_frame_buffer_from_handles(uint8_t _num, const bgfx_texture_handle_t* _handles, bool _destroyTextures);
+BGFX_C_API bgfx_frame_buffer_handle_t bgfx_create_frame_buffer_from_attachment(uint8_t _num, const bgfx_attachment_t* _attachment, bool _destroyTextures);
/**/
BGFX_C_API bgfx_frame_buffer_handle_t bgfx_create_frame_buffer_from_nwh(void* _nwh, uint16_t _width, uint16_t _height, bgfx_texture_format_t _depthFormat);
diff --git a/3rdparty/bgfx/include/bgfx/c99/bgfxplatform.h b/3rdparty/bgfx/include/bgfx/c99/bgfxplatform.h
index 1fb82c974f8..61ff57d2b29 100644
--- a/3rdparty/bgfx/include/bgfx/c99/bgfxplatform.h
+++ b/3rdparty/bgfx/include/bgfx/c99/bgfxplatform.h
@@ -137,7 +137,7 @@ typedef struct bgfx_interface_vtbl
void (*destroy_texture)(bgfx_texture_handle_t _handle);
bgfx_frame_buffer_handle_t (*create_frame_buffer)(uint16_t _width, uint16_t _height, bgfx_texture_format_t _format, uint32_t _textureFlags);
bgfx_frame_buffer_handle_t (*create_frame_buffer_scaled)(bgfx_backbuffer_ratio_t _ratio, bgfx_texture_format_t _format, uint32_t _textureFlags);
- bgfx_frame_buffer_handle_t (*create_frame_buffer_from_handles)(uint8_t _num, const bgfx_texture_handle_t* _handles, bool _destroyTextures);
+ bgfx_frame_buffer_handle_t (*create_frame_buffer_from_attachment)(uint8_t _num, const bgfx_attachment_t* _attachment, bool _destroyTextures);
bgfx_frame_buffer_handle_t (*create_frame_buffer_from_nwh)(void* _nwh, uint16_t _width, uint16_t _height, bgfx_texture_format_t _depthFormat);
void (*destroy_frame_buffer)(bgfx_frame_buffer_handle_t _handle);
bgfx_uniform_handle_t (*create_uniform)(const char* _name, bgfx_uniform_type_t _type, uint16_t _num);
diff --git a/3rdparty/bgfx/scripts/bgfx.lua b/3rdparty/bgfx/scripts/bgfx.lua
index cc646b6e261..97ec723ddba 100644
--- a/3rdparty/bgfx/scripts/bgfx.lua
+++ b/3rdparty/bgfx/scripts/bgfx.lua
@@ -88,12 +88,18 @@ function bgfxProject(_name, _kind, _defines)
"-weak_framework Metal",
}
- configuration { "not nacl" }
+ configuration { "not nacl", "not linux-steamlink" }
includedirs {
--nacl has GLES2 headers modified...
+ --steamlink has EGL headers modified...
path.join(BGFX_DIR, "3rdparty/khronos"),
}
+ configuration { "linux-steamlink" }
+ defines {
+ "EGL_API_FB",
+ }
+
configuration {}
includedirs {
diff --git a/3rdparty/bgfx/scripts/example-common.lua b/3rdparty/bgfx/scripts/example-common.lua
index 1832f9836ac..fcaca364f64 100644
--- a/3rdparty/bgfx/scripts/example-common.lua
+++ b/3rdparty/bgfx/scripts/example-common.lua
@@ -60,6 +60,11 @@ project ("example-common")
"ENTRY_CONFIG_USE_GLFW=1",
}
end
+
+ configuration { "linux-steamlink" }
+ defines {
+ "EGL_API_FB",
+ }
configuration { "osx or ios* or tvos*" }
files {
diff --git a/3rdparty/bgfx/scripts/genie.lua b/3rdparty/bgfx/scripts/genie.lua
index 77fe35d4cb6..52554366dfb 100644
--- a/3rdparty/bgfx/scripts/genie.lua
+++ b/3rdparty/bgfx/scripts/genie.lua
@@ -304,13 +304,21 @@ function exampleProject(_name)
kind "ConsoleApp"
targetextension ".bc"
- configuration { "linux-* or freebsd" }
+ configuration { "linux-* or freebsd", "not linux-steamlink" }
links {
"X11",
"GL",
"pthread",
}
+ configuration { "linux-steamlink" }
+ links {
+ "EGL",
+ "GLESv2",
+ "SDL2",
+ "pthread",
+ }
+
configuration { "rpi" }
links {
"X11",
diff --git a/3rdparty/bgfx/src/bgfx.cpp b/3rdparty/bgfx/src/bgfx.cpp
index aae0311ebd5..e16d4f71c3f 100644
--- a/3rdparty/bgfx/src/bgfx.cpp
+++ b/3rdparty/bgfx/src/bgfx.cpp
@@ -2259,13 +2259,10 @@ again:
uint8_t num;
_cmdbuf.read(num);
- TextureHandle textureHandles[BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS];
- for (uint32_t ii = 0; ii < num; ++ii)
- {
- _cmdbuf.read(textureHandles[ii]);
- }
+ Attachment attachment[BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS];
+ _cmdbuf.read(attachment, sizeof(Attachment) * num);
- m_renderCtx->createFrameBuffer(handle, num, textureHandles);
+ m_renderCtx->createFrameBuffer(handle, num, attachment);
}
}
break;
@@ -3112,14 +3109,27 @@ again:
FrameBufferHandle createFrameBuffer(uint8_t _num, const TextureHandle* _handles, bool _destroyTextures)
{
+ Attachment attachment[BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS];
+ for (uint8_t ii = 0; ii < _num; ++ii)
+ {
+ Attachment& at = attachment[ii];
+ at.handle = _handles[ii];
+ at.mip = 0;
+ at.layer = 0;
+ }
+ return createFrameBuffer(_num, attachment, _destroyTextures);
+ }
+
+ FrameBufferHandle createFrameBuffer(uint8_t _num, const Attachment* _attachment, bool _destroyTextures)
+ {
BGFX_CHECK_MAIN_THREAD();
BX_CHECK(_num != 0, "Number of frame buffer attachments can't be 0.");
BX_CHECK(_num <= BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS, "Number of frame buffer attachments is larger than allowed %d (max: %d)."
, _num
, BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS
);
- BX_CHECK(NULL != _handles, "_handles can't be NULL");
- return s_ctx->createFrameBuffer(_num, _handles, _destroyTextures);
+ BX_CHECK(NULL != _attachment, "_attachment can't be NULL");
+ return s_ctx->createFrameBuffer(_num, _attachment, _destroyTextures);
}
FrameBufferHandle createFrameBuffer(void* _nwh, uint16_t _width, uint16_t _height, TextureFormat::Enum _depthFormat)
@@ -4114,10 +4124,10 @@ BGFX_C_API bgfx_frame_buffer_handle_t bgfx_create_frame_buffer_scaled(bgfx_backb
return handle.c;
}
-BGFX_C_API bgfx_frame_buffer_handle_t bgfx_create_frame_buffer_from_handles(uint8_t _num, const bgfx_texture_handle_t* _handles, bool _destroyTextures)
+BGFX_C_API bgfx_frame_buffer_handle_t bgfx_create_frame_buffer_from_attachment(uint8_t _num, const bgfx_attachment_t* _attachment, bool _destroyTextures)
{
union { bgfx_frame_buffer_handle_t c; bgfx::FrameBufferHandle cpp; } handle;
- handle.cpp = bgfx::createFrameBuffer(_num, (const bgfx::TextureHandle*)_handles, _destroyTextures);
+ handle.cpp = bgfx::createFrameBuffer(_num, (const bgfx::Attachment*)_attachment, _destroyTextures);
return handle.c;
}
@@ -4560,7 +4570,7 @@ BGFX_C_API bgfx_interface_vtbl_t* bgfx_get_interface(uint32_t _version)
BGFX_IMPORT_FUNC(destroy_texture) \
BGFX_IMPORT_FUNC(create_frame_buffer) \
BGFX_IMPORT_FUNC(create_frame_buffer_scaled) \
- BGFX_IMPORT_FUNC(create_frame_buffer_from_handles) \
+ BGFX_IMPORT_FUNC(create_frame_buffer_from_attachment) \
BGFX_IMPORT_FUNC(create_frame_buffer_from_nwh) \
BGFX_IMPORT_FUNC(destroy_frame_buffer) \
BGFX_IMPORT_FUNC(create_uniform) \
diff --git a/3rdparty/bgfx/src/bgfx_p.h b/3rdparty/bgfx/src/bgfx_p.h
index 594310d284f..1434b5ca41f 100644
--- a/3rdparty/bgfx/src/bgfx_p.h
+++ b/3rdparty/bgfx/src/bgfx_p.h
@@ -573,8 +573,14 @@ namespace bgfx
const char* getPredefinedUniformName(PredefinedUniform::Enum _enum);
PredefinedUniform::Enum nameToPredefinedUniformEnum(const char* _name);
- struct CommandBuffer
+ class CommandBuffer
{
+ BX_CLASS(CommandBuffer
+ , NO_COPY
+ , NO_ASSIGNMENT
+ );
+
+ public:
CommandBuffer()
: m_pos(0)
, m_size(BGFX_CONFIG_MAX_COMMAND_BUFFER_SIZE)
@@ -690,10 +696,6 @@ namespace bgfx
uint32_t m_pos;
uint32_t m_size;
uint8_t m_buffer[BGFX_CONFIG_MAX_COMMAND_BUFFER_SIZE];
-
- private:
- CommandBuffer(const CommandBuffer&);
- void operator=(const CommandBuffer&);
};
#define SORT_KEY_NUM_BITS_TRANS 2
@@ -2050,7 +2052,7 @@ namespace bgfx
virtual void overrideInternal(TextureHandle _handle, uintptr_t _ptr) = 0;
virtual uintptr_t getInternal(TextureHandle _handle) = 0;
virtual void destroyTexture(TextureHandle _handle) = 0;
- virtual void createFrameBuffer(FrameBufferHandle _handle, uint8_t _num, const TextureHandle* _textureHandles) = 0;
+ virtual void createFrameBuffer(FrameBufferHandle _handle, uint8_t _num, const Attachment* _attachment) = 0;
virtual void createFrameBuffer(FrameBufferHandle _handle, void* _nwh, uint32_t _width, uint32_t _height, TextureFormat::Enum _depthFormat) = 0;
virtual void destroyFrameBuffer(FrameBufferHandle _handle) = 0;
virtual void createUniform(UniformHandle _handle, UniformType::Enum _type, uint16_t _num, const char* _name) = 0;
@@ -3182,14 +3184,14 @@ namespace bgfx
cmdbuf.write(_mem);
}
- bool checkFrameBuffer(uint8_t _num, const TextureHandle* _handles) const
+ bool checkFrameBuffer(uint8_t _num, const Attachment* _attachment) const
{
uint8_t color = 0;
uint8_t depth = 0;
for (uint32_t ii = 0; ii < _num; ++ii)
{
- TextureHandle texHandle = _handles[ii];
+ TextureHandle texHandle = _attachment[ii].handle;
if (isDepth(TextureFormat::Enum(m_textureRef[texHandle.idx].m_format)))
{
++depth;
@@ -3205,9 +3207,9 @@ namespace bgfx
;
}
- BGFX_API_FUNC(FrameBufferHandle createFrameBuffer(uint8_t _num, const TextureHandle* _handles, bool _destroyTextures) )
+ BGFX_API_FUNC(FrameBufferHandle createFrameBuffer(uint8_t _num, const Attachment* _attachment, bool _destroyTextures) )
{
- BX_CHECK(checkFrameBuffer(_num, _handles)
+ BX_CHECK(checkFrameBuffer(_num, _attachment)
, "Too many frame buffer attachments (num attachments: %d, max color attachments %d)!"
, _num
, g_caps.maxFBAttachments
@@ -3226,26 +3228,26 @@ namespace bgfx
FrameBufferRef& ref = m_frameBufferRef[handle.idx];
ref.m_window = false;
memset(ref.un.m_th, 0xff, sizeof(ref.un.m_th) );
- BackbufferRatio::Enum bbRatio = BackbufferRatio::Enum(m_textureRef[_handles[0].idx].m_bbRatio);
+ BackbufferRatio::Enum bbRatio = BackbufferRatio::Enum(m_textureRef[_attachment[0].handle.idx].m_bbRatio);
for (uint32_t ii = 0; ii < _num; ++ii)
{
- TextureHandle texHandle = _handles[ii];
+ TextureHandle texHandle = _attachment[ii].handle;
BGFX_CHECK_HANDLE("createFrameBuffer texture handle", m_textureHandle, texHandle);
BX_CHECK(bbRatio == m_textureRef[texHandle.idx].m_bbRatio, "Mismatch in texture back-buffer ratio.");
BX_UNUSED(bbRatio);
- cmdbuf.write(texHandle);
-
ref.un.m_th[ii] = texHandle;
textureIncRef(texHandle);
}
+
+ cmdbuf.write(_attachment, sizeof(Attachment) * _num);
}
if (_destroyTextures)
{
for (uint32_t ii = 0; ii < _num; ++ii)
{
- textureTakeOwnership(_handles[ii]);
+ textureTakeOwnership(_attachment[ii].handle);
}
}
diff --git a/3rdparty/bgfx/src/image.cpp b/3rdparty/bgfx/src/image.cpp
index 6f8f79775fa..34dcae9e54c 100644
--- a/3rdparty/bgfx/src/image.cpp
+++ b/3rdparty/bgfx/src/image.cpp
@@ -4,8 +4,6 @@
*/
#include "bgfx_p.h"
-#include <math.h> // powf, sqrtf
-
#include "image.h"
namespace bgfx
@@ -345,30 +343,30 @@ namespace bgfx
const uint8_t* rgba = src;
for (uint32_t xx = 0; xx < dstwidth; ++xx, rgba += 8, dst += 4)
{
- float rr = powf(rgba[ 0], 2.2f);
- float gg = powf(rgba[ 1], 2.2f);
- float bb = powf(rgba[ 2], 2.2f);
- float aa = rgba[ 3];
- rr += powf(rgba[ 4], 2.2f);
- gg += powf(rgba[ 5], 2.2f);
- bb += powf(rgba[ 6], 2.2f);
- aa += rgba[ 7];
- rr += powf(rgba[_pitch+0], 2.2f);
- gg += powf(rgba[_pitch+1], 2.2f);
- bb += powf(rgba[_pitch+2], 2.2f);
- aa += rgba[_pitch+3];
- rr += powf(rgba[_pitch+4], 2.2f);
- gg += powf(rgba[_pitch+5], 2.2f);
- bb += powf(rgba[_pitch+6], 2.2f);
- aa += rgba[_pitch+7];
+ float rr = bx::fpow(rgba[ 0], 2.2f);
+ float gg = bx::fpow(rgba[ 1], 2.2f);
+ float bb = bx::fpow(rgba[ 2], 2.2f);
+ float aa = rgba[ 3];
+ rr += bx::fpow(rgba[ 4], 2.2f);
+ gg += bx::fpow(rgba[ 5], 2.2f);
+ bb += bx::fpow(rgba[ 6], 2.2f);
+ aa += rgba[ 7];
+ rr += bx::fpow(rgba[_pitch+0], 2.2f);
+ gg += bx::fpow(rgba[_pitch+1], 2.2f);
+ bb += bx::fpow(rgba[_pitch+2], 2.2f);
+ aa += rgba[_pitch+3];
+ rr += bx::fpow(rgba[_pitch+4], 2.2f);
+ gg += bx::fpow(rgba[_pitch+5], 2.2f);
+ bb += bx::fpow(rgba[_pitch+6], 2.2f);
+ aa += rgba[_pitch+7];
rr *= 0.25f;
gg *= 0.25f;
bb *= 0.25f;
aa *= 0.25f;
- rr = powf(rr, 1.0f/2.2f);
- gg = powf(gg, 1.0f/2.2f);
- bb = powf(bb, 1.0f/2.2f);
+ rr = bx::fpow(rr, 1.0f/2.2f);
+ gg = bx::fpow(gg, 1.0f/2.2f);
+ bb = bx::fpow(bb, 1.0f/2.2f);
dst[0] = (uint8_t)rr;
dst[1] = (uint8_t)gg;
dst[2] = (uint8_t)bb;
@@ -3176,7 +3174,7 @@ namespace bgfx
{
float nx = temp[ii*4+2]*2.0f/255.0f - 1.0f;
float ny = temp[ii*4+1]*2.0f/255.0f - 1.0f;
- float nz = sqrtf(1.0f - nx*nx - ny*ny);
+ float nz = bx::fsqrt(1.0f - nx*nx - ny*ny);
temp[ii*4+0] = uint8_t( (nz + 1.0f)*255.0f/2.0f);
temp[ii*4+3] = 0;
}
@@ -3323,10 +3321,10 @@ namespace bgfx
const uint8_t* rgba = src;
for (uint32_t xx = 0; xx < dstwidth; ++xx, rgba += 4, dst += 4)
{
- dst[0] = powf(rgba[ 0], 2.2f);
- dst[1] = powf(rgba[ 1], 2.2f);
- dst[2] = powf(rgba[ 2], 2.2f);
- dst[3] = rgba[ 3];
+ dst[0] = bx::fpow(rgba[0], 2.2f);
+ dst[1] = bx::fpow(rgba[1], 2.2f);
+ dst[2] = bx::fpow(rgba[2], 2.2f);
+ dst[3] = rgba[3];
}
}
}
@@ -3395,7 +3393,7 @@ namespace bgfx
{
float nx = temp[ii*4+2]*2.0f/255.0f - 1.0f;
float ny = temp[ii*4+1]*2.0f/255.0f - 1.0f;
- float nz = sqrtf(1.0f - nx*nx - ny*ny);
+ float nz = bx::fsqrt(1.0f - nx*nx - ny*ny);
const uint32_t offset = (yy*4 + ii/4)*_width*16 + (xx*4 + ii%4)*16;
float* block = (float*)&dst[offset];
diff --git a/3rdparty/bgfx/src/renderer_d3d11.cpp b/3rdparty/bgfx/src/renderer_d3d11.cpp
index 5bacc5561d4..4446d6b0324 100644
--- a/3rdparty/bgfx/src/renderer_d3d11.cpp
+++ b/3rdparty/bgfx/src/renderer_d3d11.cpp
@@ -1778,9 +1778,9 @@ BX_PRAGMA_DIAGNOSTIC_POP();
m_textures[_handle.idx].destroy();
}
- void createFrameBuffer(FrameBufferHandle _handle, uint8_t _num, const TextureHandle* _textureHandles) BX_OVERRIDE
+ void createFrameBuffer(FrameBufferHandle _handle, uint8_t _num, const Attachment* _attachment) BX_OVERRIDE
{
- m_frameBuffers[_handle.idx].create(_num, _textureHandles);
+ m_frameBuffers[_handle.idx].create(_num, _attachment);
}
void createFrameBuffer(FrameBufferHandle _handle, void* _nwh, uint32_t _width, uint32_t _height, TextureFormat::Enum _depthFormat) BX_OVERRIDE
@@ -4252,7 +4252,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
return handle;
}
- void FrameBufferD3D11::create(uint8_t _num, const TextureHandle* _handles)
+ void FrameBufferD3D11::create(uint8_t _num, const Attachment* _attachment)
{
for (uint32_t ii = 0; ii < BX_COUNTOF(m_rtv); ++ii)
{
@@ -4262,7 +4262,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
m_swapChain = NULL;
m_numTh = _num;
- memcpy(m_th, _handles, _num*sizeof(TextureHandle) );
+ memcpy(m_attachment, _attachment, _num*sizeof(Attachment) );
postReset();
}
@@ -4355,7 +4355,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
m_num = 0;
for (uint32_t ii = 0; ii < m_numTh; ++ii)
{
- TextureHandle handle = m_th[ii];
+ TextureHandle handle = m_attachment[ii].handle;
if (isValid(handle) )
{
const TextureD3D11& texture = s_renderD3D11->m_textures[handle.idx];
@@ -4404,7 +4404,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
: D3D11_DSV_DIMENSION_TEXTURE2D
;
dsvDesc.Flags = 0;
- dsvDesc.Texture2D.MipSlice = 0;
+ dsvDesc.Texture2D.MipSlice = m_attachment[ii].mip;
DX_CHECK(s_renderD3D11->m_device->CreateDepthStencilView(texture.m_ptr, &dsvDesc, &m_dsv) );
}
break;
@@ -4417,14 +4417,14 @@ BX_PRAGMA_DIAGNOSTIC_POP();
{
dsvDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2DMSARRAY;
dsvDesc.Texture2DMSArray.ArraySize = 1;
- dsvDesc.Texture2DMSArray.FirstArraySlice = 0;
+ dsvDesc.Texture2DMSArray.FirstArraySlice = m_attachment[ii].layer;
}
else
{
dsvDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2DARRAY;
dsvDesc.Texture2DArray.ArraySize = 1;
- dsvDesc.Texture2DArray.FirstArraySlice = 0;
- dsvDesc.Texture2DArray.MipSlice = 0;
+ dsvDesc.Texture2DArray.FirstArraySlice = m_attachment[ii].layer;
+ dsvDesc.Texture2DArray.MipSlice = m_attachment[ii].mip;
}
dsvDesc.Flags = 0;
DX_CHECK(s_renderD3D11->m_device->CreateDepthStencilView(texture.m_ptr, &dsvDesc, &m_dsv) );
@@ -4438,7 +4438,20 @@ BX_PRAGMA_DIAGNOSTIC_POP();
{
default:
case TextureD3D11::Texture2D:
- DX_CHECK(s_renderD3D11->m_device->CreateRenderTargetView(texture.m_ptr, NULL, &m_rtv[m_num]) );
+ {
+ D3D11_RENDER_TARGET_VIEW_DESC desc;
+ desc.Format = s_textureFormat[texture.m_textureFormat].m_fmt;
+ if (1 < msaa.Count)
+ {
+ desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DMS;
+ }
+ else
+ {
+ desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D;
+ desc.Texture2D.MipSlice = m_attachment[ii].mip;
+ }
+ DX_CHECK(s_renderD3D11->m_device->CreateRenderTargetView(texture.m_ptr, &desc, &m_rtv[m_num]) );
+ }
break;
case TextureD3D11::TextureCube:
@@ -4449,14 +4462,14 @@ BX_PRAGMA_DIAGNOSTIC_POP();
{
desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DMSARRAY;
desc.Texture2DMSArray.ArraySize = 1;
- desc.Texture2DMSArray.FirstArraySlice = 0;
+ desc.Texture2DMSArray.FirstArraySlice = m_attachment[ii].layer;
}
else
{
desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DARRAY;
desc.Texture2DArray.ArraySize = 1;
- desc.Texture2DArray.FirstArraySlice = 0;
- desc.Texture2DArray.MipSlice = 0;
+ desc.Texture2DArray.FirstArraySlice = m_attachment[ii].layer;
+ desc.Texture2DArray.MipSlice = m_attachment[ii].mip;
}
DX_CHECK(s_renderD3D11->m_device->CreateRenderTargetView(texture.m_ptr, &desc, &m_rtv[m_num]) );
}
@@ -4467,9 +4480,9 @@ BX_PRAGMA_DIAGNOSTIC_POP();
D3D11_RENDER_TARGET_VIEW_DESC desc;
desc.Format = s_textureFormat[texture.m_textureFormat].m_fmt;
desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE3D;
- desc.Texture3D.MipSlice = 0;
+ desc.Texture3D.MipSlice = m_attachment[ii].mip;
desc.Texture3D.WSize = 1;
- desc.Texture3D.FirstWSlice = 0;
+ desc.Texture3D.FirstWSlice = m_attachment[ii].layer;
DX_CHECK(s_renderD3D11->m_device->CreateRenderTargetView(texture.m_ptr, &desc, &m_rtv[m_num]) );
}
break;
diff --git a/3rdparty/bgfx/src/renderer_d3d11.h b/3rdparty/bgfx/src/renderer_d3d11.h
index 151d3ce5cc7..833eda40e1a 100644
--- a/3rdparty/bgfx/src/renderer_d3d11.h
+++ b/3rdparty/bgfx/src/renderer_d3d11.h
@@ -261,7 +261,7 @@ namespace bgfx { namespace d3d11
{
}
- void create(uint8_t _num, const TextureHandle* _handles);
+ void create(uint8_t _num, const Attachment* _attachment);
void create(uint16_t _denseIdx, void* _nwh, uint32_t _width, uint32_t _height, TextureFormat::Enum _depthFormat);
uint16_t destroy();
void preReset(bool _force = false);
@@ -278,7 +278,7 @@ namespace bgfx { namespace d3d11
uint16_t m_denseIdx;
uint8_t m_num;
uint8_t m_numTh;
- TextureHandle m_th[BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS];
+ Attachment m_attachment[BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS];
};
struct TimerQueryD3D11
diff --git a/3rdparty/bgfx/src/renderer_d3d12.cpp b/3rdparty/bgfx/src/renderer_d3d12.cpp
index 76eb52e0e21..409d33bce10 100644
--- a/3rdparty/bgfx/src/renderer_d3d12.cpp
+++ b/3rdparty/bgfx/src/renderer_d3d12.cpp
@@ -1388,9 +1388,9 @@ namespace bgfx { namespace d3d12
m_textures[_handle.idx].destroy();
}
- void createFrameBuffer(FrameBufferHandle _handle, uint8_t _num, const TextureHandle* _textureHandles) BX_OVERRIDE
+ void createFrameBuffer(FrameBufferHandle _handle, uint8_t _num, const Attachment* _attachment) BX_OVERRIDE
{
- m_frameBuffers[_handle.idx].create(_num, _textureHandles);
+ m_frameBuffers[_handle.idx].create(_num, _attachment);
}
void createFrameBuffer(FrameBufferHandle _handle, void* _nwh, uint32_t _width, uint32_t _height, TextureFormat::Enum _depthFormat) BX_OVERRIDE
@@ -4184,10 +4184,10 @@ data.NumQualityLevels = 0;
return _state;
}
- void FrameBufferD3D12::create(uint8_t _num, const TextureHandle* _handles)
+ void FrameBufferD3D12::create(uint8_t _num, const Attachment* _attachment)
{
m_numTh = _num;
- memcpy(m_th, _handles, _num*sizeof(TextureHandle) );
+ memcpy(m_attachment, _attachment, _num*sizeof(Attachment) );
postReset();
}
@@ -4217,7 +4217,7 @@ data.NumQualityLevels = 0;
m_num = 0;
for (uint32_t ii = 0; ii < m_numTh; ++ii)
{
- TextureHandle handle = m_th[ii];
+ TextureHandle handle = m_attachment[ii].handle;
if (isValid(handle) )
{
const TextureD3D12& texture = s_renderD3D12->m_textures[handle.idx];
diff --git a/3rdparty/bgfx/src/renderer_d3d12.h b/3rdparty/bgfx/src/renderer_d3d12.h
index d046b275142..39f165a03da 100644
--- a/3rdparty/bgfx/src/renderer_d3d12.h
+++ b/3rdparty/bgfx/src/renderer_d3d12.h
@@ -295,7 +295,7 @@ namespace bgfx { namespace d3d12
m_depth.idx = bgfx::invalidHandle;
}
- void create(uint8_t _num, const TextureHandle* _handles);
+ void create(uint8_t _num, const Attachment* _attachment);
void create(uint16_t _denseIdx, void* _nwh, uint32_t _width, uint32_t _height, TextureFormat::Enum _depthFormat);
uint16_t destroy();
void preReset();
@@ -311,7 +311,7 @@ namespace bgfx { namespace d3d12
uint16_t m_denseIdx;
uint8_t m_num;
uint8_t m_numTh;
- TextureHandle m_th[BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS];
+ Attachment m_attachment[BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS];
};
struct CommandQueueD3D12
diff --git a/3rdparty/bgfx/src/renderer_d3d9.cpp b/3rdparty/bgfx/src/renderer_d3d9.cpp
index 4fb4d435b4a..919a952260b 100644
--- a/3rdparty/bgfx/src/renderer_d3d9.cpp
+++ b/3rdparty/bgfx/src/renderer_d3d9.cpp
@@ -1018,9 +1018,9 @@ namespace bgfx { namespace d3d9
m_textures[_handle.idx].destroy();
}
- void createFrameBuffer(FrameBufferHandle _handle, uint8_t _num, const TextureHandle* _textureHandles) BX_OVERRIDE
+ void createFrameBuffer(FrameBufferHandle _handle, uint8_t _num, const Attachment* _attachment) BX_OVERRIDE
{
- m_frameBuffers[_handle.idx].create(_num, _textureHandles);
+ m_frameBuffers[_handle.idx].create(_num, _attachment);
}
void createFrameBuffer(FrameBufferHandle _handle, void* _nwh, uint32_t _width, uint32_t _height, TextureFormat::Enum _depthFormat) BX_OVERRIDE
@@ -3062,7 +3062,7 @@ namespace bgfx { namespace d3d9
}
}
- void FrameBufferD3D9::create(uint8_t _num, const TextureHandle* _handles)
+ void FrameBufferD3D9::create(uint8_t _num, const Attachment* _attachment)
{
for (uint32_t ii = 0; ii < BX_COUNTOF(m_color); ++ii)
{
@@ -3074,7 +3074,7 @@ namespace bgfx { namespace d3d9
m_needResolve = false;
for (uint32_t ii = 0; ii < _num; ++ii)
{
- TextureHandle handle = _handles[ii];
+ TextureHandle handle = _attachment[ii].handle;
if (isValid(handle) )
{
const TextureD3D9& texture = s_renderD3D9->m_textures[handle.idx];
@@ -3102,7 +3102,7 @@ namespace bgfx { namespace d3d9
}
else
{
- m_color[m_num] = texture.getSurface();
+ m_color[m_num] = texture.getSurface(uint8_t(_attachment[ii].layer) );
}
m_num++;
}
diff --git a/3rdparty/bgfx/src/renderer_d3d9.h b/3rdparty/bgfx/src/renderer_d3d9.h
index aecfba57322..0b0e030dc5c 100644
--- a/3rdparty/bgfx/src/renderer_d3d9.h
+++ b/3rdparty/bgfx/src/renderer_d3d9.h
@@ -389,7 +389,7 @@ namespace bgfx { namespace d3d9
m_depthHandle.idx = invalidHandle;
}
- void create(uint8_t _num, const TextureHandle* _handles);
+ void create(uint8_t _num, const Attachment* _attachment);
void create(uint16_t _denseIdx, void* _nwh, uint32_t _width, uint32_t _height, TextureFormat::Enum _depthFormat);
uint16_t destroy();
HRESULT present();
diff --git a/3rdparty/bgfx/src/renderer_gl.cpp b/3rdparty/bgfx/src/renderer_gl.cpp
index ff6184ccc98..0feccaf9680 100644
--- a/3rdparty/bgfx/src/renderer_gl.cpp
+++ b/3rdparty/bgfx/src/renderer_gl.cpp
@@ -2243,9 +2243,9 @@ namespace bgfx { namespace gl
m_textures[_handle.idx].destroy();
}
- void createFrameBuffer(FrameBufferHandle _handle, uint8_t _num, const TextureHandle* _textureHandles) BX_OVERRIDE
+ void createFrameBuffer(FrameBufferHandle _handle, uint8_t _num, const Attachment* _attachment) BX_OVERRIDE
{
- m_frameBuffers[_handle.idx].create(_num, _textureHandles);
+ m_frameBuffers[_handle.idx].create(_num, _attachment);
}
void createFrameBuffer(FrameBufferHandle _handle, void* _nwh, uint32_t _width, uint32_t _height, TextureFormat::Enum _depthFormat) BX_OVERRIDE
@@ -5017,12 +5017,12 @@ namespace bgfx { namespace gl
BX_UNUSED(complete);
}
- void FrameBufferGL::create(uint8_t _num, const TextureHandle* _handles)
+ void FrameBufferGL::create(uint8_t _num, const Attachment* _attachment)
{
GL_CHECK(glGenFramebuffers(1, &m_fbo[0]) );
m_numTh = _num;
- memcpy(m_th, _handles, _num*sizeof(TextureHandle) );
+ memcpy(m_attachment, _attachment, _num*sizeof(Attachment) );
postReset();
}
@@ -5040,15 +5040,15 @@ namespace bgfx { namespace gl
uint32_t colorIdx = 0;
for (uint32_t ii = 0; ii < m_numTh; ++ii)
{
- TextureHandle handle = m_th[ii];
+ TextureHandle handle = m_attachment[ii].handle;
if (isValid(handle) )
{
const TextureGL& texture = s_renderGL->m_textures[handle.idx];
if (0 == colorIdx)
{
- m_width = texture.m_width;
- m_height = texture.m_height;
+ m_width = bx::uint32_max(texture.m_width >> m_attachment[ii].mip, 1);
+ m_height = bx::uint32_max(texture.m_height >> m_attachment[ii].mip, 1);
}
GLenum attachment = GL_COLOR_ATTACHMENT0 + colorIdx;
@@ -5086,7 +5086,7 @@ namespace bgfx { namespace gl
else
{
GLenum target = GL_TEXTURE_CUBE_MAP == texture.m_target
- ? GL_TEXTURE_CUBE_MAP_POSITIVE_X
+ ? GL_TEXTURE_CUBE_MAP_POSITIVE_X + m_attachment[ii].layer
: texture.m_target
;
@@ -5094,7 +5094,7 @@ namespace bgfx { namespace gl
, attachment
, target
, texture.m_id
- , 0
+ , m_attachment[ii].mip
) );
}
@@ -5134,7 +5134,7 @@ namespace bgfx { namespace gl
colorIdx = 0;
for (uint32_t ii = 0; ii < m_numTh; ++ii)
{
- TextureHandle handle = m_th[ii];
+ TextureHandle handle = m_attachment[ii].handle;
if (isValid(handle) )
{
const TextureGL& texture = s_renderGL->m_textures[handle.idx];
@@ -5145,11 +5145,17 @@ namespace bgfx { namespace gl
if (!isDepth( (TextureFormat::Enum)texture.m_textureFormat) )
{
++colorIdx;
+
+ GLenum target = GL_TEXTURE_CUBE_MAP == texture.m_target
+ ? GL_TEXTURE_CUBE_MAP_POSITIVE_X + m_attachment[ii].layer
+ : texture.m_target
+ ;
+
GL_CHECK(glFramebufferTexture2D(GL_FRAMEBUFFER
, attachment
- , texture.m_target
+ , target
, texture.m_id
- , 0
+ , m_attachment[ii].mip
) );
}
}
diff --git a/3rdparty/bgfx/src/renderer_gl.h b/3rdparty/bgfx/src/renderer_gl.h
index 06b1525fd64..91c49c22f02 100644
--- a/3rdparty/bgfx/src/renderer_gl.h
+++ b/3rdparty/bgfx/src/renderer_gl.h
@@ -13,6 +13,7 @@
|| BX_PLATFORM_BSD \
|| BX_PLATFORM_QNX \
|| BX_PLATFORM_RPI \
+ || BX_PLATFORM_STEAMLINK \
|| BX_PLATFORM_WINDOWS \
) )
@@ -1169,7 +1170,7 @@ namespace bgfx { namespace gl
memset(m_fbo, 0, sizeof(m_fbo) );
}
- void create(uint8_t _num, const TextureHandle* _handles);
+ void create(uint8_t _num, const Attachment* _attachment);
void create(uint16_t _denseIdx, void* _nwh, uint32_t _width, uint32_t _height, TextureFormat::Enum _depthFormat);
void postReset();
uint16_t destroy();
@@ -1183,7 +1184,7 @@ namespace bgfx { namespace gl
uint16_t m_denseIdx;
uint8_t m_num;
uint8_t m_numTh;
- TextureHandle m_th[BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS];
+ Attachment m_attachment[BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS];
};
struct ProgramGL
diff --git a/3rdparty/bgfx/src/renderer_mtl.h b/3rdparty/bgfx/src/renderer_mtl.h
index 2b683cff891..f471ee5d457 100644
--- a/3rdparty/bgfx/src/renderer_mtl.h
+++ b/3rdparty/bgfx/src/renderer_mtl.h
@@ -694,7 +694,7 @@ namespace bgfx { namespace mtl
m_depthHandle.idx = invalidHandle;
}
- void create(uint8_t _num, const TextureHandle* _handles);
+ void create(uint8_t _num, const Attachment* _attachment);
void create(uint16_t _denseIdx, void* _nwh, uint32_t _width, uint32_t _height, TextureFormat::Enum _depthFormat);
void postReset();
uint16_t destroy();
diff --git a/3rdparty/bgfx/src/renderer_mtl.mm b/3rdparty/bgfx/src/renderer_mtl.mm
index 833a53bea0d..08faee495f7 100644
--- a/3rdparty/bgfx/src/renderer_mtl.mm
+++ b/3rdparty/bgfx/src/renderer_mtl.mm
@@ -694,9 +694,9 @@ namespace bgfx { namespace mtl
m_textures[_handle.idx].destroy();
}
- void createFrameBuffer(FrameBufferHandle _handle, uint8_t _num, const TextureHandle* _textureHandles) BX_OVERRIDE
+ void createFrameBuffer(FrameBufferHandle _handle, uint8_t _num, const Attachment* _attachment) BX_OVERRIDE
{
- m_frameBuffers[_handle.idx].create(_num, _textureHandles);
+ m_frameBuffers[_handle.idx].create(_num, _attachment);
}
void createFrameBuffer(FrameBufferHandle _handle, void* _nwh, uint32_t _width, uint32_t _height, TextureFormat::Enum _depthFormat) BX_OVERRIDE
@@ -2079,12 +2079,12 @@ namespace bgfx { namespace mtl
: m_sampler, _stage);
}
- void FrameBufferMtl::create(uint8_t _num, const TextureHandle* _handles)
+ void FrameBufferMtl::create(uint8_t _num, const Attachment* _attachment)
{
m_num = 0;
for (uint32_t ii = 0; ii < _num; ++ii)
{
- TextureHandle handle = _handles[ii];
+ TextureHandle handle = _attachment[ii].handle;
if (isValid(handle) )
{
const TextureMtl& texture = s_renderMtl->m_textures[handle.idx];
diff --git a/3rdparty/bgfx/src/renderer_null.cpp b/3rdparty/bgfx/src/renderer_null.cpp
index a68e66f0d68..9b3de91416b 100644
--- a/3rdparty/bgfx/src/renderer_null.cpp
+++ b/3rdparty/bgfx/src/renderer_null.cpp
@@ -134,7 +134,7 @@ namespace bgfx { namespace noop
{
}
- void createFrameBuffer(FrameBufferHandle /*_handle*/, uint8_t /*_num*/, const TextureHandle* /*_textureHandles*/) BX_OVERRIDE
+ void createFrameBuffer(FrameBufferHandle /*_handle*/, uint8_t /*_num*/, const Attachment* /*_attachment*/) BX_OVERRIDE
{
}
diff --git a/3rdparty/bgfx/tools/geometryc/geometryc.cpp b/3rdparty/bgfx/tools/geometryc/geometryc.cpp
index b5fc62affe2..7687f3c5e38 100644
--- a/3rdparty/bgfx/tools/geometryc/geometryc.cpp
+++ b/3rdparty/bgfx/tools/geometryc/geometryc.cpp
@@ -811,7 +811,7 @@ int main(int _argc, const char* _argv[])
PrimitiveArray primitives;
bx::CrtFileWriter writer;
- if (bx::open(&writer, outFilePath) )
+ if (!bx::open(&writer, outFilePath) )
{
printf("Unable to open output file '%s'.", outFilePath);
exit(EXIT_FAILURE);
diff --git a/3rdparty/bx/include/bx/fpumath.h b/3rdparty/bx/include/bx/fpumath.h
index b76da2f9a31..be125aa69eb 100644
--- a/3rdparty/bx/include/bx/fpumath.h
+++ b/3rdparty/bx/include/bx/fpumath.h
@@ -149,6 +149,11 @@ namespace bx
return _a - floorf(_a);
}
+ inline float fmod(float _a, float _b)
+ {
+ return fmodf(_a, _b);
+ }
+
inline bool fequal(float _a, float _b, float _epsilon)
{
// http://realtimecollisiondetection.net/blog/?p=89
@@ -169,7 +174,7 @@ namespace bx
inline float fwrap(float _a, float _wrap)
{
- const float mod = fmodf(_a, _wrap);
+ const float mod = fmod(_a, _wrap);
const float result = mod < 0.0f ? _wrap + mod : mod;
return result;
}
@@ -422,8 +427,8 @@ namespace bx
inline void quatRotateAxis(float* __restrict _result, const float* _axis, float _angle)
{
const float ha = _angle * 0.5f;
- const float ca = cosf(ha);
- const float sa = sinf(ha);
+ const float ca = fcos(ha);
+ const float sa = fsin(ha);
_result[0] = _axis[0] * sa;
_result[1] = _axis[1] * sa;
_result[2] = _axis[2] * sa;
@@ -433,8 +438,8 @@ namespace bx
inline void quatRotateX(float* _result, float _ax)
{
const float hx = _ax * 0.5f;
- const float cx = cosf(hx);
- const float sx = sinf(hx);
+ const float cx = fcos(hx);
+ const float sx = fsin(hx);
_result[0] = sx;
_result[1] = 0.0f;
_result[2] = 0.0f;
@@ -444,8 +449,8 @@ namespace bx
inline void quatRotateY(float* _result, float _ay)
{
const float hy = _ay * 0.5f;
- const float cy = cosf(hy);
- const float sy = sinf(hy);
+ const float cy = fcos(hy);
+ const float sy = fsin(hy);
_result[0] = 0.0f;
_result[1] = sy;
_result[2] = 0.0f;
@@ -455,8 +460,8 @@ namespace bx
inline void quatRotateZ(float* _result, float _az)
{
const float hz = _az * 0.5f;
- const float cz = cosf(hz);
- const float sz = sinf(hz);
+ const float cz = fcos(hz);
+ const float sz = fsin(hz);
_result[0] = 0.0f;
_result[1] = 0.0f;
_result[2] = sz;
@@ -736,8 +741,8 @@ namespace bx
inline void mtxRotateX(float* _result, float _ax)
{
- const float sx = sinf(_ax);
- const float cx = cosf(_ax);
+ const float sx = fsin(_ax);
+ const float cx = fcos(_ax);
memset(_result, 0, sizeof(float)*16);
_result[ 0] = 1.0f;
@@ -750,8 +755,8 @@ namespace bx
inline void mtxRotateY(float* _result, float _ay)
{
- const float sy = sinf(_ay);
- const float cy = cosf(_ay);
+ const float sy = fsin(_ay);
+ const float cy = fcos(_ay);
memset(_result, 0, sizeof(float)*16);
_result[ 0] = cy;
@@ -764,8 +769,8 @@ namespace bx
inline void mtxRotateZ(float* _result, float _az)
{
- const float sz = sinf(_az);
- const float cz = cosf(_az);
+ const float sz = fsin(_az);
+ const float cz = fcos(_az);
memset(_result, 0, sizeof(float)*16);
_result[ 0] = cz;
@@ -778,10 +783,10 @@ namespace bx
inline void mtxRotateXY(float* _result, float _ax, float _ay)
{
- const float sx = sinf(_ax);
- const float cx = cosf(_ax);
- const float sy = sinf(_ay);
- const float cy = cosf(_ay);
+ const float sx = fsin(_ax);
+ const float cx = fcos(_ax);
+ const float sy = fsin(_ay);
+ const float cy = fcos(_ay);
memset(_result, 0, sizeof(float)*16);
_result[ 0] = cy;
@@ -797,12 +802,12 @@ namespace bx
inline void mtxRotateXYZ(float* _result, float _ax, float _ay, float _az)
{
- const float sx = sinf(_ax);
- const float cx = cosf(_ax);
- const float sy = sinf(_ay);
- const float cy = cosf(_ay);
- const float sz = sinf(_az);
- const float cz = cosf(_az);
+ const float sx = fsin(_ax);
+ const float cx = fcos(_ax);
+ const float sy = fsin(_ay);
+ const float cy = fcos(_ay);
+ const float sz = fsin(_az);
+ const float cz = fcos(_az);
memset(_result, 0, sizeof(float)*16);
_result[ 0] = cy*cz;
@@ -819,12 +824,12 @@ namespace bx
inline void mtxRotateZYX(float* _result, float _ax, float _ay, float _az)
{
- const float sx = sinf(_ax);
- const float cx = cosf(_ax);
- const float sy = sinf(_ay);
- const float cy = cosf(_ay);
- const float sz = sinf(_az);
- const float cz = cosf(_az);
+ const float sx = fsin(_ax);
+ const float cx = fcos(_ax);
+ const float sy = fsin(_ay);
+ const float cy = fcos(_ay);
+ const float sz = fsin(_az);
+ const float cz = fcos(_az);
memset(_result, 0, sizeof(float)*16);
_result[ 0] = cy*cz;
@@ -841,12 +846,12 @@ namespace bx
inline void mtxSRT(float* _result, float _sx, float _sy, float _sz, float _ax, float _ay, float _az, float _tx, float _ty, float _tz)
{
- const float sx = sinf(_ax);
- const float cx = cosf(_ax);
- const float sy = sinf(_ay);
- const float cy = cosf(_ay);
- const float sz = sinf(_az);
- const float cz = cosf(_az);
+ const float sx = fsin(_ax);
+ const float cx = fcos(_ax);
+ const float sy = fsin(_ay);
+ const float cy = fcos(_ay);
+ const float sz = fsin(_az);
+ const float cz = fcos(_az);
const float sxsz = sx*sz;
const float cycz = cy*cz;
diff --git a/3rdparty/bx/include/bx/hash.h b/3rdparty/bx/include/bx/hash.h
index de3f21c4c0e..4250115622f 100644
--- a/3rdparty/bx/include/bx/hash.h
+++ b/3rdparty/bx/include/bx/hash.h
@@ -103,7 +103,7 @@ namespace bx
static void readUnaligned(const void* _data, uint32_t& _out)
{
const uint8_t* data = (const uint8_t*)_data;
- if (BX_ENABLED(BX_CPU_ENDIAN_LITTLE) )
+ if (BX_ENABLED(BX_CPU_ENDIAN_BIG) )
{
_out = 0
| data[0]<<24
diff --git a/3rdparty/bx/scripts/toolchain.lua b/3rdparty/bx/scripts/toolchain.lua
index ad3a3e647e1..fc674de9570 100644
--- a/3rdparty/bx/scripts/toolchain.lua
+++ b/3rdparty/bx/scripts/toolchain.lua
@@ -1126,7 +1126,13 @@ function strip()
"$(SILENT) $(ANDROID_NDK_X86)/bin/i686-linux-android-strip -s \"$(TARGET)\""
}
- configuration { "linux-* or rpi", "Release" }
+ configuration { "linux-steamlink", "Release" }
+ postbuildcommands {
+ "$(SILENT) echo Stripping symbols.",
+ "$(SILENT) $(MARVELL_SDK_PATH)/toolchain/bin/armv7a-cros-linux-gnueabi-strip -s \"$(TARGET)\""
+ }
+
+ configuration { "linux-* or rpi", "not linux-steamlink", "Release" }
postbuildcommands {
"$(SILENT) echo Stripping symbols.",
"$(SILENT) strip -s \"$(TARGET)\""
diff --git a/3rdparty/bx/tools/bin/darwin/genie b/3rdparty/bx/tools/bin/darwin/genie
index f79dbd8456f..a7c61b7300e 100644
--- a/3rdparty/bx/tools/bin/darwin/genie
+++ b/3rdparty/bx/tools/bin/darwin/genie
Binary files differ
diff --git a/3rdparty/bx/tools/bin/linux/genie b/3rdparty/bx/tools/bin/linux/genie
index c3a323a0b1e..223ef23852e 100644
--- a/3rdparty/bx/tools/bin/linux/genie
+++ b/3rdparty/bx/tools/bin/linux/genie
Binary files differ
diff --git a/3rdparty/bx/tools/bin/windows/genie.exe b/3rdparty/bx/tools/bin/windows/genie.exe
index 7e62285f703..59575ce272e 100644
--- a/3rdparty/bx/tools/bin/windows/genie.exe
+++ b/3rdparty/bx/tools/bin/windows/genie.exe
Binary files differ