mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 07:53:08 +02:00
Merge pull request #4749 from samcake/temp1
Fix the dark objects rendering in porto and apartment due to the tga texture files not loaded correctly
This commit is contained in:
commit
6c4a4d0cdc
3 changed files with 42 additions and 25 deletions
|
@ -1746,8 +1746,12 @@ FBXGeometry extractFBXGeometry(const FBXNode& node, const QVariantHash& mapping,
|
||||||
material.id = getID(object.properties);
|
material.id = getID(object.properties);
|
||||||
|
|
||||||
material._material = model::MaterialPointer(new model::Material());
|
material._material = model::MaterialPointer(new model::Material());
|
||||||
material._material->setEmissive(material.emissive);
|
material._material->setEmissive(material.emissive);
|
||||||
material._material->setDiffuse(material.diffuse);
|
if (glm::all(glm::equal(material.diffuse, glm::vec3(0.0f)))) {
|
||||||
|
material._material->setDiffuse(material.diffuse);
|
||||||
|
} else {
|
||||||
|
material._material->setDiffuse(material.diffuse);
|
||||||
|
}
|
||||||
material._material->setSpecular(material.specular);
|
material._material->setSpecular(material.specular);
|
||||||
material._material->setShininess(material.shininess);
|
material._material->setShininess(material.shininess);
|
||||||
|
|
||||||
|
|
|
@ -75,7 +75,7 @@ GLBackend::GLFramebuffer* GLBackend::syncGPUObject(const Framebuffer& framebuffe
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if (GPU_FEATURE_PROFILE == GPU_LEGACY)
|
#if (GPU_FEATURE_PROFILE == GPU_LEGACY)
|
||||||
// for reasons that i don;t understand yet, it seems that on mac gl, a fbo must have a color buffer...
|
// for reasons that i don't understand yet, it seems that on mac gl, a fbo must have a color buffer...
|
||||||
else {
|
else {
|
||||||
GLuint renderBuffer = 0;
|
GLuint renderBuffer = 0;
|
||||||
glGenRenderbuffers(1, &renderBuffer);
|
glGenRenderbuffers(1, &renderBuffer);
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
#include <QResizeEvent>
|
#include <QResizeEvent>
|
||||||
#include <QRunnable>
|
#include <QRunnable>
|
||||||
#include <QThreadPool>
|
#include <QThreadPool>
|
||||||
|
#include <qimagereader.h>
|
||||||
|
|
||||||
#include <glm/glm.hpp>
|
#include <glm/glm.hpp>
|
||||||
#include <glm/gtc/random.hpp>
|
#include <glm/gtc/random.hpp>
|
||||||
|
@ -28,6 +29,8 @@
|
||||||
|
|
||||||
#include "gpu/GLBackend.h"
|
#include "gpu/GLBackend.h"
|
||||||
|
|
||||||
|
#include <mutex>
|
||||||
|
|
||||||
TextureCache::TextureCache() :
|
TextureCache::TextureCache() :
|
||||||
_permutationNormalTexture(0),
|
_permutationNormalTexture(0),
|
||||||
_whiteTexture(0),
|
_whiteTexture(0),
|
||||||
|
@ -344,27 +347,7 @@ NetworkTexture::NetworkTexture(const QUrl& url, TextureType type, const QByteArr
|
||||||
_loaded = true;
|
_loaded = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// default to white/blue/black
|
std::string theName = url.toString().toStdString();
|
||||||
/* glBindTexture(GL_TEXTURE_2D, getID());
|
|
||||||
switch (type) {
|
|
||||||
case NORMAL_TEXTURE:
|
|
||||||
loadSingleColorTexture(OPAQUE_BLUE);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SPECULAR_TEXTURE:
|
|
||||||
loadSingleColorTexture(OPAQUE_BLACK);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SPLAT_TEXTURE:
|
|
||||||
loadSingleColorTexture(TRANSPARENT_WHITE);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
loadSingleColorTexture(OPAQUE_WHITE);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
glBindTexture(GL_TEXTURE_2D, 0);
|
|
||||||
*/
|
|
||||||
// if we have content, load it after we have our self pointer
|
// if we have content, load it after we have our self pointer
|
||||||
if (!content.isEmpty()) {
|
if (!content.isEmpty()) {
|
||||||
_startedLoading = true;
|
_startedLoading = true;
|
||||||
|
@ -396,6 +379,18 @@ ImageReader::ImageReader(const QWeakPointer<Resource>& texture, QNetworkReply* r
|
||||||
_content(content) {
|
_content(content) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::once_flag onceListSuppoertedFormatsflag;
|
||||||
|
void listSupportedImageFormats() {
|
||||||
|
std::call_once(onceListSuppoertedFormatsflag, [](){
|
||||||
|
auto supportedFormats = QImageReader::supportedImageFormats();
|
||||||
|
QString formats;
|
||||||
|
foreach(const QByteArray& f, supportedFormats) {
|
||||||
|
formats += QString(f) + ",";
|
||||||
|
}
|
||||||
|
qCDebug(renderutils) << "List of supported Image formats:" << formats;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
void ImageReader::run() {
|
void ImageReader::run() {
|
||||||
QSharedPointer<Resource> texture = _texture.toStrongRef();
|
QSharedPointer<Resource> texture = _texture.toStrongRef();
|
||||||
if (texture.isNull()) {
|
if (texture.isNull()) {
|
||||||
|
@ -409,11 +404,29 @@ void ImageReader::run() {
|
||||||
_content = _reply->readAll();
|
_content = _reply->readAll();
|
||||||
_reply->deleteLater();
|
_reply->deleteLater();
|
||||||
}
|
}
|
||||||
QImage image = QImage::fromData(_content);
|
|
||||||
|
|
||||||
|
listSupportedImageFormats();
|
||||||
|
|
||||||
|
// try to help the QImage loader by extracting the image file format from the url filename ext
|
||||||
|
// Some tga are not created properly for example without it
|
||||||
|
auto filename = _url.fileName().toStdString();
|
||||||
|
auto filenameExtension = filename.substr(filename.find_last_of('.') + 1);
|
||||||
|
QImage image = QImage::fromData(_content, filenameExtension.c_str());
|
||||||
|
|
||||||
|
// Note that QImage.format is the pixel format which is different from the "format" of the image file...
|
||||||
|
auto imageFormat = image.format();
|
||||||
int originalWidth = image.width();
|
int originalWidth = image.width();
|
||||||
int originalHeight = image.height();
|
int originalHeight = image.height();
|
||||||
|
|
||||||
|
if (originalWidth == 0 || originalHeight == 0 || imageFormat == QImage::Format_Invalid) {
|
||||||
|
if (filenameExtension.empty()) {
|
||||||
|
qCDebug(renderutils) << "QImage failed to create from content, no file extension:" << _url;
|
||||||
|
} else {
|
||||||
|
qCDebug(renderutils) << "QImage failed to create from content" << _url;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// enforce a fixed maximum area (1024 * 2048)
|
// enforce a fixed maximum area (1024 * 2048)
|
||||||
const int MAXIMUM_AREA_SIZE = 2097152;
|
const int MAXIMUM_AREA_SIZE = 2097152;
|
||||||
int imageArea = image.width() * image.height();
|
int imageArea = image.width() * image.height();
|
||||||
|
|
Loading…
Reference in a new issue