SparrowRenderer/phongmodule.cpp

58 lines
1.5 KiB
C++

#include "phongmodule.h"
#include "lights.h"
#include "shader.h"
#include "phongentity.h"
#include "camera.h"
#include "mesh.h"
#include "sparrowrenderer.h"
#include "glassert.h"
#include <glm/ext.hpp>
Shader* PhongModule::shaders[NB_SHADERS] = {0, 0};
PhongModule::PhongModule(Lights::Light* myDirLight, Lights* myPointLights) :
dirLight(myDirLight),
pointLights(myPointLights)
{
if(!SparrowRenderer::isModernOpenGLAvailable())
{
glAssert(glEnable(GL_LIGHTING));
glAssert(glEnable(GL_LIGHT0));
glAssert(glLightfv(GL_LIGHT0, GL_AMBIENT, glm::value_ptr(glm::vec4(glm::vec3(0.1f), 1))));
glAssert(glLightfv(GL_LIGHT0, GL_POSITION, glm::value_ptr(glm::vec4(dirLight->position, 0))));
// TODO add point lights
}
}
void PhongModule::addEntity(PhongEntity* myEntity)
{
entities.push_back(myEntity);
}
void PhongModule::clearEntities()
{
entities.clear();
}
void PhongModule::renderGL(Camera* myCamera)
{
if(!SparrowRenderer::isModernOpenGLAvailable())
{
glLoadIdentity();
glAssert(glLightfv(GL_LIGHT0, GL_DIFFUSE, glm::value_ptr(glm::vec4(dirLight->color, 1))));
glAssert(glLightfv(GL_LIGHT0, GL_SPECULAR, glm::value_ptr(glm::vec4(dirLight->color, 1))));
}
for(PhongEntity* e : entities)
e->draw(myCamera->getViewMatrix(), myCamera->getProjectionMatrix(), dirLight, pointLights);
}
void PhongModule::setShader(ShaderType slot, Shader* myShader)
{
shaders[slot] = myShader;
}
Shader* PhongModule::getShader(ShaderType slot)
{
return shaders[slot];
}