Hi, *@josh ->* thanks for your reply and sorry for the caps Sorry if i appeared to come out strong, i was only trying to highlight the part i wanted to focus on (did not know i was offending anyone). The caps thing was of no relevance to the tone of "my voice". i really like the operating system and i'm in the process of loving it. Anyway, I did use ros_image_texture class at first then just created a dynamic texture using a tutorial from ogre but my problem was not creating the texture, it was applying the texture to the marker object. I'm sure i did something wrong. Anyway this is the flow of processes in my system: I have a node which listens for obstacle detection information and camera information When an obstacle is detected,via a service, that node uses the dimensions received to crop the most recent image from the camera and stores a marker and an image tagged with the position of that obstacle in a hash map. After that, the new marker is sent to rviz as an IMAGE PLANE RVIZ receives the marker draws it and then sends a request to the image processor worker thread (i modified rviz a little) like so *line 388 in map_display.cpp* if (marker) { *//ROS_DEBUG("Calling get_obstacle_image: %ld , %s", (long int)message->id,message->ns.c_str());* * if(message->type == visualization_msgs::Marker::IMPLANE)* * ** {* * ** m_pQueue->AddJob(ImageJob(ImageJob::eID_THREAD_JOB, ptr_response, MarkerID(message->ns,message->id)));* * ** ROS_INFO("Pulling image");* * ** }* marker->setMessage(message); if (message->lifetime.toSec() > 0.0001f) { markers_with_expiration_.insert(marker); } causeRender(); } The image processor requests the image from the obstacle detector node and converts it to an ogre image (All this thread does is convert a sensor image to an ogreimage) When this is done, the image processor raises an event which alerts RVIZ that there is a new image. *Response received in rviz via* *line 482 in marker_display.cpp* void MarkerDisplay::AddPendingEvent(const ImageJob::tCOMMANDS& cmd, const Ogre::TexturePtr& arg,rviz::MarkerID sArg, int iArg) { // M_Namespace::iterator ns_it = namespaces_.find(sArg.first); if (ns_it == namespaces_.end()) { return; } if (!ns_it->second.enabled) { return; } MarkerBasePtr marker; M_IDToMarker::iterator it = markers_.find( sArg ); if ( it != markers_.end() ) { marker = it->second; } if(marker) { ROS_INFO("data %s",arg->getName().c_str()); *marker->assignTexture(arg);* * *//cause render to effect changes to marker object *** causeRender();* } } RVIZ takes that image and applies to the marker it corresponds to (it is a shape marker) like so in shape_marker.cpp The dummy image is created when shape_marker is created in the constructor std::stringstream ss; ss << "SHAPETEX-h" << name; texName = ss.str(); empty_image_.load("no_image.png", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); * **// Create the texture* * ** **texture_ = Ogre::TextureManager::getSingleton().createManual(* * **texName, // name* * **Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,* * **Ogre::TEX_TYPE_2D, // type* * **256, 256, // width & height* * **0, // number of mipmaps* * **empty_image_.getFormat(), // pixel format* * **Ogre::TU_DYNAMIC_WRITE_ONLY_DISCARDABLE); // usage; should be TU_DYNAMIC_WRITE_ONLY_DISCARDABLE for* In order to load the image into the texture and then apply it to the shapes material, i do the following PLEASE NOTE: I also tried the blitfromemory to copy the image data to the texture (resulted in some garbled results and later caused a seg error) void ShapeMarker::setTexture(const Ogre::Image &img) { //I first deleted the existing texture if there was any if (!texture_.isNull()) { Ogre::TextureManager::getSingleton().remove((Ogre::ResourcePtr&)texture_); texture_.setNull(); } texture_ = Ogre::TextureManager::getSingleton().loadImage(texName, Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,img); //Then loaded the texture like so //texture_(new Ogre::Texture()); textured_=true; /// Testing. Apply Texture to Shape, i may be wrong here Ogre::TexturePtr text_or(tex); //i thought copying it makes a difference Ogre::MaterialPtr material_ = *shape_->getMaterial();//get material of already existing shape* material_->getTechnique(0)->getPass(0)->removeAllTextureUnitStates(); material_->getTechnique(0)->getPass(0)->createTextureUnitState(text_or->getName()); ROS_INFO("Texture Applied %s", text_or->getName().c_str()); } So these where the steps i took to try and create my system Any input and criticisms would be highly appreciated. Thanks in anticipation of your help