History

Basic geometry sharing/texture loading.

Andrzej Kapolka committed 13 years ago

Commit 3c3cf0b1 parent 19e20f68 files · +338 −148Browse files

Showing the changes to interface/src/renderer/TextureCache.cpp (1 of 8 files). Show all

Unified · Split

interface/src/renderer/TextureCache.cpp+45−0
@@ -9,6 +9,7 @@ · 8 unmodified lines
99 #include "InterfaceConfig.h"
1010
1111 #include <QGLWidget>
12+#include <QNetworkReply>
1213 #include <QOpenGLFramebufferObject>
1314
1415 #include <glm/gtc/random.hpp>
@@ -83,6 +84,15 @@ GLuint TextureCache::getFileTextureID(const QString& filename) { · 68 unmodified lines
8384 return id;
8485 }
8586
87+QSharedPointer<NetworkTexture> TextureCache::getTexture(const QUrl& url) {
88+ QSharedPointer<NetworkTexture> texture = _networkTextures.value(url);
89+ if (texture.isNull()) {
90+ texture = QSharedPointer<NetworkTexture>(new NetworkTexture(url));
91+ _networkTextures.insert(url, texture);
92+ }
93+ return texture;
94+}
95+
8696 QOpenGLFramebufferObject* TextureCache::getPrimaryFramebufferObject() {
8797 if (_primaryFramebufferObject == NULL) {
8898 _primaryFramebufferObject = createFramebufferObject();
@@ -163,6 +173,41 @@ Texture::~Texture() { · 74 unmodified lines
163173 glDeleteTextures(1, &_id);
164174 }
165175
176+NetworkTexture::NetworkTexture(const QUrl& url) {
177+ QNetworkRequest request(url);
178+ request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache);
179+ _reply = Application::getInstance()->getNetworkAccessManager()->get(request);
180+
181+ connect(_reply, SIGNAL(downloadProgress(qint64,qint64)), SLOT(handleDownloadProgress(qint64,qint64)));
182+ connect(_reply, SIGNAL(error(QNetworkReply::NetworkError)), SLOT(handleReplyError()));
183+}
184+
185+void NetworkTexture::handleDownloadProgress(qint64 bytesReceived, qint64 bytesTotal) {
186+ if (bytesReceived < bytesTotal && !_reply->isFinished()) {
187+ return;
188+ }
189+
190+ QByteArray entirety = _reply->readAll();
191+ _reply->disconnect(this);
192+ _reply->deleteLater();
193+ _reply = NULL;
194+
195+ QImage image = QImage::fromData(entirety).convertToFormat(QImage::Format_ARGB32);
196+ glBindTexture(GL_TEXTURE_2D, getID());
197+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image.width(), image.height(), 1,
198+ GL_BGRA, GL_UNSIGNED_BYTE, image.constBits());
199+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
200+ glBindTexture(GL_TEXTURE_2D, 0);
201+}
202+
203+void NetworkTexture::handleReplyError() {
204+ qDebug() << _reply->errorString() << "\n";
205+
206+ _reply->disconnect(this);
207+ _reply->deleteLater();
208+ _reply = NULL;
209+}
210+
166211 DilatedTextureCache::DilatedTextureCache(const QString& filename, int innerRadius, int outerRadius) :
167212 _innerRadius(innerRadius),
168213 _outerRadius(outerRadius)

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t