]> git.localhorst.tv Git - blank.git/blobdiff - src/model/model.cpp
allow hsl color shifts for blocks and entities
[blank.git] / src / model / model.cpp
index b834298ac6c5354dff984b55fa4bc3b8b245c839..cc6e20e788d2ca6e721c943f871b209920dfdac5 100644 (file)
@@ -1,8 +1,11 @@
 #include "BlockModel.hpp"
 #include "EntityModel.hpp"
 #include "OutlineModel.hpp"
+#include "SkyBoxModel.hpp"
 #include "SpriteModel.hpp"
 
+#include "shapes.hpp"
+
 #include <algorithm>
 #include <iostream>
 
@@ -11,8 +14,14 @@ namespace blank {
 
 void EntityModel::Update(const Buffer &buf) noexcept {
 #ifndef NDEBUG
-       if (buf.colors.size() < buf.vertices.size()) {
-               std::cerr << "EntityModel: not enough colors!" << std::endl;
+       if (buf.tex_coords.size() < buf.vertices.size()) {
+               std::cerr << "EntityModel: not enough tex coords!" << std::endl;
+       }
+       if (buf.hsl_mods.size() < buf.vertices.size()) {
+               std::cerr << "BlockModel: not enough HSL modifiers!" << std::endl;
+       }
+       if (buf.rgb_mods.size() < buf.vertices.size()) {
+               std::cerr << "BlockModel: not enough RGB modifiers!" << std::endl;
        }
        if (buf.normals.size() < buf.vertices.size()) {
                std::cerr << "EntityModel: not enough normals!" << std::endl;
@@ -21,7 +30,9 @@ void EntityModel::Update(const Buffer &buf) noexcept {
 
        vao.Bind();
        vao.PushAttribute(ATTRIB_VERTEX, buf.vertices);
-       vao.PushAttribute(ATTRIB_COLOR, buf.colors);
+       vao.PushAttribute(ATTRIB_TEXCOORD, buf.tex_coords);
+       vao.PushAttribute(ATTRIB_HSL, buf.hsl_mods);
+       vao.PushAttribute(ATTRIB_RGB, buf.rgb_mods);
        vao.PushAttribute(ATTRIB_NORMAL, buf.normals);
        vao.PushIndices(ATTRIB_INDEX, buf.indices);
 }
@@ -34,8 +45,14 @@ void EntityModel::Draw() const noexcept {
 
 void BlockModel::Update(const Buffer &buf) noexcept {
 #ifndef NDEBUG
-       if (buf.colors.size() < buf.vertices.size()) {
-               std::cerr << "BlockModel: not enough colors!" << std::endl;
+       if (buf.tex_coords.size() < buf.vertices.size()) {
+               std::cerr << "BlockModel: not enough tex coords!" << std::endl;
+       }
+       if (buf.hsl_mods.size() < buf.vertices.size()) {
+               std::cerr << "BlockModel: not enough HSL modifiers!" << std::endl;
+       }
+       if (buf.rgb_mods.size() < buf.vertices.size()) {
+               std::cerr << "BlockModel: not enough RGB modifiers!" << std::endl;
        }
        if (buf.lights.size() < buf.vertices.size()) {
                std::cerr << "BlockModel: not enough lights!" << std::endl;
@@ -44,7 +61,9 @@ void BlockModel::Update(const Buffer &buf) noexcept {
 
        vao.Bind();
        vao.PushAttribute(ATTRIB_VERTEX, buf.vertices);
-       vao.PushAttribute(ATTRIB_COLOR, buf.colors);
+       vao.PushAttribute(ATTRIB_TEXCOORD, buf.tex_coords);
+       vao.PushAttribute(ATTRIB_HSL, buf.hsl_mods);
+       vao.PushAttribute(ATTRIB_RGB, buf.rgb_mods);
        vao.PushAttribute(ATTRIB_LIGHT, buf.lights);
        vao.PushIndices(ATTRIB_INDEX, buf.indices);
 }
@@ -76,6 +95,24 @@ void OutlineModel::Draw() noexcept {
 }
 
 
+void SkyBoxModel::LoadUnitBox() {
+       Buffer buffer;
+       CuboidShape shape({{ -1, -1, -1 }, { 1, 1, 1 }});
+       shape.Vertices(buffer);
+       Update(buffer);
+}
+
+void SkyBoxModel::Update(const Buffer &buf) noexcept {
+       vao.Bind();
+       vao.PushAttribute(ATTRIB_VERTEX, buf.vertices);
+       vao.PushIndices(ATTRIB_INDEX, buf.indices);
+}
+
+void SkyBoxModel::Draw() const noexcept {
+       vao.DrawTriangleElements();
+}
+
+
 void SpriteModel::Buffer::LoadRect(
        float w, float h,
        const glm::vec2 &pivot,