
So my Shader class can just load up a shader program, which consists of an optional geometry shader and mandatory vertex and fragment shaders. But in my opinion implementing a class that represents a shader program is a decent way to go, that's what I do in my 3D game engine. You don't even need a class, like you can just write some basic shaders and load/compile/link/attach them with functions LWJGL provides. How do you implement a shader in a class? And once you have a somewhat functional shader system in your program you start seeing why they can be incredibly powerful and very nice to use. You pass your transformation/projection matrices to the vertex shader and then do the final transform/projection of vertices to the screen there, etc. So shaders are essential, if you want to create an application that uses OpenGL in at least somewhat modern-way. Well, you can output some basic graphics without shaders, but that would require the use of deprecated very old OpenGL functionality.
