47 lines
1.5 KiB
C++
47 lines
1.5 KiB
C++
// Copyright (c) 2023 Dominic Masters
|
|
//
|
|
// This software is released under the MIT License.
|
|
// https://opensource.org/licenses/MIT
|
|
|
|
#include "SimpleTexturedShader.hpp"
|
|
#include "scene/components/display/MeshRenderer.hpp"
|
|
#include "scene/components/display/Camera.hpp"
|
|
|
|
using namespace Dawn;
|
|
|
|
void SimpleTexturedShader::compile() {
|
|
this->program.compile();
|
|
}
|
|
|
|
std::vector<struct ShaderPassItem> SimpleTexturedShader::getPassItems(
|
|
Mesh *mesh,
|
|
Material *material,
|
|
Camera *camera
|
|
) {
|
|
SimpleTexturedMaterial *simpleMaterial = dynamic_cast<SimpleTexturedMaterial*>(material);
|
|
assertNotNull(simpleMaterial);
|
|
|
|
struct ShaderPassItem onlyPass;
|
|
onlyPass.mesh = mesh;
|
|
onlyPass.shaderProgram = &program;
|
|
onlyPass.colorValues[program.paramColor] = simpleMaterial->color;
|
|
onlyPass.matrixValues[program.paramModel] = material->transform->getWorldTransform();
|
|
onlyPass.matrixValues[program.paramView] = camera->transform->getWorldTransform();
|
|
onlyPass.matrixValues[program.paramProjection] = camera->projection;
|
|
onlyPass.renderFlags = (
|
|
RENDER_MANAGER_RENDER_FLAG_BLEND |
|
|
RENDER_MANAGER_RENDER_FLAG_DEPTH_TEST
|
|
);
|
|
|
|
if(simpleMaterial->texture != nullptr) {
|
|
onlyPass.boolValues[program.paramHasTexture] = true;
|
|
onlyPass.textureSlots[0] = simpleMaterial->texture;
|
|
onlyPass.textureValues[program.paramTexture] = 0;
|
|
} else {
|
|
onlyPass.boolValues[program.paramHasTexture] = false;
|
|
}
|
|
|
|
std::vector<struct ShaderPassItem> passes;
|
|
passes.push_back(onlyPass);
|
|
return passes;
|
|
} |