Bitmap::Bitmap(uint32_t inWidth, uint32_t inHeight, Components format) { reset(); init(inWidth, inHeight, format); BB_INC(bb_bitmap_key); }
Bitmap::Bitmap(uint32_t inWidth, uint32_t inHeight, Components destComponents, Components srcComponents, uint8_t* data) { reset(); init(inWidth, inHeight, destComponents, srcComponents, data); BB_INC(bb_bitmap_key); }
HybridIndexBuffer::HybridIndexBuffer(ElementType et) { // an indexbuffer only ever has one attribute with usage type index in a single partition // only the element type can vary, to optimize the buffer for hardware requirements or // mesh sizes. BufferLayout layout; layout.add(et, UT_index); switch(et) { case ET_u8:type = GL_UNSIGNED_BYTE;break; case ET_u16:type = GL_UNSIGNED_SHORT;break; case ET_u32:type = GL_UNSIGNED_INT;break; default: lost::common::StringStream os; os << "only u8, u16, u32 are allowed"; LOGTHROW(std::runtime_error(os.str().c_str())); } drawMode = GL_TRIANGLES; init(GL_ELEMENT_ARRAY_BUFFER, layout); BB_INC(bb_hib_key); }
RenderedText::RenderedText(const vector<math::Rect>& rects, gl::TexturePtr tex, const vector<math::Rect>& pixelCoords) : mesh::Quad(rects, tex, pixelCoords, false) { BB_INC(bb_rt_key); }
RenderedText::RenderedText() : mesh::Quad() { BB_INC(bb_rt_key); }
Bitmap::Bitmap(const common::DataPtr& inData) { reset(); init(inData); BB_INC(bb_bitmap_key); }
Bitmap::Bitmap() { reset(); BB_INC(bb_bitmap_key); }
/*---------------------------------------------------------------------------*/ static int send_packet(void) { rtimer_clock_t t0; rtimer_clock_t t; int strobes; struct xmac_hdr *hdr; int got_ack = 0; struct xmac_hdr msg; int len; int is_broadcast = 0; #if WITH_TIMETABLE TIMETABLE_TIMESTAMP(xmac_timetable, "send"); #endif #if WITH_CHANNEL_CHECK /* Check if there are other strobes in the air. */ waiting_for_packet = 1; on(); t0 = RTIMER_NOW(); while(RTIMER_CLOCK_LT(RTIMER_NOW(), t0 + xmac_config.strobe_wait_time * 2)) { len = radio->read(&msg, sizeof(msg)); if(len > 0) { someone_is_sending = 1; } } waiting_for_packet = 0; while(someone_is_sending); /* {printf("z");}*/ #if WITH_TIMETABLE TIMETABLE_TIMESTAMP(xmac_timetable, "send 2"); #endif /* WITH_TIMETABLE */ #endif /* WITH_CHANNEL_CHECK */ /* By setting we_are_sending to one, we ensure that the rtimer powercycle interrupt do not interfere with us sending the packet. */ we_are_sending = 1; off(); rimebuf_hdralloc(sizeof(struct xmac_hdr)); hdr = rimebuf_hdrptr(); rimeaddr_copy(&hdr->sender, &rimeaddr_node_addr); rimeaddr_copy(&hdr->receiver, rimebuf_addr(RIMEBUF_ADDR_RECEIVER)); if(rimeaddr_cmp(&hdr->receiver, &rimeaddr_null)) { is_broadcast = 1; } rimebuf_compact(); t0 = RTIMER_NOW(); strobes = 0; BB_SET(XMAC_RECEIVER, hdr->receiver.u16[0]); LEDS_ON(LEDS_BLUE); /* Send a train of strobes until the receiver answers with an ACK. */ /* Turn on the radio to listen for the strobe ACK. */ if(!is_broadcast) { on(); } watchdog_stop(); got_ack = 0; for(strobes = 0; got_ack == 0 && RTIMER_CLOCK_LT(RTIMER_NOW(), t0 + xmac_config.strobe_time); strobes++) { t = RTIMER_NOW(); rimeaddr_copy(&msg.sender, &rimeaddr_node_addr); rimeaddr_copy(&msg.receiver, rimebuf_addr(RIMEBUF_ADDR_RECEIVER)); #if WITH_TIMETABLE if(rimeaddr_cmp(&msg.receiver, &rimeaddr_null)) { TIMETABLE_TIMESTAMP(xmac_timetable, "send broadcast strobe"); } else { TIMETABLE_TIMESTAMP(xmac_timetable, "send strobe"); } #endif if(is_broadcast) { /* If we are sending a broadcast, we don't send strobes, we simply send the data packet repetedly */ radio->send(rimebuf_hdrptr(), rimebuf_totlen()); } else { /* Send the strobe packet. */ radio->send((const uint8_t *)&msg, sizeof(struct xmac_hdr)); } CPRINTF("+"); while(got_ack == 0 && RTIMER_CLOCK_LT(RTIMER_NOW(), t + xmac_config.strobe_wait_time)) { /* See if we got an ACK */ len = radio->read((uint8_t *)&msg, sizeof(struct xmac_hdr)); if(len > 0) { CPRINTF("_"); if(rimeaddr_cmp(&msg.sender, &rimeaddr_node_addr) && rimeaddr_cmp(&msg.receiver, &rimeaddr_node_addr)) { #if WITH_TIMETABLE TIMETABLE_TIMESTAMP(xmac_timetable, "send ack received"); #endif CPRINTF("@"); /* We got an ACK from the receiver, so we can immediately send the packet. */ got_ack = 1; } } } /* XXX: turn off radio if we haven't heard an ACK within a specified time interval. */ /* if(got_ack == 0) { off(); while(RTIMER_CLOCK_LT(RTIMER_NOW(), t + xmac_config.strobe_wait_time)); on(); }*/ } if(got_ack /* XXX && needs_ack */) { #if WITH_TIMETABLE TIMETABLE_TIMESTAMP(xmac_timetable, "send got ack"); #endif on(); /* Wait for possible ACK packet */ } else if(!is_broadcast) { #if WITH_TIMETABLE TIMETABLE_TIMESTAMP(xmac_timetable, "send no ack received"); #endif on(); /* shell ping don't seem to work with off() here, so we'll keep it on() for a while. */ } /* Send the data packet. */ if(is_broadcast || got_ack) { #if WITH_TIMETABLE TIMETABLE_TIMESTAMP(xmac_timetable, "send packet"); #endif radio->send(rimebuf_hdrptr(), rimebuf_totlen()); CPRINTF("#"); } watchdog_start(); PRINTF("xmac: send (strobes=%u,len=%u,%s), done\n", strobes, rimebuf_totlen(), got_ack ? "ack" : "no ack"); BB_SET(XMAC_STROBES, strobes); if(got_ack) { BB_INC(XMAC_SEND_WITH_ACK, 1); } else { BB_INC(XMAC_SEND_WITH_NOACK, 1); } /* printf("Strobe %d got_ack %d\n", strobes, got_ack);*/ we_are_sending = 0; #if WITH_TIMETABLE TIMETABLE_TIMESTAMP(xmac_timetable, "send we_are_sending = 0"); #endif LEDS_OFF(LEDS_BLUE); return 1; }