summaryrefslogtreecommitdiff
path: root/src/simple_renderer.cpp
blob: 82acb46e2295974af4f7bb874006bcfe5cacb947 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include "simple_renderer.hpp"
#include "xe_render_system.hpp"

#include <iostream>

namespace app {

SimpleRenderer::SimpleRenderer(xe::Engine &xeEngine, xe::Image *xeImage) {
  xeRenderSystem = xe::RenderSystem::Builder(xeEngine, "res/shaders/simple_shader.vert.spv", "res/shaders/simple_shader.frag.spv")
    .addVertexBinding(0, 3, 0)
    .addVertexBinding(1, 3, 12)
    .addVertexBinding(2, 3, 24)
    .addVertexBinding(3, 2, 36)
    .setVertexSize(sizeof(Vertex))
    .addPushConstant(sizeof(PushConstant))
    .addUniformBinding(0, sizeof(UniformBuffer))
    .addTextureBinding(1, xeImage)
    .setCulling(true)
    .build();
}

void SimpleRenderer::render(std::vector<xe::GameObject> &gameObjects, xe::Camera &xeCamera, xe::Image *xeImage) {

  xeRenderSystem->loadTexture(1, xeImage);

  xeRenderSystem->start();

  UniformBuffer ubo{};
  ubo.projectionView = xeCamera.getProjection() * xeCamera.getView();
  xeRenderSystem->loadUniformObject(0, &ubo);

  for(auto &obj : gameObjects) {
    PushConstant pc{};
    pc.modelMatrix = obj.transform.mat4();
    pc.normalMatrix = obj.transform.normalMatrix();
    xeRenderSystem->loadPushConstant(&pc);
    xeRenderSystem->render(obj);
  }

  xeRenderSystem->stop();

}

}