- Merged fix to use snprintf() and remove build warnings
- CSCI441::drawCubeMap() specifies three-dimensional texture coordinate
- TextureUtils::loadAndRegister2DTexture() sets anisotropic filtering (if available)
- TextureUtils::loadAndRegisterTexture() added flags to toggle mipmaps and anisotropic filtering
- ModelLoader::_loadObjFile() checks if current face has texture coordinates in addition to entire model
- Fixed GPU memory leak of not deleting cube IBOs
- Add CSCI441::OpenGLUtils::checkOpenGLError() method to check the error queue
- When requesting an OpenGL 4.3+ debug context, register debug callback
- TextureUtils::loadAndRegister2DTexture() can silence error message
- MD5Model silences all but final texture fail messages during load
- ShaderProgram uses glm::value_ptr() for passing vectors and matrices to program uniforms
- Include glad/gl.h in materials.hpp for GLfloat to exist if file included on its own
- Patched bug with objects.hpp wire objects not resetting the polygon mode back for the front_and_back properly
- Updated README
- Updated glm dependency to v1.0.1
- Added half sphere and dome to HUD example
- Fixed shader uniform debug output typos
- OpenGLUtils: Does not print full list of extensions with OpenGL statistics, created a separate function that can be called for full listing
- MD5Camera: fixed bug where inverseQ normalization was being discarded and not set
- MD5Model: added GLM_ENABLE_EXPERIMENTAL for quaternion header to match GLM v1.0.1
- OrthographicCamera: fixed bug where _updateProjectionMatrix was not declared inline
- Removed [[nodiscard]] from ModelLoader::draw() to silence warnings. Currently method always returns true so the return value isn't applicable.
- Changed format of extensions listing header
- Added abstract PerspectiveCamera class to house aspect ratio, field of view, near/far clip planes. When any is updated, the perspective projection matrix is recomputed
- Added abstract OrthographicCamera class to house left, right, bottom, top, near, far clip planes
- OpenGLEngine tracks the state of the Caps Lock and Num Lock keys during key callbacks
- OpenGL queries checks Point Size Range
- Added functions to convert material float arrays into a glm object
- Use glm::value_ptr() instead of &[0] to access beginning of data array
- Query all available OpenGL extensions
- Display the list in OpenGLUtils when printing info
- Store a set of available extensions in OpenGLEngine to do a quick boolean query to check if a specific extension exists
- Added CSCI441::drawSolidDome() and CSCI441::drawWireDome() which is a half-sphere with an open bottom
- Added CSCI441::drawSolidHalfSphere() and CSCI441::drawWireHalfSphere() which is a half-sphere with a capped bottom
- ModelLoader no longer prints "ignoring usemtl" line when parsing file
- Supports OpenGL function loading via glad2 or GLEW (the default is glad2)
- Updated GLFW dependency from 3.3.8 to 3.4
- ShaderUtils::compileShader() returns 0 to properly signal an error
- Added glm::vec4 include to modelMaterial.hpp when included on its own
- Fixed winding order for generateCubeVAOIndexed() for near, right, top faces
- Fixed memory bug with generateCubeVAOIndexed() VBO
- Fixed memory bug with generateCubeVAOIndexed() texture coordinates
- Cleaned up warnings
- Minor bug fixes
- Internal data representation changes
- Fixed bug with MD5Model loader not reading shader strings correctly
- Removed warnings
- Computed teapot normals based on partial derivatives
- Added HUDCamera
- Including Makefile
- Fixing documentation links
- Added example programs to demonstrate SimpleShader2 and SimpleShader3 + 3D Objects
- Moved revision history into dedicated changelog file
- Replacing cmath dependency with glm references (PI specifically)
- Warnings removed
- Fixed doxygen version number
- Fixed aspect ratio calculation in OpenGL3DEngine
- Fixed MD5Model destruction if error loading model
- Removed internal references to glUniform*() and replaced with glProgramUniform*() to not change bound program state
- Cleaned up documentation
- OpenGL3DEngine can handle events that have an effect on the arcball camera movement
- Big3 implemented on classes as appropriate
- Classes and methods open/close as appropriate
- Cannot copy MD5 Models
- Created MD5Model class to load, display, and animate md5mesh + md5anim files
- Deleted copy constructor and copy assignment operator for ShaderProgram and ComputeShaderProgram to prevent shader program objects from being copied and then deallocated on the GPU
- TextureUtils::loadAndRegisterTexture() now has a trailing parameter to specify if the image should be flipped when loaded or not (defaults to flip = true)
- Camera stores projection matrix along with view matrix
- ArcballCam, FixedCam, FreeCam operate with perspective projections
- MD5Camera class loads and steps through frames of md5camera file
- MD5Camera operates with perspective projection
- ShaderProgram::getProgramStages() returns GLbitfield of shader stages
- Improved and consistent web documentation using a consistent style for all public facing classes and members, methods, and namespaces
- Minor performance improvements
- setupGLEW() and cleanupGLEW() made private members of OpenGLEngine
- Improving web documentation using a consistent style
- Cleaned up order of includes
- Fixed publishing to GitHub pages
- Improving web documentation using a consistent style
- Refactored protected class member naming scheme from _xyz to mXyz
- Improving web documentation
- Improving web documentation
- Consistently use only single precision and GLfloat typedef for OS X Metal compatibility
- Fixed renaming bug in ModelLoader _AUTO_GEN_NORMALS and properly initialize to false
- Removed memory leaks in object generation of cylinder, disk, sphere, and torus
- Cleaned up Camera class warnings
- Replaced OpenGL3DEngine internal arcball implementation with ArcballCam object
- Camera::_clampCameraPhi() explicitly checking against floats instead of double
- Added capability for ShaderProgram to write to/load from binary - if supported by driver
- ModelLoader no longer internal applies using namespace std; and qualifies all STL types
- ModelLoader can query number of vertices and indices within model
- TextureUtils load method will roll back to ppm loader if stb_image fails to load ppm
- Reversed top fan winding order for spheres
- Resolved Issue #2 for OBJ files with negative indices. The negative indices weren't unique and needed to offset before caching
- Fixed get polygon mode bug where it returns two values
- Objects and Teapot only enable attribute locations if they are not -1. Prevents an invalid enum error
- Improved encapsulation of Arcball radius modification
- Drawing objects now resets glPolygonMode to previous value instead of just forcing GL_FILL
- When deleting a Shader Program, check the deletion status
- Adding 3D texture coordinates to indexed cube and adding entry point to explicitly drawCubeMap()
- Corrected normals for indexed cube
- Changed object and teapot internal variables from static to inline to support multi-compilation and single use across multiple contexts
- Created a concrete ArcBall Cam implementation
- Added full getter suite to Camera class
- Fixed bug within SimpleShader when the SimpleShader was used split across multiple class objects
- Created a concrete Fixed Camera implementation that can be positioned but doesn't move
- Fixed FreeCam being included across multiple object files
- Created an abstract Camera class to store parameters and to make camera objects
- Created a concrete FreeCam implementation
- Reworked SimpleShader::popTransformation() to always re-multiply the model matrix and not use the inverse calculation to avoid precision errors
- Cleaning up code style
- Removed deprecated functions in ShaderUtils
- Removed printLog() in ShaderUtils forcing explicit use of printShaderLog(), printProgramLog(), printProgramPipelineLog()
- Removed loadBMP() and loadTGA() in TextureUtils. Use stb_image library instead
- Improved efficiency of setting VBO attribute locations for teapot
- Sidestepped the precision error in SimpleShader2 (and therefore SimpleShader3) when popping and multiplying by the inverse by adding a resetTransformationMatrix() method which clears the stack and sets the model matrix to the identity
- Removed all ShaderProgram::setUniform(). Use ShaderProgram::setProgramUniform() instead.
- Reworked ModelLoader.hpp to first set attribute locations then specify the shader handle. This allows for the model to be used with separable programs and shader pipelines.
- Renamed modelLoader.hpp to ModelLoader.hpp to reflect it stores a class
- Created abstract OpenGLEngine and abstract OpenGL3DEngine classes to provide framework for a class engine style framework.
- ShaderProgram class caches attribute locations for quicker repeated lookups instead of doing program introspection each time.
- Added ability to load a texture to a cube map face via TextureUtils
- ShaderProgram::setProgramUniform() now supports glm::ivec and glm::uvec
- Marked functions as deprecated that will be removed in v4
- Cleaned up console output for ShaderPrograms
- Various fixes to ShaderProgramPipelines
- Added wrapper class for ComputeShaderProgram
- Added support to ShaderProgram to return Shader Storage Buffer Block bindings
- Added support to ShaderProgram to return Atomic Counter bindings
- Updated ShaderProgram info output to include SSBO and ABO info
- Added wrappers to ShaderProgram to set a uniform by name or location
- Created Shader Program Pipeline class to wrap Pipeline Objects. Interfaces with the ShaderProgram class.
- Added getters to vertex data for ModelLoader class
- Added texture coordinates to Teapot
- Added predefined Material properties for reuse
- Allow multi-compilation for objects.hpp with shaders. Now depends upon C++17
- Allow multi-compilation for ShaderProgram.hpp. Now depends upon C++17
- Fixed memory leak in objects.hpp cylinder, sphere, disk, torus caching
- Added method for objects.hpp to delete the used VAOs/VBOs from GPU memory
- Delete compiled shaders from GPU after Shader Program is linked to free up memory sooner
- Removed invalid enum error when querying max number of lights in OpenGL 3+
- Only single version of library files to work with OpenGL 4.1
- Removed dependency upon SOIL and replaced with stb_image
- Fixed bug of spheres not being spheres due to precision error
- Marked modelLoader3.hpp function implementations as inline to prevent redefinition errors
- Added support for MTL files for Phong Shading and diffuse maps
- Added loadBMP() support to TextureUtils.hpp
- Added support for ASCII STL files to modelLoader3.hpp
- Added support for OFF files to modelLoader3.hpp
- Fixed reallocation error if model did not load properly
- Added support for ASCII PLY files to modelLoader3.hpp (as long as first three vertex properties are x/y/z location)
- If PLY file does not contain normal information (we're currently not checking for it), can autogenerate vertex normals
- If OFF file does not contain normal information, can autogenerate vertex normals
- If OBJ file does not contain normal information, can autogenerate vertex normals
- Added FramebufferUtils3.hpp to print Framebuffer info
- Fixed off by 1 error for normals/texcoords in modelLoader3.hpp
- Fixed overflow error for modelLoader3.hpp when reading in models with more than 65535 vertices
- Fixed redefinition errors in teapot3.hpp and objects3.hpp
- Fixed bug in ShaderUtils3.hpp to check if OpenGL is version 4.0+ before querying subroutine uniforms
- Added loadTGA method to TextureUtils.hpp
- Commenting added to TextureUtils.hpp
- Converted OpenGLUtils from static non-implementable class to namespace
- Added commenting to ShaderProgram3.hpp
- Fixed bug in objects3.hpp of internally passing torus parameters in incorrect order
- Created ShaderUtils3.hpp and ShaderProgram3.hpp to make working with Shaders easier
- Matched internal data types to prevent c++11 narrowing warnings on lab machines
- Modified texture coordinates for cylinder to linear step from 0 to 1 in s instead of following cosine
- Modified texture coordinates for sphere to linear step form 0 to 1 in s & t instead of following sine and cosine
- Fixed bug when disk was not being displayed if consisting of 1 ring
- Fixed bug with Partial Disk not starting at current angle
- Fixed bug with normals on Sphere stacks
- Added modelLoader3.hpp to handle loading and drawing OBJ files
- Added objects3.hpp that allow for solid primitives to be drawn with OpenGL 3.0
- Notes for teapot - the teapot cannot be textured, and it is a pure teapot with no bottom
- For a textured teapot, look into using an object model
- Fixed error in draw*Disk not completing final slice step
- Added TextureUtils to load in a PPM
- Added MaterialStruct structure to group together Phong properties
- Fixed error in drawSolidDisk() not allowing inner radius to be zero
- Removed GL_MAX_COLOR_ATTACHMENTS to comply with lab machines
- Added OpenGLUtils class to store commonly used helper functions
- Added documentation
- Added inline definition to functions to prevent duplicate linking errors
- Initial release of all OpenGL 3D objects