void GLOBALDATA::make_bgupdate (int32_t x, int32_t y, int32_t w, int32_t h) { if (lastUpdatesCount >= env.max_screen_updates) { make_fullUpdate(); return; } assert( (w > 0) && (h > 0) ); if ( (w > 0) && (h > 0) ) addUpdate(x, y, w, h, lastUpdates, lastUpdatesCount); }
void GLOBALDATA::make_update (int32_t x, int32_t y, int32_t w, int32_t h) { if (updateCount >= env.max_screen_updates) { make_fullUpdate(); return; } // These asserts should catch screwed updates that make no sense assert( (h <= env.screenHeight) && (w <= env.screenWidth) ); assert( (w > 0) && (h > 0) ); if ( (h > 0) && (w > 0) ) addUpdate(x, y, w, h, updates, updateCount); }
void Panel::addUpdatePixels(Point *point, int pixelWidth, int pixelHeight) { Rectangle rect; float sizeX, sizeY; sizeX = pixelWidth + 1; sizeY = pixelHeight + 1; rect.setLeft(point->x() - sizeX/2.0); rect.setTop(point->y() - sizeY/2.0); rect.setRight(point->x() + sizeX/2.0); rect.setBottom(point->y() + sizeY/2.0); addUpdate(&rect); }
void Game::sendUpdates() { if(_onHit.size() > 0) { book::packet::OnHitEntity update; for(book::packet::OnHitEntity::Data& data: _onHit) { update.add(std::move(data)); } sf::Packet packet; packet<<update; sendToAll(packet); _onHit.clear(); } if(_onHitted.size() > 0) { book::packet::OnHittedEntity update; for(book::packet::OnHittedEntity::Data& data : _onHitted) { update.add(std::move(data)); } sf::Packet packet; packet<<update; sendToAll(packet); _onHitted.clear(); } if(_onSpawn.size() > 0) { book::packet::OnSpawnEntity update; for(std::uint32_t id : _onSpawn) update.add(id); sf::Packet packet; packet<<update; sendToAll(packet); _onSpawn.clear(); } if(_destroyEntityId.size() > 0) { book::packet::DestroyEntity update; for(std::uint32_t id : _destroyEntityId) update.add(id); sf::Packet packet; packet<<update; sendToAll(packet); _destroyEntityId.clear(); } if(_createEntities.getCreates().size() >0) { sf::Packet packet; packet<<_createEntities; sendToAll(packet); _createEntities.clear(); } if(_updateEntitiesId.size() > 0) { book::packet::UpdateEntity update; for(std::uint32_t id : _updateEntitiesId) addUpdate(update,id); sf::Packet packet; packet<<update; sendToAll(packet); _updateEntitiesId.clear(); } if(_updateTeamId.size() > 0) { book::packet::UpdateTeam update; sf::Lock guard(_teamMutex); for(std::uint32_t id : _updateTeamId) { book::packet::UpdateTeam::Data data; data.team = id; data.gameOver = _teams[id]->isGameOver(); data.gold = _teams[id]->getGold(); update.add(std::move(data)); } sf::Packet packet; packet<<update; sendToAll(packet); _updateTeamId.clear(); } }
void Panel::addUpdateAll() { if (m_data->updateAreas.size() > 0) freeUpdateAreas(); addUpdate(m_data->visible); }
int ShmCacheManager::processPurgeCmdEx( ShmPrivatePurgeData *pPrivate, const char *pValue, int iValLen, time_t curTime, int curTimeMS) { int flag; const char *pValueEnd, *pNext; const char *pEnd = pValue + iValLen; while (pValue < pEnd) { if (isspace(*pValue)) { ++pValue; continue; } pValueEnd = (const char *)memchr(pValue, ',', pEnd - pValue); if (!pValueEnd) pValueEnd = pNext = pEnd; else pNext = pValueEnd + 1; while (isspace(pValueEnd[-1])) --pValueEnd; flag = PDF_PURGE; if (strncmp(pValue, "tag=", 4) == 0) { pValue += 4; flag |= PDF_TAG; } if (*pValue == '*') { if (pValue == pValueEnd - 1) { //only a "*". if (pPrivate) pPrivate->setLastFlushTime(curTime, curTimeMS); else { CacheInfo *pInfo = (CacheInfo *)m_pStr2IdHash-> offset2ptr(m_CacheInfoOff); pInfo->setPurgeTime(curTime, curTimeMS); } pValue = pNext; continue; } else { //prefix flag |= PDF_PREFIX; } } else if (pValueEnd[-1] == '*') flag |= PDF_POSTFIX; if (pPrivate) { int idTag = getTagId(pValue, pValueEnd - pValue); if (idTag != -1) { purgeinfo_t purgeinfo = { (int32_t)curTime, (int16_t)curTimeMS, (uint8_t)flag, (uint8_t)idTag }; pPrivate->addUpdate(&purgeinfo); } } else addUpdate(pValue, pValueEnd - pValue, flag, curTime, curTimeMS); pValue = pNext; } return 0; }
HRESULT KinectManager::update(float timeScale) { //first add time to particles and remove them if they're dead try{ pHandPositions->size(); } catch (exception e) { cout << e.what() << endl; return MAKE_HRESULT(0, 0, -1); } for (vector<Particle*>::iterator hp = pHandPositions->begin(); hp != pHandPositions->end();) { (*hp)->timer += 16.f / timeScale; if ((*hp)->timer > handParticleTimeout) hp = pHandPositions->erase(hp); else ++hp; } if (kinectFailed) return MAKE_HRESULT(0, 0, -1); HRESULT hr; if (!kinectInitialized) { hr = pKinect->NuiStatus(); if (hr == S_NUI_INITIALIZING) { cout << "kinect is still initializing...\n"; return hr; } else if (FAILED(hr)) { kinectFailed = true; return hr; } //kinect ready, initialize kinectInitialized = true; startKinect(); } // kinect if okay, do updating // //get next frame hr = pKinect->NuiSkeletonGetNextFrame(5, pSkeletonFrame); if (SUCCEEDED(hr)) { //pHandPos->clear(); ofVec3f pos; for (int i = 0; i < NUI_SKELETON_COUNT; i++) { //if its a tracked skeleton if (pSkeletonFrame->SkeletonData[i].eTrackingState == NUI_SKELETON_TRACKED) { //left hand pos = handPositionToScreenPosition( pSkeletonFrame->SkeletonData[i].SkeletonPositions[NUI_SKELETON_POSITION_HAND_LEFT] ); addUpdate(pos, pSkeletonFrame->SkeletonData[i].dwTrackingID, NUI_SKELETON_POSITION_HAND_LEFT); pos = handPositionToScreenPosition( pSkeletonFrame->SkeletonData[i].SkeletonPositions[NUI_SKELETON_POSITION_HAND_RIGHT] ); addUpdate(pos, pSkeletonFrame->SkeletonData[i].dwTrackingID, NUI_SKELETON_POSITION_HAND_RIGHT); } } } else if (hr == E_NUI_FRAME_NO_DATA || hr == S_FALSE) { //new frame was not yet available //if (hr == E_NUI_FRAME_NO_DATA) //cout << "no Kinect Data" << ofGetFrameNum() << endl; return MAKE_HRESULT(0, 0, 1); } //NUI_IMAGE_FRAME nextFrame; //hr = pKinect->NuiImageStreamGetNextFrame(colorStream, 20, &nextFrame); return hr; }
void PerformanceDialog::processMessages() { //qWarning() << recv; bool messagesAvailable = true; int maxMessageCount=0; while (messagesAvailable) { QString recv; { QMutexLocker lock(&mMessagesMutex); int numMessages = mMessages.size(); if (numMessages > maxMessageCount) { maxMessageCount = numMessages; } if (numMessages >0) { recv = mMessages.front(); mMessages.pop_front(); } else { messagesAvailable = false; } } if (messagesAvailable) { QStringList args = recv.split(" "); if (args.length()>=3) { double time = args[0].toDouble(); if (args[2].compare("V_SYNC")==0) { if (!mFirstVSync) { double vsyncduration = (time - mLastVSync); mLastVSync = time; if (vsyncduration < 0.0333) { addVSync(vsyncduration); mCurrentRow++; } else { mCurrentRow+=5; mUpdateStart = 0; mRenderStart = 0; mSwapStart = 0; } } mFirstVSync = false; } else if (!mFirstVSync) { // only process other messages if we have already got a vsync, since the timings are impossible without it if (args[2].compare("UPDATE_START")==0) { mUpdateStart = time; mUpdateVSync = mLastVSync; mUpdateRow = mCurrentRow; } else if (args[2].compare("UPDATE_END")==0) { mUpdateEnd = time; if (mUpdateStart != 0) addUpdate(); } else if (args[2].compare("RENDER_START")==0) { mRenderStart = time; mRenderVSync = mLastVSync; mRenderRow = mCurrentRow; } else if (args[2].compare("RENDER_END")==0) { mRenderEnd = time; if (mRenderStart != 0) addRender(); } else if (args[2].compare("SWAP_START")==0) { mSwapStart = time; mSwapVSync = mLastVSync; mSwapRow = mCurrentRow; } else if (args[2].compare("SWAP_END")==0) { mSwapEnd = time; if (mSwapStart != 0) addSwapBuffers(); } } } } } double verticalSize = KLineSize * mCurrentRow; mScene->setSceneRect(0,0,33.33,verticalSize); ui->graphicsView->fitInView(0,verticalSize-ui->graphicsView->height(),33.33,ui->graphicsView->height()); double update_avg = mUpdateValues->average(); double render_avg = mRenderValues->average(); double swap_avg = mSwapValues->average(); double update_max = mUpdateValues->maxValue(); double render_max = mRenderValues->maxValue(); double swap_max = mSwapValues->maxValue(); ui->tableWidget->setItem(0,1,new QTableWidgetItem(QString::number(update_avg))); ui->tableWidget->setItem(1,1,new QTableWidgetItem(QString::number(render_avg))); ui->tableWidget->setItem(2,1,new QTableWidgetItem(QString::number(swap_avg))); ui->tableWidget->setItem(3,1,new QTableWidgetItem(QString::number(update_avg+render_avg+swap_avg))); ui->tableWidget->setItem(0,2,new QTableWidgetItem(QString::number(update_max))); ui->tableWidget->setItem(1,2,new QTableWidgetItem(QString::number(render_max))); ui->tableWidget->setItem(2,2,new QTableWidgetItem(QString::number(swap_max))); if (maxMessageCount>32) { qDebug() << "message count > 32 " << maxMessageCount; } }