aboutsummaryrefslogtreecommitdiffstats
path: root/dev/MinGfx/docs/html/classmingfx_1_1_graphics_app.html
diff options
context:
space:
mode:
authorunknown <paulx161@umn.edu>2021-02-03 14:22:28 -0600
committerunknown <paulx161@umn.edu>2021-02-03 14:22:28 -0600
commit9b83919815f6a6ce5d73da1c28483970d0ca5589 (patch)
tree4558864445dccc1605e5315e0bb11c46d2018da1 /dev/MinGfx/docs/html/classmingfx_1_1_graphics_app.html
parentAdded worksheet and support code for assignment 2 (diff)
downloadcsci4611-9b83919815f6a6ce5d73da1c28483970d0ca5589.tar
csci4611-9b83919815f6a6ce5d73da1c28483970d0ca5589.tar.gz
csci4611-9b83919815f6a6ce5d73da1c28483970d0ca5589.tar.bz2
csci4611-9b83919815f6a6ce5d73da1c28483970d0ca5589.tar.lz
csci4611-9b83919815f6a6ce5d73da1c28483970d0ca5589.tar.xz
csci4611-9b83919815f6a6ce5d73da1c28483970d0ca5589.tar.zst
csci4611-9b83919815f6a6ce5d73da1c28483970d0ca5589.zip
added dev/MinGfx/
Diffstat (limited to 'dev/MinGfx/docs/html/classmingfx_1_1_graphics_app.html')
-rw-r--r--dev/MinGfx/docs/html/classmingfx_1_1_graphics_app.html1837
1 files changed, 1837 insertions, 0 deletions
diff --git a/dev/MinGfx/docs/html/classmingfx_1_1_graphics_app.html b/dev/MinGfx/docs/html/classmingfx_1_1_graphics_app.html
new file mode 100644
index 0000000..15fe349
--- /dev/null
+++ b/dev/MinGfx/docs/html/classmingfx_1_1_graphics_app.html
@@ -0,0 +1,1837 @@
+<!-- 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 1.9.1"/>
+<title>MinGfx Toolkit: mingfx::GraphicsApp Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/x-mathjax-config">
+ MathJax.Hub.Config({
+ extensions: ["tex2jax.js"],
+ jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="customdoxygen.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">MinGfx Toolkit
+ &#160;<span id="projectnumber">1.0</span>
+ </div>
+ <div id="projectbrief">A minimal library for writing cross-platform (Windows, OSX, linux) graphics programs.</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="namespacemingfx.html">mingfx</a></li><li class="navelem"><a class="el" href="classmingfx_1_1_graphics_app.html">GraphicsApp</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="classmingfx_1_1_graphics_app-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">mingfx::GraphicsApp Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>This is the main application base class for the MinGfx Toolkit. </p>
+<p><br />
+</p>
+<p><em>Create a Subclass:</em></p>
+<p>To create your own graphics application, you should create a subclass of <a class="el" href="classmingfx_1_1_graphics_app.html" title="This is the main application base class for the MinGfx Toolkit.">GraphicsApp</a> and then override some key functions:</p>
+<ol type="1">
+<li>User Input: To get input from the keyboard and mouse, override <a class="el" href="classmingfx_1_1_graphics_app.html#a23a780feda9b52eea7319a53b204ce8f" title="If the mouse has moved in the past frame and no mouse buttons are currently pressed,...">OnMouseMove()</a> and/or the other On...() functions.</li>
+<li>Drawing Graphics: To draw graphics override one or more of the Draw*() functions.<ul>
+<li><a class="el" href="classmingfx_1_1_graphics_app.html#a688f12675da58210e8ec2ffcda4923d0" title="Override this to draw graphics using the nanovg vector graphics library, which provides an easy way t...">DrawUsingNanoVG()</a> is the right place to make 2D drawing calls using the nanovg library.</li>
+<li><a class="el" href="classmingfx_1_1_graphics_app.html#a5a858fd10651f7617491f37b49dbf8ca" title="Override this to draw graphics using raw OpenGL 2D or 3D graphics calls.">DrawUsingOpenGL()</a> is the right place to make 2D or 3D drawing calls using OpenGL. This includes drawing using the <a class="el" href="classmingfx_1_1_mesh.html" title="A triangle mesh data structure that can be rendered with a ShaderProgram like DefaultShader.">Mesh</a>, <a class="el" href="classmingfx_1_1_quick_shapes.html" title="This class provides a quick way to draw shapes for use in debugging or simple scenes.">QuickShapes</a>, <a class="el" href="classmingfx_1_1_default_shader.html" title="A simple GLSL shader for textured per-fragment Phong shading with multiple light sources.">DefaultShader</a>, <a class="el" href="classmingfx_1_1_shader_program.html" title="A wrapper around GLSL shader programs.">ShaderProgram</a>, and all other MinGfx classes since these are all based on OpenGL.</li>
+<li><a class="el" href="classmingfx_1_1_graphics_app.html#adfe77d841f43961b299ea6159477968a" title="Called at the beginning of the Run() method.">InitNanoGUI()</a> is the right place to create nanogui windows to add a 2D user interface to your app.</li>
+<li><a class="el" href="classmingfx_1_1_graphics_app.html#a96196b37f8b488b64072ec74b5d2b0b3" title="Override this to initialize the OpenGL context with textures, vertex buffers, etc.">InitOpenGL()</a> is the right place to load textures, meshes, shaders, and other graphics objects that can only be created after the OpenGL context exists.</li>
+</ul>
+</li>
+<li>Physics, Animation, AI, etc.: Override the <a class="el" href="classmingfx_1_1_graphics_app.html#a9e2b4cd7eeabe1ace9d5e9220349fbaa" title="Called once per frame.">UpdateSimulation()</a> function to do other non-graphics calculations required by your program. This is called automatically once per frame.</li>
+</ol>
+<p>Keep in mind that internally the app uses a rendering loop that looks something like this: </p><div class="fragment"><div class="line"><a class="code" href="classmingfx_1_1_graphics_app.html#adfe77d841f43961b299ea6159477968a">InitNanoGUI</a>(); <span class="comment">// your hook for initializing NanoGUI widgets</span></div>
+<div class="line"><a class="code" href="classmingfx_1_1_graphics_app.html#a96196b37f8b488b64072ec74b5d2b0b3">InitOpenGL</a>(); <span class="comment">// your hook for initializing OpenGL graphics</span></div>
+<div class="line"><span class="keywordflow">while</span> (!program_ready_to_close) {</div>
+<div class="line"> <span class="comment">// user input</span></div>
+<div class="line"> internal_get_input_events_from_operating_system();</div>
+<div class="line"> <a class="code" href="classmingfx_1_1_graphics_app.html#a23a780feda9b52eea7319a53b204ce8f">OnMouseMove</a>(); <span class="comment">// your hook for processing input</span></div>
+<div class="line"> On*(); <span class="comment">// all other event callbacks -- your hook for processing input</span></div>
+<div class="line"> </div>
+<div class="line"> <span class="comment">// phyics, etc.</span></div>
+<div class="line"> <a class="code" href="classmingfx_1_1_graphics_app.html#a9e2b4cd7eeabe1ace9d5e9220349fbaa">UpdateSimulation</a>(); <span class="comment">// your hook for physics, animation, AI, etc.</span></div>
+<div class="line"> </div>
+<div class="line"> <span class="comment">// draw graphics</span></div>
+<div class="line"> internal_render_gui_elements_using_nanogui();</div>
+<div class="line"> <a class="code" href="classmingfx_1_1_graphics_app.html#a688f12675da58210e8ec2ffcda4923d0">DrawUsingNanoVG</a>(); <span class="comment">// your hook for drawing 2D vector graphics</span></div>
+<div class="line"> <a class="code" href="classmingfx_1_1_graphics_app.html#a5a858fd10651f7617491f37b49dbf8ca">DrawUsingOpenGL</a>(); <span class="comment">// your hook for 2D/3D rendering with OpenGL</span></div>
+<div class="line">}</div>
+<div class="ttc" id="aclassmingfx_1_1_graphics_app_html_a23a780feda9b52eea7319a53b204ce8f"><div class="ttname"><a href="classmingfx_1_1_graphics_app.html#a23a780feda9b52eea7319a53b204ce8f">mingfx::GraphicsApp::OnMouseMove</a></div><div class="ttdeci">virtual void OnMouseMove(const Point2 &amp;pos, const Vector2 &amp;delta)</div><div class="ttdoc">If the mouse has moved in the past frame and no mouse buttons are currently pressed,...</div><div class="ttdef"><b>Definition:</b> <a href="graphics__app_8h_source.html#l00165">graphics_app.h:165</a></div></div>
+<div class="ttc" id="aclassmingfx_1_1_graphics_app_html_a5a858fd10651f7617491f37b49dbf8ca"><div class="ttname"><a href="classmingfx_1_1_graphics_app.html#a5a858fd10651f7617491f37b49dbf8ca">mingfx::GraphicsApp::DrawUsingOpenGL</a></div><div class="ttdeci">virtual void DrawUsingOpenGL()</div><div class="ttdoc">Override this to draw graphics using raw OpenGL 2D or 3D graphics calls.</div><div class="ttdef"><b>Definition:</b> <a href="graphics__app_8h_source.html#l00317">graphics_app.h:317</a></div></div>
+<div class="ttc" id="aclassmingfx_1_1_graphics_app_html_a688f12675da58210e8ec2ffcda4923d0"><div class="ttname"><a href="classmingfx_1_1_graphics_app.html#a688f12675da58210e8ec2ffcda4923d0">mingfx::GraphicsApp::DrawUsingNanoVG</a></div><div class="ttdeci">virtual void DrawUsingNanoVG(NVGcontext *ctx)</div><div class="ttdoc">Override this to draw graphics using the nanovg vector graphics library, which provides an easy way t...</div><div class="ttdef"><b>Definition:</b> <a href="graphics__app_8h_source.html#l00311">graphics_app.h:311</a></div></div>
+<div class="ttc" id="aclassmingfx_1_1_graphics_app_html_a96196b37f8b488b64072ec74b5d2b0b3"><div class="ttname"><a href="classmingfx_1_1_graphics_app.html#a96196b37f8b488b64072ec74b5d2b0b3">mingfx::GraphicsApp::InitOpenGL</a></div><div class="ttdeci">virtual void InitOpenGL()</div><div class="ttdoc">Override this to initialize the OpenGL context with textures, vertex buffers, etc.</div><div class="ttdef"><b>Definition:</b> <a href="graphics__app_8h_source.html#l00297">graphics_app.h:297</a></div></div>
+<div class="ttc" id="aclassmingfx_1_1_graphics_app_html_a9e2b4cd7eeabe1ace9d5e9220349fbaa"><div class="ttname"><a href="classmingfx_1_1_graphics_app.html#a9e2b4cd7eeabe1ace9d5e9220349fbaa">mingfx::GraphicsApp::UpdateSimulation</a></div><div class="ttdeci">virtual void UpdateSimulation(double dt)</div><div class="ttdoc">Called once per frame.</div><div class="ttdef"><b>Definition:</b> <a href="graphics__app_8h_source.html#l00306">graphics_app.h:306</a></div></div>
+<div class="ttc" id="aclassmingfx_1_1_graphics_app_html_adfe77d841f43961b299ea6159477968a"><div class="ttname"><a href="classmingfx_1_1_graphics_app.html#adfe77d841f43961b299ea6159477968a">mingfx::GraphicsApp::InitNanoGUI</a></div><div class="ttdeci">virtual void InitNanoGUI()</div><div class="ttdoc">Called at the beginning of the Run() method.</div><div class="ttdef"><b>Definition:</b> <a href="graphics__app_8h_source.html#l00284">graphics_app.h:284</a></div></div>
+</div><!-- fragment --><p><em>A Complete Example with GUI Widgets</em></p>
+<p>If you wish to add some buttons, sliders, etc. in your application, you can do this inside <a class="el" href="classmingfx_1_1_graphics_app.html" title="This is the main application base class for the MinGfx Toolkit.">GraphicsApp</a> by accessing the NanoGUI library. You will need to pass NanoGUI a nanogui::screen object, which you can get from the <a class="el" href="classmingfx_1_1_graphics_app.html#adc68196c3f03bd0608c41f6e4d7dad16" title="Access to the underlying NanoGUI Screen object.">screen()</a> function. NanoGui setup should be done in the constructor, like this: </p><div class="fragment"><div class="line"><span class="preprocessor">#include &lt;<a class="code" href="mingfx_8h.html">mingfx.h</a>&gt;</span></div>
+<div class="line"><span class="keyword">using namespace </span><a class="code" href="namespacemingfx.html">mingfx</a>;</div>
+<div class="line"> </div>
+<div class="line"><span class="keyword">class </span>MyApp : <span class="keyword">public</span> GraphcisApp {</div>
+<div class="line"><span class="keyword">public</span>:</div>
+<div class="line"> MyApp() : <a class="code" href="classmingfx_1_1_graphics_app.html#abf0b48c7d8e5325ab038fddbe1c38b5b">GraphicsApp</a>(1024,768, <span class="stringliteral">&quot;My Amazing App&quot;</span>) {</div>
+<div class="line"> }</div>
+<div class="line"> </div>
+<div class="line"> <span class="keyword">virtual</span> ~MyApp() {}</div>
+<div class="line"> </div>
+<div class="line"> <span class="keywordtype">void</span> <a class="code" href="classmingfx_1_1_graphics_app.html#adfe77d841f43961b299ea6159477968a">InitNanoGUI</a>() {</div>
+<div class="line"> <span class="comment">// Setup the GUI window</span></div>
+<div class="line"> nanogui::Window *<a class="code" href="classmingfx_1_1_graphics_app.html#abd0ee14f7e12146000cdb3532d54ba94">window</a> = <span class="keyword">new</span> nanogui::Window(<a class="code" href="classmingfx_1_1_graphics_app.html#adc68196c3f03bd0608c41f6e4d7dad16">screen</a>(), <span class="stringliteral">&quot;My GUI Panel&quot;</span>);</div>
+<div class="line"> <a class="code" href="classmingfx_1_1_graphics_app.html#abd0ee14f7e12146000cdb3532d54ba94">window</a>-&gt;setPosition(Eigen::Vector2i(10, 10));</div>
+<div class="line"> <a class="code" href="classmingfx_1_1_graphics_app.html#abd0ee14f7e12146000cdb3532d54ba94">window</a>-&gt;setSize(Eigen::Vector2i(400,200));</div>
+<div class="line"> <a class="code" href="classmingfx_1_1_graphics_app.html#abd0ee14f7e12146000cdb3532d54ba94">window</a>-&gt;setLayout(<span class="keyword">new</span> nanogui::GroupLayout());</div>
+<div class="line"> </div>
+<div class="line"> nanogui::Button pause_btn = <span class="keyword">new</span> nanogui::Button(<a class="code" href="classmingfx_1_1_graphics_app.html#abd0ee14f7e12146000cdb3532d54ba94">window</a>, <span class="stringliteral">&quot;Pause&quot;</span>);</div>
+<div class="line"> pause_btn-&gt;setCallback(std::bind(&amp;MyApp::OnPauseBtnPressed, <span class="keyword">this</span>));</div>
+<div class="line"> pause_btn-&gt;setTooltip(<span class="stringliteral">&quot;Toggle playback.&quot;</span>);</div>
+<div class="line"> </div>
+<div class="line"> <a class="code" href="classmingfx_1_1_graphics_app.html#adc68196c3f03bd0608c41f6e4d7dad16">screen</a>()-&gt;performLayout();</div>
+<div class="line"> }</div>
+<div class="line"> </div>
+<div class="line"> <span class="keywordtype">void</span> <a class="code" href="classmingfx_1_1_graphics_app.html#a96196b37f8b488b64072ec74b5d2b0b3">InitOpenGL</a>() {</div>
+<div class="line"> glClearColor(0.0, 0.0, 0.0, 1);</div>
+<div class="line"> }</div>
+<div class="line"> </div>
+<div class="line"> <span class="comment">// this callback is for the nanogui pause_btn defined above</span></div>
+<div class="line"> <span class="keywordtype">void</span> OnPauseBtnPressed() {</div>
+<div class="line"> std::cout &lt;&lt; <span class="stringliteral">&quot;Pause pressed.&quot;</span> &lt;&lt; std::endl; </div>
+<div class="line"> }</div>
+<div class="line"> </div>
+<div class="line"> <span class="comment">// this callback is built into the base GraphicsApp class</span></div>
+<div class="line"> <span class="keywordtype">void</span> <a class="code" href="classmingfx_1_1_graphics_app.html#a23a780feda9b52eea7319a53b204ce8f">OnMouseMove</a>(<span class="keyword">const</span> Point2 &amp;pos, <span class="keyword">const</span> Vector2 &amp;delta) {</div>
+<div class="line"> std::cout &lt;&lt; <span class="stringliteral">&quot;Mouse moved to &quot;</span> &lt;&lt; pos &lt;&lt; std::endl;</div>
+<div class="line"> }</div>
+<div class="line"> </div>
+<div class="line"> <span class="keywordtype">void</span> <a class="code" href="classmingfx_1_1_graphics_app.html#a5a858fd10651f7617491f37b49dbf8ca">DrawUsingOpenGL</a>() {</div>
+<div class="line"> Matrix4 model = <a class="code" href="classmingfx_1_1_matrix4.html#ae82bab81df82dc03f5eb11e74ba1dd84">Matrix4::Translation</a>(Vector3(-1,0,0)) * <a class="code" href="classmingfx_1_1_matrix4.html#a0232a58d20b1da5374cf8c72fb113a4e">Matrix4::Scale</a>(Vector3(0.5, 0.5, 0.5));</div>
+<div class="line"> Matrix4 view = <a class="code" href="classmingfx_1_1_matrix4.html#a4543695a6dfc996d0312b70c2eaa00de">Matrix4::LookAt</a>(Point3(0,0,3), Point3(0,0,0), Vector3(0,1,0));</div>
+<div class="line"> Matrix4 proj = <a class="code" href="classmingfx_1_1_matrix4.html#a0e34aee86758a0397074590b87712c5e">Matrix4::Perspective</a>(60.0, <a class="code" href="classmingfx_1_1_graphics_app.html#ac682691ee96ea32037abafd74d144a23">aspect_ratio</a>(), 0.1, 10.0);</div>
+<div class="line"> quick_shapes_.DrawCube(model, view, proj, Color(1,1,1));</div>
+<div class="line"> }</div>
+<div class="line"> </div>
+<div class="line"><span class="keyword">private</span>:</div>
+<div class="line"> QuickShapes quick_shapes_;</div>
+<div class="line">};</div>
+<div class="line"> </div>
+<div class="line"> </div>
+<div class="line"><span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keyword">const</span> <span class="keywordtype">char</span> *argv[]) {</div>
+<div class="line"> MyApp app;</div>
+<div class="line"> app.Run();</div>
+<div class="line"> <span class="keywordflow">return</span> 0;</div>
+<div class="line">}</div>
+<div class="ttc" id="aclassmingfx_1_1_graphics_app_html_abd0ee14f7e12146000cdb3532d54ba94"><div class="ttname"><a href="classmingfx_1_1_graphics_app.html#abd0ee14f7e12146000cdb3532d54ba94">mingfx::GraphicsApp::window</a></div><div class="ttdeci">virtual GLFWwindow * window()</div><div class="ttdoc">Access to the underlying GLFWwindow object.</div></div>
+<div class="ttc" id="aclassmingfx_1_1_graphics_app_html_abf0b48c7d8e5325ab038fddbe1c38b5b"><div class="ttname"><a href="classmingfx_1_1_graphics_app.html#abf0b48c7d8e5325ab038fddbe1c38b5b">mingfx::GraphicsApp::GraphicsApp</a></div><div class="ttdeci">GraphicsApp(int width, int height, const std::string &amp;caption)</div><div class="ttdoc">Constructs a new app but does not yet run it.</div></div>
+<div class="ttc" id="aclassmingfx_1_1_graphics_app_html_ac682691ee96ea32037abafd74d144a23"><div class="ttname"><a href="classmingfx_1_1_graphics_app.html#ac682691ee96ea32037abafd74d144a23">mingfx::GraphicsApp::aspect_ratio</a></div><div class="ttdeci">virtual float aspect_ratio()</div><div class="ttdoc">Returns width/height for the current shape of the window.</div></div>
+<div class="ttc" id="aclassmingfx_1_1_graphics_app_html_adc68196c3f03bd0608c41f6e4d7dad16"><div class="ttname"><a href="classmingfx_1_1_graphics_app.html#adc68196c3f03bd0608c41f6e4d7dad16">mingfx::GraphicsApp::screen</a></div><div class="ttdeci">virtual nanogui::Screen * screen()</div><div class="ttdoc">Access to the underlying NanoGUI Screen object.</div></div>
+<div class="ttc" id="aclassmingfx_1_1_matrix4_html_a0232a58d20b1da5374cf8c72fb113a4e"><div class="ttname"><a href="classmingfx_1_1_matrix4.html#a0232a58d20b1da5374cf8c72fb113a4e">mingfx::Matrix4::Scale</a></div><div class="ttdeci">static Matrix4 Scale(const Vector3 &amp;v)</div><div class="ttdoc">Returns the scale matrix described by the vector.</div></div>
+<div class="ttc" id="aclassmingfx_1_1_matrix4_html_a0e34aee86758a0397074590b87712c5e"><div class="ttname"><a href="classmingfx_1_1_matrix4.html#a0e34aee86758a0397074590b87712c5e">mingfx::Matrix4::Perspective</a></div><div class="ttdeci">static Matrix4 Perspective(float fov_y_in_degrees, float aspect_ratio, float near_plane_dist, float far_plane_dist)</div><div class="ttdoc">Returns a perspective projection matrix equivalent to the one gluPerspective creates.</div></div>
+<div class="ttc" id="aclassmingfx_1_1_matrix4_html_a4543695a6dfc996d0312b70c2eaa00de"><div class="ttname"><a href="classmingfx_1_1_matrix4.html#a4543695a6dfc996d0312b70c2eaa00de">mingfx::Matrix4::LookAt</a></div><div class="ttdeci">static Matrix4 LookAt(Point3 eye, Point3 target, Vector3 up)</div><div class="ttdoc">Returns a view matrix that centers the camera at the 'eye' position and orients it to look at the des...</div></div>
+<div class="ttc" id="aclassmingfx_1_1_matrix4_html_ae82bab81df82dc03f5eb11e74ba1dd84"><div class="ttname"><a href="classmingfx_1_1_matrix4.html#ae82bab81df82dc03f5eb11e74ba1dd84">mingfx::Matrix4::Translation</a></div><div class="ttdeci">static Matrix4 Translation(const Vector3 &amp;v)</div><div class="ttdoc">Returns the translation matrix described by the vector.</div></div>
+<div class="ttc" id="amingfx_8h_html"><div class="ttname"><a href="mingfx_8h.html">mingfx.h</a></div><div class="ttdoc">Includes the entire MinGfx library and calls using namespace mingfx.</div></div>
+<div class="ttc" id="anamespacemingfx_html"><div class="ttname"><a href="namespacemingfx.html">mingfx</a></div><div class="ttdoc">Namespace for the MinGfx Toolkit.</div><div class="ttdef"><b>Definition:</b> <a href="aabb_8h_source.html#l00021">aabb.h:21</a></div></div>
+</div><!-- fragment -->
+<p class="definition">Definition at line <a class="el" href="graphics__app_8h_source.html#l00135">135</a> of file <a class="el" href="graphics__app_8h_source.html">graphics_app.h</a>.</p>
+</div>
+<p><code>#include &lt;<a class="el" href="graphics__app_8h_source.html">graphics_app.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:abf0b48c7d8e5325ab038fddbe1c38b5b"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#abf0b48c7d8e5325ab038fddbe1c38b5b">GraphicsApp</a> (int width, int height, const std::string &amp;caption)</td></tr>
+<tr class="memdesc:abf0b48c7d8e5325ab038fddbe1c38b5b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs a new app but does not yet run it. <a href="classmingfx_1_1_graphics_app.html#abf0b48c7d8e5325ab038fddbe1c38b5b">More...</a><br /></td></tr>
+<tr class="separator:abf0b48c7d8e5325ab038fddbe1c38b5b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aab7925c6b844e6bef428feacf4aa9afb"><td class="memItemLeft" align="right" valign="top">virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#aab7925c6b844e6bef428feacf4aa9afb">~GraphicsApp</a> ()</td></tr>
+<tr class="memdesc:aab7925c6b844e6bef428feacf4aa9afb"><td class="mdescLeft">&#160;</td><td class="mdescRight">The destructor will shutdown the graphics system and window. <a href="classmingfx_1_1_graphics_app.html#aab7925c6b844e6bef428feacf4aa9afb">More...</a><br /></td></tr>
+<tr class="separator:aab7925c6b844e6bef428feacf4aa9afb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a23a780feda9b52eea7319a53b204ce8f"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#a23a780feda9b52eea7319a53b204ce8f">OnMouseMove</a> (const <a class="el" href="classmingfx_1_1_point2.html">Point2</a> &amp;pos, const <a class="el" href="classmingfx_1_1_vector2.html">Vector2</a> &amp;delta)</td></tr>
+<tr class="memdesc:a23a780feda9b52eea7319a53b204ce8f"><td class="mdescLeft">&#160;</td><td class="mdescRight">If the mouse has moved in the past frame and no mouse buttons are currently pressed, then this callback function will be called to report the new position of the mouse to you. <a href="classmingfx_1_1_graphics_app.html#a23a780feda9b52eea7319a53b204ce8f">More...</a><br /></td></tr>
+<tr class="separator:a23a780feda9b52eea7319a53b204ce8f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae12d9b192a2167a71e0c103405addb17"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#ae12d9b192a2167a71e0c103405addb17">OnLeftMouseDown</a> (const <a class="el" href="classmingfx_1_1_point2.html">Point2</a> &amp;pos)</td></tr>
+<tr class="memdesc:ae12d9b192a2167a71e0c103405addb17"><td class="mdescLeft">&#160;</td><td class="mdescRight">If the mouse button was pressed down since the last frame, then this function will be called to notify you. <a href="classmingfx_1_1_graphics_app.html#ae12d9b192a2167a71e0c103405addb17">More...</a><br /></td></tr>
+<tr class="separator:ae12d9b192a2167a71e0c103405addb17"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56d350a8b030998709a51630753d509b"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#a56d350a8b030998709a51630753d509b">OnLeftMouseDrag</a> (const <a class="el" href="classmingfx_1_1_point2.html">Point2</a> &amp;pos, const <a class="el" href="classmingfx_1_1_vector2.html">Vector2</a> &amp;delta)</td></tr>
+<tr class="memdesc:a56d350a8b030998709a51630753d509b"><td class="mdescLeft">&#160;</td><td class="mdescRight">If the mouse button is held down and the mouse has moved in the past frame then this function will be called to tell you that a "dragging" operation is happening. <a href="classmingfx_1_1_graphics_app.html#a56d350a8b030998709a51630753d509b">More...</a><br /></td></tr>
+<tr class="separator:a56d350a8b030998709a51630753d509b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a536dbadf0b8a11ef59d7e855ca43f613"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#a536dbadf0b8a11ef59d7e855ca43f613">OnLeftMouseUp</a> (const <a class="el" href="classmingfx_1_1_point2.html">Point2</a> &amp;pos)</td></tr>
+<tr class="memdesc:a536dbadf0b8a11ef59d7e855ca43f613"><td class="mdescLeft">&#160;</td><td class="mdescRight">If the mouse button was released since the last frame, then this function will be called to notify you. <a href="classmingfx_1_1_graphics_app.html#a536dbadf0b8a11ef59d7e855ca43f613">More...</a><br /></td></tr>
+<tr class="separator:a536dbadf0b8a11ef59d7e855ca43f613"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a588315d5c45490b440a764af2bc5bd48"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#a588315d5c45490b440a764af2bc5bd48">OnMiddleMouseDown</a> (const <a class="el" href="classmingfx_1_1_point2.html">Point2</a> &amp;pos)</td></tr>
+<tr class="memdesc:a588315d5c45490b440a764af2bc5bd48"><td class="mdescLeft">&#160;</td><td class="mdescRight">If the mouse button was pressed down since the last frame, then this function will be called to notify you. <a href="classmingfx_1_1_graphics_app.html#a588315d5c45490b440a764af2bc5bd48">More...</a><br /></td></tr>
+<tr class="separator:a588315d5c45490b440a764af2bc5bd48"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac7628fece754c0ac4875791e19712dc6"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#ac7628fece754c0ac4875791e19712dc6">OnMiddleMouseDrag</a> (const <a class="el" href="classmingfx_1_1_point2.html">Point2</a> &amp;pos, const <a class="el" href="classmingfx_1_1_vector2.html">Vector2</a> &amp;delta)</td></tr>
+<tr class="memdesc:ac7628fece754c0ac4875791e19712dc6"><td class="mdescLeft">&#160;</td><td class="mdescRight">If the mouse button is held down and the mouse has moved in the past frame then this function will be called to tell you that a "dragging" operation is happening. <a href="classmingfx_1_1_graphics_app.html#ac7628fece754c0ac4875791e19712dc6">More...</a><br /></td></tr>
+<tr class="separator:ac7628fece754c0ac4875791e19712dc6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a378b8a102775eeb01a6da9dd68482d08"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#a378b8a102775eeb01a6da9dd68482d08">OnMiddleMouseUp</a> (const <a class="el" href="classmingfx_1_1_point2.html">Point2</a> &amp;pos)</td></tr>
+<tr class="memdesc:a378b8a102775eeb01a6da9dd68482d08"><td class="mdescLeft">&#160;</td><td class="mdescRight">If the mouse button was released since the last frame, then this function will be called to notify you. <a href="classmingfx_1_1_graphics_app.html#a378b8a102775eeb01a6da9dd68482d08">More...</a><br /></td></tr>
+<tr class="separator:a378b8a102775eeb01a6da9dd68482d08"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a903f94b82cc10f32039ff3f2ba368a9c"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#a903f94b82cc10f32039ff3f2ba368a9c">OnRightMouseDown</a> (const <a class="el" href="classmingfx_1_1_point2.html">Point2</a> &amp;pos)</td></tr>
+<tr class="memdesc:a903f94b82cc10f32039ff3f2ba368a9c"><td class="mdescLeft">&#160;</td><td class="mdescRight">If the mouse button was pressed down since the last frame, then this function will be called to notify you. <a href="classmingfx_1_1_graphics_app.html#a903f94b82cc10f32039ff3f2ba368a9c">More...</a><br /></td></tr>
+<tr class="separator:a903f94b82cc10f32039ff3f2ba368a9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a00ad5039af2f428a08fe45751a9731c7"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#a00ad5039af2f428a08fe45751a9731c7">OnRightMouseDrag</a> (const <a class="el" href="classmingfx_1_1_point2.html">Point2</a> &amp;pos, const <a class="el" href="classmingfx_1_1_vector2.html">Vector2</a> &amp;delta)</td></tr>
+<tr class="memdesc:a00ad5039af2f428a08fe45751a9731c7"><td class="mdescLeft">&#160;</td><td class="mdescRight">If the mouse button is held down and the mouse has moved in the past frame then this function will be called to tell you that a "dragging" operation is happening. <a href="classmingfx_1_1_graphics_app.html#a00ad5039af2f428a08fe45751a9731c7">More...</a><br /></td></tr>
+<tr class="separator:a00ad5039af2f428a08fe45751a9731c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad7c33791c44afc87ce789874f3002ca3"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#ad7c33791c44afc87ce789874f3002ca3">OnRightMouseUp</a> (const <a class="el" href="classmingfx_1_1_point2.html">Point2</a> &amp;pos)</td></tr>
+<tr class="memdesc:ad7c33791c44afc87ce789874f3002ca3"><td class="mdescLeft">&#160;</td><td class="mdescRight">If the mouse button was released since the last frame, then this function will be called to notify you. <a href="classmingfx_1_1_graphics_app.html#ad7c33791c44afc87ce789874f3002ca3">More...</a><br /></td></tr>
+<tr class="separator:ad7c33791c44afc87ce789874f3002ca3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a002560456139e537877d079978db4b01"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#a002560456139e537877d079978db4b01">OnKeyDown</a> (const char *c, int modifiers)</td></tr>
+<tr class="memdesc:a002560456139e537877d079978db4b01"><td class="mdescLeft">&#160;</td><td class="mdescRight">Transforms a keyboard down event into the actual character typed. <a href="classmingfx_1_1_graphics_app.html#a002560456139e537877d079978db4b01">More...</a><br /></td></tr>
+<tr class="separator:a002560456139e537877d079978db4b01"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1d5831953b37fae615fbd1bf527214b0"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#a1d5831953b37fae615fbd1bf527214b0">OnKeyRepeat</a> (const char *c, int modifiers)</td></tr>
+<tr class="memdesc:a1d5831953b37fae615fbd1bf527214b0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Transforms a keyboard repeat event into the actual character typed. <a href="classmingfx_1_1_graphics_app.html#a1d5831953b37fae615fbd1bf527214b0">More...</a><br /></td></tr>
+<tr class="separator:a1d5831953b37fae615fbd1bf527214b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8376ef8eb0840b229a2301f995db3f6c"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#a8376ef8eb0840b229a2301f995db3f6c">OnKeyUp</a> (const char *c, int modifiers)</td></tr>
+<tr class="memdesc:a8376ef8eb0840b229a2301f995db3f6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Transforms a keyboard up event into the actual character typed. <a href="classmingfx_1_1_graphics_app.html#a8376ef8eb0840b229a2301f995db3f6c">More...</a><br /></td></tr>
+<tr class="separator:a8376ef8eb0840b229a2301f995db3f6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abcf1935e92550bcda311cac62f312952"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#abcf1935e92550bcda311cac62f312952">OnSpecialKeyDown</a> (int key, int scancode, int modifiers)</td></tr>
+<tr class="memdesc:abcf1935e92550bcda311cac62f312952"><td class="mdescLeft">&#160;</td><td class="mdescRight">The values for key, scancode, and modifiers are documented here: <a href="http://www.glfw.org/docs/latest/group__keys.html">http://www.glfw.org/docs/latest/group__keys.html</a>. <a href="classmingfx_1_1_graphics_app.html#abcf1935e92550bcda311cac62f312952">More...</a><br /></td></tr>
+<tr class="separator:abcf1935e92550bcda311cac62f312952"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8362762489e287edfa59617a6602db22"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#a8362762489e287edfa59617a6602db22">OnSpecialKeyRepeat</a> (int key, int scancode, int modifiers)</td></tr>
+<tr class="memdesc:a8362762489e287edfa59617a6602db22"><td class="mdescLeft">&#160;</td><td class="mdescRight">The values for key, scancode, and modifiers are documented here: <a href="http://www.glfw.org/docs/latest/group__keys.html">http://www.glfw.org/docs/latest/group__keys.html</a>. <a href="classmingfx_1_1_graphics_app.html#a8362762489e287edfa59617a6602db22">More...</a><br /></td></tr>
+<tr class="separator:a8362762489e287edfa59617a6602db22"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0deb6da45fc0d3980e44556a861c7a14"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#a0deb6da45fc0d3980e44556a861c7a14">OnSpecialKeyUp</a> (int key, int scancode, int modifiers)</td></tr>
+<tr class="memdesc:a0deb6da45fc0d3980e44556a861c7a14"><td class="mdescLeft">&#160;</td><td class="mdescRight">The values for key, scancode, and modifiers are documented here: <a href="http://www.glfw.org/docs/latest/group__keys.html">http://www.glfw.org/docs/latest/group__keys.html</a>. <a href="classmingfx_1_1_graphics_app.html#a0deb6da45fc0d3980e44556a861c7a14">More...</a><br /></td></tr>
+<tr class="separator:a0deb6da45fc0d3980e44556a861c7a14"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adafdc4631db256fefce3c4ffdfd5086a"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#adafdc4631db256fefce3c4ffdfd5086a">OnWindowResize</a> (int new_width, int new_height)</td></tr>
+<tr class="memdesc:adafdc4631db256fefce3c4ffdfd5086a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Override this to respond when the graphics window and/or framebuffer are resized, either by the user dragging the window or through a call to <a class="el" href="classmingfx_1_1_graphics_app.html#a0db71b2465e12a8aef4eefbe8b9fcee5" title="Cause the graphics windows to resize programmatically rather than by dragging on the corner manually.">ResizeWindow()</a>. <a href="classmingfx_1_1_graphics_app.html#adafdc4631db256fefce3c4ffdfd5086a">More...</a><br /></td></tr>
+<tr class="separator:adafdc4631db256fefce3c4ffdfd5086a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5ee9ae3d14e76c949979a8008687d6c9"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#a5ee9ae3d14e76c949979a8008687d6c9">Run</a> ()</td></tr>
+<tr class="memdesc:a5ee9ae3d14e76c949979a8008687d6c9"><td class="mdescLeft">&#160;</td><td class="mdescRight">After creating a new <a class="el" href="classmingfx_1_1_graphics_app.html" title="This is the main application base class for the MinGfx Toolkit.">GraphicsApp</a>, call this to start the app's mainloop. <a href="classmingfx_1_1_graphics_app.html#a5ee9ae3d14e76c949979a8008687d6c9">More...</a><br /></td></tr>
+<tr class="separator:a5ee9ae3d14e76c949979a8008687d6c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adfe77d841f43961b299ea6159477968a"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#adfe77d841f43961b299ea6159477968a">InitNanoGUI</a> ()</td></tr>
+<tr class="memdesc:adfe77d841f43961b299ea6159477968a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Called at the beginning of the <a class="el" href="classmingfx_1_1_graphics_app.html#a5ee9ae3d14e76c949979a8008687d6c9" title="After creating a new GraphicsApp, call this to start the app&#39;s mainloop.">Run()</a> method. <a href="classmingfx_1_1_graphics_app.html#adfe77d841f43961b299ea6159477968a">More...</a><br /></td></tr>
+<tr class="separator:adfe77d841f43961b299ea6159477968a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a96196b37f8b488b64072ec74b5d2b0b3"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#a96196b37f8b488b64072ec74b5d2b0b3">InitOpenGL</a> ()</td></tr>
+<tr class="memdesc:a96196b37f8b488b64072ec74b5d2b0b3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Override this to initialize the OpenGL context with textures, vertex buffers, etc. <a href="classmingfx_1_1_graphics_app.html#a96196b37f8b488b64072ec74b5d2b0b3">More...</a><br /></td></tr>
+<tr class="separator:a96196b37f8b488b64072ec74b5d2b0b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9e2b4cd7eeabe1ace9d5e9220349fbaa"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#a9e2b4cd7eeabe1ace9d5e9220349fbaa">UpdateSimulation</a> (double dt)</td></tr>
+<tr class="memdesc:a9e2b4cd7eeabe1ace9d5e9220349fbaa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Called once per frame. <a href="classmingfx_1_1_graphics_app.html#a9e2b4cd7eeabe1ace9d5e9220349fbaa">More...</a><br /></td></tr>
+<tr class="separator:a9e2b4cd7eeabe1ace9d5e9220349fbaa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a688f12675da58210e8ec2ffcda4923d0"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#a688f12675da58210e8ec2ffcda4923d0">DrawUsingNanoVG</a> (NVGcontext *ctx)</td></tr>
+<tr class="memdesc:a688f12675da58210e8ec2ffcda4923d0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Override this to draw graphics using the nanovg vector graphics library, which provides an easy way to draw 2D shapes to the screen. <a href="classmingfx_1_1_graphics_app.html#a688f12675da58210e8ec2ffcda4923d0">More...</a><br /></td></tr>
+<tr class="separator:a688f12675da58210e8ec2ffcda4923d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5a858fd10651f7617491f37b49dbf8ca"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#a5a858fd10651f7617491f37b49dbf8ca">DrawUsingOpenGL</a> ()</td></tr>
+<tr class="memdesc:a5a858fd10651f7617491f37b49dbf8ca"><td class="mdescLeft">&#160;</td><td class="mdescRight">Override this to draw graphics using raw OpenGL 2D or 3D graphics calls. <a href="classmingfx_1_1_graphics_app.html#a5a858fd10651f7617491f37b49dbf8ca">More...</a><br /></td></tr>
+<tr class="separator:a5a858fd10651f7617491f37b49dbf8ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a60688614e5dfeaabf57f8825cdaa08ac"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#a60688614e5dfeaabf57f8825cdaa08ac">IsKeyDown</a> (int key)</td></tr>
+<tr class="memdesc:a60688614e5dfeaabf57f8825cdaa08ac"><td class="mdescLeft">&#160;</td><td class="mdescRight">True if the specified is is currently held down. Uses the GLFW key codes found here: <a href="http://www.glfw.org/docs/latest/group__keys.html">http://www.glfw.org/docs/latest/group__keys.html</a>. <a href="classmingfx_1_1_graphics_app.html#a60688614e5dfeaabf57f8825cdaa08ac">More...</a><br /></td></tr>
+<tr class="separator:a60688614e5dfeaabf57f8825cdaa08ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5b78d79192180a6ef5271d2a2b2d1cc7"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#a5b78d79192180a6ef5271d2a2b2d1cc7">IsLeftMouseDown</a> ()</td></tr>
+<tr class="memdesc:a5b78d79192180a6ef5271d2a2b2d1cc7"><td class="mdescLeft">&#160;</td><td class="mdescRight">True if the left mouse button is currently held down. <a href="classmingfx_1_1_graphics_app.html#a5b78d79192180a6ef5271d2a2b2d1cc7">More...</a><br /></td></tr>
+<tr class="separator:a5b78d79192180a6ef5271d2a2b2d1cc7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a941f7598400073bfa93aa194a3773434"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#a941f7598400073bfa93aa194a3773434">IsMiddleMouseDown</a> ()</td></tr>
+<tr class="memdesc:a941f7598400073bfa93aa194a3773434"><td class="mdescLeft">&#160;</td><td class="mdescRight">True if the middle mouse button is currently held down. <a href="classmingfx_1_1_graphics_app.html#a941f7598400073bfa93aa194a3773434">More...</a><br /></td></tr>
+<tr class="separator:a941f7598400073bfa93aa194a3773434"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4aa30e3d33731178a9162454a81be08d"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#a4aa30e3d33731178a9162454a81be08d">IsRightMouseDown</a> ()</td></tr>
+<tr class="memdesc:a4aa30e3d33731178a9162454a81be08d"><td class="mdescLeft">&#160;</td><td class="mdescRight">True if the right mouse button is currently held down. <a href="classmingfx_1_1_graphics_app.html#a4aa30e3d33731178a9162454a81be08d">More...</a><br /></td></tr>
+<tr class="separator:a4aa30e3d33731178a9162454a81be08d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1c682fa2dd0bce855e1e32ffeac532b0"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#a1c682fa2dd0bce855e1e32ffeac532b0">window_width</a> ()</td></tr>
+<tr class="memdesc:a1c682fa2dd0bce855e1e32ffeac532b0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the current width of the client area of the window in pixels. <a href="classmingfx_1_1_graphics_app.html#a1c682fa2dd0bce855e1e32ffeac532b0">More...</a><br /></td></tr>
+<tr class="separator:a1c682fa2dd0bce855e1e32ffeac532b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad7a641f7ccf174cd0a059347b623e016"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#ad7a641f7ccf174cd0a059347b623e016">window_height</a> ()</td></tr>
+<tr class="memdesc:ad7a641f7ccf174cd0a059347b623e016"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the current height of the client area of the window in pixels. <a href="classmingfx_1_1_graphics_app.html#ad7a641f7ccf174cd0a059347b623e016">More...</a><br /></td></tr>
+<tr class="separator:ad7a641f7ccf174cd0a059347b623e016"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad596e69d030e7689ad91eaaec6975696"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#ad596e69d030e7689ad91eaaec6975696">framebuffer_width</a> ()</td></tr>
+<tr class="memdesc:ad596e69d030e7689ad91eaaec6975696"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the current width of the framebuffer in pixels. <a href="classmingfx_1_1_graphics_app.html#ad596e69d030e7689ad91eaaec6975696">More...</a><br /></td></tr>
+<tr class="separator:ad596e69d030e7689ad91eaaec6975696"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af58153eb104f53216a3e67de2a472f32"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#af58153eb104f53216a3e67de2a472f32">framebuffer_height</a> ()</td></tr>
+<tr class="memdesc:af58153eb104f53216a3e67de2a472f32"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the current height of the framebuffer in pixels. <a href="classmingfx_1_1_graphics_app.html#af58153eb104f53216a3e67de2a472f32">More...</a><br /></td></tr>
+<tr class="separator:af58153eb104f53216a3e67de2a472f32"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac682691ee96ea32037abafd74d144a23"><td class="memItemLeft" align="right" valign="top">virtual float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#ac682691ee96ea32037abafd74d144a23">aspect_ratio</a> ()</td></tr>
+<tr class="memdesc:ac682691ee96ea32037abafd74d144a23"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns width/height for the current shape of the window. <a href="classmingfx_1_1_graphics_app.html#ac682691ee96ea32037abafd74d144a23">More...</a><br /></td></tr>
+<tr class="separator:ac682691ee96ea32037abafd74d144a23"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a94b19404e61411ef64c0ddde8ad6c07a"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classmingfx_1_1_point2.html">Point2</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#a94b19404e61411ef64c0ddde8ad6c07a">PixelsToNormalizedDeviceCoords</a> (const <a class="el" href="classmingfx_1_1_point2.html">Point2</a> &amp;pointInPixels)</td></tr>
+<tr class="memdesc:a94b19404e61411ef64c0ddde8ad6c07a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Transforms a point in viewport coordinates (pixels where top left = (0,0) and bottom right = (<a class="el" href="classmingfx_1_1_graphics_app.html#a1c682fa2dd0bce855e1e32ffeac532b0" title="Returns the current width of the client area of the window in pixels.">window_width()</a>-1, <a class="el" href="classmingfx_1_1_graphics_app.html#ad7a641f7ccf174cd0a059347b623e016" title="Returns the current height of the client area of the window in pixels.">window_height()</a>-1)) to normalized device coordinates, (top left = (-1,1) bottom right (1,-1)). <a href="classmingfx_1_1_graphics_app.html#a94b19404e61411ef64c0ddde8ad6c07a">More...</a><br /></td></tr>
+<tr class="separator:a94b19404e61411ef64c0ddde8ad6c07a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6141ec6adc29572ee99ca26cf90e6248"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classmingfx_1_1_point2.html">Point2</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#a6141ec6adc29572ee99ca26cf90e6248">NormalizedDeviceCoordsToPixels</a> (const <a class="el" href="classmingfx_1_1_point2.html">Point2</a> &amp;pointInNDC)</td></tr>
+<tr class="memdesc:a6141ec6adc29572ee99ca26cf90e6248"><td class="mdescLeft">&#160;</td><td class="mdescRight">Transforms a point in normalized device coordinates (top left = (-1,1) bottom right (1,-1)) to pixels (top left = (0,0), bottom right = (window width-1, window height-1)) <a href="classmingfx_1_1_graphics_app.html#a6141ec6adc29572ee99ca26cf90e6248">More...</a><br /></td></tr>
+<tr class="separator:a6141ec6adc29572ee99ca26cf90e6248"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4e8ac965474de9046448b8811bf25dd1"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classmingfx_1_1_vector2.html">Vector2</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#a4e8ac965474de9046448b8811bf25dd1">PixelsToNormalizedDeviceCoords</a> (const <a class="el" href="classmingfx_1_1_vector2.html">Vector2</a> &amp;vectorInPixels)</td></tr>
+<tr class="memdesc:a4e8ac965474de9046448b8811bf25dd1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Transforms a vector in viewport coordinates (pixels where top left = (0,0) and bottom right = (window width-1, window height-1)) to normalized device coordinates, (top left = (-1,1) bottom right (1,-1)). <a href="classmingfx_1_1_graphics_app.html#a4e8ac965474de9046448b8811bf25dd1">More...</a><br /></td></tr>
+<tr class="separator:a4e8ac965474de9046448b8811bf25dd1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a45596da36aa3905e7c752826a7fd9f93"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classmingfx_1_1_vector2.html">Vector2</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#a45596da36aa3905e7c752826a7fd9f93">NormalizedDeviceCoordsToPixels</a> (const <a class="el" href="classmingfx_1_1_vector2.html">Vector2</a> &amp;pointInNDC)</td></tr>
+<tr class="memdesc:a45596da36aa3905e7c752826a7fd9f93"><td class="mdescLeft">&#160;</td><td class="mdescRight">Transforms a vector in normalized device coordinates (top left = (-1,1) bottom right (1,-1)) to pixels (top left = (0,0), bottom right = (window width-1, window height-1)) <a href="classmingfx_1_1_graphics_app.html#a45596da36aa3905e7c752826a7fd9f93">More...</a><br /></td></tr>
+<tr class="separator:a45596da36aa3905e7c752826a7fd9f93"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a471951dbf45ffa88027cb92707443646"><td class="memItemLeft" align="right" valign="top">virtual float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#a471951dbf45ffa88027cb92707443646">ReadZValueAtPixel</a> (const <a class="el" href="classmingfx_1_1_point2.html">Point2</a> &amp;pointInPixels, unsigned int whichBuffer=GL_BACK)</td></tr>
+<tr class="memdesc:a471951dbf45ffa88027cb92707443646"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the z buffer value under the specified pixel. z will be 0 at the near plane and +1 at the far plane. <a href="classmingfx_1_1_graphics_app.html#a471951dbf45ffa88027cb92707443646">More...</a><br /></td></tr>
+<tr class="separator:a471951dbf45ffa88027cb92707443646"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adc68196c3f03bd0608c41f6e4d7dad16"><td class="memItemLeft" align="right" valign="top">virtual nanogui::Screen *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#adc68196c3f03bd0608c41f6e4d7dad16">screen</a> ()</td></tr>
+<tr class="memdesc:adc68196c3f03bd0608c41f6e4d7dad16"><td class="mdescLeft">&#160;</td><td class="mdescRight">Access to the underlying NanoGUI Screen object. <a href="classmingfx_1_1_graphics_app.html#adc68196c3f03bd0608c41f6e4d7dad16">More...</a><br /></td></tr>
+<tr class="separator:adc68196c3f03bd0608c41f6e4d7dad16"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abd0ee14f7e12146000cdb3532d54ba94"><td class="memItemLeft" align="right" valign="top">virtual GLFWwindow *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#abd0ee14f7e12146000cdb3532d54ba94">window</a> ()</td></tr>
+<tr class="memdesc:abd0ee14f7e12146000cdb3532d54ba94"><td class="mdescLeft">&#160;</td><td class="mdescRight">Access to the underlying GLFWwindow object. <a href="classmingfx_1_1_graphics_app.html#abd0ee14f7e12146000cdb3532d54ba94">More...</a><br /></td></tr>
+<tr class="separator:abd0ee14f7e12146000cdb3532d54ba94"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0db71b2465e12a8aef4eefbe8b9fcee5"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#a0db71b2465e12a8aef4eefbe8b9fcee5">ResizeWindow</a> (int new_width, int new_height)</td></tr>
+<tr class="memdesc:a0db71b2465e12a8aef4eefbe8b9fcee5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Cause the graphics windows to resize programmatically rather than by dragging on the corner manually. <a href="classmingfx_1_1_graphics_app.html#a0db71b2465e12a8aef4eefbe8b9fcee5">More...</a><br /></td></tr>
+<tr class="separator:a0db71b2465e12a8aef4eefbe8b9fcee5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a04beb462aa04371dc86d807838f999e1"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmingfx_1_1_graphics_app.html#a04beb462aa04371dc86d807838f999e1">InitGraphicsContext</a> ()</td></tr>
+<tr class="memdesc:a04beb462aa04371dc86d807838f999e1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Users cannot make any graphics calls (e.g., setting the clear color, saving mesh data to the GPU) until the graphics context is initialized by calling this method. <a href="classmingfx_1_1_graphics_app.html#a04beb462aa04371dc86d807838f999e1">More...</a><br /></td></tr>
+<tr class="separator:a04beb462aa04371dc86d807838f999e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="abf0b48c7d8e5325ab038fddbe1c38b5b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abf0b48c7d8e5325ab038fddbe1c38b5b">&#9670;&nbsp;</a></span>GraphicsApp()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">mingfx::GraphicsApp::GraphicsApp </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>width</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>height</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>caption</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Constructs a new app but does not yet run it. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">width</td><td>The width of the client area of the window in pixels. </td></tr>
+ <tr><td class="paramname">height</td><td>The height of the client area of the window in pixels. </td></tr>
+ <tr><td class="paramname">caption</td><td>The caption for the window's title bar. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="aab7925c6b844e6bef428feacf4aa9afb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aab7925c6b844e6bef428feacf4aa9afb">&#9670;&nbsp;</a></span>~GraphicsApp()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual mingfx::GraphicsApp::~GraphicsApp </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>The destructor will shutdown the graphics system and window. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="ac682691ee96ea32037abafd74d144a23"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac682691ee96ea32037abafd74d144a23">&#9670;&nbsp;</a></span>aspect_ratio()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual float mingfx::GraphicsApp::aspect_ratio </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns width/height for the current shape of the window. </p>
+
+</div>
+</div>
+<a id="a688f12675da58210e8ec2ffcda4923d0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a688f12675da58210e8ec2ffcda4923d0">&#9670;&nbsp;</a></span>DrawUsingNanoVG()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual void mingfx::GraphicsApp::DrawUsingNanoVG </td>
+ <td>(</td>
+ <td class="paramtype">NVGcontext *&#160;</td>
+ <td class="paramname"><em>ctx</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Override this to draw graphics using the nanovg vector graphics library, which provides an easy way to draw 2D shapes to the screen. </p>
+
+<p class="definition">Definition at line <a class="el" href="graphics__app_8h_source.html#l00311">311</a> of file <a class="el" href="graphics__app_8h_source.html">graphics_app.h</a>.</p>
+
+</div>
+</div>
+<a id="a5a858fd10651f7617491f37b49dbf8ca"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5a858fd10651f7617491f37b49dbf8ca">&#9670;&nbsp;</a></span>DrawUsingOpenGL()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual void mingfx::GraphicsApp::DrawUsingOpenGL </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Override this to draw graphics using raw OpenGL 2D or 3D graphics calls. </p>
+
+<p class="definition">Definition at line <a class="el" href="graphics__app_8h_source.html#l00317">317</a> of file <a class="el" href="graphics__app_8h_source.html">graphics_app.h</a>.</p>
+
+</div>
+</div>
+<a id="af58153eb104f53216a3e67de2a472f32"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af58153eb104f53216a3e67de2a472f32">&#9670;&nbsp;</a></span>framebuffer_height()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual int mingfx::GraphicsApp::framebuffer_height </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the current height of the framebuffer in pixels. </p>
+<p>Note that on some displays (e.g., Mac Retina) the framebuffer is larger than the window. </p>
+
+</div>
+</div>
+<a id="ad596e69d030e7689ad91eaaec6975696"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad596e69d030e7689ad91eaaec6975696">&#9670;&nbsp;</a></span>framebuffer_width()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual int mingfx::GraphicsApp::framebuffer_width </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the current width of the framebuffer in pixels. </p>
+<p>Note that on some displays (e.g., Mac Retina) the framebuffer is larger than the window. </p>
+
+</div>
+</div>
+<a id="a04beb462aa04371dc86d807838f999e1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a04beb462aa04371dc86d807838f999e1">&#9670;&nbsp;</a></span>InitGraphicsContext()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual void mingfx::GraphicsApp::InitGraphicsContext </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Users cannot make any graphics calls (e.g., setting the clear color, saving mesh data to the GPU) until the graphics context is initialized by calling this method. </p>
+<p>It is called automatically by the <a class="el" href="classmingfx_1_1_graphics_app.html#a5ee9ae3d14e76c949979a8008687d6c9" title="After creating a new GraphicsApp, call this to start the app&#39;s mainloop.">Run()</a> method before calling the <a class="el" href="classmingfx_1_1_graphics_app.html#adfe77d841f43961b299ea6159477968a" title="Called at the beginning of the Run() method.">InitNanoGUI()</a> and <a class="el" href="classmingfx_1_1_graphics_app.html#a96196b37f8b488b64072ec74b5d2b0b3" title="Override this to initialize the OpenGL context with textures, vertex buffers, etc.">InitOpenGL()</a> methods. So, users should place all of their graphics initialization code inside one of those two methods. </p>
+
+</div>
+</div>
+<a id="adfe77d841f43961b299ea6159477968a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adfe77d841f43961b299ea6159477968a">&#9670;&nbsp;</a></span>InitNanoGUI()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual void mingfx::GraphicsApp::InitNanoGUI </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Called at the beginning of the <a class="el" href="classmingfx_1_1_graphics_app.html#a5ee9ae3d14e76c949979a8008687d6c9" title="After creating a new GraphicsApp, call this to start the app&#39;s mainloop.">Run()</a> method. </p>
+<p>Override this to initialize any NanoGUI graphics related properties including 2D windows, buttons, sliders, etc...</p>
+<p>IMPORTANT: Put any NanoGUI initialization code here, NOT in the constructors of the classes that you create, or, create your classes from within this function. The graphics calls will fail if the OpenGL context has not yet been initialized, and it is not guaranteed to be initialized until this function has been called. </p>
+
+<p class="definition">Definition at line <a class="el" href="graphics__app_8h_source.html#l00284">284</a> of file <a class="el" href="graphics__app_8h_source.html">graphics_app.h</a>.</p>
+
+</div>
+</div>
+<a id="a96196b37f8b488b64072ec74b5d2b0b3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a96196b37f8b488b64072ec74b5d2b0b3">&#9670;&nbsp;</a></span>InitOpenGL()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual void mingfx::GraphicsApp::InitOpenGL </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Override this to initialize the OpenGL context with textures, vertex buffers, etc. </p>
+<p>that you will use later inside <a class="el" href="classmingfx_1_1_graphics_app.html#a5a858fd10651f7617491f37b49dbf8ca" title="Override this to draw graphics using raw OpenGL 2D or 3D graphics calls.">DrawUsingOpenGL()</a>. This <a class="el" href="classmingfx_1_1_graphics_app.html#a96196b37f8b488b64072ec74b5d2b0b3" title="Override this to initialize the OpenGL context with textures, vertex buffers, etc.">InitOpenGL()</a> function is called once on program startup just after the OpenGL drawing context is created.</p>
+<p>IMPORTANT: Put any OpenGL initialization code here, NOT in the constructors of the classes that you create, or, create your classes from within this function. The graphics calls will fail if the OpenGL context has not yet been initialized, and it is not guaranteed to be initialized until this function has been called. </p>
+
+<p class="definition">Definition at line <a class="el" href="graphics__app_8h_source.html#l00297">297</a> of file <a class="el" href="graphics__app_8h_source.html">graphics_app.h</a>.</p>
+
+</div>
+</div>
+<a id="a60688614e5dfeaabf57f8825cdaa08ac"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a60688614e5dfeaabf57f8825cdaa08ac">&#9670;&nbsp;</a></span>IsKeyDown()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual bool mingfx::GraphicsApp::IsKeyDown </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>key</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>True if the specified is is currently held down. Uses the GLFW key codes found here: <a href="http://www.glfw.org/docs/latest/group__keys.html">http://www.glfw.org/docs/latest/group__keys.html</a>. </p>
+
+</div>
+</div>
+<a id="a5b78d79192180a6ef5271d2a2b2d1cc7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5b78d79192180a6ef5271d2a2b2d1cc7">&#9670;&nbsp;</a></span>IsLeftMouseDown()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual bool mingfx::GraphicsApp::IsLeftMouseDown </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>True if the left mouse button is currently held down. </p>
+
+</div>
+</div>
+<a id="a941f7598400073bfa93aa194a3773434"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a941f7598400073bfa93aa194a3773434">&#9670;&nbsp;</a></span>IsMiddleMouseDown()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual bool mingfx::GraphicsApp::IsMiddleMouseDown </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>True if the middle mouse button is currently held down. </p>
+
+</div>
+</div>
+<a id="a4aa30e3d33731178a9162454a81be08d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4aa30e3d33731178a9162454a81be08d">&#9670;&nbsp;</a></span>IsRightMouseDown()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual bool mingfx::GraphicsApp::IsRightMouseDown </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>True if the right mouse button is currently held down. </p>
+
+</div>
+</div>
+<a id="a6141ec6adc29572ee99ca26cf90e6248"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6141ec6adc29572ee99ca26cf90e6248">&#9670;&nbsp;</a></span>NormalizedDeviceCoordsToPixels() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual <a class="el" href="classmingfx_1_1_point2.html">Point2</a> mingfx::GraphicsApp::NormalizedDeviceCoordsToPixels </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_point2.html">Point2</a> &amp;&#160;</td>
+ <td class="paramname"><em>pointInNDC</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Transforms a point in normalized device coordinates (top left = (-1,1) bottom right (1,-1)) to pixels (top left = (0,0), bottom right = (window width-1, window height-1)) </p>
+
+</div>
+</div>
+<a id="a45596da36aa3905e7c752826a7fd9f93"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a45596da36aa3905e7c752826a7fd9f93">&#9670;&nbsp;</a></span>NormalizedDeviceCoordsToPixels() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual <a class="el" href="classmingfx_1_1_vector2.html">Vector2</a> mingfx::GraphicsApp::NormalizedDeviceCoordsToPixels </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_vector2.html">Vector2</a> &amp;&#160;</td>
+ <td class="paramname"><em>pointInNDC</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Transforms a vector in normalized device coordinates (top left = (-1,1) bottom right (1,-1)) to pixels (top left = (0,0), bottom right = (window width-1, window height-1)) </p>
+
+</div>
+</div>
+<a id="a002560456139e537877d079978db4b01"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a002560456139e537877d079978db4b01">&#9670;&nbsp;</a></span>OnKeyDown()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual void mingfx::GraphicsApp::OnKeyDown </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>modifiers</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Transforms a keyboard down event into the actual character typed. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>The character for the key that was pressed. </td></tr>
+ <tr><td class="paramname">modifiers</td><td>If any modifiers (Alt, Ctrl, Shift, etc.) were held at the same time, then these are encoded in this int. See the detailed description here: <a href="http://www.glfw.org/docs/latest/group__mods.html">http://www.glfw.org/docs/latest/group__mods.html</a> </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="graphics__app_8h_source.html#l00225">225</a> of file <a class="el" href="graphics__app_8h_source.html">graphics_app.h</a>.</p>
+
+</div>
+</div>
+<a id="a1d5831953b37fae615fbd1bf527214b0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1d5831953b37fae615fbd1bf527214b0">&#9670;&nbsp;</a></span>OnKeyRepeat()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual void mingfx::GraphicsApp::OnKeyRepeat </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>modifiers</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Transforms a keyboard repeat event into the actual character typed. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>The character for the key that was pressed. </td></tr>
+ <tr><td class="paramname">modifiers</td><td>If any modifiers (Alt, Ctrl, Shift, etc.) were held at the same time, then these are encoded in this int. See the detailed description here: <a href="http://www.glfw.org/docs/latest/group__mods.html">http://www.glfw.org/docs/latest/group__mods.html</a> </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="graphics__app_8h_source.html#l00233">233</a> of file <a class="el" href="graphics__app_8h_source.html">graphics_app.h</a>.</p>
+
+</div>
+</div>
+<a id="a8376ef8eb0840b229a2301f995db3f6c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8376ef8eb0840b229a2301f995db3f6c">&#9670;&nbsp;</a></span>OnKeyUp()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual void mingfx::GraphicsApp::OnKeyUp </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>modifiers</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Transforms a keyboard up event into the actual character typed. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>The character for the key that was pressed. </td></tr>
+ <tr><td class="paramname">modifiers</td><td>If any modifiers (Alt, Ctrl, Shift, etc.) were held at the same time, then these are encoded in this int. See the detailed description here: <a href="http://www.glfw.org/docs/latest/group__mods.html">http://www.glfw.org/docs/latest/group__mods.html</a> </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="graphics__app_8h_source.html#l00241">241</a> of file <a class="el" href="graphics__app_8h_source.html">graphics_app.h</a>.</p>
+
+</div>
+</div>
+<a id="ae12d9b192a2167a71e0c103405addb17"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae12d9b192a2167a71e0c103405addb17">&#9670;&nbsp;</a></span>OnLeftMouseDown()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual void mingfx::GraphicsApp::OnLeftMouseDown </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_point2.html">Point2</a> &amp;&#160;</td>
+ <td class="paramname"><em>pos</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>If the mouse button was pressed down since the last frame, then this function will be called to notify you. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">pos</td><td>This is the current position of the mouse in pixels, where (0,0) is at the top left corner of the screen and (<a class="el" href="classmingfx_1_1_graphics_app.html#a1c682fa2dd0bce855e1e32ffeac532b0" title="Returns the current width of the client area of the window in pixels.">window_width()</a>, <a class="el" href="classmingfx_1_1_graphics_app.html#ad7a641f7ccf174cd0a059347b623e016" title="Returns the current height of the client area of the window in pixels.">window_height()</a>) is the bottom right corner. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="graphics__app_8h_source.html#l00174">174</a> of file <a class="el" href="graphics__app_8h_source.html">graphics_app.h</a>.</p>
+
+</div>
+</div>
+<a id="a56d350a8b030998709a51630753d509b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a56d350a8b030998709a51630753d509b">&#9670;&nbsp;</a></span>OnLeftMouseDrag()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual void mingfx::GraphicsApp::OnLeftMouseDrag </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_point2.html">Point2</a> &amp;&#160;</td>
+ <td class="paramname"><em>pos</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_vector2.html">Vector2</a> &amp;&#160;</td>
+ <td class="paramname"><em>delta</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>If the mouse button is held down and the mouse has moved in the past frame then this function will be called to tell you that a "dragging" operation is happening. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">pos</td><td>This is the current position of the mouse in pixels, where (0,0) is at the top left corner of the screen and (<a class="el" href="classmingfx_1_1_graphics_app.html#a1c682fa2dd0bce855e1e32ffeac532b0" title="Returns the current width of the client area of the window in pixels.">window_width()</a>, <a class="el" href="classmingfx_1_1_graphics_app.html#ad7a641f7ccf174cd0a059347b623e016" title="Returns the current height of the client area of the window in pixels.">window_height()</a>) is the bottom right corner.</td></tr>
+ <tr><td class="paramname">delta</td><td>This is the change in the position of the mouse in pixels since the last frame. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="graphics__app_8h_source.html#l00187">187</a> of file <a class="el" href="graphics__app_8h_source.html">graphics_app.h</a>.</p>
+
+</div>
+</div>
+<a id="a536dbadf0b8a11ef59d7e855ca43f613"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a536dbadf0b8a11ef59d7e855ca43f613">&#9670;&nbsp;</a></span>OnLeftMouseUp()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual void mingfx::GraphicsApp::OnLeftMouseUp </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_point2.html">Point2</a> &amp;&#160;</td>
+ <td class="paramname"><em>pos</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>If the mouse button was released since the last frame, then this function will be called to notify you. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">pos</td><td>This is the current position of the mouse in pixels, where (0,0) is at the top left corner of the screen and (<a class="el" href="classmingfx_1_1_graphics_app.html#a1c682fa2dd0bce855e1e32ffeac532b0" title="Returns the current width of the client area of the window in pixels.">window_width()</a>-1, <a class="el" href="classmingfx_1_1_graphics_app.html#ad7a641f7ccf174cd0a059347b623e016" title="Returns the current height of the client area of the window in pixels.">window_height()</a>-1) is the bottom right corner. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="graphics__app_8h_source.html#l00196">196</a> of file <a class="el" href="graphics__app_8h_source.html">graphics_app.h</a>.</p>
+
+</div>
+</div>
+<a id="a588315d5c45490b440a764af2bc5bd48"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a588315d5c45490b440a764af2bc5bd48">&#9670;&nbsp;</a></span>OnMiddleMouseDown()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual void mingfx::GraphicsApp::OnMiddleMouseDown </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_point2.html">Point2</a> &amp;&#160;</td>
+ <td class="paramname"><em>pos</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>If the mouse button was pressed down since the last frame, then this function will be called to notify you. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">pos</td><td>This is the current position of the mouse in pixels, where (0,0) is at the top left corner of the screen and (<a class="el" href="classmingfx_1_1_graphics_app.html#a1c682fa2dd0bce855e1e32ffeac532b0" title="Returns the current width of the client area of the window in pixels.">window_width()</a>, <a class="el" href="classmingfx_1_1_graphics_app.html#ad7a641f7ccf174cd0a059347b623e016" title="Returns the current height of the client area of the window in pixels.">window_height()</a>) is the bottom right corner. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="graphics__app_8h_source.html#l00200">200</a> of file <a class="el" href="graphics__app_8h_source.html">graphics_app.h</a>.</p>
+
+</div>
+</div>
+<a id="ac7628fece754c0ac4875791e19712dc6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac7628fece754c0ac4875791e19712dc6">&#9670;&nbsp;</a></span>OnMiddleMouseDrag()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual void mingfx::GraphicsApp::OnMiddleMouseDrag </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_point2.html">Point2</a> &amp;&#160;</td>
+ <td class="paramname"><em>pos</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_vector2.html">Vector2</a> &amp;&#160;</td>
+ <td class="paramname"><em>delta</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>If the mouse button is held down and the mouse has moved in the past frame then this function will be called to tell you that a "dragging" operation is happening. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">pos</td><td>This is the current position of the mouse in pixels, where (0,0) is at the top left corner of the screen and (<a class="el" href="classmingfx_1_1_graphics_app.html#a1c682fa2dd0bce855e1e32ffeac532b0" title="Returns the current width of the client area of the window in pixels.">window_width()</a>, <a class="el" href="classmingfx_1_1_graphics_app.html#ad7a641f7ccf174cd0a059347b623e016" title="Returns the current height of the client area of the window in pixels.">window_height()</a>) is the bottom right corner.</td></tr>
+ <tr><td class="paramname">delta</td><td>This is the change in the position of the mouse in pixels since the last frame. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="graphics__app_8h_source.html#l00203">203</a> of file <a class="el" href="graphics__app_8h_source.html">graphics_app.h</a>.</p>
+
+</div>
+</div>
+<a id="a378b8a102775eeb01a6da9dd68482d08"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a378b8a102775eeb01a6da9dd68482d08">&#9670;&nbsp;</a></span>OnMiddleMouseUp()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual void mingfx::GraphicsApp::OnMiddleMouseUp </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_point2.html">Point2</a> &amp;&#160;</td>
+ <td class="paramname"><em>pos</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>If the mouse button was released since the last frame, then this function will be called to notify you. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">pos</td><td>This is the current position of the mouse in pixels, where (0,0) is at the top left corner of the screen and (<a class="el" href="classmingfx_1_1_graphics_app.html#a1c682fa2dd0bce855e1e32ffeac532b0" title="Returns the current width of the client area of the window in pixels.">window_width()</a>-1, <a class="el" href="classmingfx_1_1_graphics_app.html#ad7a641f7ccf174cd0a059347b623e016" title="Returns the current height of the client area of the window in pixels.">window_height()</a>-1) is the bottom right corner. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="graphics__app_8h_source.html#l00206">206</a> of file <a class="el" href="graphics__app_8h_source.html">graphics_app.h</a>.</p>
+
+</div>
+</div>
+<a id="a23a780feda9b52eea7319a53b204ce8f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a23a780feda9b52eea7319a53b204ce8f">&#9670;&nbsp;</a></span>OnMouseMove()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual void mingfx::GraphicsApp::OnMouseMove </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_point2.html">Point2</a> &amp;&#160;</td>
+ <td class="paramname"><em>pos</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_vector2.html">Vector2</a> &amp;&#160;</td>
+ <td class="paramname"><em>delta</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>If the mouse has moved in the past frame and no mouse buttons are currently pressed, then this callback function will be called to report the new position of the mouse to you. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">pos</td><td>This is the current position of the mouse in pixels, where (0,0) is at the top left corner of the screen and (<a class="el" href="classmingfx_1_1_graphics_app.html#a1c682fa2dd0bce855e1e32ffeac532b0" title="Returns the current width of the client area of the window in pixels.">window_width()</a>, <a class="el" href="classmingfx_1_1_graphics_app.html#ad7a641f7ccf174cd0a059347b623e016" title="Returns the current height of the client area of the window in pixels.">window_height()</a>) is the bottom right corner.</td></tr>
+ <tr><td class="paramname">delta</td><td>This is the change in the position of the mouse in pixels since the last frame. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="graphics__app_8h_source.html#l00165">165</a> of file <a class="el" href="graphics__app_8h_source.html">graphics_app.h</a>.</p>
+
+</div>
+</div>
+<a id="a903f94b82cc10f32039ff3f2ba368a9c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a903f94b82cc10f32039ff3f2ba368a9c">&#9670;&nbsp;</a></span>OnRightMouseDown()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual void mingfx::GraphicsApp::OnRightMouseDown </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_point2.html">Point2</a> &amp;&#160;</td>
+ <td class="paramname"><em>pos</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>If the mouse button was pressed down since the last frame, then this function will be called to notify you. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">pos</td><td>This is the current position of the mouse in pixels, where (0,0) is at the top left corner of the screen and (<a class="el" href="classmingfx_1_1_graphics_app.html#a1c682fa2dd0bce855e1e32ffeac532b0" title="Returns the current width of the client area of the window in pixels.">window_width()</a>, <a class="el" href="classmingfx_1_1_graphics_app.html#ad7a641f7ccf174cd0a059347b623e016" title="Returns the current height of the client area of the window in pixels.">window_height()</a>) is the bottom right corner. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="graphics__app_8h_source.html#l00210">210</a> of file <a class="el" href="graphics__app_8h_source.html">graphics_app.h</a>.</p>
+
+</div>
+</div>
+<a id="a00ad5039af2f428a08fe45751a9731c7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a00ad5039af2f428a08fe45751a9731c7">&#9670;&nbsp;</a></span>OnRightMouseDrag()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual void mingfx::GraphicsApp::OnRightMouseDrag </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_point2.html">Point2</a> &amp;&#160;</td>
+ <td class="paramname"><em>pos</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_vector2.html">Vector2</a> &amp;&#160;</td>
+ <td class="paramname"><em>delta</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>If the mouse button is held down and the mouse has moved in the past frame then this function will be called to tell you that a "dragging" operation is happening. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">pos</td><td>This is the current position of the mouse in pixels, where (0,0) is at the top left corner of the screen and (<a class="el" href="classmingfx_1_1_graphics_app.html#a1c682fa2dd0bce855e1e32ffeac532b0" title="Returns the current width of the client area of the window in pixels.">window_width()</a>, <a class="el" href="classmingfx_1_1_graphics_app.html#ad7a641f7ccf174cd0a059347b623e016" title="Returns the current height of the client area of the window in pixels.">window_height()</a>) is the bottom right corner.</td></tr>
+ <tr><td class="paramname">delta</td><td>This is the change in the position of the mouse in pixels since the last frame. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="graphics__app_8h_source.html#l00213">213</a> of file <a class="el" href="graphics__app_8h_source.html">graphics_app.h</a>.</p>
+
+</div>
+</div>
+<a id="ad7c33791c44afc87ce789874f3002ca3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad7c33791c44afc87ce789874f3002ca3">&#9670;&nbsp;</a></span>OnRightMouseUp()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual void mingfx::GraphicsApp::OnRightMouseUp </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_point2.html">Point2</a> &amp;&#160;</td>
+ <td class="paramname"><em>pos</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>If the mouse button was released since the last frame, then this function will be called to notify you. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">pos</td><td>This is the current position of the mouse in pixels, where (0,0) is at the top left corner of the screen and (<a class="el" href="classmingfx_1_1_graphics_app.html#a1c682fa2dd0bce855e1e32ffeac532b0" title="Returns the current width of the client area of the window in pixels.">window_width()</a>-1, <a class="el" href="classmingfx_1_1_graphics_app.html#ad7a641f7ccf174cd0a059347b623e016" title="Returns the current height of the client area of the window in pixels.">window_height()</a>-1) is the bottom right corner. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="graphics__app_8h_source.html#l00216">216</a> of file <a class="el" href="graphics__app_8h_source.html">graphics_app.h</a>.</p>
+
+</div>
+</div>
+<a id="abcf1935e92550bcda311cac62f312952"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abcf1935e92550bcda311cac62f312952">&#9670;&nbsp;</a></span>OnSpecialKeyDown()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual void mingfx::GraphicsApp::OnSpecialKeyDown </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>key</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>scancode</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>modifiers</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>The values for key, scancode, and modifiers are documented here: <a href="http://www.glfw.org/docs/latest/group__keys.html">http://www.glfw.org/docs/latest/group__keys.html</a>. </p>
+
+<p class="definition">Definition at line <a class="el" href="graphics__app_8h_source.html#l00247">247</a> of file <a class="el" href="graphics__app_8h_source.html">graphics_app.h</a>.</p>
+
+</div>
+</div>
+<a id="a8362762489e287edfa59617a6602db22"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8362762489e287edfa59617a6602db22">&#9670;&nbsp;</a></span>OnSpecialKeyRepeat()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual void mingfx::GraphicsApp::OnSpecialKeyRepeat </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>key</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>scancode</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>modifiers</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>The values for key, scancode, and modifiers are documented here: <a href="http://www.glfw.org/docs/latest/group__keys.html">http://www.glfw.org/docs/latest/group__keys.html</a>. </p>
+
+<p class="definition">Definition at line <a class="el" href="graphics__app_8h_source.html#l00251">251</a> of file <a class="el" href="graphics__app_8h_source.html">graphics_app.h</a>.</p>
+
+</div>
+</div>
+<a id="a0deb6da45fc0d3980e44556a861c7a14"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0deb6da45fc0d3980e44556a861c7a14">&#9670;&nbsp;</a></span>OnSpecialKeyUp()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual void mingfx::GraphicsApp::OnSpecialKeyUp </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>key</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>scancode</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>modifiers</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>The values for key, scancode, and modifiers are documented here: <a href="http://www.glfw.org/docs/latest/group__keys.html">http://www.glfw.org/docs/latest/group__keys.html</a>. </p>
+
+<p class="definition">Definition at line <a class="el" href="graphics__app_8h_source.html#l00255">255</a> of file <a class="el" href="graphics__app_8h_source.html">graphics_app.h</a>.</p>
+
+</div>
+</div>
+<a id="adafdc4631db256fefce3c4ffdfd5086a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adafdc4631db256fefce3c4ffdfd5086a">&#9670;&nbsp;</a></span>OnWindowResize()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual void mingfx::GraphicsApp::OnWindowResize </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>new_width</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>new_height</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Override this to respond when the graphics window and/or framebuffer are resized, either by the user dragging the window or through a call to <a class="el" href="classmingfx_1_1_graphics_app.html#a0db71b2465e12a8aef4eefbe8b9fcee5" title="Cause the graphics windows to resize programmatically rather than by dragging on the corner manually.">ResizeWindow()</a>. </p>
+
+<p class="definition">Definition at line <a class="el" href="graphics__app_8h_source.html#l00261">261</a> of file <a class="el" href="graphics__app_8h_source.html">graphics_app.h</a>.</p>
+
+</div>
+</div>
+<a id="a94b19404e61411ef64c0ddde8ad6c07a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a94b19404e61411ef64c0ddde8ad6c07a">&#9670;&nbsp;</a></span>PixelsToNormalizedDeviceCoords() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual <a class="el" href="classmingfx_1_1_point2.html">Point2</a> mingfx::GraphicsApp::PixelsToNormalizedDeviceCoords </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_point2.html">Point2</a> &amp;&#160;</td>
+ <td class="paramname"><em>pointInPixels</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Transforms a point in viewport coordinates (pixels where top left = (0,0) and bottom right = (<a class="el" href="classmingfx_1_1_graphics_app.html#a1c682fa2dd0bce855e1e32ffeac532b0" title="Returns the current width of the client area of the window in pixels.">window_width()</a>-1, <a class="el" href="classmingfx_1_1_graphics_app.html#ad7a641f7ccf174cd0a059347b623e016" title="Returns the current height of the client area of the window in pixels.">window_height()</a>-1)) to normalized device coordinates, (top left = (-1,1) bottom right (1,-1)). </p>
+
+</div>
+</div>
+<a id="a4e8ac965474de9046448b8811bf25dd1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4e8ac965474de9046448b8811bf25dd1">&#9670;&nbsp;</a></span>PixelsToNormalizedDeviceCoords() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual <a class="el" href="classmingfx_1_1_vector2.html">Vector2</a> mingfx::GraphicsApp::PixelsToNormalizedDeviceCoords </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_vector2.html">Vector2</a> &amp;&#160;</td>
+ <td class="paramname"><em>vectorInPixels</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Transforms a vector in viewport coordinates (pixels where top left = (0,0) and bottom right = (window width-1, window height-1)) to normalized device coordinates, (top left = (-1,1) bottom right (1,-1)). </p>
+
+</div>
+</div>
+<a id="a471951dbf45ffa88027cb92707443646"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a471951dbf45ffa88027cb92707443646">&#9670;&nbsp;</a></span>ReadZValueAtPixel()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual float mingfx::GraphicsApp::ReadZValueAtPixel </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classmingfx_1_1_point2.html">Point2</a> &amp;&#160;</td>
+ <td class="paramname"><em>pointInPixels</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>whichBuffer</em> = <code>GL_BACK</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the z buffer value under the specified pixel. z will be 0 at the near plane and +1 at the far plane. </p>
+
+</div>
+</div>
+<a id="a0db71b2465e12a8aef4eefbe8b9fcee5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0db71b2465e12a8aef4eefbe8b9fcee5">&#9670;&nbsp;</a></span>ResizeWindow()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual void mingfx::GraphicsApp::ResizeWindow </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>new_width</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>new_height</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Cause the graphics windows to resize programmatically rather than by dragging on the corner manually. </p>
+
+</div>
+</div>
+<a id="a5ee9ae3d14e76c949979a8008687d6c9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5ee9ae3d14e76c949979a8008687d6c9">&#9670;&nbsp;</a></span>Run()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual void mingfx::GraphicsApp::Run </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>After creating a new <a class="el" href="classmingfx_1_1_graphics_app.html" title="This is the main application base class for the MinGfx Toolkit.">GraphicsApp</a>, call this to start the app's mainloop. </p>
+<p>Each time through the mainloop the app will: 1. respond any user input events by calling the On*() callback methods, 2. call <a class="el" href="classmingfx_1_1_graphics_app.html#a9e2b4cd7eeabe1ace9d5e9220349fbaa" title="Called once per frame.">UpdateSimulation()</a>, and 3. call the two Draw*() methods. Note that <a class="el" href="classmingfx_1_1_graphics_app.html#a5ee9ae3d14e76c949979a8008687d6c9" title="After creating a new GraphicsApp, call this to start the app&#39;s mainloop.">Run()</a> does not return until the user closes the app and the program is ready to shutdown. </p>
+
+</div>
+</div>
+<a id="adc68196c3f03bd0608c41f6e4d7dad16"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adc68196c3f03bd0608c41f6e4d7dad16">&#9670;&nbsp;</a></span>screen()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual nanogui::Screen* mingfx::GraphicsApp::screen </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Access to the underlying NanoGUI Screen object. </p>
+
+</div>
+</div>
+<a id="a9e2b4cd7eeabe1ace9d5e9220349fbaa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9e2b4cd7eeabe1ace9d5e9220349fbaa">&#9670;&nbsp;</a></span>UpdateSimulation()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual void mingfx::GraphicsApp::UpdateSimulation </td>
+ <td>(</td>
+ <td class="paramtype">double&#160;</td>
+ <td class="paramname"><em>dt</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Called once per frame. </p>
+<p>Override this and fill it in to update your simulation code or any other updates you need to make to your model that are timed rather than in response to user input.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">dt</td><td>is the elapsed time since the last call. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="graphics__app_8h_source.html#l00306">306</a> of file <a class="el" href="graphics__app_8h_source.html">graphics_app.h</a>.</p>
+
+</div>
+</div>
+<a id="abd0ee14f7e12146000cdb3532d54ba94"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abd0ee14f7e12146000cdb3532d54ba94">&#9670;&nbsp;</a></span>window()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual GLFWwindow* mingfx::GraphicsApp::window </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Access to the underlying GLFWwindow object. </p>
+
+</div>
+</div>
+<a id="ad7a641f7ccf174cd0a059347b623e016"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad7a641f7ccf174cd0a059347b623e016">&#9670;&nbsp;</a></span>window_height()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual int mingfx::GraphicsApp::window_height </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the current height of the client area of the window in pixels. </p>
+
+</div>
+</div>
+<a id="a1c682fa2dd0bce855e1e32ffeac532b0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1c682fa2dd0bce855e1e32ffeac532b0">&#9670;&nbsp;</a></span>window_width()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual int mingfx::GraphicsApp::window_width </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the current width of the client area of the window in pixels. </p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>src/<a class="el" href="graphics__app_8h_source.html">graphics_app.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- HTML footer for doxygen 1.8.9.1-->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.9.1
+</small></address>
+</body>
+</html>