57 lines
1.5 KiB
C++
57 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())
|
|
{
|
|
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];
|
|
}
|