summaryrefslogtreecommitdiff
path: root/src/skinned_renderer.cpp
diff options
context:
space:
mode:
authortylermurphy534 <tylermurphy534@gmail.com>2022-10-03 06:50:49 -0400
committertylermurphy534 <tylermurphy534@gmail.com>2022-10-03 06:50:49 -0400
commit1701aa5a616f3de55b0a426f8d9e679f2c98a0c6 (patch)
tree87a6c13fb8b7884046f9fdf8c0b7dcaaf6952f28 /src/skinned_renderer.cpp
parentmove chunk loading into world class (diff)
downloadminecraftvulkan-1701aa5a616f3de55b0a426f8d9e679f2c98a0c6.tar.gz
minecraftvulkan-1701aa5a616f3de55b0a426f8d9e679f2c98a0c6.tar.bz2
minecraftvulkan-1701aa5a616f3de55b0a426f8d9e679f2c98a0c6.zip
mouse pickingHEADmain
Diffstat (limited to 'src/skinned_renderer.cpp')
-rw-r--r--src/skinned_renderer.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/skinned_renderer.cpp b/src/skinned_renderer.cpp
new file mode 100644
index 0000000..0b65d0d
--- /dev/null
+++ b/src/skinned_renderer.cpp
@@ -0,0 +1,42 @@
+#include "skinned_renderer.hpp"
+#include "chunk.hpp"
+
+namespace app {
+
+SkinnedRenderer::SkinnedRenderer(std::vector<xe::Image*> &images) {
+ xeRenderSystem = xe::RenderSystem::Builder("res/shaders/simple_shader.vert.spv", "res/shaders/simple_shader.frag.spv")
+ .addVertexBindingf(0, 3, 0) // position
+ .addVertexBindingf(1, 3, 12) // normal
+ .addVertexBindingf(2, 2, 24) // uvs
+ .addVertexBindingi(3, 1, 32) // texture
+ .setVertexSize(36)
+ .addPushConstant(sizeof(PushConstant))
+ .addUniformBinding(0, sizeof(UniformBuffer))
+ .addTextureArrayBinding(1, images)
+ .setCulling(true)
+ .setWireframe(false)
+ .build();
+}
+
+void SkinnedRenderer::render(std::vector<xe::GameObject> &gameObjects, xe::Camera &xeCamera) {
+
+ xeRenderSystem->start();
+
+ UniformBuffer ubo{};
+ ubo.projectionView = xeCamera.getProjection() * xeCamera.getView();
+ xeRenderSystem->loadUniformObject(0, &ubo);
+
+ for(auto &obj : gameObjects) {
+ if(obj.model == nullptr) continue;
+ PushConstant pc{};
+ pc.modelMatrix = obj.transform.mat4();
+ pc.normalMatrix = obj.transform.normalMatrix();
+ xeRenderSystem->loadPushConstant(&pc);
+ xeRenderSystem->render(obj);
+ }
+
+ xeRenderSystem->stop();
+
+}
+
+} \ No newline at end of file