Moved the include/osgTXP back into src/osgPlugins/txp as a seperate include directory is no longer required.
Removed the osgtxp demo as it is no longer required.
This commit is contained in:
@@ -94,7 +94,6 @@ DEMOS_DIRS = \
|
||||
osgparticle\
|
||||
osgprerender\
|
||||
osgshadowtexture\
|
||||
osgtxp\
|
||||
osgreflect\
|
||||
osgscribe\
|
||||
osgsequence\
|
||||
|
||||
@@ -1,107 +0,0 @@
|
||||
# Microsoft Developer Studio Project File - Name="Demo osgtxp" - Package Owner=<4>
|
||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||
# ** DO NOT EDIT **
|
||||
|
||||
# TARGTYPE "Win32 (x86) Console Application" 0x0103
|
||||
|
||||
CFG=Demo osgtxp - Win32 Release
|
||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||
!MESSAGE use the Export Makefile command and run
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "osgtxp.mak".
|
||||
!MESSAGE
|
||||
!MESSAGE You can specify a configuration when running NMAKE
|
||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "osgtxp.mak" CFG="Demo osgtxp - Win32 Release"
|
||||
!MESSAGE
|
||||
!MESSAGE Possible choices for configuration are:
|
||||
!MESSAGE
|
||||
!MESSAGE "Demo osgtxp - Win32 Release" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE "Demo osgtxp - Win32 Debug" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE
|
||||
|
||||
# Begin Project
|
||||
# PROP AllowPerConfigDependencies 0
|
||||
# PROP Scc_ProjName ""
|
||||
# PROP Scc_LocalPath ""
|
||||
CPP=cl.exe
|
||||
RSC=rc.exe
|
||||
|
||||
!IF "$(CFG)" == "Demo osgtxp - Win32 Release"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "Release"
|
||||
# PROP BASE Intermediate_Dir "Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "Release"
|
||||
# PROP Intermediate_Dir "Release"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||
# ADD CPP /nologo /MD /W3 /GR /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||
# ADD BASE RSC /l 0x809 /d "NDEBUG"
|
||||
# ADD RSC /l 0x809 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
|
||||
# ADD LINK32 /nologo /subsystem:console /pdb:none /machine:I386 /out:"../../../bin/osgtxp.exe" /libpath:"../../../lib"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Demo osgtxp - Win32 Debug"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "Debug"
|
||||
# PROP BASE Intermediate_Dir "Debug"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "Debug"
|
||||
# PROP Intermediate_Dir "Debug"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||
# ADD CPP /nologo /MDd /W3 /Gm /vd0 /GR /GX /Zi /Od /I "../../../include" /D "_CONSOLE" /D "_MBCS" /D "FL_DLL" /D "WIN32" /D "_DEBUG" /FR /YX /FD /c
|
||||
# ADD BASE RSC /l 0x809 /d "_DEBUG"
|
||||
# ADD RSC /l 0x809 /d "_DEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||
# ADD LINK32 glut32.lib glu32.lib opengl32.lib /nologo /subsystem:console /debug /machine:I386 /nodefaultlib:"libcmt" /out:"../../../bin/osgtxpd.exe" /pdbtype:sept /libpath:"../../../lib"
|
||||
# SUBTRACT LINK32 /incremental:no
|
||||
|
||||
!ENDIF
|
||||
|
||||
# Begin Target
|
||||
|
||||
# Name "Demo osgtxp - Win32 Release"
|
||||
# Name "Demo osgtxp - Win32 Debug"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\..\src\Demos\osgtxp\osgtxp.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\..\src\Demos\osgtxp\TrPageViewer.cpp
|
||||
# End Source File
|
||||
# Begin Group "Header Files"
|
||||
|
||||
# PROP Default_Filter ";h;hpp;hxx;hm;inl"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\..\src\Demos\osgtxp\TrPageViewer.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Resource Files"
|
||||
|
||||
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
||||
# End Group
|
||||
# End Target
|
||||
# End Project
|
||||
@@ -481,36 +481,6 @@ Package=<4>
|
||||
End Project Dependency
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "Demo osgtxp"=.\Demos\osgtxp\osgtxp.dsp - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name Core osg
|
||||
End Project Dependency
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name Core osgDB
|
||||
End Project Dependency
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name Core osgGA
|
||||
End Project Dependency
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name Core osgGLUT
|
||||
End Project Dependency
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name Core osgUtil
|
||||
End Project Dependency
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name osgPlugin txp
|
||||
End Project Dependency
|
||||
}}}
|
||||
|
||||
##############################################################################################################################################################
|
||||
|
||||
Project: "Demo osggeometry"=.\Demos\osggeometry\osggeometry.dsp - Package Owner=<4>
|
||||
|
||||
@@ -214,6 +214,10 @@ SOURCE=..\..\..\src\osgPlugins\txp\trdll.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\..\src\osgPlugins\txp\trPagePageManager.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\..\src\osgPlugins\txp\trpage_compat.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
@@ -230,6 +234,10 @@ SOURCE=..\..\..\src\osgPlugins\txp\trpage_io.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\..\src\osgPlugins\txp\trpage_managers.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\..\src\osgPlugins\txp\trpage_print.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
@@ -250,6 +258,10 @@ SOURCE=..\..\..\src\osgPlugins\txp\trpage_sys.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\..\src\osgPlugins\txp\trpage_util.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\..\src\osgPlugins\txp\trpage_write.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
@@ -260,6 +272,10 @@ SOURCE=..\..\..\src\osgPlugins\txp\TrPageArchive.h
|
||||
|
||||
SOURCE=..\..\..\src\osgPlugins\txp\TrPageParser.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\..\src\osgPlugins\txp\WaitBlock.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Resource Files"
|
||||
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
//C++ header - Open Scene Graph - Copyright (C) 1998-2002 Robert Osfield
|
||||
//Distributed under the terms of the GNU Library General Public License (LGPL)
|
||||
//as published by the Free Software Foundation.
|
||||
|
||||
#ifndef OSGTXP_EXPORT_
|
||||
#define OSGTXP_EXPORT_ 1
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#pragma warning( disable : 4244 )
|
||||
#pragma warning( disable : 4251 )
|
||||
#pragma warning( disable : 4267 )
|
||||
#pragma warning( disable : 4275 )
|
||||
#pragma warning( disable : 4290 )
|
||||
#pragma warning( disable : 4786 )
|
||||
#endif
|
||||
|
||||
#if defined(_MSC_VER) || defined(__CYGWIN__) || defined(__MINGW32__) || defined( __BCPLUSPLUS__) || defined( __MWERKS__)
|
||||
# ifdef OSGTXP_LIBRARY
|
||||
# define OSGTXP_EXPORT __declspec(dllexport)
|
||||
# else
|
||||
# define OSGTXP_EXPORT __declspec(dllimport)
|
||||
# endif /* OSGTXP_LIBRARY */
|
||||
#else
|
||||
# define OSGTXP_EXPORT
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,19 +0,0 @@
|
||||
TOPDIR = ../../..
|
||||
include $(TOPDIR)/Make/makedefs
|
||||
|
||||
CXXFILES =\
|
||||
osgtxp.cpp\
|
||||
TrPageViewer.cpp\
|
||||
|
||||
LIBS += $(OSG_LIBS) $(GLUT_LIB) $(GL_LIBS) $(X_LIBS) $(OTHER_LIBS)
|
||||
|
||||
LIBS += -losgTXP
|
||||
|
||||
INSTFILES = \
|
||||
$(CXXFILES)\
|
||||
Makefile.inst=Makefile
|
||||
|
||||
EXEC = osgtxp
|
||||
|
||||
include $(TOPDIR)/Make/makerules
|
||||
|
||||
@@ -1,168 +0,0 @@
|
||||
#if defined(_MSC_VER)
|
||||
#pragma warning( disable : 4786 )
|
||||
#endif
|
||||
|
||||
#include <osg/GL>
|
||||
#include <osgGLUT/glut>
|
||||
|
||||
#include <stdlib.h>
|
||||
#if (!defined(WIN32) && !defined(macintosh)) || defined(__CYGWIN__)
|
||||
#include <unistd.h>
|
||||
#include <sys/time.h>
|
||||
#endif
|
||||
#include <stdio.h>
|
||||
|
||||
#include <osg/Math>
|
||||
#include <osg/Statistics>
|
||||
|
||||
#include <string>
|
||||
|
||||
#include <osgGLUT/Viewer>
|
||||
#include <osgGLUT/GLUTEventAdapter>
|
||||
|
||||
#include <osg/Switch>
|
||||
#include <osg/Billboard>
|
||||
#include <osg/LOD>
|
||||
#include <osg/Light>
|
||||
#include <osg/LightSource>
|
||||
#include <osg/Geode>
|
||||
#include <osg/Group>
|
||||
#include <osg/NodeVisitor>
|
||||
#include <osg/LineSegment>
|
||||
#include <osg/PolygonMode>
|
||||
#include <osg/Texture2D>
|
||||
#include <osg/LightModel>
|
||||
#include <osg/ShadeModel>
|
||||
#include <osg/Notify>
|
||||
#include <osg/CollectOccludersVisitor>
|
||||
|
||||
#include <osg/Fog>
|
||||
|
||||
#include <osgDB/WriteFile>
|
||||
|
||||
#include <osgUtil/IntersectVisitor>
|
||||
#include <osgUtil/DisplayListVisitor>
|
||||
#include <osgUtil/SmoothingVisitor>
|
||||
#include <osgUtil/TriStripVisitor>
|
||||
#include <osgUtil/DisplayRequirementsVisitor>
|
||||
|
||||
#include <osgGA/TrackballManipulator>
|
||||
#include <osgGA/FlightManipulator>
|
||||
#include <osgGA/DriveManipulator>
|
||||
|
||||
#include <osg/Version>
|
||||
#include <osgUtil/Version>
|
||||
|
||||
#ifdef WIN32
|
||||
#define USE_FLTK
|
||||
#define USE_GLUT
|
||||
#endif
|
||||
|
||||
#include <osgTXP/TrPageArchive.h>
|
||||
#include "TrPageViewer.h"
|
||||
|
||||
/*
|
||||
#if defined(WIN32) && !defined(__CYGWIN__)
|
||||
#include <sys/timeb.h>
|
||||
#else
|
||||
#endif
|
||||
*/
|
||||
|
||||
using namespace osg;
|
||||
using namespace osgUtil;
|
||||
using namespace osgGLUT;
|
||||
using namespace osgGA;
|
||||
|
||||
using namespace std;
|
||||
using namespace txp;
|
||||
|
||||
PagingViewer::PagingViewer() : Viewer()
|
||||
{
|
||||
pageManage = NULL;
|
||||
}
|
||||
|
||||
bool PagingViewer::Init(OSGPageManager *in_manage,OSGPageManager::ThreadMode threadMode)
|
||||
{
|
||||
pageManage = in_manage;
|
||||
|
||||
// Start up the thread if needed
|
||||
if (threadMode != OSGPageManager::ThreadNone) {
|
||||
ThreadID newThread;
|
||||
pageManage->StartThread(threadMode,newThread);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* App call
|
||||
This replaces the app() call for the base viewer.
|
||||
In this one, we ask the page manager to load stuff in.
|
||||
*/
|
||||
float PagingViewer::app(unsigned int viewport)
|
||||
{
|
||||
osg::Timer_t beforeApp = _timer.tick();
|
||||
|
||||
// update the camera manipulator.
|
||||
osg::ref_ptr<GLUTEventAdapter> ea = new GLUTEventAdapter;
|
||||
ea->adaptFrame(_frameStamp->getReferenceTime());
|
||||
|
||||
bool handled = false;
|
||||
for (EventHandlerList::iterator eh = _viewportList[viewport]._eventHandlerList.begin(); eh != _viewportList[viewport]._eventHandlerList.end();
|
||||
eh++ )
|
||||
{
|
||||
if ( eh->valid() )
|
||||
{
|
||||
if ( (*eh)->handle(*ea,*this) )
|
||||
{
|
||||
handled = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
_viewportList[viewport]._cameraManipulator->handle(*ea,*this);
|
||||
|
||||
if (getRecordingAnimationPath() && getAnimationPath())
|
||||
{
|
||||
osg::Camera* camera = getViewportSceneView(viewport)->getCamera();
|
||||
osg::Matrix matrix;
|
||||
matrix.invert(camera->getModelViewMatrix());
|
||||
osg::Quat quat;
|
||||
quat.set(matrix);
|
||||
getAnimationPath()->insert(_frameStamp->getReferenceTime(),osg::AnimationPath::ControlPoint(matrix.getTrans(),quat));
|
||||
}
|
||||
|
||||
// Update the paging
|
||||
if (pageManage) {
|
||||
int numTile = 1;
|
||||
osgUtil::SceneView *sceneView = getViewportSceneView(viewport);
|
||||
osg::Camera *camera = sceneView->getCamera();
|
||||
const Vec3 &eyePt = camera->getEyePoint();
|
||||
double eyeX = eyePt[0];
|
||||
double eyeY = eyePt[1];
|
||||
|
||||
/* If we're in ThreadFree mode, merge in whatever may be ready.
|
||||
If we're in non-thread mode, load in the given number of tiles (maximum).
|
||||
*/
|
||||
if (pageManage->GetThreadMode() == OSGPageManager::ThreadFree) {
|
||||
pageManage->MergeUpdateThread((osg::Group *)sceneView->getSceneData());
|
||||
pageManage->UpdatePositionThread(eyeX,eyeY);
|
||||
} else {
|
||||
pageManage->UpdateNoThread((osg::Group *)sceneView->getSceneData(),eyeX,eyeY,numTile);
|
||||
}
|
||||
}
|
||||
|
||||
// do app traversal.
|
||||
|
||||
getViewportSceneView(viewport)->setFrameStamp(_frameStamp.get());
|
||||
getViewportSceneView(viewport)->app();
|
||||
|
||||
osg::Timer_t beforeCull = _timer.tick();
|
||||
|
||||
return _timer.delta_m(beforeApp,beforeCull);
|
||||
}
|
||||
|
||||
bool PagingViewer::run()
|
||||
{
|
||||
updateFrameTick();
|
||||
return Window::run();
|
||||
}
|
||||
@@ -1,57 +0,0 @@
|
||||
/* **************************************************************************
|
||||
* OpenSceneGraph loader for Terrapage format database
|
||||
*
|
||||
* That loader is redistributed under the terms listed on Terrain Experts
|
||||
* website (www.terrex.com/www/pages/technology/technologypage.htm)
|
||||
*
|
||||
* "TerraPage is provided as an Open Source format for use by anyone...
|
||||
* We supply the TerraPage C++ source code free of charge. Anyone
|
||||
* can use it and redistribute it as needed (including our competitors).
|
||||
* We do, however, ask that you keep the TERREX copyrights intact."
|
||||
*
|
||||
* Copyright Terrain Experts Inc. 1999.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef _TRPAGEVIEWER_H_
|
||||
#define _TRPAGEVIEWER_H_
|
||||
|
||||
#include <osg/Light>
|
||||
#include <osg/NodeVisitor>
|
||||
#include <osg/Geode>
|
||||
#include <osg/Timer>
|
||||
#include <osg/DisplaySettings>
|
||||
|
||||
#include <osgGLUT/Viewer>
|
||||
|
||||
#include <osgUtil/SceneView>
|
||||
|
||||
#include <osgGLUT/Window>
|
||||
|
||||
#include <string>
|
||||
|
||||
#include <osgTXP/trPagePageManager.h>
|
||||
|
||||
namespace txp
|
||||
{
|
||||
/* Paging Viewer
|
||||
Variant of the regular viewer which knows to call
|
||||
the Page Manager at the beginning of each app() phase.
|
||||
*/
|
||||
class PagingViewer : public osgGLUT::Viewer {
|
||||
public:
|
||||
PagingViewer();
|
||||
bool Init(OSGPageManager *,txp::OSGPageManager::ThreadMode = txp::OSGPageManager::ThreadNone);
|
||||
|
||||
// called on each frame redraw..return the time in ms for each operation.
|
||||
virtual float app(unsigned int viewport);
|
||||
// The default Viewer resets the cameras at the beginning of the run()
|
||||
// This is annoying.
|
||||
bool run();
|
||||
protected:
|
||||
OSGPageManager *pageManage;
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,179 +0,0 @@
|
||||
#include <osg/GL>
|
||||
#include <osgGLUT/glut>
|
||||
#include <osgGLUT/Viewer>
|
||||
|
||||
#include <osg/Node>
|
||||
#include <osg/Notify>
|
||||
|
||||
#include <osgUtil/Optimizer>
|
||||
|
||||
#include <osgDB/Registry>
|
||||
#include <osgDB/ReadFile>
|
||||
|
||||
#include <osgGA/TrackballManipulator>
|
||||
#include <osgGA/FlightManipulator>
|
||||
#include <osgGA/DriveManipulator>
|
||||
|
||||
#include <osgTXP/TrPageArchive.h>
|
||||
#include "TrPageViewer.h"
|
||||
|
||||
|
||||
void write_usage(std::ostream& out,const std::string& name)
|
||||
{
|
||||
out << std::endl;
|
||||
out <<"usage:"<< std::endl;
|
||||
out <<" "<<name<<" [options] infile1 [infile2 ...]"<< std::endl;
|
||||
out << std::endl;
|
||||
out <<"options:"<< std::endl;
|
||||
out <<" -l libraryName - load plugin of name libraryName"<< std::endl;
|
||||
out <<" i.e. -l osgdb_pfb"<< std::endl;
|
||||
out <<" Useful for loading reader/writers which can load"<< std::endl;
|
||||
out <<" other file formats in addition to its extension."<< std::endl;
|
||||
out <<" -e extensionName - load reader/wrter plugin for file extension"<< std::endl;
|
||||
out <<" i.e. -e pfb"<< std::endl;
|
||||
out <<" Useful short hand for specifying full library name as"<< std::endl;
|
||||
out <<" done with -l above, as it automatically expands to"<< std::endl;
|
||||
out <<" the full library name appropriate for each platform."<< std::endl;
|
||||
out <<std::endl;
|
||||
out <<" -stereo - switch on stereo rendering, using the default of,"<< std::endl;
|
||||
out <<" ANAGLYPHIC or the value set in the OSG_STEREO_MODE "<< std::endl;
|
||||
out <<" environmental variable. See doc/stereo.html for "<< std::endl;
|
||||
out <<" further details on setting up accurate stereo "<< std::endl;
|
||||
out <<" for your system. "<< std::endl;
|
||||
out <<" -stereo ANAGLYPHIC - switch on anaglyphic(red/cyan) stereo rendering."<< std::endl;
|
||||
out <<" -stereo QUAD_BUFFER - switch on quad buffered stereo rendering."<< std::endl;
|
||||
out <<std::endl;
|
||||
out <<" -stencil - use a visual with stencil buffer enabled, this "<< std::endl;
|
||||
out <<" also allows the depth complexity statistics mode"<< std::endl;
|
||||
out <<" to be used (press 'p' three times to cycle to it)."<< std::endl;
|
||||
out <<" -f - start with a full screen, borderless window." << std::endl;
|
||||
out << std::endl;
|
||||
}
|
||||
|
||||
using namespace txp;
|
||||
|
||||
int main( int argc, char **argv )
|
||||
{
|
||||
|
||||
// initialize the GLUT
|
||||
glutInit( &argc, argv );
|
||||
|
||||
if (argc<2)
|
||||
{
|
||||
write_usage(std::cout,argv[0]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// create the commandline args.
|
||||
std::vector<std::string> commandLine;
|
||||
for(int i=1;i<argc;++i) commandLine.push_back(argv[i]);
|
||||
|
||||
// initialize the viewer.
|
||||
PagingViewer *viewer = new PagingViewer();
|
||||
viewer->setWindowTitle(argv[0]);
|
||||
|
||||
// configure the viewer from the commandline arguments, and eat any
|
||||
// parameters that have been matched.
|
||||
viewer->readCommandLine(commandLine);
|
||||
|
||||
// configure the plugin registry from the commandline arguments, and
|
||||
// eat any parameters that have been matched.
|
||||
//osgDB::readCommandLine(commandLine);
|
||||
|
||||
// Initialize the TXP database
|
||||
bool loadAll = false;
|
||||
bool threadIt = false;
|
||||
std::string fileName;
|
||||
for(std::vector<std::string>::iterator itr=commandLine.begin();
|
||||
itr!=commandLine.end();
|
||||
++itr)
|
||||
{
|
||||
if ((*itr)[0]!='-')
|
||||
{
|
||||
fileName = (*itr);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
// Look for switches we want
|
||||
if (*itr=="-loadall")
|
||||
{
|
||||
loadAll = true;
|
||||
continue;
|
||||
}
|
||||
if (*itr=="-thread")
|
||||
{
|
||||
threadIt = true;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (fileName.empty()) {
|
||||
fprintf(stderr,"No TerraPage file specified on command line.\n");
|
||||
return 1;
|
||||
}
|
||||
// Open the TXP database
|
||||
TrPageArchive *txpArchive = new TrPageArchive();
|
||||
if (!txpArchive->OpenFile(fileName.c_str()))
|
||||
{
|
||||
fprintf(stderr,"Couldn't load TerraPage archive %s.\n",fileName.c_str());
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Note: Should be checking the return values
|
||||
txpArchive->LoadMaterials();
|
||||
// txpArchive->LoadModels();
|
||||
|
||||
// Might need a page manager if we're paging
|
||||
OSGPageManager *pageManager = new OSGPageManager(txpArchive);
|
||||
osg::Group *rootNode=NULL;
|
||||
if (loadAll) {
|
||||
// Load the whole scenegraph
|
||||
rootNode = txpArchive->LoadAllTiles();
|
||||
if (!rootNode) {
|
||||
fprintf(stderr,"Couldn't load whole TerraPage archive %s.\n",fileName.c_str());
|
||||
return 1;
|
||||
}
|
||||
// add a viewport to the viewer and attach the scene graph.
|
||||
viewer->addViewport( rootNode );
|
||||
} else {
|
||||
viewer->Init(pageManager,(threadIt ? txp::OSGPageManager::ThreadFree : txp::OSGPageManager::ThreadNone));
|
||||
rootNode = new osg::Group();
|
||||
viewer->addViewport(rootNode);
|
||||
}
|
||||
|
||||
// run optimization over the scene graph
|
||||
// osgUtil::Optimizer optimzer;
|
||||
// optimzer.optimize(rootnode);
|
||||
|
||||
|
||||
// register trackball, flight and drive.
|
||||
viewer->registerCameraManipulator(new osgGA::TrackballManipulator);
|
||||
viewer->registerCameraManipulator(new osgGA::FlightManipulator);
|
||||
viewer->registerCameraManipulator(new osgGA::DriveManipulator);
|
||||
|
||||
// Recenter the camera to the middle of the database
|
||||
osg::Vec3 center;
|
||||
txpArchive->GetCenter(center); center[2] += 200;
|
||||
osgUtil::SceneView *sceneView = viewer->getViewportSceneView(0);
|
||||
osg::Camera *camera = sceneView->getCamera();
|
||||
osg::Vec3 eyePt = center;
|
||||
eyePt[0] -= 1000;
|
||||
osg::Vec3 upVec( 0, 0, 1 );
|
||||
camera->setLookAt(eyePt,center,upVec);
|
||||
|
||||
// open the viewer window.
|
||||
viewer->open();
|
||||
|
||||
// fire up the event loop.
|
||||
viewer->run();
|
||||
|
||||
|
||||
// Close things down
|
||||
// (note from Robert Osfield, umm.... we should be using ref_ptr<> for handling memory here, this isn't robust..)
|
||||
delete pageManager;
|
||||
delete txpArchive;
|
||||
delete viewer;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
#include "ReaderWriterTXP.h"
|
||||
#include <osgTXP/TrPageArchive.h>
|
||||
#include <TrPageArchive.h>
|
||||
|
||||
#include <osg/Group>
|
||||
#include <osg/Object>
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
#ifndef READER_WRITER_TXP_H
|
||||
#define READER_WRITER_TXP_H
|
||||
|
||||
#include <osgTXP/trpage_sys.h>
|
||||
#include <trpage_sys.h>
|
||||
#include <osg/Object>
|
||||
#include <osg/Node>
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#include <osg/Node>
|
||||
#include <osg/BoundingBox>
|
||||
|
||||
#include <osgTXP/trPagePageManager.h>
|
||||
#include <trPagePageManager.h>
|
||||
|
||||
namespace txp
|
||||
{
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <osgTXP/TrPageArchive.h>
|
||||
#include <osgTXP/TrPageParser.h>
|
||||
#include <TrPageArchive.h>
|
||||
#include <TrPageParser.h>
|
||||
|
||||
#include <osg/AlphaFunc>
|
||||
#include <osg/Group>
|
||||
@@ -23,11 +23,11 @@
|
||||
#include <osgDB/WriteFile>
|
||||
#include <osgDB/FileNameUtils>
|
||||
|
||||
#include <osgTXP/trpage_geom.h>
|
||||
#include <osgTXP/trpage_read.h>
|
||||
#include <osgTXP/trpage_write.h>
|
||||
#include <osgTXP/trpage_scene.h>
|
||||
#include <osgTXP/trpage_managers.h>
|
||||
#include <trpage_geom.h>
|
||||
#include <trpage_read.h>
|
||||
#include <trpage_write.h>
|
||||
#include <trpage_scene.h>
|
||||
#include <trpage_managers.h>
|
||||
|
||||
|
||||
using namespace txp;
|
||||
|
||||
@@ -25,13 +25,11 @@
|
||||
|
||||
|
||||
|
||||
#include <osgTXP/trpage_sys.h>
|
||||
#include <osgTXP/trpage_read.h>
|
||||
#include <osgTXP/trpage_managers.h>
|
||||
#include <trpage_sys.h>
|
||||
#include <trpage_read.h>
|
||||
#include <trpage_managers.h>
|
||||
|
||||
#include <osgTXP/TrPageParser.h>
|
||||
|
||||
#include <osgTXP/Export.h>
|
||||
#include <TrPageParser.h>
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
@@ -40,7 +38,7 @@
|
||||
namespace txp
|
||||
{
|
||||
/// main class for loading terrapage archives
|
||||
class OSGTXP_EXPORT TrPageArchive : public trpgr_Archive
|
||||
class TrPageArchive : public trpgr_Archive
|
||||
{
|
||||
public:
|
||||
TrPageArchive();
|
||||
@@ -19,7 +19,7 @@
|
||||
* All Rights Reserved.
|
||||
*
|
||||
*****************************************************************************/
|
||||
#include <osgTXP/trpage_sys.h>
|
||||
#include <trpage_sys.h>
|
||||
#include <osg/AlphaFunc>
|
||||
#include <osg/Group>
|
||||
#include <osg/Material>
|
||||
@@ -35,8 +35,8 @@
|
||||
#include <osg/Notify>
|
||||
|
||||
|
||||
#include <osgTXP/TrPageParser.h>
|
||||
#include <osgTXP/TrPageArchive.h>
|
||||
#include <TrPageParser.h>
|
||||
#include <TrPageArchive.h>
|
||||
/*
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
@@ -31,9 +31,7 @@
|
||||
#include <osg/Group>
|
||||
#include <osg/StateSet>
|
||||
#include <vector>
|
||||
#include <osgTXP/trpage_read.h>
|
||||
|
||||
#include <osgTXP/Export.h>
|
||||
#include <trpage_read.h>
|
||||
|
||||
namespace txp
|
||||
{
|
||||
@@ -46,7 +44,7 @@ namespace txp
|
||||
int id;
|
||||
} GroupIDInfo;
|
||||
|
||||
class OSGTXP_EXPORT TrPageParser : public trpgSceneParser
|
||||
class TrPageParser : public trpgSceneParser
|
||||
{
|
||||
public:
|
||||
TrPageParser(TrPageArchive* parent);
|
||||
@@ -9,9 +9,9 @@
|
||||
#include <pthread.h>
|
||||
#endif
|
||||
|
||||
#include <osgTXP/TrPageArchive.h>
|
||||
#include <osgTXP/trPagePageManager.h>
|
||||
#include <osgTXP/trpage_print.h>
|
||||
#include <TrPageArchive.h>
|
||||
#include <trPagePageManager.h>
|
||||
#include <trpage_print.h>
|
||||
|
||||
#include <osg/Group>
|
||||
#include <osg/Object>
|
||||
|
||||
@@ -26,15 +26,14 @@
|
||||
#include <osg/Group>
|
||||
#include <osg/Object>
|
||||
#include <osg/Node>
|
||||
#include <osgTXP/Export.h>
|
||||
|
||||
#include <osgTXP/trpage_geom.h>
|
||||
#include <osgTXP/trpage_read.h>
|
||||
#include <osgTXP/trpage_write.h>
|
||||
#include <osgTXP/trpage_scene.h>
|
||||
#include <osgTXP/trpage_managers.h>
|
||||
#include <osgTXP/WaitBlock.h>
|
||||
#include <osgTXP/TrPageArchive.h>
|
||||
#include <trpage_geom.h>
|
||||
#include <trpage_read.h>
|
||||
#include <trpage_write.h>
|
||||
#include <trpage_scene.h>
|
||||
#include <trpage_managers.h>
|
||||
#include <WaitBlock.h>
|
||||
#include <TrPageArchive.h>
|
||||
|
||||
namespace txp
|
||||
{
|
||||
@@ -55,7 +54,7 @@ namespace txp
|
||||
/* OSG Page Manager
|
||||
This class handles the paging into
|
||||
*/
|
||||
class OSGTXP_EXPORT OSGPageManager {
|
||||
class OSGPageManager {
|
||||
public:
|
||||
/* Need a group to put things under and the archive to page.
|
||||
Also, optionally, a Page Manager (if you've made changes
|
||||
@@ -20,7 +20,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <osgTXP/trpage_io.h>
|
||||
#include <trpage_io.h>
|
||||
|
||||
/* Checkable
|
||||
This is just a class that checks validity.
|
||||
|
||||
@@ -24,9 +24,9 @@
|
||||
|
||||
*/
|
||||
|
||||
#include <osgTXP/trpage_geom.h>
|
||||
#include <osgTXP/trpage_read.h>
|
||||
#include <osgTXP/trpage_compat.h>
|
||||
#include <trpage_geom.h>
|
||||
#include <trpage_read.h>
|
||||
#include <trpage_compat.h>
|
||||
|
||||
/* Old short Material definition from 1.0.
|
||||
{secret}
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <osgTXP/trpage_geom.h>
|
||||
#include <osgTXP/trpage_read.h>
|
||||
#include <trpage_geom.h>
|
||||
#include <trpage_read.h>
|
||||
|
||||
#include <osg/Vec3>
|
||||
|
||||
|
||||
@@ -21,10 +21,10 @@
|
||||
These are the objects that get read from and written to archives.
|
||||
*/
|
||||
|
||||
#include <osgTXP/trpage_sys.h>
|
||||
#include <trpage_sys.h>
|
||||
|
||||
#include <osgTXP/trpage_io.h>
|
||||
#include <osgTXP/trpage_swap.h>
|
||||
#include <trpage_io.h>
|
||||
#include <trpage_swap.h>
|
||||
|
||||
// Forward declarations
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
to the header definition.
|
||||
*/
|
||||
|
||||
#include <osgTXP/trpage_geom.h>
|
||||
#include <osgTXP/trpage_read.h>
|
||||
#include <trpage_geom.h>
|
||||
#include <trpage_read.h>
|
||||
|
||||
/* Write Header class
|
||||
Fill it in and write it out.
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
Token definitions and basic classes.
|
||||
*/
|
||||
|
||||
#include <osgTXP/trpage_sys.h>
|
||||
#include <trpage_sys.h>
|
||||
|
||||
// Macros we may need
|
||||
#ifndef MIN
|
||||
@@ -24,8 +24,8 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <osgTXP/trpage_geom.h>
|
||||
#include <osgTXP/trpage_read.h>
|
||||
#include <trpage_geom.h>
|
||||
#include <trpage_read.h>
|
||||
|
||||
#if defined(_WIN32)
|
||||
#define ALIGNMENT_WORKAROUND false
|
||||
|
||||
@@ -26,6 +26,6 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <osgTXP/trdll.h>
|
||||
#include <trdll.h>
|
||||
|
||||
TXDUMMY_DLL_MAIN
|
||||
|
||||
@@ -17,11 +17,11 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <osgTXP/trpage_sys.h>
|
||||
#include <osgTXP/trpage_geom.h>
|
||||
#include <osgTXP/trpage_read.h>
|
||||
#include <osgTXP/trpage_print.h>
|
||||
#include <osgTXP/trpage_managers.h>
|
||||
#include <trpage_sys.h>
|
||||
#include <trpage_geom.h>
|
||||
#include <trpage_read.h>
|
||||
#include <trpage_print.h>
|
||||
#include <trpage_managers.h>
|
||||
|
||||
/* Managed Tile class.
|
||||
Check the header file for details.
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
You should only modify this code if you want to add data to these classes.
|
||||
*/
|
||||
|
||||
#include <osgTXP/trpage_geom.h>
|
||||
#include <osgTXP/trpage_read.h>
|
||||
#include <trpage_geom.h>
|
||||
#include <trpage_read.h>
|
||||
|
||||
/* Write Material Table class
|
||||
Keeps track of the materials that have been added.
|
||||
|
||||
@@ -22,8 +22,8 @@
|
||||
You should only modify this code if you want to add data to these classes.
|
||||
*/
|
||||
|
||||
#include <osgTXP/trpage_geom.h>
|
||||
#include <osgTXP/trpage_read.h>
|
||||
#include <trpage_geom.h>
|
||||
#include <trpage_read.h>
|
||||
|
||||
/* Write Model class
|
||||
Represents a model reference.
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
of these classes.
|
||||
*/
|
||||
|
||||
#include <osgTXP/trpage_geom.h>
|
||||
#include <osgTXP/trpage_read.h>
|
||||
#include <trpage_geom.h>
|
||||
#include <trpage_read.h>
|
||||
|
||||
/* Write Group
|
||||
Basic group.
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
for the rest of the tokens that you want.
|
||||
*/
|
||||
|
||||
#include <osgTXP/trpage_read.h>
|
||||
#include <trpage_read.h>
|
||||
|
||||
/* ***************************
|
||||
Paging token callback structure
|
||||
|
||||
@@ -22,8 +22,8 @@
|
||||
archive for the purpose of printing it out.
|
||||
*/
|
||||
|
||||
#include <osgTXP/trpage_print.h>
|
||||
#include <osgTXP/trpage_scene.h>
|
||||
#include <trpage_print.h>
|
||||
#include <trpage_scene.h>
|
||||
|
||||
/* Set up the callbacks for the scene graph parser.
|
||||
In our case this is just one read helper with
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
within a TerraPage archive.
|
||||
*/
|
||||
|
||||
#include <osgTXP/trpage_print.h>
|
||||
#include <trpage_print.h>
|
||||
|
||||
/* ******************************************
|
||||
Print Buffer implementation
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
#ifndef trpage_print_h_
|
||||
#define trpage_print_h_
|
||||
|
||||
#include <osgTXP/trpage_read.h>
|
||||
#include <trpage_read.h>
|
||||
|
||||
/* Print Buffer for TerraPage. Subclasses of this object
|
||||
are used to print out to stdout or disk (or whatever).
|
||||
@@ -22,8 +22,8 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <osgTXP/trpage_geom.h>
|
||||
#include <osgTXP/trpage_read.h>
|
||||
#include <trpage_geom.h>
|
||||
#include <trpage_read.h>
|
||||
|
||||
/* *******************
|
||||
Range Methods
|
||||
|
||||
@@ -22,8 +22,8 @@
|
||||
The Read Archive is used to read a paging archive from disk.
|
||||
*/
|
||||
|
||||
#include <osgTXP/trpage_read.h>
|
||||
#include <osgTXP/trpage_compat.h>
|
||||
#include <trpage_read.h>
|
||||
#include <trpage_compat.h>
|
||||
|
||||
// Constructor
|
||||
trpgr_Archive::trpgr_Archive()
|
||||
|
||||
@@ -21,9 +21,9 @@
|
||||
Classes used to represent read objects for paging files.
|
||||
*/
|
||||
|
||||
#include <osgTXP/trpage_sys.h>
|
||||
#include <trpage_sys.h>
|
||||
|
||||
#include <osgTXP/trpage_geom.h>
|
||||
#include <trpage_geom.h>
|
||||
|
||||
/* Callback base class
|
||||
Called when a given token is found.
|
||||
@@ -28,8 +28,8 @@
|
||||
implement a trpgDiskReadBuffer as a subclass of trpgReadBuffer.
|
||||
*/
|
||||
|
||||
#include <osgTXP/trpage_io.h>
|
||||
#include <osgTXP/trpage_swap.h>
|
||||
#include <trpage_io.h>
|
||||
#include <trpage_swap.h>
|
||||
|
||||
/* **********************
|
||||
Read buffer base class functions
|
||||
|
||||
@@ -34,8 +34,8 @@
|
||||
to read into a scene graph. You'll need to replace the helpers, primarily.
|
||||
*/
|
||||
|
||||
#include <osgTXP/trpage_read.h>
|
||||
#include <osgTXP/trpage_scene.h>
|
||||
#include <trpage_read.h>
|
||||
#include <trpage_scene.h>
|
||||
|
||||
/* ****************
|
||||
MBR Calculation and handling
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
for how to read TerraPage format into your own scene graph.
|
||||
*/
|
||||
|
||||
#include <osgTXP/trpage_geom.h>
|
||||
#include <trpage_geom.h>
|
||||
|
||||
/*
|
||||
{group:Demonstration Scene Graph}
|
||||
@@ -20,7 +20,7 @@
|
||||
Byte swapping utility functions.
|
||||
*/
|
||||
|
||||
#include <osgTXP/trpage_swap.h>
|
||||
#include <trpage_swap.h>
|
||||
|
||||
/*
|
||||
** func: swap_two( in, out )
|
||||
|
||||
@@ -20,9 +20,9 @@
|
||||
Byte swapping utility functions.
|
||||
*/
|
||||
|
||||
#include <osgTXP/trpage_sys.h>
|
||||
#include <trpage_sys.h>
|
||||
|
||||
#include <osgTXP/trpage_io.h>
|
||||
#include <trpage_io.h>
|
||||
|
||||
// Byte swap and return a short
|
||||
// {group:Byte Ordering Utilities}
|
||||
@@ -101,7 +101,7 @@ typedef int64 trpgllong;
|
||||
|
||||
// These are used to export classes from a DLL
|
||||
// Definitely Windows specific
|
||||
#include <osgTXP/trpage_ident.h>
|
||||
#include <osgTXP/trdll.h>
|
||||
#include <trpage_ident.h>
|
||||
#include <trdll.h>
|
||||
|
||||
#endif
|
||||
@@ -23,8 +23,8 @@
|
||||
the front of an archive) or the Tile Header (at the beginning of each tile).
|
||||
*/
|
||||
|
||||
#include <osgTXP/trpage_geom.h>
|
||||
#include <osgTXP/trpage_read.h>
|
||||
#include <trpage_geom.h>
|
||||
#include <trpage_read.h>
|
||||
|
||||
/* Write Tile Table
|
||||
Keeps track of tiles written to disk.
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
************************
|
||||
*/
|
||||
|
||||
#include <osgTXP/trpage_util.h>
|
||||
#include <trpage_util.h>
|
||||
|
||||
/* trpage_util.cpp
|
||||
This source file implements various utility routines for paging archive
|
||||
|
||||
@@ -20,9 +20,9 @@
|
||||
#ifndef trpage_util_h_
|
||||
#define trpage_util_h_
|
||||
#include <stdlib.h>
|
||||
#include <osgTXP/trpage_read.h>
|
||||
#include <osgTXP/trpage_write.h>
|
||||
#include <osgTXP/trpage_scene.h>
|
||||
#include <trpage_read.h>
|
||||
#include <trpage_write.h>
|
||||
#include <trpage_scene.h>
|
||||
|
||||
TX_EXDECL class TX_CLDECL trpgUtil {
|
||||
public:
|
||||
@@ -28,10 +28,10 @@
|
||||
again, subclass and override if you need to change them.
|
||||
*/
|
||||
|
||||
#include <osgTXP/trpage_geom.h>
|
||||
#include <osgTXP/trpage_write.h>
|
||||
#include <osgTXP/trpage_compat.h>
|
||||
#include <osgTXP/trpage_read.h>
|
||||
#include <trpage_geom.h>
|
||||
#include <trpage_write.h>
|
||||
#include <trpage_compat.h>
|
||||
#include <trpage_read.h>
|
||||
|
||||
// Constructor
|
||||
trpgwArchive::trpgwArchive(trpgEndian inNess,TileMode inTileMode,int inVersion)
|
||||
|
||||
@@ -21,9 +21,9 @@
|
||||
Classes that are used to write paging archives.
|
||||
*/
|
||||
|
||||
#include <osgTXP/trpage_sys.h>
|
||||
#include <osgTXP/trpage_io.h>
|
||||
#include <osgTXP/trpage_swap.h>
|
||||
#include <trpage_sys.h>
|
||||
#include <trpage_io.h>
|
||||
#include <trpage_swap.h>
|
||||
|
||||
/* Geometry Stats
|
||||
Used with a Geometry Helper to keep track of what go built.
|
||||
@@ -29,8 +29,8 @@
|
||||
is required.
|
||||
*/
|
||||
|
||||
#include <osgTXP/trpage_io.h>
|
||||
#include <osgTXP/trpage_swap.h>
|
||||
#include <trpage_io.h>
|
||||
#include <trpage_swap.h>
|
||||
|
||||
/* **********************
|
||||
Memory Write Buffer functions
|
||||
|
||||
Reference in New Issue
Block a user