mirror of
https://github.com/overte-org/overte.git
synced 2025-04-21 06:44:06 +02:00
Merge pull request #158 from ey6es/master
Reverted threading change by default, since we're seeing lower frame rates.
This commit is contained in:
commit
ebc5d665c0
1 changed files with 56 additions and 25 deletions
|
@ -39,6 +39,8 @@
|
|||
#include <ifaddrs.h>
|
||||
#endif
|
||||
|
||||
#include <pthread.h>
|
||||
|
||||
#include <glm/glm.hpp>
|
||||
#include <glm/gtc/matrix_transform.hpp>
|
||||
#include <glm/gtc/type_ptr.hpp>
|
||||
|
@ -86,6 +88,10 @@ using namespace std;
|
|||
void reshape(int width, int height); // will be defined below
|
||||
void loadViewFrustum(ViewFrustum& viewFrustum); // will be defined below
|
||||
|
||||
bool enableNetworkThread = true;
|
||||
pthread_t networkReceiveThread;
|
||||
bool stopNetworkReceiveThread = false;
|
||||
|
||||
unsigned char incomingPacket[MAX_PACKET_SIZE];
|
||||
int packetCount = 0;
|
||||
int packetsPerSecond = 0;
|
||||
|
@ -349,6 +355,11 @@ void terminate () {
|
|||
audio.terminate();
|
||||
#endif
|
||||
|
||||
if (enableNetworkThread) {
|
||||
stopNetworkReceiveThread = true;
|
||||
pthread_join(networkReceiveThread, NULL);
|
||||
}
|
||||
|
||||
exit(EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
|
@ -1408,34 +1419,43 @@ void key(unsigned char k, int x, int y)
|
|||
}
|
||||
|
||||
// Receive packets from other agents/servers and decide what to do with them!
|
||||
void networkReceive()
|
||||
void* networkReceive(void* args)
|
||||
{
|
||||
sockaddr senderAddress;
|
||||
ssize_t bytesReceived;
|
||||
|
||||
while (AgentList::getInstance()->getAgentSocket().receive(&senderAddress, incomingPacket, &bytesReceived)) {
|
||||
packetCount++;
|
||||
bytesCount += bytesReceived;
|
||||
|
||||
switch (incomingPacket[0]) {
|
||||
case PACKET_HEADER_TRANSMITTER_DATA:
|
||||
myAvatar.processTransmitterData(incomingPacket, bytesReceived);
|
||||
break;
|
||||
case PACKET_HEADER_VOXEL_DATA:
|
||||
case PACKET_HEADER_Z_COMMAND:
|
||||
case PACKET_HEADER_ERASE_VOXEL:
|
||||
voxels.parseData(incomingPacket, bytesReceived);
|
||||
break;
|
||||
case PACKET_HEADER_BULK_AVATAR_DATA:
|
||||
AgentList::getInstance()->processBulkAgentData(&senderAddress,
|
||||
incomingPacket,
|
||||
bytesReceived);
|
||||
break;
|
||||
default:
|
||||
AgentList::getInstance()->processAgentData(&senderAddress, incomingPacket, bytesReceived);
|
||||
break;
|
||||
|
||||
while (!stopNetworkReceiveThread) {
|
||||
if (AgentList::getInstance()->getAgentSocket().receive(&senderAddress, incomingPacket, &bytesReceived)) {
|
||||
packetCount++;
|
||||
bytesCount += bytesReceived;
|
||||
|
||||
switch (incomingPacket[0]) {
|
||||
case PACKET_HEADER_TRANSMITTER_DATA:
|
||||
myAvatar.processTransmitterData(incomingPacket, bytesReceived);
|
||||
break;
|
||||
case PACKET_HEADER_VOXEL_DATA:
|
||||
case PACKET_HEADER_Z_COMMAND:
|
||||
case PACKET_HEADER_ERASE_VOXEL:
|
||||
voxels.parseData(incomingPacket, bytesReceived);
|
||||
break;
|
||||
case PACKET_HEADER_BULK_AVATAR_DATA:
|
||||
AgentList::getInstance()->processBulkAgentData(&senderAddress,
|
||||
incomingPacket,
|
||||
bytesReceived);
|
||||
break;
|
||||
default:
|
||||
AgentList::getInstance()->processAgentData(&senderAddress, incomingPacket, bytesReceived);
|
||||
break;
|
||||
}
|
||||
} else if (!enableNetworkThread) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (enableNetworkThread) {
|
||||
pthread_exit(0);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void idle(void) {
|
||||
|
@ -1472,7 +1492,9 @@ void idle(void) {
|
|||
updateAvatar(deltaTime);
|
||||
|
||||
// read incoming packets from network
|
||||
networkReceive();
|
||||
if (!enableNetworkThread) {
|
||||
networkReceive(0);
|
||||
}
|
||||
|
||||
//loop through all the other avatars and simulate them...
|
||||
AgentList* agentList = AgentList::getInstance();
|
||||
|
@ -1616,7 +1638,10 @@ int main(int argc, const char * argv[])
|
|||
listenPort = atoi(portStr);
|
||||
}
|
||||
AgentList::createInstance(AGENT_TYPE_AVATAR, listenPort);
|
||||
AgentList::getInstance()->getAgentSocket().setBlocking(false);
|
||||
enableNetworkThread = !cmdOptionExists(argc, argv, "--nonblocking");
|
||||
if (!enableNetworkThread) {
|
||||
AgentList::getInstance()->getAgentSocket().setBlocking(false);
|
||||
}
|
||||
|
||||
gettimeofday(&applicationStartupTime, NULL);
|
||||
const char* domainIP = getCmdOption(argc, argv, "--domain");
|
||||
|
@ -1699,6 +1724,12 @@ int main(int argc, const char * argv[])
|
|||
printLog("Local Voxel File loaded.\n");
|
||||
}
|
||||
|
||||
// create thread for receipt of data via UDP
|
||||
if (enableNetworkThread) {
|
||||
pthread_create(&networkReceiveThread, NULL, networkReceive, NULL);
|
||||
printLog("Network receive thread created.\n");
|
||||
}
|
||||
|
||||
glutTimerFunc(1000, Timer, 0);
|
||||
glutMainLoop();
|
||||
|
||||
|
|
Loading…
Reference in a new issue