diff options
author | tylermurphy534 <tylermurphy534@gmail.com> | 2022-10-03 06:50:49 -0400 |
---|---|---|
committer | tylermurphy534 <tylermurphy534@gmail.com> | 2022-10-03 06:50:49 -0400 |
commit | 1701aa5a616f3de55b0a426f8d9e679f2c98a0c6 (patch) | |
tree | 87a6c13fb8b7884046f9fdf8c0b7dcaaf6952f28 /src/skinned_renderer.cpp | |
parent | move chunk loading into world class (diff) | |
download | minecraftvulkan-1701aa5a616f3de55b0a426f8d9e679f2c98a0c6.tar.gz minecraftvulkan-1701aa5a616f3de55b0a426f8d9e679f2c98a0c6.tar.bz2 minecraftvulkan-1701aa5a616f3de55b0a426f8d9e679f2c98a0c6.zip |
Diffstat (limited to 'src/skinned_renderer.cpp')
-rw-r--r-- | src/skinned_renderer.cpp | 42 |
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 |