Merge branch 'master' of git://github.com/worklist/hifi into dev4

This commit is contained in:
Eric Johnston 2013-08-07 17:06:43 -07:00
commit a20668951a
8 changed files with 52 additions and 59 deletions

View file

@ -439,7 +439,7 @@ void Application::paintGL() {
// myCamera is. But we also want to do meaningful camera transforms on OpenGL for the offset camera // myCamera is. But we also want to do meaningful camera transforms on OpenGL for the offset camera
Camera whichCamera = _myCamera; Camera whichCamera = _myCamera;
if (_viewFrustumFromOffset->isChecked() && _frustumOn->isChecked()) { if (_frustumOn->isChecked()) {
// set the camera to third-person view but offset so we can see the frustum // set the camera to third-person view but offset so we can see the frustum
_viewFrustumOffsetCamera.setTargetPosition(_myCamera.getTargetPosition()); _viewFrustumOffsetCamera.setTargetPosition(_myCamera.getTargetPosition());
@ -467,56 +467,49 @@ void Application::paintGL() {
_frameCount++; _frameCount++;
} }
void Application::resizeGL(int width, int height) { void Application::resetCamerasOnResizeGL(Camera& camera, int width, int height) {
float aspectRatio = ((float)width/(float)height); // based on screen resize float aspectRatio = ((float)width/(float)height); // based on screen resize
// reset the camera FOV to our preference...
_myCamera.setFieldOfView(_fieldOfView);
// get the lens details from the current camera
Camera& camera = _viewFrustumFromOffset->isChecked() ? _viewFrustumOffsetCamera : _myCamera;
float nearClip = camera.getNearClip();
float farClip = camera.getFarClip();
float fov;
if (OculusManager::isConnected()) { if (OculusManager::isConnected()) {
// more magic numbers; see Oculus SDK docs, p. 32 // more magic numbers; see Oculus SDK docs, p. 32
camera.setAspectRatio(aspectRatio *= 0.5); camera.setAspectRatio(aspectRatio *= 0.5);
camera.setFieldOfView(fov = 2 * atan((0.0468 * _oculusDistortionScale) / 0.041) * (180 / PIf)); camera.setFieldOfView(2 * atan((0.0468 * _oculusDistortionScale) / 0.041) * (180 / PIf));
// resize the render texture
if (_oculusTextureID != 0) {
glBindTexture(GL_TEXTURE_2D, _oculusTextureID);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
glBindTexture(GL_TEXTURE_2D, 0);
}
} else { } else {
camera.setAspectRatio(aspectRatio); camera.setAspectRatio(aspectRatio);
camera.setFieldOfView(fov = _fieldOfView); camera.setFieldOfView(_fieldOfView);
}
}
void Application::resizeGL(int width, int height) {
resetCamerasOnResizeGL(_viewFrustumOffsetCamera, width, height);
resetCamerasOnResizeGL(_myCamera, width, height);
// resize the render texture
if (OculusManager::isConnected() && _oculusTextureID != 0) {
glBindTexture(GL_TEXTURE_2D, _oculusTextureID);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
glBindTexture(GL_TEXTURE_2D, 0);
} }
// Tell our viewFrustum about this change // Tell our viewFrustum about this change, using the application camera
_viewFrustum.setAspectRatio(aspectRatio); loadViewFrustum(_myCamera, _viewFrustum);
glViewport(0, 0, width, height); // shouldn't this account for the menu??? glViewport(0, 0, width, height); // shouldn't this account for the menu???
glMatrixMode(GL_PROJECTION); glMatrixMode(GL_PROJECTION);
glLoadIdentity(); glLoadIdentity();
// XXXBHG - If we're in view frustum mode, then we need to do this little bit of hackery so that
// OpenGL won't clip our frustum rendering lines. This is a debug hack for sure! Basically, this makes
// the near clip a little bit closer (therefor you see more) and the far clip a little bit farther (also,
// to see more.)
if (_frustumOn->isChecked()) {
nearClip -= 0.01f;
farClip += 0.01f;
}
// On window reshape, we need to tell OpenGL about our new setting // On window reshape, we need to tell OpenGL about our new setting
float left, right, bottom, top, nearVal, farVal; float left, right, bottom, top, nearVal, farVal;
glm::vec4 nearClipPlane, farClipPlane; glm::vec4 nearClipPlane, farClipPlane;
loadViewFrustum(camera, _viewFrustum);
_viewFrustum.computeOffAxisFrustum(left, right, bottom, top, nearVal, farVal, nearClipPlane, farClipPlane); _viewFrustum.computeOffAxisFrustum(left, right, bottom, top, nearVal, farVal, nearClipPlane, farClipPlane);
// If we're in Display Frustum mode, then we want to use the slightly adjust near/far clip values of the
// _viewFrustumOffsetCamera, so that we can see more of the application content in the application's frustum
if (_frustumOn->isChecked()) {
nearVal = _viewFrustumOffsetCamera.getNearClip();
farVal = _viewFrustumOffsetCamera.getFarClip();
}
glFrustum(left, right, bottom, top, nearVal, farVal); glFrustum(left, right, bottom, top, nearVal, farVal);
glMatrixMode(GL_MODELVIEW); glMatrixMode(GL_MODELVIEW);
@ -819,11 +812,7 @@ void Application::keyPressEvent(QKeyEvent* event) {
_colorVoxelMode->trigger(); _colorVoxelMode->trigger();
break; break;
case Qt::Key_O: case Qt::Key_O:
if (isShifted) { _selectVoxelMode->trigger();
_viewFrustumFromOffset->trigger();
} else {
_selectVoxelMode->trigger();
}
break; break;
case Qt::Key_Slash: case Qt::Key_Slash:
_renderStatsOn->trigger(); _renderStatsOn->trigger();
@ -2060,8 +2049,6 @@ void Application::initMenu() {
QMenu* frustumMenu = debugMenu->addMenu("View Frustum Debugging Tools"); QMenu* frustumMenu = debugMenu->addMenu("View Frustum Debugging Tools");
(_frustumOn = frustumMenu->addAction("Display Frustum"))->setCheckable(true); (_frustumOn = frustumMenu->addAction("Display Frustum"))->setCheckable(true);
_frustumOn->setShortcut(Qt::SHIFT | Qt::Key_F); _frustumOn->setShortcut(Qt::SHIFT | Qt::Key_F);
(_viewFrustumFromOffset = frustumMenu->addAction(
"Use Offset Camera", this, SLOT(setFrustumOffset(bool)), Qt::SHIFT | Qt::Key_O))->setCheckable(true);
_frustumRenderModeAction = frustumMenu->addAction( _frustumRenderModeAction = frustumMenu->addAction(
"Render Mode", this, SLOT(cycleFrustumRenderMode()), Qt::SHIFT | Qt::Key_R); "Render Mode", this, SLOT(cycleFrustumRenderMode()), Qt::SHIFT | Qt::Key_R);
updateFrustumRenderModeAction(); updateFrustumRenderModeAction();
@ -2776,6 +2763,7 @@ void Application::loadViewFrustum(Camera& camera, ViewFrustum& viewFrustum) {
float fov = camera.getFieldOfView(); float fov = camera.getFieldOfView();
float nearClip = camera.getNearClip(); float nearClip = camera.getNearClip();
float farClip = camera.getFarClip(); float farClip = camera.getFarClip();
float aspectRatio = camera.getAspectRatio();
glm::quat rotation = camera.getRotation(); glm::quat rotation = camera.getRotation();
@ -2784,6 +2772,7 @@ void Application::loadViewFrustum(Camera& camera, ViewFrustum& viewFrustum) {
viewFrustum.setOrientation(rotation); viewFrustum.setOrientation(rotation);
// Also make sure it's got the correct lens details from the camera // Also make sure it's got the correct lens details from the camera
viewFrustum.setAspectRatio(aspectRatio);
viewFrustum.setFieldOfView(fov); viewFrustum.setFieldOfView(fov);
viewFrustum.setNearClip(nearClip); viewFrustum.setNearClip(nearClip);
viewFrustum.setFarClip(farClip); viewFrustum.setFarClip(farClip);

View file

@ -211,6 +211,7 @@ private slots:
void toggleFollowMode(); void toggleFollowMode();
private: private:
void resetCamerasOnResizeGL(Camera& camera, int width, int height);
static void controlledBroadcastToNodes(unsigned char* broadcastData, size_t dataBytes, static void controlledBroadcastToNodes(unsigned char* broadcastData, size_t dataBytes,
const char* nodeTypes, int numNodeTypes); const char* nodeTypes, int numNodeTypes);
@ -307,7 +308,6 @@ private:
QAction* _voxelPaintColor; // The color with which to paint voxels QAction* _voxelPaintColor; // The color with which to paint voxels
QAction* _destructiveAddVoxel; // when doing voxel editing do we want them to be destructive QAction* _destructiveAddVoxel; // when doing voxel editing do we want them to be destructive
QAction* _frustumOn; // Whether or not to display the debug view frustum QAction* _frustumOn; // Whether or not to display the debug view frustum
QAction* _viewFrustumFromOffset; // Whether or not to offset the view of the frustum
QAction* _fullScreenMode; // whether we are in full screen mode QAction* _fullScreenMode; // whether we are in full screen mode
QAction* _frustumRenderModeAction; QAction* _frustumRenderModeAction;
QAction* _settingsAutosave; // Whether settings are saved automatically QAction* _settingsAutosave; // Whether settings are saved automatically

View file

@ -27,12 +27,14 @@ void PairingHandler::sendPairRequest() {
int localAddress = getLocalAddress(); int localAddress = getLocalAddress();
char pairPacket[24] = {}; char pairPacket[24] = {};
sprintf(pairPacket, "Find %d.%d.%d.%d:%d", sprintf(pairPacket, "Find %d.%d.%d.%d:%hu",
localAddress & 0xFF, localAddress & 0xFF,
(localAddress >> 8) & 0xFF, (localAddress >> 8) & 0xFF,
(localAddress >> 16) & 0xFF, (localAddress >> 16) & 0xFF,
(localAddress >> 24) & 0xFF, (localAddress >> 24) & 0xFF,
NODE_SOCKET_LISTEN_PORT); NodeList::getInstance()->getSocketListenPort());
qDebug("Sending pair packet: %s\n", pairPacket);
sockaddr_in pairingServerSocket; sockaddr_in pairingServerSocket;

View file

@ -1433,7 +1433,7 @@ float Avatar::getBallRenderAlpha(int ball, bool lookingInMirror) const {
void Avatar::renderBody(bool lookingInMirror, bool renderAvatarBalls) { void Avatar::renderBody(bool lookingInMirror, bool renderAvatarBalls) {
if (Application::getInstance()->getCamera()->getMode() == CAMERA_MODE_FIRST_PERSON) { if (isMyAvatar() && Application::getInstance()->getCamera()->getMode() == CAMERA_MODE_FIRST_PERSON) {
// Dont display body // Dont display body
} else if (_head.getFace().isFullFrame()) { } else if (_head.getFace().isFullFrame()) {
// Render the full-frame video // Render the full-frame video

View file

@ -38,7 +38,7 @@ bool pingUnknownNodeThreadStopFlag = false;
NodeList* NodeList::_sharedInstance = NULL; NodeList* NodeList::_sharedInstance = NULL;
NodeList* NodeList::createInstance(char ownerType, unsigned int socketListenPort) { NodeList* NodeList::createInstance(char ownerType, unsigned short int socketListenPort) {
if (!_sharedInstance) { if (!_sharedInstance) {
_sharedInstance = new NodeList(ownerType, socketListenPort); _sharedInstance = new NodeList(ownerType, socketListenPort);
} else { } else {
@ -56,7 +56,7 @@ NodeList* NodeList::getInstance() {
return _sharedInstance; return _sharedInstance;
} }
NodeList::NodeList(char newOwnerType, unsigned int newSocketListenPort) : NodeList::NodeList(char newOwnerType, unsigned short int newSocketListenPort) :
_nodeBuckets(), _nodeBuckets(),
_numNodes(0), _numNodes(0),
_nodeSocket(newSocketListenPort), _nodeSocket(newSocketListenPort),

View file

@ -28,7 +28,7 @@ const int MAX_NUM_NODES = 10000;
const int NODES_PER_BUCKET = 100; const int NODES_PER_BUCKET = 100;
const int MAX_PACKET_SIZE = 1500; const int MAX_PACKET_SIZE = 1500;
const unsigned int NODE_SOCKET_LISTEN_PORT = 40103; const unsigned short int NODE_SOCKET_LISTEN_PORT = 40103;
const int NODE_SILENCE_THRESHOLD_USECS = 2 * 1000000; const int NODE_SILENCE_THRESHOLD_USECS = 2 * 1000000;
const int DOMAIN_SERVER_CHECK_IN_USECS = 1 * 1000000; const int DOMAIN_SERVER_CHECK_IN_USECS = 1 * 1000000;
@ -55,7 +55,7 @@ public:
class NodeList { class NodeList {
public: public:
static NodeList* createInstance(char ownerType, unsigned int socketListenPort = NODE_SOCKET_LISTEN_PORT); static NodeList* createInstance(char ownerType, unsigned short int socketListenPort = NODE_SOCKET_LISTEN_PORT);
static NodeList* getInstance(); static NodeList* getInstance();
typedef NodeListIterator iterator; typedef NodeListIterator iterator;
@ -81,7 +81,7 @@ public:
UDPSocket* getNodeSocket() { return &_nodeSocket; } UDPSocket* getNodeSocket() { return &_nodeSocket; }
unsigned int getSocketListenPort() const { return _nodeSocket.getListeningPort(); }; unsigned short int getSocketListenPort() const { return _nodeSocket.getListeningPort(); };
void(*linkedDataCreateCallback)(Node *); void(*linkedDataCreateCallback)(Node *);
@ -128,7 +128,7 @@ public:
private: private:
static NodeList* _sharedInstance; static NodeList* _sharedInstance;
NodeList(char ownerType, unsigned int socketListenPort); NodeList(char ownerType, unsigned short int socketListenPort);
~NodeList(); ~NodeList();
NodeList(NodeList const&); // Don't implement, needed to avoid copies of singleton NodeList(NodeList const&); // Don't implement, needed to avoid copies of singleton
void operator=(NodeList const&); // Don't implement, needed to avoid copies of singleton void operator=(NodeList const&); // Don't implement, needed to avoid copies of singleton
@ -142,7 +142,6 @@ private:
UDPSocket _nodeSocket; UDPSocket _nodeSocket;
char _ownerType; char _ownerType;
char* _nodeTypesOfInterest; char* _nodeTypesOfInterest;
unsigned int _socketListenPort;
uint16_t _ownerID; uint16_t _ownerID;
uint16_t _lastNodeID; uint16_t _lastNodeID;
pthread_t removeSilentNodesThread; pthread_t removeSilentNodesThread;

View file

@ -129,7 +129,10 @@ sockaddr_in socketForHostname(const char* hostname) {
return newSocket; return newSocket;
} }
UDPSocket::UDPSocket(int listeningPort) : listeningPort(listeningPort), blocking(true) { UDPSocket::UDPSocket(unsigned short int listeningPort) :
_listeningPort(listeningPort),
blocking(true)
{
init(); init();
// create the socket // create the socket
handle = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); handle = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
@ -145,10 +148,10 @@ UDPSocket::UDPSocket(int listeningPort) : listeningPort(listeningPort), blocking
sockaddr_in bind_address; sockaddr_in bind_address;
bind_address.sin_family = AF_INET; bind_address.sin_family = AF_INET;
bind_address.sin_addr.s_addr = INADDR_ANY; bind_address.sin_addr.s_addr = INADDR_ANY;
bind_address.sin_port = htons((uint16_t) listeningPort); bind_address.sin_port = htons((uint16_t) _listeningPort);
if (bind(handle, (const sockaddr*) &bind_address, sizeof(sockaddr_in)) < 0) { if (bind(handle, (const sockaddr*) &bind_address, sizeof(sockaddr_in)) < 0) {
qDebug("Failed to bind socket to port %d.\n", listeningPort); qDebug("Failed to bind socket to port %hu.\n", _listeningPort);
return; return;
} }
@ -156,7 +159,7 @@ UDPSocket::UDPSocket(int listeningPort) : listeningPort(listeningPort), blocking
if (listeningPort == 0) { if (listeningPort == 0) {
socklen_t addressLength = sizeof(sockaddr_in); socklen_t addressLength = sizeof(sockaddr_in);
getsockname(handle, (sockaddr*) &bind_address, &addressLength); getsockname(handle, (sockaddr*) &bind_address, &addressLength);
listeningPort = ntohs(bind_address.sin_port); _listeningPort = ntohs(bind_address.sin_port);
} }
// set timeout on socket recieve to 0.5 seconds // set timeout on socket recieve to 0.5 seconds
@ -165,7 +168,7 @@ UDPSocket::UDPSocket(int listeningPort) : listeningPort(listeningPort), blocking
tv.tv_usec = 500000; tv.tv_usec = 500000;
setsockopt(handle, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, sizeof tv); setsockopt(handle, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, sizeof tv);
qDebug("Created UDP socket listening on port %d.\n", listeningPort); qDebug("Created UDP socket listening on port %hu.\n", _listeningPort);
} }
UDPSocket::~UDPSocket() { UDPSocket::~UDPSocket() {

View file

@ -20,10 +20,10 @@
class UDPSocket { class UDPSocket {
public: public:
UDPSocket(int listening_port); UDPSocket(unsigned short int listeningPort);
~UDPSocket(); ~UDPSocket();
bool init(); bool init();
int getListeningPort() const { return listeningPort; } unsigned short int getListeningPort() const { return _listeningPort; }
void setBlocking(bool blocking); void setBlocking(bool blocking);
bool isBlocking() const { return blocking; } bool isBlocking() const { return blocking; }
int send(sockaddr* destAddress, const void* data, size_t byteLength) const; int send(sockaddr* destAddress, const void* data, size_t byteLength) const;
@ -32,7 +32,7 @@ public:
bool receive(sockaddr* recvAddress, void* receivedData, ssize_t* receivedBytes) const; bool receive(sockaddr* recvAddress, void* receivedData, ssize_t* receivedBytes) const;
private: private:
int handle; int handle;
int listeningPort; unsigned short int _listeningPort;
bool blocking; bool blocking;
}; };