WoW Model Viewer
Your premiere tool for viewing, equipping and animating World of Warcraft models.
Loading...
Searching...
No Matches
Renderer.h
Go to the documentation of this file.
1#pragma once
2
3#include <functional>
4
5#include <glad/gl.h>
6#include <glm/glm.hpp>
7
8class OrbitCamera;
9struct ViewportFBO;
10
18{
19public:
20 // ---- Light types -------------------------------------------------------
21
22 enum class LightType : int
23 {
24 Directional = 0,
25 Point,
26 Spot,
28 };
29
32 {
33 float direction[4] = { -1.0f, 1.0f, -1.0f, 0.0f };
34 float diffuse[3] = { 1.0f, 1.0f, 1.0f };
35 float ambient[3] = { 0.35f, 0.35f, 0.35f };
36 float specular[3] = { 0.0f, 0.0f, 0.0f };
37 float intensity = 1.0f;
38 bool enabled = true;
40 float position[3] = { 0.0f, 5.0f, 0.0f };
41 float spotCutoff = 45.0f;
42 float spotExponent = 10.0f;
43 };
44
47 {
49 bool drawCheckerBg = true;
50 bool drawGradientBg = false;
51 glm::vec3 gradientTop{0.15f, 0.20f, 0.35f};
52 glm::vec3 gradientBottom{0.02f, 0.02f, 0.05f};
53 };
54
55 Renderer() = default;
56 ~Renderer();
57
58 Renderer(const Renderer&) = delete;
59 Renderer& operator=(const Renderer&) = delete;
60
61 // ---- Lifecycle ---------------------------------------------------------
62
64 void init();
65
67 void shutdown();
68
69 // ---- State access ------------------------------------------------------
70
71 RenderState& state() noexcept { return m_state; }
72 const RenderState& state() const noexcept { return m_state; }
73
74 // ---- Rendering operations ----------------------------------------------
75
77 void applyLighting();
78
80 void applyLighting(const LightSettings& light);
81
83 void drawCheckerboard(int w, int h);
84
86 void drawGradient(int w, int h,
87 const glm::vec3& top, const glm::vec3& bottom);
88
90 void drawBackground(int w, int h);
91
93 void drawGrid(float size = 40.0f, float step = 1.0f);
94
96 void applyProjection(int w, int h, float fov,
97 float nearPlane = 0.1f, float farPlane = 6400.0f);
98
100 void applyView(const glm::mat4& viewMatrix);
101
103 void beginPass(ViewportFBO& fbo, int w, int h,
104 const glm::vec3& clearColor);
105
107 void endPass(ViewportFBO& fbo);
108
111 void renderScene(ViewportFBO& fbo, int w, int h,
112 const OrbitCamera& camera, float fov,
113 const glm::vec3& clearColor, bool drawGrid,
114 const std::function<void()>& drawObjects);
115
116 // ---- Resource access ---------------------------------------------------
117
118 GLuint checkerTexture() const noexcept { return m_checkerTex; }
119
120private:
121 GLuint m_checkerTex = 0;
123};
Orbit camera that revolves around a target point.
Definition OrbitCamera.h:10
RenderState m_state
Definition Renderer.h:122
void renderScene(ViewportFBO &fbo, int w, int h, const OrbitCamera &camera, float fov, const glm::vec3 &clearColor, bool drawGrid, const std::function< void()> &drawObjects)
Definition Renderer.cpp:280
void applyProjection(int w, int h, float fov, float nearPlane=0.1f, float farPlane=6400.0f)
Load a perspective projection matrix.
Definition Renderer.cpp:224
void beginPass(ViewportFBO &fbo, int w, int h, const glm::vec3 &clearColor)
Begin an off-screen FBO render pass (resize, bind, clear).
Definition Renderer.cpp:244
void init()
Create GPU resources. Call once after the OpenGL context is current.
Definition Renderer.cpp:16
void applyLighting()
Configure OpenGL fixed-function lighting from the current state.
Definition Renderer.cpp:261
void drawGrid(float size=40.0f, float step=1.0f)
Draw a ground grid with highlighted centre axes.
Definition Renderer.cpp:186
Renderer()=default
RenderState & state() noexcept
Definition Renderer.h:71
void drawBackground(int w, int h)
Draw the background (checker or gradient) based on current state.
Definition Renderer.cpp:266
void drawCheckerboard(int w, int h)
Draw a tiled checkerboard pattern in screen space.
Definition Renderer.cpp:110
Renderer & operator=(const Renderer &)=delete
const RenderState & state() const noexcept
Definition Renderer.h:72
GLuint m_checkerTex
Definition Renderer.h:121
Renderer(const Renderer &)=delete
void shutdown()
Release GPU resources.
Definition Renderer.cpp:33
GLuint checkerTexture() const noexcept
Definition Renderer.h:118
void applyView(const glm::mat4 &viewMatrix)
Load a view (camera) matrix.
Definition Renderer.cpp:235
void endPass(ViewportFBO &fbo)
End the current FBO render pass (unbind).
Definition Renderer.cpp:254
void drawGradient(int w, int h, const glm::vec3 &top, const glm::vec3 &bottom)
Draw a vertical gradient quad in screen space.
Definition Renderer.cpp:151
~Renderer()
Definition Renderer.cpp:9
Plain-data description of a single light source.
Definition Renderer.h:32
Aggregate rendering state exposed for UI binding.
Definition Renderer.h:47
glm::vec3 gradientBottom
Definition Renderer.h:52
glm::vec3 gradientTop
Definition Renderer.h:51
LightSettings light
Definition Renderer.h:48
Simple OpenGL framebuffer object wrapper for off-screen rendering.
Definition ViewportFBO.h:10