//-------------------------------------------------------------- void ParticleVisualization::update(){ for (cursorMap::iterator i = cursors.begin(); i != cursors.end(); ++i) { tuioCursor tc = (i->second); makeBubble(tc.x, tc.y, tc.dx, tc.dy); } updateBubbles(); }
int CglWnd::drawGL() { //esDPrint(L"DrawBegin\n"); glClear(GL_COLOR_BUFFER_BIT); //复位坐标 memcpy(m_dTexVertex, m_oTexVertex, sizeof(m_oTexVertex)); if (!m_bEdit) { updateBubbles(); } glVertexAttribPointer(positionLoc, 3, GL_INT, GL_FALSE, 0, m_dTexVertex); glVertexAttribPointer(texCoordLoc, 2, GL_FLOAT, GL_FALSE, 0, m_texCoord); glBindTexture(GL_TEXTURE_2D, texture[TEXID_BG]); glDrawElements(GL_TRIANGLES /*GL_LINE_LOOP*/, columnPieces*rowPieces*3*2, GL_UNSIGNED_SHORT, m_indices); if (m_bEdit) { int nHide = 0; Bubble *bubbleSelect = NULL; glBindTexture(GL_TEXTURE_2D, texture[TEXID_SET]); for (int i = 0; i < MAX_BUBBLES; i++) { Bubble *b = &m_bubbles[i]; if (b->eState == ST_REMOVED) continue; b->update(); if (b->eState == ST_NORMAL) { nHide++; continue; } if (b->bSelect) bubbleSelect = b; else drawSquare(b->ox, b->oy, b->r * b->zoomRate); } if (bubbleSelect) { glBindTexture(GL_TEXTURE_2D, texture[TEXID_SET_SELECT]); drawSquare(bubbleSelect->ox, bubbleSelect->oy, bubbleSelect->r * bubbleSelect->zoomRate); } if ( m_activeBubbles > 0) m_bEdit = nHide < m_activeBubbles; } m_toolbar.draw(); //esDPrint(L"Draw\n"); eglSwapBuffers(m_Display, m_Surface); g_fps_count++; return 1; }
//-------------------------------------------------------------- void testApp::update(){ // hide old messages for(int i = 0; i < NUM_MSG_STRINGS; i++){ if(timers[i] < ofGetElapsedTimef()){ msg_strings[i] = ""; } } // check for waiting messages while(receiver.hasWaitingMessages()){ // get the next message ofxOscMessage m; receiver.getNextMessage(&m); if (m.getAddress() == "/tuio/2Dcur" && m.getNumArgs()==7 && m.getArgType(0)==OFXOSC_TYPE_STRING && m.getArgAsString(0)=="set"){ tuioCursor tc; tc.s = m.getArgAsInt32(1); tc.x = m.getArgAsFloat(2); tc.y = m.getArgAsFloat(3); tc.dx = m.getArgAsFloat(4); tc.dy = m.getArgAsFloat(5); tc.m = m.getArgAsFloat(6); tc.age = 0; string msg_string; if (cursors.find(tc.s)==cursors.end()) msg_string += "NEW "; cursors[tc.s] = tc; msg_string += ofToString(tc.s) + ": " + ofToString((int)(1024*tc.x)) + ", " + ofToString((int)(768*tc.y)); msg_strings[current_msg_string] = msg_string; timers[current_msg_string] = ofGetElapsedTimef() + 5.0f; current_msg_string = (current_msg_string + 1) % NUM_MSG_STRINGS; // clear the next line msg_strings[current_msg_string] = ""; //if(randf(0,1) < 0.50){ makeBubble(tc.x, tc.y, tc.dx, tc.dy); //} } else if (m.getAddress() == "/tuio/2Dcur" && m.getNumArgs()==2 && m.getArgType(0)==OFXOSC_TYPE_STRING && m.getArgAsString(0)=="fseq"){ lastFrame = m.getArgAsInt32(1); msg_strings[current_msg_string] = "FRAME " + ofToString(lastFrame); timers[current_msg_string] = ofGetElapsedTimef() + 5.0f; current_msg_string = (current_msg_string + 1) % NUM_MSG_STRINGS; // clear the next line msg_strings[current_msg_string] = ""; } else{ // unrecognized message: display on the bottom of the screen string msg_string; msg_string = m.getAddress(); msg_string += ": "; for(int i = 0; i < m.getNumArgs(); i++){ // get the argument type msg_string += m.getArgTypeName(i); msg_string += ":"; // display the argument - make sure we get the right type if(m.getArgType(i) == OFXOSC_TYPE_INT32){ msg_string += ofToString(m.getArgAsInt32(i)); } else if(m.getArgType(i) == OFXOSC_TYPE_FLOAT){ msg_string += ofToString(m.getArgAsFloat(i)); } else if(m.getArgType(i) == OFXOSC_TYPE_STRING){ msg_string += m.getArgAsString(i); } else{ msg_string += "unknown"; } msg_string += " "; } // add to the list of strings to display msg_strings[current_msg_string] = msg_string; timers[current_msg_string] = ofGetElapsedTimef() + 5.0f; current_msg_string = (current_msg_string + 1) % NUM_MSG_STRINGS; // clear the next line msg_strings[current_msg_string] = ""; } } updateBubbles(); }