#define USE_FORGE_CPU_COPY_HELPERS
#include <complex>
#include <cmath>
#include <vector>
#include <iostream>
#include <random>
#include <algorithm>
#include <functional>
#include <iterator>
const unsigned DIMX = 1000;
const unsigned DIMY = 800;
const float FRANGE_START = 0.f;
const float FRANGE_END = 2.f * 3.1415926f;
using namespace std;
void map_range_to_vec_vbo(float range_start, float range_end, float dx,
                          std::vector<float> &vec,
                          float (*map) (float))
{
    if(range_start > range_end && dx > 0) return;
    for(float i=range_start; i < range_end; i+=dx){
        vec.push_back(i);
        vec.push_back((*map)(i));
    }
}
int main(void)
{
    std::vector<float> cosData;
    std::vector<float> tanData;
    map_range_to_vec_vbo(FRANGE_START, FRANGE_END, 0.1f, cosData, &cosf);
    map_range_to_vec_vbo(FRANGE_START, FRANGE_END, 0.1f, tanData, &tanf);
    std::random_device r;
    std::default_random_engine e1(r());
    std::mt19937_64 gen(r());
    std::uniform_int_distribution<int> uDist(20, 80);
    std::uniform_real_distribution<float> cDist(0.2, 0.6);
    std::uniform_real_distribution<float> fDist(0.4, 0.6);
    auto clr = std::bind(cDist, gen);
    auto rnd = std::bind(uDist, e1);
    auto alp = std::bind(fDist, gen);
    std::vector<float> colors(3*tanData.size());
    std::vector<float> alphas(tanData.size());
    std::vector<float> radii(tanData.size());
    std::generate(colors.begin(), colors.end(), clr);
    std::generate(radii.begin(), radii.end(), rnd);
    std::generate(alphas.begin(), alphas.end(), alp);
    
    forge::Window wnd(DIMX, DIMY, 
"Bubble chart with Transparency Demo");
     wnd.makeCurrent();
    
    
    
    
    
    
    
    
    
    
    do {
        wnd.draw(chart);
    } while(!wnd.close());
    
    releaseGLBuffer(handles[0]);
    releaseGLBuffer(handles[1]);
    releaseGLBuffer(handles[2]);
    releaseGLBuffer(handles[3]);
    releaseGLBuffer(handles[4]);
    return 0;
}