aboutsummaryrefslogtreecommitdiffstats
path: root/dev/MinGfx/doc
diff options
context:
space:
mode:
Diffstat (limited to 'dev/MinGfx/doc')
-rw-r--r--dev/MinGfx/doc/Doxyfile.in312
-rw-r--r--dev/MinGfx/doc/DoxygenLayout.xml194
-rw-r--r--dev/MinGfx/doc/api.md64
-rw-r--r--dev/MinGfx/doc/customdoxygen.css524
-rw-r--r--dev/MinGfx/doc/footer.html21
-rw-r--r--dev/MinGfx/doc/header.html55
-rw-r--r--dev/MinGfx/doc/index.html2
-rw-r--r--dev/MinGfx/doc/installation.md200
-rw-r--r--dev/MinGfx/doc/mainpage.md27
9 files changed, 1399 insertions, 0 deletions
diff --git a/dev/MinGfx/doc/Doxyfile.in b/dev/MinGfx/doc/Doxyfile.in
new file mode 100644
index 0000000..41de5d5
--- /dev/null
+++ b/dev/MinGfx/doc/Doxyfile.in
@@ -0,0 +1,312 @@
+# Doxyfile 1.8.10
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+DOXYFILE_ENCODING = UTF-8
+PROJECT_NAME = "MinGfx Toolkit"
+PROJECT_NUMBER = @MinGfx_Toolkit_VERSION_MAJOR@.@MinGfx_Toolkit_VERSION_MINOR@
+PROJECT_BRIEF = "A minimal library for writing cross-platform (Windows, OSX, linux) graphics programs."
+PROJECT_LOGO =
+OUTPUT_DIRECTORY = @CMAKE_CURRENT_BINARY_DIR@
+CREATE_SUBDIRS = NO
+ALLOW_UNICODE_NAMES = NO
+OUTPUT_LANGUAGE = English
+BRIEF_MEMBER_DESC = YES
+REPEAT_BRIEF = YES
+ABBREVIATE_BRIEF =
+ALWAYS_DETAILED_SEC = NO
+INLINE_INHERITED_MEMB = NO
+FULL_PATH_NAMES = YES
+STRIP_FROM_PATH = @PROJECT_SOURCE_DIR@ \
+ @PROJECT_BINARY_DIR@
+STRIP_FROM_INC_PATH =
+SHORT_NAMES = NO
+JAVADOC_AUTOBRIEF = YES
+QT_AUTOBRIEF = YES
+MULTILINE_CPP_IS_BRIEF = YES
+INHERIT_DOCS = YES
+SEPARATE_MEMBER_PAGES = NO
+TAB_SIZE = 4
+ALIASES =
+OPTIMIZE_OUTPUT_FOR_C = NO
+OPTIMIZE_OUTPUT_JAVA = NO
+OPTIMIZE_FOR_FORTRAN = NO
+OPTIMIZE_OUTPUT_VHDL = NO
+EXTENSION_MAPPING =
+MARKDOWN_SUPPORT = YES
+AUTOLINK_SUPPORT = YES
+BUILTIN_STL_SUPPORT = NO
+CPP_CLI_SUPPORT = NO
+SIP_SUPPORT = NO
+IDL_PROPERTY_SUPPORT = YES
+DISTRIBUTE_GROUP_DOC = NO
+GROUP_NESTED_COMPOUNDS = NO
+SUBGROUPING = YES
+INLINE_GROUPED_CLASSES = NO
+INLINE_SIMPLE_STRUCTS = NO
+TYPEDEF_HIDES_STRUCT = NO
+LOOKUP_CACHE_SIZE = 0
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL = YES
+EXTRACT_PRIVATE = NO
+EXTRACT_PACKAGE = NO
+EXTRACT_STATIC = YES
+EXTRACT_LOCAL_CLASSES = YES
+EXTRACT_LOCAL_METHODS = YES
+EXTRACT_ANON_NSPACES = NO
+HIDE_UNDOC_MEMBERS = NO
+HIDE_UNDOC_CLASSES = NO
+HIDE_FRIEND_COMPOUNDS = NO
+HIDE_IN_BODY_DOCS = NO
+INTERNAL_DOCS = NO
+CASE_SENSE_NAMES = NO
+HIDE_SCOPE_NAMES = NO
+HIDE_COMPOUND_REFERENCE= NO
+SHOW_INCLUDE_FILES = YES
+SHOW_GROUPED_MEMB_INC = NO
+FORCE_LOCAL_INCLUDES = NO
+INLINE_INFO = YES
+SORT_MEMBER_DOCS = YES
+SORT_BRIEF_DOCS = NO
+SORT_MEMBERS_CTORS_1ST = NO
+SORT_GROUP_NAMES = NO
+SORT_BY_SCOPE_NAME = NO
+STRICT_PROTO_MATCHING = NO
+GENERATE_TODOLIST = YES
+GENERATE_TESTLIST = YES
+GENERATE_BUGLIST = YES
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS =
+MAX_INITIALIZER_LINES = 30
+SHOW_USED_FILES = YES
+SHOW_FILES = YES
+SHOW_NAMESPACES = NO
+FILE_VERSION_FILTER =
+LAYOUT_FILE = @CMAKE_CURRENT_SOURCE_DIR@/doc/DoxygenLayout.xml
+CITE_BIB_FILES =
+#---------------------------------------------------------------------------
+# Configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET = NO
+WARNINGS = YES
+WARN_IF_UNDOCUMENTED = YES
+WARN_IF_DOC_ERROR = YES
+WARN_NO_PARAMDOC = NO
+WARN_FORMAT = "$file:$line: $text"
+WARN_LOGFILE =
+#---------------------------------------------------------------------------
+# Configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT = @CMAKE_CURRENT_SOURCE_DIR@/doc @CMAKE_CURRENT_SOURCE_DIR@/src
+INPUT_ENCODING = UTF-8
+FILE_PATTERNS = *.h *.md
+RECURSIVE = YES
+EXCLUDE = @CMAKE_CURRENT_SOURCE_DIR@/src/external @CMAKE_CURRENT_SOURCE_DIR@/src/shaders
+EXCLUDE_SYMLINKS = NO
+EXCLUDE_PATTERNS =
+EXCLUDE_SYMBOLS =
+EXAMPLE_PATH =
+EXAMPLE_PATTERNS =
+EXAMPLE_RECURSIVE = NO
+IMAGE_PATH =
+INPUT_FILTER =
+FILTER_PATTERNS =
+FILTER_SOURCE_FILES = NO
+FILTER_SOURCE_PATTERNS =
+USE_MDFILE_AS_MAINPAGE = mainpage.md
+#---------------------------------------------------------------------------
+# Configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER = YES
+INLINE_SOURCES = NO
+STRIP_CODE_COMMENTS = YES
+REFERENCED_BY_RELATION = NO
+REFERENCES_RELATION = NO
+REFERENCES_LINK_SOURCE = YES
+SOURCE_TOOLTIPS = YES
+USE_HTAGS = NO
+VERBATIM_HEADERS = YES
+#---------------------------------------------------------------------------
+# Configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX = YES
+IGNORE_PREFIX =
+#---------------------------------------------------------------------------
+# Configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML = YES
+HTML_OUTPUT = html
+HTML_FILE_EXTENSION = .html
+HTML_HEADER = @CMAKE_CURRENT_SOURCE_DIR@/doc/header.html
+HTML_FOOTER = @CMAKE_CURRENT_SOURCE_DIR@/doc/footer.html
+HTML_STYLESHEET =
+HTML_EXTRA_STYLESHEET = @CMAKE_CURRENT_SOURCE_DIR@/doc/customdoxygen.css
+HTML_EXTRA_FILES =
+HTML_COLORSTYLE_HUE = 0
+HTML_COLORSTYLE_SAT = 0
+HTML_COLORSTYLE_GAMMA = 100
+HTML_TIMESTAMP = NO
+HTML_DYNAMIC_SECTIONS = YES
+HTML_INDEX_NUM_ENTRIES = 100
+GENERATE_DOCSET = NO
+DOCSET_FEEDNAME = "Doxygen generated docs"
+DOCSET_BUNDLE_ID = org.doxygen.Project
+DOCSET_PUBLISHER_ID = org.doxygen.Publisher
+DOCSET_PUBLISHER_NAME = Publisher
+GENERATE_HTMLHELP = NO
+CHM_FILE =
+HHC_LOCATION =
+GENERATE_CHI = NO
+CHM_INDEX_ENCODING =
+BINARY_TOC = NO
+TOC_EXPAND = NO
+GENERATE_QHP = NO
+QCH_FILE =
+QHP_NAMESPACE = org.doxygen.Project
+QHP_VIRTUAL_FOLDER = doc
+QHP_CUST_FILTER_NAME =
+QHP_CUST_FILTER_ATTRS =
+QHP_SECT_FILTER_ATTRS =
+QHG_LOCATION =
+GENERATE_ECLIPSEHELP = NO
+ECLIPSE_DOC_ID = org.doxygen.Project
+DISABLE_INDEX = NO
+GENERATE_TREEVIEW = NO
+ENUM_VALUES_PER_LINE = 4
+TREEVIEW_WIDTH = 250
+EXT_LINKS_IN_WINDOW = NO
+FORMULA_FONTSIZE = 10
+FORMULA_TRANSPARENT = YES
+USE_MATHJAX = YES
+MATHJAX_FORMAT = HTML-CSS
+MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
+MATHJAX_EXTENSIONS =
+MATHJAX_CODEFILE =
+SEARCHENGINE = YES
+SERVER_BASED_SEARCH = NO
+EXTERNAL_SEARCH = NO
+SEARCHENGINE_URL =
+SEARCHDATA_FILE = searchdata.xml
+EXTERNAL_SEARCH_ID =
+EXTRA_SEARCH_MAPPINGS =
+#---------------------------------------------------------------------------
+# Configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX = NO
+LATEX_OUTPUT = latex
+LATEX_CMD_NAME = latex
+MAKEINDEX_CMD_NAME = makeindex
+COMPACT_LATEX = NO
+PAPER_TYPE = letter
+EXTRA_PACKAGES =
+LATEX_HEADER =
+LATEX_FOOTER =
+LATEX_EXTRA_STYLESHEET =
+LATEX_EXTRA_FILES =
+PDF_HYPERLINKS = YES
+USE_PDFLATEX = YES
+LATEX_BATCHMODE = NO
+LATEX_HIDE_INDICES = NO
+LATEX_SOURCE_CODE = NO
+LATEX_BIB_STYLE = plain
+#---------------------------------------------------------------------------
+# Configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF = NO
+RTF_OUTPUT = rtf
+COMPACT_RTF = NO
+RTF_HYPERLINKS = NO
+RTF_STYLESHEET_FILE =
+RTF_EXTENSIONS_FILE =
+RTF_SOURCE_CODE = NO
+#---------------------------------------------------------------------------
+# Configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN = NO
+MAN_OUTPUT = man
+MAN_EXTENSION = .3
+MAN_SUBDIR =
+MAN_LINKS = NO
+#---------------------------------------------------------------------------
+# Configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML = NO
+XML_OUTPUT = xml
+XML_PROGRAMLISTING = YES
+#---------------------------------------------------------------------------
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
+GENERATE_DOCBOOK = NO
+DOCBOOK_OUTPUT = docbook
+DOCBOOK_PROGRAMLISTING = NO
+#---------------------------------------------------------------------------
+# Configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF = NO
+#---------------------------------------------------------------------------
+# Configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD = NO
+PERLMOD_LATEX = NO
+PERLMOD_PRETTY = YES
+PERLMOD_MAKEVAR_PREFIX =
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING = YES
+MACRO_EXPANSION = NO
+EXPAND_ONLY_PREDEF = NO
+SEARCH_INCLUDES = YES
+INCLUDE_PATH =
+INCLUDE_FILE_PATTERNS =
+PREDEFINED =
+EXPAND_AS_DEFINED =
+SKIP_FUNCTION_MACROS = YES
+#---------------------------------------------------------------------------
+# Configuration options related to external references
+#---------------------------------------------------------------------------
+TAGFILES =
+GENERATE_TAGFILE =
+ALLEXTERNALS = NO
+EXTERNAL_GROUPS = YES
+EXTERNAL_PAGES = YES
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS = YES
+DIA_PATH =
+HIDE_UNDOC_RELATIONS = NO
+HAVE_DOT = NO
+DOT_NUM_THREADS = 0
+DOT_FONTNAME = Helvetica
+DOT_FONTSIZE = 10
+DOT_FONTPATH =
+CLASS_GRAPH = YES
+COLLABORATION_GRAPH = YES
+GROUP_GRAPHS = YES
+UML_LOOK = NO
+UML_LIMIT_NUM_FIELDS = 10
+TEMPLATE_RELATIONS = NO
+INCLUDE_GRAPH = YES
+INCLUDED_BY_GRAPH = YES
+CALL_GRAPH = YES
+CALLER_GRAPH = YES
+GRAPHICAL_HIERARCHY = YES
+DIRECTORY_GRAPH = YES
+DOT_IMAGE_FORMAT = png
+INTERACTIVE_SVG = NO
+DOT_PATH =
+DOTFILE_DIRS =
+MSCFILE_DIRS =
+DIAFILE_DIRS =
+PLANTUML_JAR_PATH =
+PLANTUML_INCLUDE_PATH =
+DOT_GRAPH_MAX_NODES = 50
+MAX_DOT_GRAPH_DEPTH = 0
+DOT_TRANSPARENT = NO
+DOT_MULTI_TARGETS = NO
+GENERATE_LEGEND = YES
+DOT_CLEANUP = YES
diff --git a/dev/MinGfx/doc/DoxygenLayout.xml b/dev/MinGfx/doc/DoxygenLayout.xml
new file mode 100644
index 0000000..07e6378
--- /dev/null
+++ b/dev/MinGfx/doc/DoxygenLayout.xml
@@ -0,0 +1,194 @@
+<doxygenlayout version="1.0">
+ <!-- Generated by doxygen 1.8.9.1 -->
+ <!-- Navigation index tabs for HTML output -->
+ <navindex>
+ <tab type="mainpage" visible="yes" title=""/>
+ <tab type="pages" visible="yes" title="" intro=""/>
+ <tab type="modules" visible="yes" title="" intro=""/>
+ <tab type="namespaces" visible="yes" title="">
+ <tab type="namespacelist" visible="yes" title="" intro=""/>
+ <tab type="namespacemembers" visible="yes" title="" intro=""/>
+ </tab>
+ <tab type="classes" visible="yes" title="">
+ <tab type="classlist" visible="yes" title="" intro=""/>
+ <tab type="classindex" visible="$ALPHABETICAL_INDEX" title=""/>
+ <tab type="hierarchy" visible="yes" title="" intro=""/>
+ <tab type="classmembers" visible="yes" title="" intro=""/>
+ </tab>
+ <tab type="files" visible="yes" title="">
+ <tab type="filelist" visible="yes" title="" intro=""/>
+ <tab type="globals" visible="yes" title="" intro=""/>
+ </tab>
+ <tab type="examples" visible="yes" title="" intro=""/>
+ </navindex>
+
+ <!-- Layout definition for a class page -->
+ <class>
+ <detaileddescription title=""/>
+ <briefdescription visible="no"/>
+ <includes visible="$SHOW_INCLUDE_FILES"/>
+ <inheritancegraph visible="$CLASS_GRAPH"/>
+ <collaborationgraph visible="$COLLABORATION_GRAPH"/>
+ <memberdecl>
+ <nestedclasses visible="yes" title=""/>
+ <publictypes title=""/>
+ <services title=""/>
+ <interfaces title=""/>
+ <publicslots title=""/>
+ <signals title=""/>
+ <publicmethods title=""/>
+ <publicstaticmethods title=""/>
+ <publicattributes title=""/>
+ <publicstaticattributes title=""/>
+ <protectedtypes title=""/>
+ <protectedslots title=""/>
+ <protectedmethods title=""/>
+ <protectedstaticmethods title=""/>
+ <protectedattributes title=""/>
+ <protectedstaticattributes title=""/>
+ <packagetypes title=""/>
+ <packagemethods title=""/>
+ <packagestaticmethods title=""/>
+ <packageattributes title=""/>
+ <packagestaticattributes title=""/>
+ <properties title=""/>
+ <events title=""/>
+ <privatetypes title=""/>
+ <privateslots title=""/>
+ <privatemethods title=""/>
+ <privatestaticmethods title=""/>
+ <privateattributes title=""/>
+ <privatestaticattributes title=""/>
+ <friends title=""/>
+ <related title="" subtitle=""/>
+ <membergroups visible="yes"/>
+ </memberdecl>
+ <memberdef>
+ <inlineclasses title=""/>
+ <typedefs title=""/>
+ <enums title=""/>
+ <services title=""/>
+ <interfaces title=""/>
+ <constructors title=""/>
+ <functions title=""/>
+ <related title=""/>
+ <variables title=""/>
+ <properties title=""/>
+ <events title=""/>
+ </memberdef>
+ <allmemberslink visible="yes"/>
+ <usedfiles visible="$SHOW_USED_FILES"/>
+ <authorsection visible="yes"/>
+ </class>
+
+ <!-- Layout definition for a namespace page -->
+ <namespace>
+ <briefdescription visible="no"/>
+ <detaileddescription title=""/>
+ <memberdecl>
+ <nestednamespaces visible="yes" title=""/>
+ <constantgroups visible="yes" title=""/>
+ <classes visible="yes" title=""/>
+ <typedefs title=""/>
+ <enums title=""/>
+ <functions title=""/>
+ <variables title=""/>
+ <membergroups visible="yes"/>
+ </memberdecl>
+ <memberdef>
+ <inlineclasses title=""/>
+ <typedefs title=""/>
+ <enums title=""/>
+ <functions title=""/>
+ <variables title=""/>
+ </memberdef>
+ <authorsection visible="yes"/>
+ </namespace>
+
+ <!-- Layout definition for a file page -->
+ <file>
+ <briefdescription visible="no"/>
+ <detaileddescription title=""/>
+ <includes visible="$SHOW_INCLUDE_FILES"/>
+ <includegraph visible="$INCLUDE_GRAPH"/>
+ <includedbygraph visible="$INCLUDED_BY_GRAPH"/>
+ <sourcelink visible="yes"/>
+ <memberdecl>
+ <classes visible="yes" title=""/>
+ <namespaces visible="yes" title=""/>
+ <constantgroups visible="yes" title=""/>
+ <defines title=""/>
+ <typedefs title=""/>
+ <enums title=""/>
+ <functions title=""/>
+ <variables title=""/>
+ <membergroups visible="yes"/>
+ </memberdecl>
+ <memberdef>
+ <inlineclasses title=""/>
+ <defines title=""/>
+ <typedefs title=""/>
+ <enums title=""/>
+ <functions title=""/>
+ <variables title=""/>
+ </memberdef>
+ <authorsection/>
+ </file>
+
+ <!-- Layout definition for a group page -->
+ <group>
+ <briefdescription visible="no"/>
+ <detaileddescription title=""/>
+ <groupgraph visible="$GROUP_GRAPHS"/>
+ <memberdecl>
+ <nestedgroups visible="yes" title=""/>
+ <dirs visible="yes" title=""/>
+ <files visible="yes" title=""/>
+ <namespaces visible="yes" title=""/>
+ <classes visible="yes" title=""/>
+ <defines title=""/>
+ <typedefs title=""/>
+ <enums title=""/>
+ <enumvalues title=""/>
+ <functions title=""/>
+ <variables title=""/>
+ <signals title=""/>
+ <publicslots title=""/>
+ <protectedslots title=""/>
+ <privateslots title=""/>
+ <events title=""/>
+ <properties title=""/>
+ <friends title=""/>
+ <membergroups visible="yes"/>
+ </memberdecl>
+ <memberdef>
+ <pagedocs/>
+ <inlineclasses title=""/>
+ <defines title=""/>
+ <typedefs title=""/>
+ <enums title=""/>
+ <enumvalues title=""/>
+ <functions title=""/>
+ <variables title=""/>
+ <signals title=""/>
+ <publicslots title=""/>
+ <protectedslots title=""/>
+ <privateslots title=""/>
+ <events title=""/>
+ <properties title=""/>
+ <friends title=""/>
+ </memberdef>
+ <authorsection visible="yes"/>
+ </group>
+
+ <!-- Layout definition for a directory page -->
+ <directory>
+ <briefdescription visible="no"/>
+ <detaileddescription title=""/>
+ <directorygraph visible="yes"/>
+ <memberdecl>
+ <dirs visible="yes"/>
+ <files visible="yes"/>
+ </memberdecl>
+ </directory>
+</doxygenlayout>
diff --git a/dev/MinGfx/doc/api.md b/dev/MinGfx/doc/api.md
new file mode 100644
index 0000000..58c78eb
--- /dev/null
+++ b/dev/MinGfx/doc/api.md
@@ -0,0 +1,64 @@
+API - MinGfx Programming Reference Organized by Topic {#api}
+==========
+
+# API by Topic
+
+| Application Class |
+|-------------------|
+| [GraphicsApp](@ref mingfx::GraphicsApp) |
+
+
+| 3D Models |
+|-----------|
+| [QuickShapes](@ref mingfx::QuickShapes) |
+| [Mesh](@ref mingfx::Mesh) |
+
+
+| Color and Textures |
+|--------------------|
+| [Color](@ref mingfx::Color) |
+| [Texture2D](@ref mingfx::Texture2D) |
+
+
+| Graphics Math |
+|---------------|
+| [Matrix4](@ref mingfx::Matrix4) |
+| [Point2](@ref mingfx::Point2) |
+| [Point3](@ref mingfx::Point3) |
+| [Vector2](@ref mingfx::Vector2) |
+| [Vector3](@ref mingfx::Vector3) |
+| [Ray](@ref mingfx::Ray) |
+| [Quaternion](@ref mingfx::Quaternion) |
+| [GfxMath](@ref mingfx::GfxMath) |
+
+
+| Shader Programs |
+|-----------------|
+| [DefaultShader](@ref mingfx::DefaultShader) |
+| - [DefaultShader::LightProperties](@ref mingfx::DefaultShader::LightProperties) |
+| - [DefaultShader::MaterialProperties](@ref mingfx::DefaultShader::MaterialProperties) |
+| [ShaderProgram](@ref mingfx::ShaderProgram) |
+
+
+| User Interface |
+|----------------|
+| [CraftCam](@ref mingfx::CraftCam) |
+| [UniCam](@ref mingfx::UniCam) |
+
+
+| File I/O and System Routines |
+|------------------------------|
+| [Platform](@ref mingfx::Platform) |
+
+
+
+
+# Coding Style
+
+The library follows the [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html), in part as an example for students, since this style is also used in several courses. There are several things that programmers who are not familiar with the Google style might find unusual. These are the most common style rules to note:
+- C++ source filenames are all lowercase with underscores, and a .cc extension is used instead of .cpp.
+- Variable names are all lowercase with underscores.
+- Class member variables are named the same as regular variables but with a trailing _, as in my\_member\_var\_.
+- Functions start with capital letters unless they are small getter or setter methods.
+- There are many other rules, a solid discussion of pros/cons, and an automated style checker [here](https://google.github.io/styleguide/cppguide.html).
+
diff --git a/dev/MinGfx/doc/customdoxygen.css b/dev/MinGfx/doc/customdoxygen.css
new file mode 100644
index 0000000..e1c976b
--- /dev/null
+++ b/dev/MinGfx/doc/customdoxygen.css
@@ -0,0 +1,524 @@
+body, table, div, p, dl {
+ font: 400 14px/22px "Helvetica", "Arial", sans-serif;
+ text-decoration: none;
+ font-weight: normal;
+}
+
+tr {
+ background-image: none;
+ background-color: #FFFFFF;
+}
+
+h1.groupheader {
+ font-size: 100%;
+ text-decoration: none;
+ font-weight: normal;
+}
+
+#titlearea
+{
+ padding: 10px;
+ margin: 0px;
+ width: 100%;
+ border-top: 5px solid black;
+ border-bottom: 5px solid black;
+}
+
+
+div.header
+{
+ background-image: none;
+ background-color: #FFFFFF;
+ margin: 0px;
+ border-bottom: none;
+}
+
+div.headertitle
+{
+ padding: 5px 5px 5px 10px;
+}
+
+
+
+.title {
+ font: 400 14px/28px "Helvetica", "Arial", sans-serif;
+ font-size: 150%;
+ font-weight: normal;
+ margin: 10px 2px;
+ background-image: none;
+ background-color: white;
+ text-transform:uppercase;
+}
+
+
+h2.groupheader {
+ border-bottom: 1px solid black;
+ color: black;
+ font-size: 110%;
+ font-weight: normal;
+ text-transform:uppercase;
+ margin-top: 1.75em;
+ padding-top: 8px;
+ padding-bottom: 4px;
+ width: 100%;
+}
+
+h3.groupheader {
+ font-size: 100%;
+}
+
+h1 {
+ font-size: 150%;
+ background-color: rgb(26, 93, 117);
+ color: white;
+ padding: 4px;
+ margin-top: 60px;
+ margin-bottom: 0px;
+}
+
+h2 {
+ font-size: 125%;
+ text-transform:uppercase;
+ margin-top: 50px;
+}
+
+h3 {
+ font-size: 110%;
+ margin-top: 40px;
+}
+
+h4 {
+ font-size: 100%;
+}
+
+h5 {
+ font-size: 100%;
+}
+
+h6 {
+ font-size: 100%;
+}
+
+
+
+h1, h2, h3, h4, h5, h6 {
+ font-weight: normal;
+ -webkit-transition: text-shadow 0.5s linear;
+ -moz-transition: text-shadow 0.5s linear;
+ -ms-transition: text-shadow 0.5s linear;
+ -o-transition: text-shadow 0.5s linear;
+ transition: text-shadow 0.5s linear;
+ margin-right: 15px;
+}
+
+h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
+ text-shadow: none;
+}
+
+dt {
+ padding-top: 20px;
+ font-weight: normal;
+ text-decoration: underline;
+}
+
+
+
+
+.tabs, .tabs2, .tabs3 {
+ text-transform:uppercase;
+ font-weight:normal;
+ color:rgb(190,190,190);
+ background-image: none;
+ background-color: black;
+ width: 100%;
+ z-index: 101;
+ font-size: 14px;
+ font-family: "Helvetica", "Arial", sans-serif;
+ text-shadow: none;
+}
+
+.tabs2 {
+ color: white;
+ border-top:1px solid rgb(150,150,150);
+ font-size: 10px;
+ text-shadow: none;
+}
+.tabs3 {
+ color: white;
+ font-size: 9px;
+ text-shadow: none;
+}
+
+.tablist {
+ margin: 0;
+ padding: 0;
+ display: table;
+ background-color: black;
+ font-weight: normal;
+ text-shadow: none;
+}
+
+.tablist li {
+ float: left;
+ display: table-cell;
+ background-image: none;
+ line-height: 30px;
+ list-style: none;
+ font-weight: normal;
+ text-shadow: none;
+}
+
+.tablist a {
+ display: block;
+ padding: 0 30px;
+ font-weight: normal;
+ background-image: none;
+ color:rgb(150,150,150);
+ text-decoration: none;
+ outline: none;
+ text-shadow: none;
+}
+
+.tabs3 .tablist a {
+ padding: 0 10px;
+ text-shadow: none;
+}
+
+.tablist a:hover {
+ background-image: none;
+ background-repeat:repeat-x;
+ color:white;
+ text-decoration: none;
+ font-weight: normal;
+ text-shadow: none;
+ text-decoration: underline;
+}
+
+.tablist li.current a {
+ background-image: none;
+ color: rgb(42, 153, 193);
+ text-shadow: none;
+}
+
+
+.navpath li
+{
+ list-style-type:none;
+ float:left;
+ padding-left:10px;
+ padding-right:15px;
+ background-image:url('bc_s.png');
+ background-repeat:no-repeat;
+ background-position:right;
+ color:white;
+ font-size: 12px;
+}
+
+.navpath li.navelem a
+{
+ height:32px;
+ display:block;
+ text-decoration: none;
+ outline: none;
+ color: white;
+ font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ text-decoration: none;
+}
+
+.navpath li.navelem a:hover
+{
+ color:white;
+}
+
+
+
+div.qindex, div.navpath {
+ width: 100%;
+ line-height: 100%;
+ border-top:1px solid rgb(150,150,150);
+ background-color: black;
+}
+
+.navpath ul {
+ font-size: 11px;
+ background-image: none;
+ height: 20px;
+ line-height: 20px;
+ color: rgb(150,150,150);
+ border: none;
+ overflow: hidden;
+ margin: 0px;
+ padding: 0px;
+}
+
+.navpath li {
+ padding-left:30px;
+}
+
+.navpath li.navelem a {
+ height: 20px;
+ display: block;
+ text-decoration: none;
+ outline: none;
+ color: rgb(150,150,150);
+ font-family: "Helvetica", "Arial", sans-serif;
+ text-shadow: none;
+ text-decoration: none;
+}
+
+.navpath li.navelem a:hover {
+ background-image: none;
+ background-repeat:repeat-x;
+ color: white;
+ text-decoration: none;
+ font-weight: normal;
+ text-shadow: none;
+ text-decoration: underline;
+}
+
+a.el {
+ font-weight: normal;
+ color: rgb(42, 153, 193);
+}
+
+hr {
+ height: 0px;
+ border: none;
+ border-top: 1px solid black;
+}
+
+hr.footer {
+ border-top: 0px;
+}
+
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+ background-color: white;
+ border: none;
+ margin: 0px;
+ padding: 0 0 0 0;
+}
+
+.memItemLeft, .memItemRight {
+ padding-top: 8px;
+}
+
+
+
+.memSeparator {
+ border-bottom: 1px solid #EEEEEE;
+ line-height: 1px;
+ padding: 8px 0 0 0;
+}
+
+
+
+
+pre.fragment {
+ border: none;
+ border-left: 3px solid rgb(42, 153, 193);
+ background-color: white;
+ padding: 4px 6px;
+ margin: 4px 2px 4px 30px;
+ overflow: auto;
+ word-wrap: break-word;
+ font-size: 9pt;
+ line-height: 125%;
+ font-family: monospace, fixed;
+ font-size: 100%;
+}
+
+div.fragment {
+ border: none;
+ border-left: 3px solid rgb(42, 153, 193);
+ background-color: white;
+ padding: 4px 6px;
+ margin: 4px 2px 4px 30px;
+ overflow: auto;
+ word-wrap: break-word;
+ font-size: 9pt;
+ line-height: 125%;
+ font-family: monospace, fixed;
+ font-size: 100%;
+}
+
+div.line {
+ font-family: monospace, fixed;
+ font-size: 100%;
+ min-height: 13px;
+ line-height: 1.0;
+ text-wrap: unrestricted;
+ white-space: -moz-pre-wrap; /* Moz */
+ white-space: -pre-wrap; /* Opera 4-6 */
+ white-space: -o-pre-wrap; /* Opera 7 */
+ white-space: pre-wrap; /* CSS3 */
+ word-wrap: break-word; /* IE 5.5+ */
+ text-indent: -53px;
+ padding-left: 53px;
+ padding-bottom: 0px;
+ margin: 0px;
+ -webkit-transition-property: background-color, box-shadow;
+ -webkit-transition-duration: 0.5s;
+ -moz-transition-property: background-color, box-shadow;
+ -moz-transition-duration: 0.5s;
+ -ms-transition-property: background-color, box-shadow;
+ -ms-transition-duration: 0.5s;
+ -o-transition-property: background-color, box-shadow;
+ -o-transition-duration: 0.5s;
+ transition-property: background-color, box-shadow;
+ transition-duration: 0.5s;
+}
+
+span.comment {
+ color: #800000;
+}
+
+/* @group Code Colorization */
+
+span.keyword {
+ color: #008000
+}
+
+span.keywordtype {
+ color: #604020
+}
+
+span.keywordflow {
+ color: #e08000
+}
+
+span.comment {
+ color: #068000
+}
+
+span.preprocessor {
+ color: #806020
+}
+
+span.stringliteral {
+ color: #002080
+}
+
+span.charliteral {
+ color: #008080
+}
+
+
+.memtemplate {
+ font-size: 80%;
+ color: #4665A2;
+ font-weight: normal;
+ margin-left: 9px;
+}
+
+.memnav {
+ background-color: white;
+ border: none;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+
+.memname {
+ font-weight: bold;
+ margin-left: 6px;
+}
+
+.memproto, dl.reflist dt {
+ border-top: 1px solid #EEEEEE;
+ border-left: 1px solid #EEEEEE;
+ border-right: 1px solid #EEEEEE;
+ padding: 6px 0px 6px 0px;
+ color: #253555;
+ font-weight: normal;
+ text-shadow: none;
+ background-image: none;
+ background-repeat:repeat-x;
+ background-color: white;
+ /* opera specific markup */
+ box-shadow: none;
+ /* firefox specific markup */
+ -moz-box-shadow: none;
+ /* webkit specific markup */
+ -webkit-box-shadow: none;
+}
+
+.memdoc, dl.reflist dd {
+ border-bottom: 1px solid #EEEEEE;
+ border-left: 1px solid #EEEEEE;
+ border-right: 1px solid #EEEEEE;
+ padding: 6px 10px 2px 10px;
+ background-color: white;
+ border-top-width: 0;
+ background-image: none;
+ background-repeat:repeat-x;
+ /* opera specific markup */
+ box-shadow: none;
+ /* firefox specific markup */
+ -moz-box-shadow: none;
+ /* webkit specific markup */
+ -webkit-box-shadow: none;
+}
+
+.paramname {
+ color: #148caf;
+ white-space: nowrap;
+}
+
+
+a {
+ color: rgb(42, 153, 193);
+ font-weight: normal;
+ text-decoration: none;
+}
+
+.contents a:visited {
+ color: rgb(42, 153, 193);
+}
+
+
+span.lineno {
+ width: 0px;
+ padding-right: 4px;
+ text-align: right;
+ border-right: 0px;
+ background-color: #E8E8E8;
+ white-space: pre;
+}
+
+#MSearchBox {
+ margin-top: 2px;
+}
+
+
+table.doxtable {
+ border-collapse:collapse;
+ margin-top: 4px;
+ margin-bottom: 4px;
+ width: 33%;
+}
+
+table.doxtable td, table.doxtable th {
+ border: 0px solid #373737;
+ padding: 3px 7px 2px;
+ font-size: 110%;
+}
+
+table.doxtable th {
+ background-color: white;
+ color: black;
+ font-size: 110%;
+ padding-bottom: 4px;
+ padding-top: 5px;
+ font-weight: normal;
+ text-transform: uppercase;
+ text-align: left;
+}
+
+p code {
+ background-color: #E8E8E8;
+}
diff --git a/dev/MinGfx/doc/footer.html b/dev/MinGfx/doc/footer.html
new file mode 100644
index 0000000..3e7e4f4
--- /dev/null
+++ b/dev/MinGfx/doc/footer.html
@@ -0,0 +1,21 @@
+<!-- HTML footer for doxygen 1.8.9.1-->
+<!-- start footer part -->
+<!--BEGIN GENERATE_TREEVIEW-->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ $navpath
+ <li class="footer">$generatedby
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="$relpath^doxygen.png" alt="doxygen"/></a> $doxygenversion </li>
+ </ul>
+</div>
+<!--END GENERATE_TREEVIEW-->
+<!--BEGIN !GENERATE_TREEVIEW-->
+<hr class="footer"/><address class="footer"><small>
+$generatedby &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="$relpath^doxygen.png" alt="doxygen"/>
+</a> $doxygenversion
+</small></address>
+<!--END !GENERATE_TREEVIEW-->
+</body>
+</html>
diff --git a/dev/MinGfx/doc/header.html b/dev/MinGfx/doc/header.html
new file mode 100644
index 0000000..7160b77
--- /dev/null
+++ b/dev/MinGfx/doc/header.html
@@ -0,0 +1,55 @@
+<!-- HTML header for doxygen 1.8.9.1-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen $doxygenversion"/>
+<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
+<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
+<link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="$relpath^jquery.js"></script>
+<script type="text/javascript" src="$relpath^dynsections.js"></script>
+$treeview
+$search
+$mathjax
+<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
+$extrastylesheet
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+
+<!--BEGIN TITLEAREA-->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <!--BEGIN PROJECT_LOGO-->
+ <td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"/></td>
+ <!--END PROJECT_LOGO-->
+ <!--BEGIN PROJECT_NAME-->
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">$projectname
+ <!--BEGIN PROJECT_NUMBER-->&#160;<span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER-->
+ </div>
+ <!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF-->
+ </td>
+ <!--END PROJECT_NAME-->
+ <!--BEGIN !PROJECT_NAME-->
+ <!--BEGIN PROJECT_BRIEF-->
+ <td style="padding-left: 0.5em;">
+ <div id="projectbrief">$projectbrief</div>
+ </td>
+ <!--END PROJECT_BRIEF-->
+ <!--END !PROJECT_NAME-->
+ <!--BEGIN DISABLE_INDEX-->
+ <!--BEGIN SEARCHENGINE-->
+ <td>$searchbox</td>
+ <!--END SEARCHENGINE-->
+ <!--END DISABLE_INDEX-->
+ </tr>
+ </tbody>
+</table>
+</div>
+<!--END TITLEAREA-->
+<!-- end header part -->
diff --git a/dev/MinGfx/doc/index.html b/dev/MinGfx/doc/index.html
new file mode 100644
index 0000000..7252082
--- /dev/null
+++ b/dev/MinGfx/doc/index.html
@@ -0,0 +1,2 @@
+<!-- redirect to load the index.html file generated by doxygen at html/index.html -->
+<meta http-equiv="REFRESH" content="0;URL=html/index.html">
diff --git a/dev/MinGfx/doc/installation.md b/dev/MinGfx/doc/installation.md
new file mode 100644
index 0000000..e1c67a5
--- /dev/null
+++ b/dev/MinGfx/doc/installation.md
@@ -0,0 +1,200 @@
+Installation Guide {#installation}
+==========
+
+# Prereqs {#install-prereqs}
+
+MinGfx is built using the cross-platform CMake tool. Before building MinGfx, you will need to install CMake version 3.9 or higher (https://cmake.org/). On Mac, you will need to have Xcode installed as well as the [optional Xcode command line tools](https://www.embarcadero.com/starthere/xe5/mobdevsetup/ios/en/installing_the_commandline_tools.html).
+
+If you haven't already, you'll want to clone the MinGfx source code using git, so make sure you have git installed as well.
+
+
+# Background for CMake Beginners {#cmake-background}
+
+If you are new to CMake, this is the minimum background you should have before building MinGfx.
+
+CMake is a cross-platform tool for generating native Unix Makefiles and project workspaces (e.g., Xcode projects, Visual Studio solutions) for building projects. Projects use CMakeLists.txt files to describe how they should be built. These files provide input for the cmake application, which uses them to generate project files for a variety of development environments. CMake can generate Makefiles for building MinGfx on linux systems or project files for building MinGfx with popular IDEs (e.g., XCode, Visual Studio, Eclipse, CodeBLocks).
+
+There are three versions of the cmake application that are provided with the install from Kitware. You can use any of these with MinGfx:
+1. *cmake* is the command line version where all build options must be specified on the command line.
+2. *ccmake* is a visual interface that runs in a terminal. This is nice because all of the available build options are listed for you to see at once, and you can simply press the SPACEBAR to turn them on/off or type in specific values. The downside for ccmake is that it does not have a separate log window, so status messages flash by so fast that you cannot read them, and input from spin-off cmake processes (like those used in the MinGfx configure step) are not captured correctly. It's possible to still use ccmake with MinGfx, but we do not recommend it.
+3. *cmake-gui* is an OS-specific windowed version. Like ccmake, the GUI provides a useful list all of the available build options. Unlike ccmake, it also includes a nice scrollable log of all of the status messages. So, this is the preferred version for new users and for the first time you build a project.
+
+With CMake, it's best to do an out-of-source build. That means that when you start CMake you must tell it two paths: 1. the path to the MinGfx source tree, AND 2. the path to the place where you would like all the built files to be created. When running cmake-gui, these can be set interactively with a file selection dialog, but all three versions respond to command line options, and this is generally the easiest way to start up cmake. So, we suggest starting *cmake-gui* from the command line. First cd to the directory you wish to use for the built files, then pass a single required command line argument for the path to the MinGfx source tree. Usually, you will see this written as a series of 3 steps -- the common idiom for cmake builds:
+~~~
+// from within the root of the project's source directory
+mkdir build
+cd build
+cmake-gui ..
+~~~
+
+If you are using *cmake* you can pass a variety of other options to CMake on the command line with flags such as -D AUTOBUILD_NANOGUI=ON, to tell MinGfx to autobuild the nanogui library that it depends upon. With *cmake*, you can end up with a long string of arguments in order to setup the build you want. With *cmake-gui*, you set all of these build options within the user interface instead, and this is how we will proceed in the instructions that follow.
+
+
+# Setup a New Graphics Build Tree {#build-tree}
+
+Here's a complete annotated list of steps to setup a new build tree for creating graphics programs. In truth, you don't need to create this entire build tree strucutre just to work with MinGfx, but this is good practice, and a good guide for students.
+
+
+## 1. Create a Linux-Style Directory Tree
+
+Libraries will get installed to a lib/ directory. Include files will go in include/, executables in bin/, and we'll put the source we are developing inside dev/.
+
+~~~
+mkdir -p /Users/keefe/courses/csci4611/sw
+cd /Users/courses/csci4611/sw
+mkdir lib
+mkdir include
+mkdir bin
+mkdir dev
+~~~
+
+IMPORTANT: On Windows, you will need to add the `bin` directory you just created to your PATH environment variable. If you have not done this before, you will find many instructions online. Here is one good description of [how to add a directory to the PATH environment variable on Windows](https://www.java.com/en/download/help/path.xml).
+
+
+
+## 2. Download the MinGfx Project
+To download use:
+~~~
+cd dev
+git clone http://github.com/ivlab/MinGfx
+~~~
+
+
+## 3. Create an Initial CMake Build Configuration
+
+~~~
+cd MinGfx
+mkdir build
+cd build
+cmake-gui ..
+~~~
+
+Press the 'Configure' button. Then, select the Generator you would like to use from the list provided (e.g., Xcode, Visual Studio, Unix Makefiles). Click Done.
+
+Wait for CMake to do an initial configuration. This will populate an initial list of CMake and MinGfx build options. Each time you run configure, *cmake-gui* will display any new configuration options highlighted in *red*. So, do not be alarmed when the whole options window turns red during this first configure operation -- that is normal behavior since at this point, all of the options are new.
+
+Do you see an error in the CMake output window? If so, don't worry about this yet, we'll come back to it in a minute.
+
+
+## 4. Set the CMAKE_INSTALL_PREFIX Variable to the Root of Your Directory Tree
+
+Now, using cmake-gui, scroll through the table of variables until you find the one named CMAKE_INSTALL_PREFIX. Click on it and edit its value to point to the root of the directory tree you created in Step 1. The root for the example tree used in Step 1 would be /Users/keefe/courses/csci4611/sw. In other words, the root is the last directory before you get to lib, include, bin, and dev.
+
+Once you make this change, you can press the Configure button again. It doesn't hurt to press Configure multiple times. You need to do it at least once after every change you make. Notice how the variables highlighted in red go away when you do this because they are no longer new options -- cmake knows that you have already had a chance to see them once.
+
+
+## 5. If Needed, Set AUTOBUILD_NANOGUI to ON and Build Dependencies
+
+Now, take a look at the output window at the bottom of cmake-gui. If you see the following error there, then we'll address that next. If not, then nanogui must already be installed on your system, and you can skip to step 6.
+~~~
+Searching for NanoGUI library...
+Could NOT find NANOGUI (missing: NANOGUI_LIBRARIES)
+CMake Error at cmake/UseNanoGUI.cmake:96 (message):
+The NanoGUI library was not found on the system. You can: (1) install
+NanoGUI yourself, (2) point cmake to an already-installed version of
+NanoGUI by adding the installation prefix of NanoGUI to the
+CMAKE_PREFIX_PATH environment variable, or (3) set AUTOBUILD_NANOGUI to ON
+and run cmake configure again. AUTOBUILD_NANOGUI will: 1. download
+NanoGUI, 2. build NanoGUI, and 3. install NanoGUI to the
+CMAKE_INSTALL_PREFIX (currently set to
+/Users/keefe/courses/tmp/MinGfx/build/install). If you want to use the
+AUTOBUILD feature, adjust CMAKE_INSTALL_PREFIX as desired now, set
+AUTOBUILD_NANOGUI to ON, and then run cmake configure again.
+Call Stack (most recent call first):
+src/CMakeLists.txt:80 (UseNanoGUI)
+CMakeLists.txt:186 (include)
+~~~
+This error tells us that cmake could not find the nanogui library pre-installed on our system. Luckily, MinGfx includes support for downloading, building, and installing nanogui for you using the AUTOBUILD_NANOGUI feature.
+
+Scroll through the list of CMake variables again until you find AUTOBUILD_NANOGUI and click on the checkbox next to it to turn it on. Now, click Configure again. This time the configure step will take a while, perhaps 5 minutes, to run because it will be downloading, building, and installing nanogui and all of its dependencies.
+
+This step should finish without an error. If you do see an error and you are working with this as part of a UMN course, you may need to stop now and ask for help from a TA or on the class forum -- perhaps there is something we haven't planned for in the particular setup of your computer.
+
+
+## 6. Generate the Build System / Project Files
+
+Finally, you are ready to press the Generate button. This is the step that will actually generate the Unix Makefiles, Visual Studio Solution File, or Xcode Project File needed to build MinGfx.
+
+
+## 7. Build MinGfx with the Specified Options
+
+Click Open Project if you generated project files for an IDE, or if you generated Unix Makefiles return to your shell and the build directory. Now, build the project as you normally would in these enviornments.
+
+For Xcode: `click the Triangle button to build the ALL_BUILD target`
+
+For Visual Studio: In the Solution Explorer Window `right click on ALL_BUILD` and select `Build`
+
+For Unix Makefiles: run `make all`.
+
+
+## 8. Install the Library to your Directory Tree
+
+For Xcode: `click on ALL_BUILD to reveal a dropdown list and select install` then `click the Triangle button`
+
+For Visual Studio: In the Solution Explorer Window `right click on INSTALL` and select `Build`.
+
+For Unix Makefiles: run `make install`.
+
+To see if it worked take a look in the lib, include, and bin directories within the root of the tree you setup in Step 1. You should see the test programs inside bin/ and folders for MinVR-1.0 inside lib/ and include/.
+
+
+## 9. Run a Test Program
+
+For Xcode: `click on ALL_BUILD to reveal a dropdown list and select mingfx-test-gui-plus-opengl` then `click the Triangle button`
+
+For Visual Studio: In the Solution Explorer Window `right click on mingfx-test-gui-plus-opengl` then selece `Set as StartUp Project`. Now, `click the green triangle button to run the program`. IMPORTANT NOTE: When the program runs it will need to find some .dlls that were installed to your `bin` directory in Step 8. So, the bin directory *must be in your windows PATH*. If you skipped this part of Step 1, go back and add `bin` to your PATH environment variable now. Then, you may need to restart Visual Studio for it to recognize the new setting.
+
+For Unix Makefiles: from within the build directory run: `tests/mingfx-gui-plus-opengl`
+
+
+
+
+# Create Your Own Graphics Program {#example}
+
+*Prereq:* Before getting started, make sure you have installed MinGfx, going all the way through the 9th step above.
+
+The project in the MinGfx/example folder is an example of a stand-alone project that uses a separate cmake build system. This means we can copy it and move it out of the MinGfx source tree to serve as a starting point for your own project. Let's do that now.
+
+~~~
+cd /Users/courses/csci4611/sw/dev (or wherever you put your dev directory)
+cp -r MinGfx/example/ mingfx-example
+~~~
+
+Now, before we build the example, we need to make sure it knows where to find MinGfx.
+~~~
+cd mingfx-example
+open up the CMakeLists.txt file in your favorite text editor
+~~~
+
+Near the top of the file, find the following lines
+~~~
+# !!!!!!!!!!!!! EDIT THE FOLLOWING LINE AS NEEDED !!!!!!!!!!!!!
+list(APPEND CMAKE_PREFIX_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../build/install ../../..)
+~~~
+and add a path to the end of the list to point to the ROOT of your directory tree, for example:
+~~~
+# !!!!!!!!!!!!! EDIT THE FOLLOWING LINE AS NEEDED !!!!!!!!!!!!!
+list(APPEND CMAKE_PREFIX_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../build/install ../../.. /Users/keefe/courses/cs4611/sw)
+~~~
+
+Now, we're ready to build this example using the same cmake idiom as before:
+~~~
+mkdir build
+cd build
+cmake-gui ..
+~~~
+Then, click *Configure*. If you want to install this example program, you may now edit the CMAKE_INSTALL_PREFIX as before and rerun *Configure*. It should not be necessary to change any of the other cmake variables for this example program.
+
+Next, click *Generate* to produce project files for your IDE or makefiles.
+
+Next, build the example program within your IDE or by running `make`.
+
+Finally, you can run your first example graphics program with the command:
+~~~
+./mingfx-example
+~~~
+
+You can change the name of the executable, add more header and source files to the project and make other changes to the build process by editing the CMakeLists.txt file, but remember that after each change, you must run CMake's *Configure* and *Generate* steps again.
+
+To reiterate the point above, if you are using an IDE, it is important to remember to add new files to your project by editing the CMakeLists.txt file NOT by using File->Add To Project.. or whatever option is provided inside your IDE. Since we using CMake to generate the IDE's project files, and we may want to switch to a different IDE or to Makefiles in the future, the CMakeLists.txt file needs to be treated as the master record of all of the build settings.
+
diff --git a/dev/MinGfx/doc/mainpage.md b/dev/MinGfx/doc/mainpage.md
new file mode 100644
index 0000000..db77de5
--- /dev/null
+++ b/dev/MinGfx/doc/mainpage.md
@@ -0,0 +1,27 @@
+MinGfx Toolkit Documentation {#mainpage}
+==========
+
+## Getting Started
+1. [libMinGfx Installation Guide](@ref installation)
+2. [Create Your Own Graphics Program by Copying an Example](@ref example)
+3. [Bookmark the API - The MinGfx Programming Reference Organized by Topic](@ref api)
+
+## Programming Guide
+* [MinGfx Programming Reference](@ref api)
+* Adding NanoGUI Elements (buttons, sliders, other GUI widgets)
+ - [NanoGUI Documentation](https://nanogui.readthedocs.io/en/latest/)
+ - [NanoGUI GitHub Repo](https://github.com/wjakob/nanogui)
+* Drawing Using NanoVG (for 2D vector graphics)
+ - [NanoVG Documentation](https://github.com/memononen/NanoVG)
+ - [nanovg.h -- the best place to see all the possible commands](https://github.com/memononen/nanovg/blob/master/src/nanovg.h)
+* Drawing Using OpenGL (for 3D graphics)
+ - [learnopengl.com](https://learnopengl.com/Introduction)
+ - [Google for OpenGL 3.3 Guide](https://www.google.com/search?q=opengl+3.3+guide)
+
+
+## Overview
+
+The MinGfx Toolkit is a minimal library for writing cross-platform (Windows, OSX, linux) graphics programs with modern OpenGL 3.3+ support. Application programmers should subclass from MinGfx::GraphicsApp, which provides callbacks for several styles of rendering and user interfaces. On-screen graphical user interfaces can be created with built-in support for NanoGUI. 2D vector graphics rendering is supported by linking with NanoVG. 3D graphics rendering is supported via MinGfx::Mesh, MinGfx::Shader, MinGfx::Texture2D, and related classes. Additionally, application programmers can do whatever custom 2D or 3D rendering is needed with direct calls to OpenGL.
+
+The library is maintained by Prof. Daniel Keefe (dfk@umn.edu) and is used for instructional purposes in UMN computer science courses (CSci-4611, CSci-3081W, ...) as well as some research projects. See LICENSE.txt for additional details.
+