Files
GP1-Raytracer/project/src/Renderer.h
Bram Verhulst a83ecb32bb Final Commit for now
This adds model support, AABB, and other optimisations
2024-11-09 21:03:54 +01:00

65 lines
1.3 KiB
C++

#pragma once
#include <cstdint>
#include "Camera.h"
#include "DataTypes.h"
struct SDL_Window;
struct SDL_Surface;
namespace dae
{
class Scene;
class Renderer final
{
public:
Renderer(SDL_Window* pWindow);
~Renderer() = default;
Renderer(const Renderer&) = delete;
Renderer(Renderer&&) noexcept = delete;
Renderer& operator=(const Renderer&) = delete;
Renderer& operator=(Renderer&&) noexcept = delete;
void Render(Scene* pScene) const;
void RenderPixel(Scene* pScene, uint32_t pixelIndex, float fov, float aspectRatio, const Matrix cameraToWorld, const Vector3& cameraPosition) const;
bool SaveBufferToImage() const;
void CycleLightingMode();
void ToggleShadows() { m_ShadowsEnabled = !m_ShadowsEnabled; }
private:
enum class LightingMode {
ObservedArea,
Radiance,
BRDF,
Combined
};
LightingMode m_CurrentLightingMode{ LightingMode::Combined };
bool m_ShadowsEnabled{ true };
SDL_Window* m_pWindow{};
SDL_Surface* m_pBuffer{};
uint32_t* m_pBufferPixels{};
int m_Width{};
int m_Height{};
float m_FOV{};
Camera m_Camera{};
ColorRGB Raytrace(const Ray& viewRay, Scene* pScene) const;
std::vector<uint16_t> m_xvalues;
};
}