void PointLightPositionRenderer::InitializeUniforms(Shader & shader)
{
	const char * uniformNames[__uniforms_count__] =
	{
		"u_InnerTessLevel",
		"u_OuterTessLevel",
		"u_LightDescSampler",
		"u_LightDataSampler",
		"u_LightOffset",
	};

	shader.Use();
	shader.AddUniforms(uniformNames, __uniforms_count__);

	glUniform1i(shader.GetUniform(u_LightDescSampler), 0);
	glUniform1i(shader.GetUniform(u_LightDataSampler), 1);
	glUniform1f(shader.GetUniform(u_InnerTessLevel), 1.f);
	glUniform1f(shader.GetUniform(u_OuterTessLevel), 1.f);

	shader.SetupFrameDataBlockBinding();
	shader.UnUse();

	GL_CHECK_ERRORS;
}
void SpotLightPositionRenderer::InternalRender(Shader & shader, GLsizei instanceCount, GLint lightOffset, GLuint lightDescBufferId, GLuint lightDataBufferId)
{
	glDisable(GL_CULL_FACE);
	shader.Use();
	glBindVertexArray(mVaoID);

	glUniform1i(shader.GetUniform(u_LightOffset), lightOffset);

	glActiveTexture(GL_TEXTURE0);
	glBindTexture(GL_TEXTURE_BUFFER, lightDescBufferId);

	glActiveTexture(GL_TEXTURE1);
	glBindTexture(GL_TEXTURE_BUFFER, lightDataBufferId);

	glDrawArraysInstanced(GL_TRIANGLE_FAN, 0, mIndexCount, instanceCount);

	glBindVertexArray(0);
	shader.UnUse();
	glEnable(GL_CULL_FACE);
}
void PointLightPositionRenderer::InternalRender(Shader & shader, GLsizei instanceCount, GLint lightOffset, GLuint lightDescBufferId, GLuint lightDataBufferId)
{
	glDisable(GL_CULL_FACE);
	shader.Use();
	glBindVertexArray(mVaoID);

	glUniform1i(shader.GetUniform(u_LightOffset), lightOffset);

	glActiveTexture(GL_TEXTURE0);
	glBindTexture(GL_TEXTURE_BUFFER, lightDescBufferId);

	glActiveTexture(GL_TEXTURE1);
	glBindTexture(GL_TEXTURE_BUFFER, lightDataBufferId);

	glPatchParameteri(GL_PATCH_VERTICES, 3);
	glDrawElementsInstanced(GL_PATCHES, mIndexCount, GL_UNSIGNED_SHORT, 0, instanceCount);

	glBindVertexArray(0);
	shader.UnUse();
	glEnable(GL_CULL_FACE);
}