More ktx work

This commit is contained in:
Atlante45 2017-06-13 13:20:19 -07:00
parent 35a0c41cf5
commit 3110dd72bf

View file

@ -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) {