48 lines
1.4 KiB
C++
48 lines
1.4 KiB
C++
#include "phongmaterial.h"
|
|
#include "texture.h"
|
|
#include "phongmodule.h"
|
|
#include <glm/ext.hpp>
|
|
|
|
#define TEX_ID 0
|
|
|
|
void PhongMaterial::updateShader()
|
|
{
|
|
shader = PhongModule::getShader(diffuse_texture == NULL ? PhongModule::PHONG_COLOR : PhongModule::PHONG_TEXTURE);
|
|
}
|
|
|
|
void PhongMaterial::bindAttributes()
|
|
{
|
|
shader->bind();
|
|
shader->bindVec3(shader->getLocation("materialAmbient"), emission);
|
|
shader->bindVec3(shader->getLocation("materialKd"), diffuse);
|
|
shader->bindVec3(shader->getLocation("materialKs"), specular);
|
|
shader->bindFloat(shader->getLocation("materialNs"), shininess);
|
|
if(diffuse_texture != NULL)
|
|
{
|
|
diffuse_texture->bind(TEX_ID);
|
|
shader->bindInteger(shader->getLocation("baseTexture"), TEX_ID);
|
|
}
|
|
}
|
|
|
|
void PhongMaterial::crappyBindAttributes()
|
|
{
|
|
glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, glm::value_ptr(glm::vec4(emission, 1)));
|
|
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, glm::value_ptr(glm::vec4(diffuse, 1)));
|
|
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, glm::value_ptr(glm::vec4(specular, 1)));
|
|
glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, shininess);
|
|
if(diffuse_texture != NULL)
|
|
diffuse_texture->bind(TEX_ID);
|
|
else
|
|
{
|
|
GLenum texSlot = GL_TEXTURE0+TEX_ID;
|
|
glActiveTexture(texSlot);
|
|
glBindTexture(GL_TEXTURE_2D, 0);
|
|
}
|
|
}
|
|
|
|
void PhongMaterial::setTexture(Texture* myTexture)
|
|
{
|
|
diffuse_texture = myTexture;
|
|
updateShader();
|
|
}
|