This library is intended to be used with OpenGL for CSCI441 at the Colorado School of Mines.
When building, the library must be compiled and linked against OpenGL, GLFW, GLEW, and glm.
- 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::_clampPhi() 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