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);
|
||||
tester.setFormat(format);
|
||||
tester.grabFramebuffer(); // Force initialize().
|
||||
if (!tester.window()->windowHandle()) {
|
||||
tester.window()->createWinId();
|
||||
}
|
||||
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."));
|
||||
return {};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,6 +10,11 @@
|
|||
|
||||
namespace Ui::GL {
|
||||
|
||||
enum class Backend {
|
||||
Raster,
|
||||
OpenGL,
|
||||
};
|
||||
|
||||
struct Capabilities {
|
||||
bool supported = false;
|
||||
bool transparency = false;
|
||||
|
|
|
|||
|
|
@ -114,9 +114,24 @@ void Renderer::paint(
|
|||
}
|
||||
|
||||
std::unique_ptr<RpWidgetWrap> CreateSurface(
|
||||
QWidget *parent,
|
||||
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) {
|
||||
case Backend::OpenGL:
|
||||
return std::make_unique<SurfaceOpenGL>(
|
||||
|
|
|
|||
|
|
@ -19,11 +19,6 @@ class RpWidgetWrap;
|
|||
|
||||
namespace Ui::GL {
|
||||
|
||||
enum class Backend {
|
||||
OpenGL,
|
||||
Raster,
|
||||
};
|
||||
|
||||
class Renderer {
|
||||
public:
|
||||
virtual void init(
|
||||
|
|
@ -62,7 +57,10 @@ struct ChosenRenderer {
|
|||
};
|
||||
|
||||
[[nodiscard]] std::unique_ptr<RpWidgetWrap> CreateSurface(
|
||||
QWidget *parent,
|
||||
Fn<ChosenRenderer(Capabilities)> chooseRenderer);
|
||||
|
||||
[[nodiscard]] std::unique_ptr<RpWidgetWrap> CreateSurface(
|
||||
QWidget *parent,
|
||||
ChosenRenderer chosen);
|
||||
|
||||
} // namespace Ui::GL
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue