6#include "../../global.hpp"
8#include "../_decl/decl_opengl_image_renderer_factory.hpp"
26 return std::make_unique<GL2ImageRenderer>();
28#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
30 return std::make_unique<GL3ImageRenderer>();
37 QSurfaceFormat format;
42 stream <<
"failed to create format for OpenGL " << version;
49 QSurfaceFormat format;
55 QSurfaceFormat formatA;
57 formatA.setProfile(QSurfaceFormat::CompatibilityProfile);
58 if (TryFormat(formatA, version))
64 QSurfaceFormat formatB;
65 if (TryFormat(formatB, version))
71 QSurfaceFormat formatC;
72 formatC.setVersion(version, 0);
73 if (TryFormat(formatC, version))
84 return ReadString(version, GL_VENDOR);
89 return ReadString(version, GL_RENDERER);
92#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
93 inline OpenGLImageRendererFactory::GL3ImageRenderer::GL3ImageRenderer() noexcept
99 OpenGLImageRendererFactory::GL3ImageRenderer::UpdateBufferFormat(
const OpenGLBufferFormat &bufferFormat)
noexcept
101 SetBufferFormat(bufferFormat);
104 Image2DTexture(bufferFormat,
nullptr,
true);
107 auto size = bufferFormat.Height * (bufferFormat.Width + bufferFormat.LinePad);
111 pixelBuffer_.Release();
114 inline OpenGLImageRendererFactory::GL3ImageRenderer::GLPixelBuffer::GLPixelBuffer() noexcept
116 initializeOpenGLFunctions();
117 glGenBuffers(1, &handle_);
120 inline OpenGLImageRendererFactory::GL3ImageRenderer::GLPixelBuffer::~GLPixelBuffer()
122 glDeleteBuffers(1, &handle_);
125 inline void OpenGLImageRendererFactory::GL3ImageRenderer::GLPixelBuffer::Bind() noexcept
127 glBindBuffer(GL_PIXEL_UNPACK_BUFFER, handle_);
130 inline void OpenGLImageRendererFactory::GL3ImageRenderer::GLPixelBuffer::Release() noexcept
132 glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
135 inline void OpenGLImageRendererFactory::GL3ImageRenderer::GLPixelBuffer::Data() noexcept
137 glBufferData(GL_PIXEL_UNPACK_BUFFER,
static_cast<qopengl_GLsizeiptr
>(size_), 0, GL_STREAM_DRAW);
140 inline void OpenGLImageRendererFactory::GL3ImageRenderer::GLPixelBuffer::Data(
int size)
noexcept
143 glBufferData(GL_PIXEL_UNPACK_BUFFER,
static_cast<qopengl_GLsizeiptr
>(size_), 0, GL_STREAM_DRAW);
146 inline void *OpenGLImageRendererFactory::GL3ImageRenderer::GLPixelBuffer::Map() noexcept
149 return glMapBufferRange(GL_PIXEL_UNPACK_BUFFER, 0,
static_cast<GLsizeiptr
>(size_), GL_MAP_WRITE_BIT);
152 inline void OpenGLImageRendererFactory::GL3ImageRenderer::GLPixelBuffer::Unmap() noexcept
154 glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER);
159 OpenGLImageRendererFactory::GL2ImageRenderer::UpdateBufferFormat(
const OpenGLBufferFormat &bufferFormat)
noexcept
161 SetBufferFormat(bufferFormat);
162 auto size = bufferFormat.Height * (bufferFormat.Width);
163 std::vector<std::uint8_t>(size << 2).swap(pixelBuffer_);
static QSurfaceFormat CreateFormat(int version)
Create a OpenGL format for the given version.
Definition detail_opengl_image_renderer_factory.hpp:35
static String VendorName(int version)
Get the name of the OpenGL vendor.
Definition detail_opengl_image_renderer_factory.hpp:82
static bool TryVersion(int version) noexcept
Test if a OpenGL version is implemented on your system.
Definition detail_opengl_image_renderer_factory.hpp:47
static String RendererName(int version)
Gets the name of the OpenGL renderer.
Definition detail_opengl_image_renderer_factory.hpp:87
static std::unique_ptr< OpenGLImageRenderer > CreateRenderer(int version)
Create a renderer.
Definition detail_opengl_image_renderer_factory.hpp:18
Base class for OpenGL image renderer.
Definition decl_opengl_image_renderer.hpp:43
Namespace for user interface components.
Definition decl_image_scene.hpp:39
@ Mono
Definition ui.hpp:144
Root namespace for the Image Manager interface.
Definition c_bayer_to_rgb.h:17
std::string String
String for wide characters or unicode characters.
Definition string.hpp:49