OpenGLDevice.ixx File
OpenGL-specific RenderingDevice implementation. More...
Included Headers
#include <glad/gl.h>
#include <GLFW/glfw3.h>
#include <format>
#include <stdexcept>
#include <utility>
#include <cassert>
#include <helios.ext.opengl.rendering.OpenGLGlyphTextRenderer>
#include <helios.math.types>
#include <helios.rendering.ClearFlags>
#include <helios.rendering.RenderingDevice>
#include <helios.ext.opengl.rendering.OpenGLMeshRenderer>
#include <helios.rendering.RenderQueue>
#include <helios.rendering.RenderPass>
#include <helios.rendering.mesh.PrimitiveType>
#include <helios.rendering.mesh.MeshConfig>
#include <helios.rendering.RenderTarget>
#include <helios.rendering.Viewport>
#include <helios.ext.opengl.rendering.model.OpenGLMesh>
#include <helios.rendering.text.TextRenderer>
#include <helios.rendering.text.FontResourceProvider>
#include <helios.ext.opengl.rendering.shader.OpenGLShader>
Namespaces Index
| namespace | helios |
| namespace | ext |
|
Platform-specific extensions and backend implementations. More... | |
| namespace | opengl |
|
OpenGL-specific implementations. More... | |
| namespace | rendering |
|
OpenGL rendering implementations. More... | |
Classes Index
| class | OpenGLDevice |
|
OpenGL implementation of `RenderingDevice`. More... | |
Description
OpenGL-specific RenderingDevice implementation.
File Listing
The file content with the documentation metadata removed is:
34export namespace helios::ext::opengl::rendering {
66 class OpenGLDevice : public helios::rendering::RenderingDevice {
86 ~OpenGLDevice() override = default;
95 explicit OpenGLDevice(
97 std::unique_ptr<helios::ext::opengl::rendering::OpenGLGlyphTextRenderer> textRenderer,
98 std::unique_ptr<helios::rendering::text::FontResourceProvider> fontResourceProvider
101 textRenderer_(std::move(textRenderer)),
102 fontResourceProvider_(std::move(fontResourceProvider)){}
118 if (initialized_) {
125 logger_.error("Failed to load OpenGL");
131 logger_.info(std::format("OpenGL {0}.{1} loaded", GLAD_VERSION_MAJOR(gl_ver), GLAD_VERSION_MINOR(gl_ver)));
133 initialized_ = true;
147 void beginRenderPass(helios::rendering::RenderPass& renderPass) const noexcept override {
155 const helios::rendering::RenderTarget& renderTarget = *(viewport.renderTarget());
158 glViewport(static_cast<int>(renderTarget.width() * viewportBounds[0]),
159 static_cast<int>(renderTarget.height() * viewportBounds[1]),
160 static_cast<int>(renderTarget.width() * viewportBounds[2]),
161 static_cast<int>(renderTarget.height() * viewportBounds[3]));
173 glClear(((clearFlags & std::to_underlying(helios::rendering::ClearFlags::Color)) ? GL_COLOR_BUFFER_BIT : 0) |
174 ((clearFlags & std::to_underlying(helios::rendering::ClearFlags::Depth)) ? GL_DEPTH_BUFFER_BIT : 0) |
175 ((clearFlags & std::to_underlying(helios::rendering::ClearFlags::Stencil)) ? GL_STENCIL_BUFFER_BIT
190 void doRender(helios::rendering::RenderPass& renderPass) const noexcept override {
194 renderMeshCommands(renderPass);
198 renderTextCommands(renderPass);
210 void renderMeshCommands(const helios::rendering::RenderPass& renderPass) const noexcept {
228 void renderTextCommands(const helios::rendering::RenderPass& renderPass) const noexcept {
243 void endRenderPass(helios::rendering::RenderPass& renderPass) const noexcept override {
256 [[nodiscard]] helios::rendering::text::TextRenderer& textRenderer() const noexcept {
267 [[nodiscard]] helios::rendering::text::FontResourceProvider& fontResourceProvider() const noexcept override {
Generated via doxygen2docusaurus 2.0.0 by Doxygen 1.15.0.