PointLightPositionRenderer::PointLightPositionRenderer() : Renderers::IcosahedronRendererBase() { InitializeVertexBuffer(); LoadShaders(mShader, "shaders/IcosahedronShader.PointLight.gs.glsl", "shaders/IcosahedronShader.PointLight.forward.fs.glsl"); InitializeUniforms(mShader); LoadShaders(mWireFrameShader, "shaders/IcosahedronShader.PointLight.gs.glsl", "shaders/IcosahedronShader.WireFrame.forward.fs.glsl"); InitializeUniforms(mWireFrameShader); mIsInitialized = true; }
SpotLightPositionRenderer::SpotLightPositionRenderer(GLuint numStrips) : Renderers::ConeRendererBase() { InitializeVertexBuffer(numStrips); LoadShaders(mShader, "shaders/ConeShader.Light.gs.glsl", "shaders/ConeShader.Light.forward.fs.glsl"); InitializeUniforms(mShader); LoadShaders(mWireFrameShader, "shaders/ConeShader.Light.gs.glsl", "shaders/IcosahedronShader.WireFrame.forward.fs.glsl"); InitializeUniforms(mWireFrameShader); mIsInitialized = true; }
void Shader::LoadShaderProgramFromFile() { assert(shaderID < 0 && "Already have loaded a shader"); std::ifstream file; file.open(path, std::ifstream::in); assert(file.good() && "Failed to open shader file!"); string fullFilePath = path.substr(0, path.find_last_of('/') + 1); auto vertShaderID = 0; auto fragShaderID = 0; while (file.good()) { string line = ""; std::getline(file, line); if (line == "") break; auto fileToLoadPath = fullFilePath + line.substr(5); auto fileToLoad = line.substr(0, 4); if (fileToLoad == "vert") { vertShaderID = Load(GL_VERTEX_SHADER, fileToLoadPath); } else if (fileToLoad == "frag") { fragShaderID = Load(GL_FRAGMENT_SHADER, fileToLoadPath); } } shaderID = glCreateProgram(); glAttachShader((GLuint)shaderID, (GLuint)fragShaderID); glAttachShader((GLuint)shaderID, (GLuint)vertShaderID); SetupAttributeBindings(); glLinkProgram(shaderID); CheckForGLSLErrors(); glDeleteShader(vertShaderID); glDeleteShader(fragShaderID); BindIfNeeded(); InitializeUniforms(); UnbindIfNeeded(); }