For surface with parent backend should be fixed.
This commit is contained in:
parent
cbb65009ff
commit
7bc9e12614
4 changed files with 32 additions and 9 deletions
|
|
@ -46,8 +46,13 @@ Capabilities CheckCapabilities(QWidget *widget) {
|
||||||
auto tester = QOpenGLWidget(widget);
|
auto tester = QOpenGLWidget(widget);
|
||||||
tester.setFormat(format);
|
tester.setFormat(format);
|
||||||
tester.grabFramebuffer(); // Force initialize().
|
tester.grabFramebuffer(); // Force initialize().
|
||||||
|
if (!tester.window()->windowHandle()) {
|
||||||
|
tester.window()->createWinId();
|
||||||
|
}
|
||||||
const auto context = tester.context();
|
const auto context = tester.context();
|
||||||
if (!context) {
|
if (!context
|
||||||
|
|| !context->isValid()
|
||||||
|
|| !context->makeCurrent(tester.window()->windowHandle())) {
|
||||||
LOG_ONCE(("OpenGL: Could not create widget in a window."));
|
LOG_ONCE(("OpenGL: Could not create widget in a window."));
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,11 @@
|
||||||
|
|
||||||
namespace Ui::GL {
|
namespace Ui::GL {
|
||||||
|
|
||||||
|
enum class Backend {
|
||||||
|
Raster,
|
||||||
|
OpenGL,
|
||||||
|
};
|
||||||
|
|
||||||
struct Capabilities {
|
struct Capabilities {
|
||||||
bool supported = false;
|
bool supported = false;
|
||||||
bool transparency = false;
|
bool transparency = false;
|
||||||
|
|
|
||||||
|
|
@ -114,9 +114,24 @@ void Renderer::paint(
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<RpWidgetWrap> CreateSurface(
|
std::unique_ptr<RpWidgetWrap> CreateSurface(
|
||||||
QWidget *parent,
|
|
||||||
Fn<ChosenRenderer(Capabilities)> chooseRenderer) {
|
Fn<ChosenRenderer(Capabilities)> chooseRenderer) {
|
||||||
auto chosen = chooseRenderer(CheckCapabilities(parent));
|
auto chosen = chooseRenderer(CheckCapabilities(nullptr));
|
||||||
|
switch (chosen.backend) {
|
||||||
|
case Backend::OpenGL:
|
||||||
|
return std::make_unique<SurfaceOpenGL>(
|
||||||
|
nullptr,
|
||||||
|
std::move(chosen.renderer));
|
||||||
|
case Backend::Raster:
|
||||||
|
return std::make_unique<SurfaceRaster>(
|
||||||
|
nullptr,
|
||||||
|
std::move(chosen.renderer));
|
||||||
|
}
|
||||||
|
Unexpected("Backend value in Ui::GL::CreateSurface.");
|
||||||
|
}
|
||||||
|
|
||||||
|
std::unique_ptr<RpWidgetWrap> CreateSurface(
|
||||||
|
QWidget *parent,
|
||||||
|
ChosenRenderer chosen) {
|
||||||
switch (chosen.backend) {
|
switch (chosen.backend) {
|
||||||
case Backend::OpenGL:
|
case Backend::OpenGL:
|
||||||
return std::make_unique<SurfaceOpenGL>(
|
return std::make_unique<SurfaceOpenGL>(
|
||||||
|
|
|
||||||
|
|
@ -19,11 +19,6 @@ class RpWidgetWrap;
|
||||||
|
|
||||||
namespace Ui::GL {
|
namespace Ui::GL {
|
||||||
|
|
||||||
enum class Backend {
|
|
||||||
OpenGL,
|
|
||||||
Raster,
|
|
||||||
};
|
|
||||||
|
|
||||||
class Renderer {
|
class Renderer {
|
||||||
public:
|
public:
|
||||||
virtual void init(
|
virtual void init(
|
||||||
|
|
@ -62,7 +57,10 @@ struct ChosenRenderer {
|
||||||
};
|
};
|
||||||
|
|
||||||
[[nodiscard]] std::unique_ptr<RpWidgetWrap> CreateSurface(
|
[[nodiscard]] std::unique_ptr<RpWidgetWrap> CreateSurface(
|
||||||
QWidget *parent,
|
|
||||||
Fn<ChosenRenderer(Capabilities)> chooseRenderer);
|
Fn<ChosenRenderer(Capabilities)> chooseRenderer);
|
||||||
|
|
||||||
|
[[nodiscard]] std::unique_ptr<RpWidgetWrap> CreateSurface(
|
||||||
|
QWidget *parent,
|
||||||
|
ChosenRenderer chosen);
|
||||||
|
|
||||||
} // namespace Ui::GL
|
} // namespace Ui::GL
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue