Both desktop and mobile OpenGL versions use shader programs as parts of their rendering pipelines. Feeding just the geometry is not enough. However, there are several important differences between GLSL 3.00 ES and GLSL 3.30 Core we should deal with to create a portable rendering subsystem.
Let's start with the declaration of a uniform
value:
struct sUniform { public: explicit sUniform( const std::string& e) : FName( e ) , FLocation( -1 ) {}; sUniform( int Location, const std::string& e) : FName( e ) , FLocation( Location ) {}; std::string FName; Lint FLocation; };
This class stores name and location of a uniform within a linked shader program. The shader program class looks as follows:
class clGLSLShaderProgram: public iIntrusiveCounr { public:
The constructor takes the source code of vertex and fragment shaders as parameters:
clGLSLShaderProgram( const std::string& VShader, const std::string& FShader ); virtual ~clGLSLShaderProgram();
The...