Changeset 4320 for trunk/packages/vizservers
- Timestamp:
- Apr 6, 2014, 5:58:05 PM (10 years ago)
- Location:
- trunk/packages/vizservers/geovis
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/packages/vizservers/geovis/RenderServer.cpp
r4307 r4320 560 560 561 561 length = snprintf(mesg, sizeof(mesg), 562 "nv> datasetcoords %g %g %g\n", x, y, z);562 "nv>map coords %g %g %g\n", x, y, z); 563 563 564 564 queueResponse(mesg, length, Response::VOLATILE); -
trunk/packages/vizservers/geovis/Renderer.cpp
r4319 r4320 20 20 #include <osgGA/StateSetManipulator> 21 21 #include <osgGA/GUIEventAdapter> 22 #include <osgViewer/ViewerEventHandlers> 22 23 23 24 #include <osgEarth/Version> … … 128 129 osgViewer::ViewerBase::Windows windows; 129 130 _viewer->getWindows(windows); 130 return windows[0]->getEventQueue(); 131 } else { 132 return NULL; 133 } 131 if (windows.size() > 0) { 132 return windows[0]->getEventQueue(); 133 } 134 } 135 return NULL; 134 136 } 135 137 … … 242 244 //_viewer->setLightingMode(osg::View::SKY_LIGHT); 243 245 _viewer->getCamera()->setClearColor(osg::Vec4(_bgColor[0], _bgColor[1], _bgColor[2], 1)); 246 _viewer->getCamera()->setClearMask(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 244 247 _viewer->getCamera()->setNearFarRatio(0.00002); 245 248 _viewer->getCamera()->setSmallFeatureCullingPixelSize(-1.0f); 246 249 _stateManip = new osgGA::StateSetManipulator(_viewer->getCamera()->getOrCreateStateSet()); 247 250 _viewer->addEventHandler(_stateManip); 251 //_viewer->addEventHandler(new osgViewer::StatsHandler()); 248 252 } 249 253 … … 251 255 initViewer(); 252 256 if (!_viewer->isRealized()) { 257 #ifdef USE_OFFSCREEN_RENDERING 258 #ifdef USE_PBUFFER 259 osg::ref_ptr<osg::GraphicsContext> pbuffer; 260 osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits; 261 traits->x = 0; 262 traits->y = 0; 263 traits->width = _windowWidth; 264 traits->height = _windowHeight; 265 traits->red = 8; 266 traits->green = 8; 267 traits->blue = 8; 268 traits->alpha = 8; 269 traits->windowDecoration = false; 270 traits->pbuffer = true; 271 traits->doubleBuffer = true; 272 traits->sharedContext = 0; 273 274 pbuffer = osg::GraphicsContext::createGraphicsContext(traits.get()); 275 if (pbuffer.valid()) { 276 TRACE("Pixel buffer has been created successfully."); 277 } else { 278 ERROR("Pixel buffer has not been created successfully."); 279 } 280 osg::Camera *camera = new osg::Camera; 281 camera->setGraphicsContext(pbuffer.get()); 282 camera->setViewport(new osg::Viewport(0, 0, _windowWidth, _windowHeight)); 283 GLenum buffer = pbuffer->getTraits()->doubleBuffer ? GL_BACK : GL_FRONT; 284 camera->setDrawBuffer(buffer); 285 camera->setReadBuffer(buffer); 286 _captureCallback = new ScreenCaptureCallback(); 287 camera->setFinalDrawCallback(_captureCallback.get()); 288 _viewer->addSlave(camera, osg::Matrixd(), osg::Matrixd()); 289 #else 290 _viewer->getCamera()->setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT); 291 osg::Texture2D* texture2D = new osg::Texture2D; 292 texture2D->setTextureSize(_windowWidth, _windowHeight); 293 texture2D->setInternalFormat(GL_RGBA); 294 texture2D->setFilter(osg::Texture2D::MIN_FILTER, osg::Texture2D::NEAREST); 295 texture2D->setFilter(osg::Texture2D::MAG_FILTER, osg::Texture2D::NEAREST); 296 297 _viewer->getCamera()->setImplicitBufferAttachmentMask(0, 0); 298 _viewer->getCamera()->attach(osg::Camera::COLOR_BUFFER0, texture2D); 299 //_viewer->getCamera()->attach(osg::Camera::DEPTH_BUFFER, GL_DEPTH_COMPONENT24); 300 _viewer->getCamera()->attach(osg::Camera::PACKED_DEPTH_STENCIL_BUFFER, GL_DEPTH24_STENCIL8_EXT); 301 _captureCallback = new ScreenCaptureCallback(texture2D); 302 _viewer->getCamera()->setFinalDrawCallback(_captureCallback.get()); 303 _viewer->setUpViewInWindow(0, 0, _windowWidth, _windowHeight); 304 #endif 305 #else 253 306 _captureCallback = new ScreenCaptureCallback(); 254 307 _viewer->getCamera()->setFinalDrawCallback(_captureCallback.get()); 308 //_viewer->getCamera()->getDisplaySettings()->setDoubleBuffer(false); 255 309 _viewer->setUpViewInWindow(0, 0, _windowWidth, _windowHeight); 310 #endif 256 311 _viewer->realize(); 257 312 initColorMaps(); … … 618 673 bool Renderer::mapMouseCoords(float mouseX, float mouseY, osgEarth::GeoPoint& map) 619 674 { 620 if (!_mapNode.valid()) { 621 ERROR("No map"); 675 if (!_mapNode.valid() || _mapNode->getTerrain() == NULL) { 676 ERROR("No map"); 677 return false; 678 } 679 if (!_viewer.valid()) { 680 ERROR("No Viewer"); 622 681 return false; 623 682 } … … 914 973 _windowHeight = height; 915 974 if (_viewer.valid()) { 975 #ifdef USE_OFFSCREEN_RENDERING 976 #ifdef USE_PBUFFER 977 osg::ref_ptr<osg::GraphicsContext> pbuffer; 978 osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits; 979 traits->x = 0; 980 traits->y = 0; 981 traits->width = _windowWidth; 982 traits->height = _windowHeight; 983 traits->red = 8; 984 traits->green = 8; 985 traits->blue = 8; 986 traits->alpha = 8; 987 traits->windowDecoration = false; 988 traits->pbuffer = true; 989 traits->doubleBuffer = true; 990 traits->sharedContext = 0; 991 992 pbuffer = osg::GraphicsContext::createGraphicsContext(traits.get()); 993 if (pbuffer.valid()) { 994 TRACE("Pixel buffer has been created successfully."); 995 } else { 996 ERROR("Pixel buffer has not been created successfully."); 997 } 998 osg::Camera *camera = new osg::Camera; 999 camera->setGraphicsContext(pbuffer.get()); 1000 camera->setViewport(new osg::Viewport(0, 0, _windowWidth, _windowHeight)); 1001 GLenum buffer = pbuffer->getTraits()->doubleBuffer ? GL_BACK : GL_FRONT; 1002 camera->setDrawBuffer(buffer); 1003 camera->setReadBuffer(buffer); 1004 camera->setFinalDrawCallback(_captureCallback.get()); 1005 _viewer->addSlave(camera, osg::Matrixd(), osg::Matrixd()); 1006 _viewer->realize(); 1007 #else 1008 if (_captureCallback.valid()) { 1009 _captureCallback->getTexture()->setTextureSize(_windowWidth, _windowHeight); 1010 } 916 1011 osgViewer::ViewerBase::Windows windows; 917 1012 _viewer->getWindows(windows); … … 921 1016 ERROR("Num windows: %lu", windows.size()); 922 1017 } 1018 #endif 1019 #else 1020 osgViewer::ViewerBase::Windows windows; 1021 _viewer->getWindows(windows); 1022 if (windows.size() == 1) { 1023 windows[0]->setWindowRectangle(0, 0, _windowWidth, _windowHeight); 1024 } else { 1025 ERROR("Num windows: %lu", windows.size()); 1026 } 1027 #endif 923 1028 _needsRedraw = true; 924 1029 } -
trunk/packages/vizservers/geovis/Renderer.h
r4319 r4320 49 49 { 50 50 public: 51 ScreenCaptureCallback() : 52 osg::Camera::DrawCallback() 51 ScreenCaptureCallback(osg::Texture2D *texture = NULL) : 52 osg::Camera::DrawCallback(), 53 _texture(texture) 53 54 { 54 55 _image = new osg::Image; … … 70 71 height = (int)renderInfo.getCurrentCamera()->getViewport()->height(); 71 72 TRACE("readPixels: %d x %d", width, height); 73 #if 0 //USE_OFFSCREEN_FRAMEBUFFER 74 _image = _texture->getImage(); 75 #else 72 76 #ifdef RENDER_TARGA 73 77 _image->readPixels(0, 0, width, height, … … 77 81 GL_RGB, GL_UNSIGNED_BYTE); 78 82 #endif 83 #endif 79 84 } 80 85 … … 84 89 } 85 90 91 osg::Texture2D *getTexture() 92 { 93 return _texture.get(); 94 } 95 86 96 private: 97 osg::ref_ptr<osg::Texture2D> _texture; 87 98 osg::ref_ptr<osg::Image> _image; 88 99 }; -
trunk/packages/vizservers/geovis/RendererCmd.cpp
r4319 r4320 667 667 } 668 668 return (*proc) (clientData, interp, objc, objv); 669 } 670 671 static int 672 MapCoordsOp(ClientData clientData, Tcl_Interp *interp, int objc, 673 Tcl_Obj *const *objv) 674 { 675 int x, y; 676 if (Tcl_GetIntFromObj(interp, objv[2], &x) != TCL_OK || 677 Tcl_GetIntFromObj(interp, objv[3], &y) != TCL_OK) { 678 return TCL_ERROR; 679 } 680 681 osgEarth::GeoPoint mapPoint; 682 size_t length; 683 char mesg[256]; 684 if (g_renderer->mapMouseCoords(x, y, mapPoint)) { 685 // send coords to client 686 length = snprintf(mesg, sizeof(mesg), 687 "nv>map coords %g %g %g %d %d\n", 688 mapPoint.x(), mapPoint.y(), mapPoint.z(), 689 x, y); 690 691 queueResponse(mesg, length, Response::VOLATILE); 692 } else { 693 // Out of range 694 length = snprintf(mesg, sizeof(mesg), 695 "nv>map coords invalid %d %d\n", x, y); 696 697 queueResponse(mesg, length, Response::VOLATILE); 698 } 699 return TCL_OK; 669 700 } 670 701 … … 951 982 std::ostringstream oss; 952 983 size_t len = 0; 953 oss << "nv> datasetnames {";984 oss << "nv>map names {"; 954 985 len += 18; 955 986 for (size_t i = 0; i < layers.size(); i++) { … … 1222 1253 1223 1254 static CmdSpec mapOps[] = { 1255 {"coords", 1, MapCoordsOp, 4, 4, "x y"}, 1224 1256 {"grid", 1, MapGraticuleOp, 3, 4, "bool ?type?"}, 1225 1257 {"layer", 2, MapLayerOp, 3, 0, "op ?params...?"}, -
trunk/packages/vizservers/geovis/geovis_protocol.txt
r4282 r4320 29 29 == General dataset, scene and renderer commands == 30 30 31 camera delete <name> 32 Delete named viewpoint 33 camera dist <distance> 34 Set camera distance from focal point 35 camera get 36 Request camera parameters 31 37 camera orient <quatW> <quatX> <quatY> <quatZ> 32 38 Set scene orientation using a quaternion … … 38 44 camera reset <?all?> 39 45 Option all resets orientation/rotation as well as pan/zoom/clip range 46 camera restore <name> <?duration?> 47 Set viewpoint to a named viewpoint, with optional animation duration in seconds 40 48 camera rotate <x> <y> 41 49 Specify relative rotation in viewport coordinates 42 camera zoom <z> 43 Specify zoom ratio. z > 1 is a zoom in, z < 1 is zoom out. z = 1 44 resets to default. 50 camera save <name> 51 Save current viewpoint to a named viewpoint 52 camera set <x> <y> <z> <heading> <pitch> <distance> <?duration?> <?srs?> <?vertDatum?> 53 Explicitly set camera parameters, with optional animation duration in seconds 54 <x>, <y> = Map coordinates of focal point 55 <z> = Altitude of focal point (see vertDatum) 56 <heading> = Azimuth in degrees 57 <pitch> = Elevation in degrees 58 <distance> = Distance of camera from focal point in map units(?) 59 <srs> = coordinate system, defaults to map coordinate system 60 <vertDatum> = vertical datum for interpreting z coordinate 61 camera zoom <y> 62 Specify zoom by viewport coordinates (i.e. normalized y mouse coords) 45 63 46 64 clientinfo <list> 65 66 key press <key> 67 key release <key> 47 68 48 69 mouse click <button> <x> <y> … … 59 80 screen size <width> <height> 60 81 82 map coords <x> <y> 83 Translate screen/mouse coordinates into map coordinates 84 61 85 General form: 62 map layer add <type> <url> ... <layerName> 63 <type> = image|wms|tms|elevation|point|polygon|line|text 86 map layer add <type> <driver> <url> ... <layerName> 87 <type> = image|elevation|line|point|polygon|text 88 <driver> = gdal|wms|tms 64 89 65 90 Specific layer types: 66 map layer add image <url> <layerName>91 map layer add image gdal <url> <layerName> 67 92 Add a GDAL image layer from a file or URL 68 map layer add wms <url> <layers> <format> <transparent> <layerName>93 map layer add image wms <url> <layers> <format> <transparent> <layerName> 69 94 Add a WMS image layer from a URL + layer string 70 95 <url> = URL of WMS service … … 72 97 <format> = Image format to return (e.g. 'png') 73 98 <transparent> = bool 74 map layer add tms <url> <layerName>99 map layer add image tms <url> <layerName> 75 100 Add a TMS image layer from a URL 76 101 <url> = URL of TMS service 77 map layer add elevation <url> <layerName> 78 Add a GDAL elevation image layer from a file or URL 102 map layer add elevation <driver> <url> <layerName> 103 Add an elevation image layer from a file or URL 104 <driver> = gdal|tms|wms 79 105 map layer add point <url> <layerName> 80 106 Add a point feature layer from a file or URL
Note: See TracChangeset
for help on using the changeset viewer.