Fixed whatever was wrong with my shader

This commit is contained in:
2022-12-05 19:27:32 -08:00
parent c426dfe4d1
commit 0a4170ea3d
21 changed files with 284 additions and 61 deletions

View File

@ -12,7 +12,7 @@ namespace Dawn {
class Material : public SceneItemComponent {
private:
Shader *shader;
Shader *shader = nullptr;
/**
* Internal method that will be invoked to go through and update all of

View File

@ -14,15 +14,14 @@ MeshRenderer::MeshRenderer(SceneItem *item) : SceneItemComponent(item) {
std::vector<SceneItemComponent*> MeshRenderer::getDependencies() {
return std::vector<SceneItemComponent*>{
this->item->getComponent<MeshHost>()
this->meshHost = this->item->getComponent<MeshHost>()
};
}
void MeshRenderer::onStart() {
SceneItemComponent::onStart();
if(mesh == nullptr) {
auto host = this->item->getComponent<MeshHost>();
if(host != nullptr) this->mesh = &host->mesh;
if(this->mesh == nullptr && this->meshHost != nullptr) {
this->mesh = &this->meshHost->mesh;
}
}

View File

@ -8,7 +8,12 @@
#include "display/mesh/Mesh.hpp"
namespace Dawn {
class MeshHost;
class MeshRenderer : public SceneItemComponent {
protected:
MeshHost *meshHost = nullptr;
public:
Mesh * mesh = nullptr;

View File

@ -12,6 +12,52 @@ TiledSprite::TiledSprite(SceneItem *item) : SceneItemComponent(item) {
}
glm::vec2 TiledSprite::getUV0() {
auto tile = this->tileset->getTile(tileIndex);
return glm::vec2(
(this->flipState & TILED_SPRITE_FLIP_X) == 0 ? tile.uv0.x : tile.uv1.x,
(this->flipState & TILED_SPRITE_FLIP_Y) == 0 ? tile.uv0.y : tile.uv1.y
);
}
glm::vec2 TiledSprite::getUV1() {
auto tile = this->tileset->getTile(tileIndex);
return glm::vec2(
(this->flipState & TILED_SPRITE_FLIP_X) == 0 ? tile.uv1.x : tile.uv0.x,
(this->flipState & TILED_SPRITE_FLIP_Y) == 0 ? tile.uv1.y : tile.uv0.y
);
}
void TiledSprite::setTileset(Tileset *tileset) {
assertNotNull(tileset);
this->tileset = tileset;
this->setTile(0);
}
void TiledSprite::setTile(int32_t tileIndex) {
assertNotNull(this->tileset);
this->tileIndex = tileIndex;
if(this->host != nullptr) {
QuadMesh::bufferCoordinates(
&this->host->mesh, this->getUV0(), this->getUV1(), 0
);
}
}
void TiledSprite::setSize(glm::vec2 size, glm::vec2 center) {
this->xy0 = -center;
this->xy1 = size - center;
if(this->host != nullptr) {
QuadMesh::bufferPositions(
&this->host->mesh, this->xy0, this->xy1, 0
);
}
}
void TiledSprite::setSize(glm::vec2 size) {
this->setSize(size, size / 2.0f);
}
std::vector<SceneItemComponent*> TiledSprite::getDependencies() {
this->renderer = this->item->getComponent<MeshRenderer>();
this->host = this->item->getComponent<MeshHost>();
@ -24,12 +70,12 @@ std::vector<SceneItemComponent*> TiledSprite::getDependencies() {
void TiledSprite::onStart() {
SceneItemComponent::onStart();
assertNotNull(this->host);
assertNotNull(this->tileset);
QuadMesh::initQuadMesh(&this->host->mesh,
glm::vec2(0, 0), glm::vec2(0, 0),
glm::vec2(1, 1), glm::vec2(0.125f, 0.125f),
this->xy0, this->getUV0(),
this->xy1, this->getUV1(),
0
);
}

View File

@ -10,15 +10,32 @@
#include "display/mesh/QuadMesh.hpp"
#include "display/Tileset.hpp"
#define TILED_SPRITE_FLIP_Y FLAG_DEFINE(0)
#define TILED_SPRITE_FLIP_X FLAG_DEFINE(1)
namespace Dawn {
class TiledSprite : public SceneItemComponent {
protected:
MeshRenderer *renderer;
MeshHost *host;
MeshRenderer *renderer = nullptr;
MeshHost *host = nullptr;
Tileset *tileset = nullptr;
flag_t flipState = TILED_SPRITE_FLIP_Y;
int32_t tileIndex;
glm::vec2 xy0 = glm::vec2(0, 0);
glm::vec2 xy1 = glm::vec2(1, 1);
glm::vec2 getUV0();
glm::vec2 getUV1();
public:
TiledSprite(SceneItem *item);
void setTileset(Tileset *tileset);
void setTile(int32_t tile);
void setFlippedState(flag_t flippedState);
void setSize(glm::vec2 size, glm::vec2 center);
void setSize(glm::vec2 size);
std::vector<SceneItemComponent*> getDependencies() override;
void onStart() override;
};