66 lines
2.0 KiB
C++
66 lines
2.0 KiB
C++
#include "PaintingMesh.h"
|
|
|
|
PaintingMesh::PaintingMesh(QOpenGLFunctions_4_5_Compatibility* glFunc, QOpenGLShaderProgram* shaderProgram, QOpenGLShaderProgram* shadowProgram, aiMatrix4x4 model)
|
|
: glFunc(glFunc)
|
|
, shaderProgram(shaderProgram)
|
|
, shadowProgram(shadowProgram)
|
|
, VBO(QOpenGLBuffer::VertexBuffer)
|
|
, EBO(QOpenGLBuffer::IndexBuffer)
|
|
, model((float*)&model)
|
|
{
|
|
}
|
|
void PaintingMesh::draw()
|
|
{
|
|
shaderProgram->bind();
|
|
QOpenGLVertexArrayObject::Binder bind(&VAO);
|
|
shaderProgram->setUniformValue("model", model);
|
|
glFunc->glDrawElements(GL_TRIANGLES, indices.size(), GL_UNSIGNED_INT, 0);
|
|
|
|
shaderProgram->release();
|
|
}
|
|
void PaintingMesh::drawShadow()
|
|
{
|
|
shadowProgram->bind();
|
|
QOpenGLVertexArrayObject::Binder bind(&VAO);
|
|
shadowProgram->setUniformValue("model", model);
|
|
glFunc->glDrawElements(GL_TRIANGLES, indices.size(), GL_UNSIGNED_INT, 0);
|
|
shadowProgram->release();
|
|
}
|
|
void PaintingMesh::setupMesh()
|
|
{
|
|
shaderProgram->bind();
|
|
VAO.create();
|
|
VAO.bind();
|
|
|
|
VBO.create();
|
|
EBO.create();
|
|
|
|
VBO.bind();
|
|
VBO.allocate(vertices.data(), vertices.size() * sizeof(PaintingVertex));
|
|
|
|
EBO.bind();
|
|
EBO.allocate(indices.data(), indices.size() * sizeof(unsigned int));
|
|
|
|
|
|
shaderProgram->enableAttributeArray(0);
|
|
shaderProgram->setAttributeBuffer(0, GL_FLOAT, 0, 3, sizeof(PaintingVertex));
|
|
|
|
shaderProgram->enableAttributeArray(1);
|
|
shaderProgram->setAttributeBuffer(1, GL_FLOAT, offsetof(PaintingVertex, Normal), 3, sizeof(PaintingVertex));
|
|
|
|
shaderProgram->enableAttributeArray(2);
|
|
shaderProgram->setAttributeBuffer(2, GL_FLOAT, offsetof(PaintingVertex, TexCoords), 2, sizeof(PaintingVertex));
|
|
|
|
shaderProgram->enableAttributeArray(1);
|
|
shaderProgram->setAttributeBuffer(3, GL_FLOAT, offsetof(PaintingVertex, Tangent), 3, sizeof(PaintingVertex));
|
|
|
|
shaderProgram->enableAttributeArray(1);
|
|
shaderProgram->setAttributeBuffer(4, GL_FLOAT, offsetof(PaintingVertex, Bitangent), 3, sizeof(PaintingVertex));
|
|
|
|
|
|
VAO.release();
|
|
|
|
shaderProgram->release();
|
|
|
|
}
|