mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2026-07-25 06:54:43 +00:00
Fix Live stories display without OpenGL.
This commit is contained in:
@@ -65,14 +65,18 @@ Viewport::Viewport(
|
||||
}
|
||||
|
||||
Viewport::~Viewport() {
|
||||
if (_borrowed && _opengl) {
|
||||
const auto w = static_cast<QOpenGLWidget*>(widget().get());
|
||||
w->makeCurrent();
|
||||
const auto context = w->context();
|
||||
const auto valid = w->isValid()
|
||||
&& context
|
||||
&& (QOpenGLContext::currentContext() == context);
|
||||
ensureBorrowedCleared(valid ? context->functions() : nullptr);
|
||||
if (_borrowed) {
|
||||
if (_opengl) {
|
||||
const auto w = static_cast<QOpenGLWidget*>(widget().get());
|
||||
w->makeCurrent();
|
||||
const auto context = w->context();
|
||||
const auto valid = w->isValid()
|
||||
&& context
|
||||
&& (QOpenGLContext::currentContext() == context);
|
||||
ensureBorrowedCleared(valid ? context->functions() : nullptr);
|
||||
} else {
|
||||
ensureBorrowedCleared();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -925,6 +929,7 @@ rpl::producer<bool> Viewport::mouseInsideValue() const {
|
||||
|
||||
void Viewport::ensureBorrowedRenderer(QOpenGLFunctions &f) {
|
||||
Expects(_borrowed != nullptr);
|
||||
Expects(_opengl);
|
||||
|
||||
if (_borrowedRenderer) {
|
||||
return;
|
||||
@@ -935,6 +940,7 @@ void Viewport::ensureBorrowedRenderer(QOpenGLFunctions &f) {
|
||||
|
||||
void Viewport::ensureBorrowedCleared(QOpenGLFunctions *f) {
|
||||
Expects(_borrowed != nullptr);
|
||||
Expects(_opengl);
|
||||
|
||||
if (const auto renderer = base::take(_borrowedRenderer)) {
|
||||
renderer->deinit(f);
|
||||
@@ -948,6 +954,23 @@ void Viewport::borrowedPaint(QOpenGLFunctions &f) {
|
||||
_borrowedRenderer->paint(static_cast<QOpenGLWidget*>(widget().get()), f);
|
||||
}
|
||||
|
||||
void Viewport::ensureBorrowedRenderer() {
|
||||
Expects(_borrowed != nullptr);
|
||||
Expects(!_opengl);
|
||||
|
||||
if (_borrowedRenderer) {
|
||||
return;
|
||||
}
|
||||
_borrowedRenderer = makeRenderer();
|
||||
}
|
||||
|
||||
void Viewport::ensureBorrowedCleared() {
|
||||
Expects(_borrowed != nullptr);
|
||||
Expects(!_opengl);
|
||||
|
||||
base::take(_borrowedRenderer);
|
||||
}
|
||||
|
||||
void Viewport::borrowedPaint(Painter &p, const QRegion &clip) {
|
||||
Expects(_borrowedRenderer != nullptr);
|
||||
Expects(!_opengl);
|
||||
|
||||
@@ -103,7 +103,11 @@ public:
|
||||
void ensureBorrowedRenderer(QOpenGLFunctions &f);
|
||||
void ensureBorrowedCleared(QOpenGLFunctions *f);
|
||||
void borrowedPaint(QOpenGLFunctions &f);
|
||||
|
||||
void ensureBorrowedRenderer();
|
||||
void ensureBorrowedCleared();
|
||||
void borrowedPaint(Painter &p, const QRegion &clip);
|
||||
|
||||
[[nodiscard]] QPoint borrowedOrigin() const;
|
||||
|
||||
[[nodiscard]] rpl::lifetime &lifetime();
|
||||
|
||||
@@ -52,12 +52,14 @@ void Viewport::RendererSW::paintFallback(
|
||||
}
|
||||
paintTile(p, tile.get(), bounding, bg);
|
||||
}
|
||||
const auto fullscreen = _owner->_fullscreen;
|
||||
const auto color = fullscreen
|
||||
? QColor(0, 0, 0)
|
||||
: st::groupCallBg->c;
|
||||
for (const auto &rect : bg) {
|
||||
p.fillRect(rect, color);
|
||||
if (_owner->borrowedOrigin().isNull()) {
|
||||
const auto fullscreen = _owner->_fullscreen;
|
||||
const auto color = fullscreen
|
||||
? QColor(0, 0, 0)
|
||||
: st::groupCallBg->c;
|
||||
for (const auto &rect : bg) {
|
||||
p.fillRect(rect, color);
|
||||
}
|
||||
}
|
||||
for (auto i = _tileData.begin(); i != _tileData.end();) {
|
||||
if (i->second.stale) {
|
||||
|
||||
@@ -36,6 +36,9 @@ void OverlayWidget::RendererSW::paintFallback(
|
||||
p.fillRect(clip.boundingRect(), Qt::transparent);
|
||||
return;
|
||||
}
|
||||
if (const auto stream = _owner->_videoStream.get()) {
|
||||
stream->ensureBorrowedRenderer();
|
||||
}
|
||||
_p = &p;
|
||||
_clip = &clip;
|
||||
_clipOuter = clip.boundingRect();
|
||||
|
||||
@@ -272,14 +272,14 @@ void VideoStream::ensureBorrowedRenderer(QOpenGLFunctions &f) {
|
||||
_viewport->ensureBorrowedRenderer(f);
|
||||
}
|
||||
|
||||
void VideoStream::ensureBorrowedCleared(QOpenGLFunctions *f) {
|
||||
_viewport->ensureBorrowedCleared(f);
|
||||
}
|
||||
|
||||
void VideoStream::borrowedPaint(QOpenGLFunctions &f) {
|
||||
_viewport->borrowedPaint(f);
|
||||
}
|
||||
|
||||
void VideoStream::ensureBorrowedRenderer() {
|
||||
_viewport->ensureBorrowedRenderer();
|
||||
}
|
||||
|
||||
void VideoStream::borrowedPaint(Painter &p, const QRegion &clip) {
|
||||
_viewport->borrowedPaint(p, clip);
|
||||
}
|
||||
|
||||
@@ -63,8 +63,9 @@ public:
|
||||
void toggleCommentsOn(rpl::producer<bool> shown);
|
||||
|
||||
void ensureBorrowedRenderer(QOpenGLFunctions &f);
|
||||
void ensureBorrowedCleared(QOpenGLFunctions *f);
|
||||
void borrowedPaint(QOpenGLFunctions &f);
|
||||
|
||||
void ensureBorrowedRenderer();
|
||||
void borrowedPaint(Painter &p, const QRegion &clip);
|
||||
|
||||
[[nodiscard]] rpl::lifetime &lifetime();
|
||||
|
||||
Reference in New Issue
Block a user