gl4::Shader::Shader(const char *vertfilename, const char *fragfilename, const char *geofilename, const char *tesscontrolfilename, const char *tessevalfilename) { _shaderProgram = 0; for (int i = 0; i < 16; ++i) { _uniformLocations[i] = -1; } init(); attachVertexShader(vertfilename); attachFragmentShader(fragfilename); if (geofilename != 0) { attachGeometryShader(geofilename); } if (tesscontrolfilename != 0 && tessevalfilename != 0) { attachTessellationShader(tesscontrolfilename, tessevalfilename); } glBindAttribLocation(_shaderProgram, 0, "in_position"); glBindAttribLocation(_shaderProgram, 1, "in_st"); glBindAttribLocation(_shaderProgram, 2, "in_normal"); glBindAttribLocation(_shaderProgram, 3, "in_color"); glBindAttribLocation(_shaderProgram, 4, "in_attribute3f"); glBindAttribLocation(_shaderProgram, 5, "in_attribute1f"); link(); }
BrickShaderProgram::BrickShaderProgram() : ShaderProgram() { mFragmentShader = new BrickFragmentShader(); mVertexShader = new BrickVertexShader(); mFragmentShader->load(); mVertexShader->load(); attachFragmentShader(mFragmentShader); attachVertexShader(mVertexShader); }
Tp2ShaderProgram::Tp2ShaderProgram() : ShaderProgram() { mFragmentShader = new Tp2FragmentShader(); mVertexShader = new Tp2VertexShader(); mFragmentShader->load(); mVertexShader->load(); attachFragmentShader(mFragmentShader); attachVertexShader(mVertexShader); }
Tp2ShaderProgram::Tp2ShaderProgram(BOOL* isPointLightOn, BOOL* isSpotLightOn, BOOL* isDirectionalLightOn) : ShaderProgram(), mIsPointLightOn(isPointLightOn), mIsSpotLightOn(isSpotLightOn), mIsDirectionalLightOn(isDirectionalLightOn) { mFragmentShader = new Tp2FragmentShader(); mVertexShader = new Tp2VertexShader(); mFragmentShader->load(); mVertexShader->load(); attachFragmentShader(mFragmentShader); attachVertexShader(mVertexShader); }
void ShaderProgram::attachFragmentShaderFromFile(const char *shaderPath) { string source = loadShaderFromFile(shaderPath); attachFragmentShader(source.c_str()); }