working but often the spectator camera texture is not right.

This commit is contained in:
David Kelly 2017-06-16 08:40:18 -07:00
parent f75cbfa087
commit 6d64261e94
3 changed files with 38 additions and 21 deletions

View file

@ -30,7 +30,7 @@ void ResourceImageItem::setReady(bool ready) {
if (ready != m_ready) {
m_ready = ready;
if (m_ready) {
m_updateTimer.start(1000);
m_updateTimer.start(100);
} else {
m_updateTimer.stop();
}
@ -40,6 +40,7 @@ void ResourceImageItem::setReady(bool ready) {
void ResourceImageItemRenderer::synchronize(QQuickFramebufferObject* item) {
ResourceImageItem* resourceImageItem = static_cast<ResourceImageItem*>(item);
bool urlChanged = false;
if( _url != resourceImageItem->getUrl()) {
_url = resourceImageItem->getUrl();
@ -50,11 +51,27 @@ void ResourceImageItemRenderer::synchronize(QQuickFramebufferObject* item) {
_ready = resourceImageItem->getReady();
readyChanged = true;
}
if (!_ready && readyChanged) {
qDebug() << "clearing network texture!!!!!!!!!!!!!!!!!";
_networkTexture.clear();
}
_window = resourceImageItem->window();
qDebug() << "synchronize called!!!!!!!";
if (_ready && !_url.isNull() && !_url.isEmpty() && (readyChanged || urlChanged)) {
if (_ready && !_url.isNull() && !_url.isEmpty() && (urlChanged || readyChanged || !_networkTexture)) {
_networkTexture = DependencyManager::get<TextureCache>()->getTexture(_url);
}
if (_networkTexture) {
qDebug() << "copying texture";
auto texture = _networkTexture->getGPUTexture();
if (texture) {
if (_fboMutex.tryLock()) {
qApp->getActiveDisplayPlugin()->copyTextureToQuickFramebuffer(texture, framebufferObject());
_fboMutex.unlock();
}
}
}
}
QOpenGLFramebufferObject* ResourceImageItemRenderer::createFramebufferObject(const QSize& size) {
@ -64,12 +81,7 @@ QOpenGLFramebufferObject* ResourceImageItemRenderer::createFramebufferObject(con
}
void ResourceImageItemRenderer::render() {
qDebug() << "render called!!!!!!!!!!!!!!";
if (_networkTexture && _ready) {
auto texture = _networkTexture->getGPUTexture();
if (texture) {
qApp->getActiveDisplayPlugin()->copyTextureToQuickFramebuffer(texture, framebufferObject());
_fboMutex.lock();
_window->resetOpenGLState();
}
}
_fboMutex.unlock();
}

View file

@ -24,8 +24,11 @@ public:
private:
bool _ready;
QString _url;
NetworkTexturePointer _networkTexture;
QQuickWindow* _window;
QOpenGLFramebufferObject* _copyFbo;
QMutex _fboMutex;
};
class ResourceImageItem : public QQuickFramebufferObject {

View file

@ -891,12 +891,14 @@ NetworkTexturePointer TextureCache::getResourceTexture(QUrl resourceTextureUrl)
if (!_spectatorCameraNetworkTexture) {
_spectatorCameraNetworkTexture.reset(new NetworkTexture(resourceTextureUrl));
}
if (_spectatorCameraFramebuffer) {
texture = _spectatorCameraFramebuffer->getRenderBuffer(0);
if (texture) {
_spectatorCameraNetworkTexture->setImage(texture, texture->getWidth(), texture->getHeight());
return _spectatorCameraNetworkTexture;
}
}
}
return NetworkTexturePointer();
}