void render(sf::RenderTarget& target) { float dx = 1.0f/static_cast<float>(line_data_.capacity()); float x = static_cast<float>(line_data_.capacity()-line_data_.size())*dx; line_data_.push_back(std::make_pair(tick_data_, tick_tag_)); tick_tag_ = false; glBegin(GL_LINE_STRIP); auto c = color(color_); glColor4f(std::get<0>(c), std::get<1>(c), std::get<2>(c), 0.8f); for(size_t n = 0; n < line_data_.size(); ++n) if(line_data_[n].first > -0.5) glVertex3d(x+n*dx, std::max(0.05, std::min(0.95, (1.0f-line_data_[n].first)*0.8 + 0.1f)), 0.0); glEnd(); glEnable(GL_LINE_STIPPLE); glLineStipple(3, 0xAAAA); for(size_t n = 0; n < line_data_.size(); ++n) { if(line_data_[n].second) { glBegin(GL_LINE_STRIP); glVertex3f(x+n*dx, 0.0f, 0.0f); glVertex3f(x+n*dx, 1.0f, 0.0f); glEnd(); } } glDisable(GL_LINE_STIPPLE); }
bool calculate_heading(double& heading) { bool ret = false; if(gps_points_buffer.capacity() == gps_points_buffer.size()) { gps_points_t p_comp = gps_points_buffer[0]; for(size_t i=1; i < gps_points_buffer.size();i++) { gps_points_t p_cur = gps_points_buffer[i]; double dist = sqrt(pow(p_comp.x - p_cur.x,2) + pow(p_comp.y - p_cur.y,2)); if(dist > heading_threshold) { heading = atan2(p_comp.y - p_cur.y,p_comp.x - p_cur.x); ret = true; break; } } } return ret; }
void CSearchDialog::SaveEntry(int comboBoxId, boost::circular_buffer<std::wstring> &buffer) { TCHAR entry[MAX_PATH]; GetDlgItemText(m_hDlg, comboBoxId, entry, SIZEOF_ARRAY(entry)); std::wstring strEntry(entry); auto itr = std::find_if(buffer.begin(), buffer.end(), [strEntry] (const std::wstring Pattern) { return Pattern.compare(strEntry) == 0; }); HWND hComboBox = GetDlgItem(m_hDlg, comboBoxId); ComboBox_SetCurSel(hComboBox, -1); if(itr != buffer.end()) { /* Remove the current element from both the list and the combo box. It will be reinserted at the front of both below. */ auto index = std::distance(buffer.begin(), itr); SendMessage(hComboBox, CB_DELETESTRING, index, 0); buffer.erase(itr); } buffer.push_front(entry); SendMessage(hComboBox, CB_INSERTSTRING, 0, reinterpret_cast<LPARAM>(entry)); ComboBox_SetCurSel(hComboBox, 0); ComboBox_SetEditSel(hComboBox, -1, -1); if(ComboBox_GetCount(hComboBox) > buffer.capacity()) { SendMessage(hComboBox, CB_DELETESTRING, ComboBox_GetCount(hComboBox) - 1, 0); } }
/** Return the maximum number of elements that can fit in the pipe */ std::size_t capacity() const { // No lock required since it is fixed and set at construction time return cb.capacity(); }
void ShowFrameDurationPlot() { Vec2i windowSize = mainApp->getWindow()->getSize(); size_t maxSamples = size_t(windowSize.x); if(maxSamples != frameDurationPlotValues.capacity()) { frameDurationPlotValues.set_capacity(maxSamples); } if(maxSamples != frameDurationPlotVertices.size()) { frameDurationPlotVertices.resize(maxSamples); } GRenderer->ResetTexture(0); frameDurationPlotValues.push_front(toMs(g_platformTime.lastFrameDuration())); float avg = std::accumulate(frameDurationPlotValues.begin(), frameDurationPlotValues.end(), 0.f) / frameDurationPlotValues.size(); float worst = *std::max_element(frameDurationPlotValues.begin(), frameDurationPlotValues.end()); const float OFFSET_Y = 80.f; const float SCALE_Y = 4.0f; for(size_t i = 0; i < frameDurationPlotValues.size(); ++i) { float time = frameDurationPlotValues[i]; frameDurationPlotVertices[i].color = Color::white.toRGB(); frameDurationPlotVertices[i].p.x = i; frameDurationPlotVertices[i].p.y = OFFSET_Y + (time * SCALE_Y); frameDurationPlotVertices[i].p.z = 1.0f; frameDurationPlotVertices[i].w = 1.0f; } EERIEDRAWPRIM(Renderer::LineStrip, &frameDurationPlotVertices[0], frameDurationPlotValues.size()); Color avgColor = Color::blue * 0.5f + Color::white * 0.5f; float avgPos = OFFSET_Y + (avg * SCALE_Y); drawLine(Vec2f(0, avgPos), Vec2f(windowSize.x, avgPos), 1.0f, Color::blue); Color worstColor = Color::red * 0.5f + Color::white * 0.5f; float worstPos = OFFSET_Y + (worst * SCALE_Y); drawLine(Vec2f(0, worstPos), Vec2f(windowSize.x, worstPos), 1.0f, Color::red); Font * font = hFontDebug; float lineOffset = font->getLineHeight() + 2; std::string labels[3] = { "Average: ", "Worst: ", "Current: " }; Color colors[3] = { avgColor, worstColor, Color::white }; float values[3] = { avg, worst, frameDurationPlotValues[0] }; std::string texts[3]; float widths[3]; static float labelWidth = 0.f; static float valueWidth = 0.f; for(size_t i = 0; i < 3; i++) { // Format value std::ostringstream oss; oss << std::fixed << std::setprecision(2) << values[i] << " ms ("<< 1.f / (values[i] * 0.001f) << " FPS)"; texts[i] = oss.str(); // Calculate widths (could be done more efficiently for monospace fonts...) labelWidth = std::max(labelWidth, float(font->getTextSize(labels[i]).width())); widths[i] = font->getTextSize(texts[i]).width(); valueWidth = std::max(valueWidth, widths[i]); } float x = 10; float y = 10; float xend = x + labelWidth + 10 + valueWidth; for(size_t i = 0; i < 3; i++) { font->draw(Vec2i(x, y), labels[i], Color::gray(0.8f)); font->draw(Vec2i(xend - widths[i], y), texts[i], colors[i]); y += lineOffset; } }