mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 11:37:58 +02:00
Merge branch 'master' of git://github.com/worklist/hifi into dev4
This commit is contained in:
commit
a20668951a
8 changed files with 52 additions and 59 deletions
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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),
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue