/************************************************************************* This method should be called if the texture loading failed for any reasons *************************************************************************/ void StelTexture::reportError(const QString& aerrorMessage) { errorOccured = true; errorMessage = aerrorMessage; // Report failure of texture loading emit(loadingProcessFinished(true)); }
bool StelTexture::glLoad(const GLData& data) { if (data.data.isEmpty()) { reportError("Unknown error"); return false; } width = data.width; height = data.height; glActiveTexture(GL_TEXTURE0); glGenTextures(1, &id); glBindTexture(GL_TEXTURE_2D, id); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, loadParams.filtering); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, loadParams.filtering); glTexImage2D(GL_TEXTURE_2D, 0, data.format, width, height, 0, data.format, data.type, data.data.constData()); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, loadParams.wrapMode); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, loadParams.wrapMode); if (loadParams.generateMipmaps) { glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); glGenerateMipmap(GL_TEXTURE_2D); } // Report success of texture loading emit(loadingProcessFinished(false)); return true; }
// Actually load the texture to openGL memory bool StelTexture::glLoad() { if (qImage.isNull()) { errorOccured = true; reportError("Unknown error"); return false; } QGLContext::BindOptions opt = QGLContext::InvertedYBindOption; if (loadParams.filtering==GL_LINEAR) opt |= QGLContext::LinearFilteringBindOption; // Mipmap seems to be pretty buggy on windows.. #ifndef Q_OS_WIN if (loadParams.generateMipmaps==true) opt |= QGLContext::MipmapBindOption; #endif GLint glformat; if (qImage.isGrayscale()) { glformat = qImage.hasAlphaChannel() ? GL_LUMINANCE_ALPHA : GL_LUMINANCE; } else if (qImage.hasAlphaChannel()) { glformat = GL_RGBA; } else glformat = GL_RGB; Q_ASSERT(StelPainter::glContext==QGLContext::currentContext()); #ifdef USE_OPENGL_ES2 glActiveTexture(GL_TEXTURE0); #endif id = StelPainter::glContext->bindTexture(qImage, GL_TEXTURE_2D, glformat, opt); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, loadParams.wrapMode); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, loadParams.wrapMode); // Release shared memory qImage = QImage(); // Report success of texture loading emit(loadingProcessFinished(false)); return true; }