kale2d/src/renderer.h

42 lines
1.1 KiB
C++

#pragma once
#include "types.h"
#include "pipelines.h"
#include <SDL3/SDL_gpu.h>
#include <SDL3/SDL_video.h>
#include <SDL3/SDL_gamepad.h>
struct Renderer {
SDL_GPUDevice* dev = nullptr;
SDL_Window* win = nullptr;
SDL_Gamepad* gamepad = nullptr;
ScenePipeline scene;
RayPipeline ray;
PostPipeline post;
SDL_GPUBuffer* vert_buff = nullptr;
SDL_GPUTexture* render_tex = nullptr;
SDL_GPUTexture* post_tex = nullptr;
SDL_GPUTexture* depth_tex = nullptr;
SDL_GPUSampler* render_sampler = nullptr;
SDL_GPUSampler* depth_sampler = nullptr;
uint32_t render_w = 0, render_h = 0;
uint64_t frame = 0;
std::vector<Vertex> vertices;
bool init(SDL_Window* win);
void destroy();
void draw(const CameraUBO& ubo);
private:
bool load_obj();
bool load_bsp();
void add_gol_layer();
void resize_render_texture(uint32_t w, uint32_t h);
void pass_scene(SDL_GPUCommandBuffer* cmd, const CameraUBO& ubo);
void pass_ray(SDL_GPUCommandBuffer* cmd, const CameraUBO& ubo);
void pass_post(SDL_GPUCommandBuffer* cmd, SDL_GPUTexture* swapchain, const CameraUBO& ubo);
};