1 #ifndef RADIAL_MENU_RVIZ_IMAGE_OVERLAY_HPP 2 #define RADIAL_MENU_RVIZ_IMAGE_OVERLAY_HPP 8 #include <OGRE/OgreHardwarePixelBuffer.h> 9 #include <OGRE/OgreMaterial.h> 10 #include <OGRE/OgreMaterialManager.h> 11 #include <OGRE/OgrePixelFormat.h> 12 #include <OGRE/OgreTechnique.h> 13 #include <OGRE/OgreTexture.h> 14 #include <OGRE/OgreTextureManager.h> 15 #include <OGRE/Overlay/OgreOverlayManager.h> 16 #include <OGRE/Overlay/OgrePanelOverlayElement.h> 23 #include <boost/lexical_cast.hpp> 31 suffix_ = boost::lexical_cast< std::string >(
this);
33 material_ = Ogre::MaterialManager::getSingleton().create(
34 "ImageOverlayPanelMaterial_" +
suffix_,
35 Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
37 panel_ =
static_cast< Ogre::PanelOverlayElement *
>(
38 Ogre::OverlayManager::getSingleton().createOverlayElement(
"Panel",
39 "ImageOverlayPanel_" +
suffix_));
40 panel_->setMetricsMode(Ogre::GMM_PIXELS);
41 panel_->setMaterialName(material_->getName());
43 overlay_ = Ogre::OverlayManager::getSingleton().create(
"ImageOverlay_" +
suffix_);
53 Ogre::OverlayManager::getSingleton().destroy(
overlay_);
56 Ogre::OverlayManager::getSingleton().destroyOverlayElement(
panel_);
59 Ogre::MaterialManager::getSingleton().remove(
material_->getName());
63 Ogre::TextureManager::getSingleton().remove(
texture_->getName());
77 if (!(
alignment_ & (Qt::AlignLeft | Qt::AlignRight | Qt::AlignHCenter))) {
81 if (!(
alignment_ & (Qt::AlignTop | Qt::AlignBottom | Qt::AlignVCenter))) {
86 void setImage(
const QImage &unformatted_image) {
88 if (unformatted_image.width() == 0 || unformatted_image.height() == 0) {
90 }
else if (unformatted_image.format() != QImage::Format_ARGB32) {
91 image_ = unformatted_image.convertToFormat(QImage::Format_ARGB32);
93 image_ = unformatted_image;
102 material_->getTechnique(0)->getPass(0)->removeAllTextureUnitStates();
103 Ogre::TextureManager::getSingleton().remove(
texture_->getName());
109 texture_ = Ogre::TextureManager::getSingleton().createManual(
110 "ImageOverlayPanelMaterialTexture_" +
suffix_,
111 Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, Ogre::TEX_TYPE_2D,
114 material_->getTechnique(0)->getPass(0)->createTextureUnitState(
texture_->getName());
115 material_->getTechnique(0)->getPass(0)->setSceneBlending(Ogre::SBT_TRANSPARENT_ALPHA);
138 const Ogre::HardwarePixelBufferSharedPtr buffer(
texture_->getBuffer());
139 buffer->lock(Ogre::HardwareBuffer::HBL_NORMAL);
140 std::memcpy(buffer->getCurrentLock().data,
image_.constBits(), buffer->getSizeInBytes());
147 QImage image(size, QImage::Format_ARGB32);