﻿Version 14.0.0.0 Release core architecture additions:

    C++14/17 ISO standard STL-based framework with multi-platform support (Windows/Linux)
    CUDA 10.0+/NVCC component built-in with multi-platform support (Windows/Linux)
    GoogleTest 1.8+ verification framework with multi-platform support (Windows/Linux)
    Doxygen 1.8+ with LaTeX pdf support in-source documentation creation for scientific equations
    CMake 3.15+ build system automation with multi-platform support & GUI tool (Windows/Linux)
    HG/Mercurial 5.0+ repository with multi-platform support & GUI tool (Windows/Linux)

Version 14.0.0.0 Release rendering additions:

    Fast Single-Pass Order-Independent-Transparency (O-I-T) rendering methods using OpenGL 4.6: A-Buffer3D & LinkedLists with dynamic data structure size allocation
    Fast Single-Pass Deferred Shading using OpenGL 4.6 GPU-side data structures with data packing
    Fast Fresnel term (Schlick's approximation), Transparency & Translucency effects using O-I-T
    Saving screenshots and O-I-T A-Buffer3D slices information in image slices stacks
    Fast Single-Pass Particles rendering engine using OpenGL 3.3 & OpenGL 4.6 (Simple & Raytraced Impostors, tessellated LOD geometry modes)
    Impostor models include Spheres and Cylinders raytraced in double-precision with OpenGL 4.6. Impostor-based wireframe rendering mode also added
    Fast Model Loader mechanism which caches read data into binary form
    Fast Single-Pass Merged G-Buffer effects using OpenGL 3.3: Depth-Of-Field, Edge Enhancement, Hemispherical Screen-Space Ambient Occlusion (HSSAO) Plus with Weighted Sharpness Filter
    Fast procedural quad texture creation through dummy VAOs and vertex shader usage using OpenGL 3.3
    Fast BiCubic Texture Filtering
    Fast Jitter Environment Mapping used as material in 3D objects
    Fast Programmable Cube Capping using the Stencil Buffer
    Fast FXAA antialias effect



Command-line usage details:
GPUFrameworkMain.exe -model ModelFileName.ModelFileType

Alternatively, it can load a set of 3D models stated in the ModelLoaderDescriptor.tsr text file with this command:
GPUFrameworkMain.exe -useModelLoaderDescriptor

Run the various tests:
GPUFrameworkMain.exe -test 7 (1 up to 7, default is 3, 7 is O-I-T tests)

Full description of console-based commands with:
GPUFrameworkMain.exe -h

VRAM Caching Scenarios Testing keys:
F1 -> No caching Method 1 (separate glVertex/glNormal/glTexCoord calls per data point)
F2 -> No caching Method 2 (using arrays for glVertex/glNormal/glTexCoord calls in vectors of 3)
F3 -> Vertex Arrays Caching
F4 -> Display Lists Caching
F5 -> VBOs Caching

Lighting/Shading Models Testing keys:
1 -> Gouraud Lighting/Shading Model     (photo-realistic,     Fixed Pipeline, Gouraud's PhD thesis @ en.wikipedia.org/wiki/Gouraud_shading)
2 -> Phong Lighting/Shading Model       (photo-realistic,     Programmable Pipeline GLSL based, Phong's PhD thesis @ en.wikipedia.org/wiki/Phong_reflection_model)
3 -> Blinn-Phong Lighting/Shading Model (photo-realistic,     Programmable Pipeline GLSL based, @ en.wikipedia.org/wiki/Blinn%E2%80%93Phong_shading_model)
4 -> Gaussian Lighting/Shading Model    (photo-realistic,     Programmable Pipeline GLSL based, @ en.wikipedia.org/wiki/Specular_highlight#Gaussian_distribution)
5 -> Toon Lighting/Shading Model        (non photo-realistic, Programmable Pipeline GLSL based, @ en.wikipedia.org/wiki/Cel_shading)
6 -> Gooch Lighting/Shading Model       (non photo-realistic, Programmable Pipeline GLSL based, Gooch's PhD / Siggraph 1998 paper @ www.cs.northwestern.edu/~ago820/SIG98/abstract.html)

Extra Lighting Model Options Control keys:
'L' -> Toggle Directional / Positional Lights for all Lighting Models (OpenGL Programming Guide aka 'The Red Book' Chapter 5 Lighting @ www.glprogramming.com/red/chapter05.html)
'D' -> Toggle Oren Nayar Diffuse Model for all Programmable Lighting Models (Siggraph 1994 paper @ en.wikipedia.org/wiki/Oren%E2%80%93Nayar_reflectance_model)

Motion Blur Testing keys:
F6 -> Toggle On/Off, press '[' & ']' keys for Motion Blur size.

Geometry Shader (GS) Performance Testing keys:
F7 -> No GS Use (GS step skipped).
F8 -> Pass-Thru GS with triangle 'explosion' animation to show geometry displacement done in real-time. 1x geometry passed to fragment shaders & being rendered.
F9 -> Creation of new geometry (the geometry's normals) when wireframe mode is turned on. 2x geometry passed to fragment shaders & being rendered.

Tessellation Shaders (TCS& TES) Performance Testing keys, press 'space' for autoLOD & 'n', 'm' for tessellation levels, '7', '8' for tessellation alpha, '9', '0' for PNTriangles (/alex.vlachos.com/graphics/CurvedPNTriangles.pdf) & PhongTessellation (perso.telecom-paristech.fr/~boubek/papers/PhongTessellation/) algorithms:
F10 -> No GS Use (GS step skipped).
F11 -> Pass-Thru GS with triangle 'explosion' animation to show geometry displacement done in real-time. 1x geometry passed to fragment shaders & being rendered.
F12 -> Creation of new geometry (the geometry's normals) when wireframe mode is turned on. 2x geometry passed to fragment shaders & being rendered.

Extra Rendering Techniques keys:
'T' -> Toggle Texturing (performed through the GLSL shaders for the Programmable Pipeline)
'S' -> Toggle Spherical Mapping (performed through the GLSL shaders for the Programmable Pipeline, @ en.wikipedia.org/wiki/Reflection_mapping#Sphere_mapping)
'E' -> Toggle Environment Mapping (performed through the GLSL shaders for the Programmable Pipeline, dual-pass rendering algorithm with an FBO, @ en.wikipedia.org/wiki/Reflection_mapping)
'J' -> Toggle Outline (performed through the GLSL shaders for the Programmable Pipeline, dual-pass rendering algorithm with an Stencil Buffer FBO, @ www.songho.ca/opengl/gl_fbo.html)
'K' -> Toggle High-Quality Outline (performed through the GLSL shaders for the Programmable Pipeline, dual-pass rendering algorithm with an Stencil Buffer FBO with 2x resolution, @ www.songho.ca/opengl/gl_fbo.html)

Control keys:
'F' -> Toggle Fog (fixed & programmable pipeline support)
'Q' -> Toggle BackFace Culling
'G' -> Toggle Gouraud/Flat shading (Fixed Pipeline only)
'C' -> Toggle Colored Objects
'B' -> Toggle White/Black background
'W' -> Toggle Wireframe mode
'A' -> Toggle Autorotate
'R' -> Toggle Reset Camera
'V' -> Toggle VSynch (make sure to have it off for profiling)
'U' -> Toggle UI information (thus not occluding the 3D view)
'Insert' -> Toggle FXAA Antialias
'Shift'  -> Take Screenshot

ESC -> Exit the program



C++14 & C++17 language features used in codebase:

01. Usage of 'final' keyword preventing inheritance
02. Usage of standard function creation/deletion:
    = delete
    = default
03. Usage of 'override' keyword
04. Usage of 'nullptr' keyword
05. Usage of move constructors and move assignments
06. Usage of foreach loops
07. Usage of the 'auto' and 'auto&' keywords
08. Usage of emplacement instead of insertion (emplace/emplace_back vs direct assignment/push_back)
09. Usage of class variable initialization in header files
10. Usage of vector.data() instead of &vector[0]
11. Usage of array<T, N> instead of C-style array T[N] on the stack
12. usage of make_unique<[]> instead of C-style array T* = new[N] on the heap
13. Usage of unordered_map<> associative containers
14. Usage of tuple & tie() (instead of get<n>) when appropriate
15. Usage of variadic templates for type-safe printf/snprintf encapsulation.
16. Usage of modern template meta-programming compile-time template parameters (is_integral, is_floating_point, is_arithmetic)
17. Threads & atomics API usage through a new thread N-CP style <CPUParallelism> library with a concurrent blocking queue implementation underneath and lambda usage
18. <filesystem> library usage from C++17 specs for file I/O