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;
}
예제 #3
0
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();
}