bool loadSkyBoxTexture(QOpenGLTexture & tex, const char *posx, const char *negx, const char *posy, const char *negy, const char *posz, const char *negz) { if (!tex.create()) { ERRORM("Failed to create skybox texture's OpenGL object name"); return false; } tex.bind(); utils::misc::ScopedGuard guard([&tex] { tex.release(); }); (void) guard; if (!loadTextureHelper(posx, GL_TEXTURE_CUBE_MAP_POSITIVE_X)) return false; if (!loadTextureHelper(negx, GL_TEXTURE_CUBE_MAP_NEGATIVE_X)) return false; if (!loadTextureHelper(posy, GL_TEXTURE_CUBE_MAP_POSITIVE_Y)) return false; if (!loadTextureHelper(negy, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y)) return false; if (!loadTextureHelper(posz, GL_TEXTURE_CUBE_MAP_POSITIVE_Z)) return false; if (!loadTextureHelper(negz, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z)) return false; OGLF->glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR); OGLF->glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR); OGLF->glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); OGLF->glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); OGLF->glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); return true; }
void QGLView::drawTexts() { QList<Parameters*>* parametersList = getDrawableList(Text); if (parametersList->isEmpty()) { return; } m_textVertexBuffer->bind(); m_textProgram->enableAttributeArray(m_textPositionLocation); m_textProgram->enableAttributeArray(m_textTexCoordinateLocation); m_textProgram->setAttributeBuffer(m_textPositionLocation, GL_FLOAT, 0, 3, sizeof(TextVertex)); m_textProgram->setAttributeBuffer(m_textTexCoordinateLocation, GL_FLOAT, 3*sizeof(GLfloat), 2, sizeof(TextVertex)); for (int i = 0; i < parametersList->size(); ++i) { TextParameters *textParameters = static_cast<TextParameters*>(parametersList->at(i)); QStaticText staticText = textParameters->staticText; int textureIndex; QOpenGLTexture *texture; float aspectRatio; textureIndex = m_textTextList.indexOf(staticText); texture = m_textTextureList.at(textureIndex); aspectRatio = m_textAspectRatioList.at(textureIndex); if (!texture->isCreated()) // initialize texture on first use { createTextTexture(textParameters); } m_textProgram->setUniformValue(m_textAspectRatioLocation, aspectRatio); m_textProgram->setUniformValue(m_textAlignmentLocation, (GLint)textParameters->alignment); m_textProgram->setUniformValue(m_textColorLocation, textParameters->color); m_textProgram->setUniformValue(m_textModelMatrixLocation, textParameters->modelMatrix); m_textProgram->setUniformValue(m_textTextureLocation, texture->textureId()); if (m_selectionModeActive) // selection mode active { m_textProgram->setUniformValue(m_textIdColorLocation, QColor(0xFF000000u + m_currentDrawableId)); // color for selection mode m_drawableIdMap.insert(m_currentDrawableId, textParameters); m_currentDrawableId++; } texture->bind(texture->textureId()); glDrawArrays(GL_TRIANGLES, 0, m_textVertexBuffer->size()/sizeof(TextVertex)); texture->release(texture->textureId()); } m_textProgram->disableAttributeArray(m_textPositionLocation); m_textProgram->disableAttributeArray(m_textTexCoordinateLocation); m_textVertexBuffer->release(); }
bool load2DTexture(QOpenGLTexture & tex, const char *name, GLint internal_format, GLint filter_mode, GLint clamp_mode) { if (!tex.create()) { ERRORM("Failed to create 2D texture's OpenGL object name"); return false; } tex.bind(); utils::misc::ScopedGuard guard([&tex] { tex.release(); }); (void) guard; if (!loadTextureHelper(name, GL_TEXTURE_2D, internal_format)) return false; OGLF->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter_mode); OGLF->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter_mode); OGLF->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, clamp_mode); OGLF->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, clamp_mode); return true; }