mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-06-17 05:00:16 +02:00
More ktx work
This commit is contained in:
parent
35a0c41cf5
commit
3110dd72bf
1 changed files with 141 additions and 172 deletions
|
@ -498,17 +498,13 @@ void NetworkTexture::ktxHeaderRequestFinished() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ResourceCache::requestCompleted(_self);
|
TextureCache::requestCompleted(_self);
|
||||||
|
|
||||||
auto result = _ktxHeaderRequest->getResult();
|
auto result = _ktxHeaderRequest->getResult();
|
||||||
if (result == ResourceRequest::Success) {
|
if (result == ResourceRequest::Success) {
|
||||||
auto extraInfo = _url == _activeUrl ? "" : QString(", %1").arg(_activeUrl.toDisplayString());
|
auto extraInfo = _url == _activeUrl ? "" : QString(", %1").arg(_activeUrl.toDisplayString());
|
||||||
qCDebug(networking).noquote() << QString("Request finished for %1%2").arg(_url.toDisplayString(), extraInfo);
|
qCDebug(networking).noquote() << QString("Request finished for %1%2").arg(_url.toDisplayString(), extraInfo);
|
||||||
|
|
||||||
auto data = _ktxHeaderRequest->getData();
|
|
||||||
|
|
||||||
//emit loaded(data);
|
|
||||||
//downloadFinished(data);
|
|
||||||
_ktxHeaderRequestFinished = true;
|
_ktxHeaderRequestFinished = true;
|
||||||
maybeHandleFinishedInitialLoad();
|
maybeHandleFinishedInitialLoad();
|
||||||
|
|
||||||
|
@ -541,51 +537,39 @@ void NetworkTexture::ktxMipRequestFinished() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ResourceCache::requestCompleted(_self);
|
TextureCache::requestCompleted(_self);
|
||||||
|
|
||||||
auto result = _ktxMipRequest->getResult();
|
auto result = _ktxMipRequest->getResult();
|
||||||
if (result == ResourceRequest::Success) {
|
if (result == ResourceRequest::Success) {
|
||||||
auto extraInfo = _url == _activeUrl ? "" : QString(", %1").arg(_activeUrl.toDisplayString());
|
auto extraInfo = _url == _activeUrl ? "" : QString(", %1").arg(_activeUrl.toDisplayString());
|
||||||
qCDebug(networking).noquote() << QString("Request finished for %1%2").arg(_url.toDisplayString(), extraInfo);
|
qCDebug(networking).noquote() << QString("Request finished for %1%2").arg(_url.toDisplayString(), extraInfo);
|
||||||
|
|
||||||
auto data = _ktxMipRequest->getData();
|
|
||||||
|
|
||||||
//emit loaded(data);
|
|
||||||
//downloadFinished(data);
|
|
||||||
|
|
||||||
if (_ktxResourceState == LOADING_INITIAL_DATA) {
|
if (_ktxResourceState == LOADING_INITIAL_DATA) {
|
||||||
_ktxHighMipRequestFinished = true;
|
_ktxHighMipRequestFinished = true;
|
||||||
|
|
||||||
////
|
|
||||||
maybeHandleFinishedInitialLoad();
|
maybeHandleFinishedInitialLoad();
|
||||||
} else if (_ktxResourceState == REQUESTING_MIP) {
|
} else if (_ktxResourceState == REQUESTING_MIP) {
|
||||||
Q_ASSERT(_ktxMipLevelRangeInFlight.first != NULL_MIP_LEVEL);
|
Q_ASSERT(_ktxMipLevelRangeInFlight.first != NULL_MIP_LEVEL);
|
||||||
Q_ASSERT(_ktxMipLevelRangeInFlight.second - _ktxMipLevelRangeInFlight.first == 0);
|
Q_ASSERT(_ktxMipLevelRangeInFlight.second - _ktxMipLevelRangeInFlight.first == 0);
|
||||||
|
|
||||||
_lowestKnownPopulatedMip = _ktxMipLevelRangeInFlight.first;
|
_lowestKnownPopulatedMip = _ktxMipLevelRangeInFlight.first;
|
||||||
_ktxResourceState = WAITING_FOR_MIP_REQUEST;
|
_ktxResourceState = WAITING_FOR_MIP_REQUEST;
|
||||||
|
|
||||||
if (_ktxResourceState == WAITING_FOR_MIP_REQUEST && _lowestRequestedMipLevel < _lowestKnownPopulatedMip) {
|
if (_lowestRequestedMipLevel < _lowestKnownPopulatedMip) {
|
||||||
startRequestForNextMipLevel();
|
startRequestForNextMipLevel();
|
||||||
}
|
}
|
||||||
|
|
||||||
////
|
//// Move to other thread
|
||||||
auto texture = _textureSource->getGPUTexture();
|
auto texture = _textureSource->getGPUTexture();
|
||||||
if (texture) {
|
if (texture) {
|
||||||
|
auto data = _ktxMipRequest->getData();
|
||||||
texture->assignStoredMip(_ktxMipLevelRangeInFlight.first,
|
texture->assignStoredMip(_ktxMipLevelRangeInFlight.first,
|
||||||
_ktxMipRequest->getData().size(), reinterpret_cast<uint8_t*>(_ktxMipRequest->getData().data()));
|
data.size(), reinterpret_cast<uint8_t*>(data.data()));
|
||||||
if (texture->minAvailableMipLevel() <= _ktxMipLevelRangeInFlight.first) {
|
|
||||||
} else {
|
|
||||||
qWarning(networking) << "Failed to load mip: " << _url << ":" << _ktxMipLevelRangeInFlight.first;
|
|
||||||
_ktxResourceState = FAILED_TO_LOAD;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
_ktxResourceState = WAITING_FOR_MIP_REQUEST;
|
|
||||||
qWarning(networking) << "Trying to update mips but texture is null";
|
|
||||||
}
|
}
|
||||||
finishedLoading(true);
|
finishedLoading(true);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
qWarning() << "Mip request finished in an unexpected state: " << _ktxResourceState;
|
qWarning(networking) << "Mip request finished in an unexpected state: " << _ktxResourceState;
|
||||||
|
finishedLoading(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -610,15 +594,8 @@ void NetworkTexture::maybeHandleFinishedInitialLoad() {
|
||||||
|
|
||||||
if (_ktxHeaderRequestFinished && _ktxHighMipRequestFinished) {
|
if (_ktxHeaderRequestFinished && _ktxHighMipRequestFinished) {
|
||||||
|
|
||||||
TextureCache::requestCompleted(_self);
|
auto resource = _self;
|
||||||
|
|
||||||
if (_ktxHeaderRequest->getResult() != ResourceRequest::Success || _ktxMipRequest->getResult() != ResourceRequest::Success) {
|
|
||||||
if (handleFailedRequest(_ktxMipRequest->getResult())) {
|
|
||||||
_ktxResourceState = PENDING_INITIAL_LOAD;
|
|
||||||
} else {
|
|
||||||
_ktxResourceState = FAILED_TO_LOAD;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// create ktx...
|
// create ktx...
|
||||||
auto ktxHeaderData = _ktxHeaderRequest->getData();
|
auto ktxHeaderData = _ktxHeaderRequest->getData();
|
||||||
auto ktxHighMipData = _ktxMipRequest->getData();
|
auto ktxHighMipData = _ktxMipRequest->getData();
|
||||||
|
@ -750,19 +727,11 @@ void NetworkTexture::maybeHandleFinishedInitialLoad() {
|
||||||
_lowestKnownPopulatedMip = texture->minAvailableMipLevel();
|
_lowestKnownPopulatedMip = texture->minAvailableMipLevel();
|
||||||
|
|
||||||
|
|
||||||
QMetaObject::invokeMethod(resource.data(), "ktxRequestProcessed",
|
QMetaObject::invokeMethod(resource.data(), "setImage",
|
||||||
Q_ARG(gpu::TexturePointer, texture),
|
Q_ARG(gpu::TexturePointer, texture),
|
||||||
Q_ARG(int, texture->getWidth()),
|
Q_ARG(int, texture->getWidth()),
|
||||||
Q_ARG(int, texture->getHeight()));
|
Q_ARG(int, texture->getHeight()));
|
||||||
}
|
}
|
||||||
|
|
||||||
_ktxHeaderRequest->deleteLater();
|
|
||||||
_ktxHeaderRequest = nullptr;
|
|
||||||
_ktxMipRequest->deleteLater();
|
|
||||||
_ktxMipRequest = nullptr;
|
|
||||||
|
|
||||||
startRequestForNextMipLevel();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkTexture::downloadFinished(const QByteArray& data) {
|
void NetworkTexture::downloadFinished(const QByteArray& data) {
|
||||||
|
|
Loading…
Reference in a new issue