# HG changeset patch # User John Tsiombikas # Date 1334463541 -10800 # Node ID 70b9370081343efc059a6ffdc36829785d621067 # Parent 6ca076bf50847958daaa7697c5aa2ae8eb6fb105 demo :) diff -r 6ca076bf5084 -r 70b937008134 qvolray.pro --- a/qvolray.pro Sun Apr 15 02:22:13 2012 +0300 +++ b/qvolray.pro Sun Apr 15 07:19:01 2012 +0300 @@ -26,7 +26,8 @@ HEADERS = src/ui.h \ src/ui_maingl.h \ src/ui_sliceview.h \ - src/ui_xferview.h + src/ui_xferview.h \ + src/demo.h SOURCES = src/main.cc \ src/sdr.c \ diff -r 6ca076bf5084 -r 70b937008134 sdr/demo.p.glsl --- a/sdr/demo.p.glsl Sun Apr 15 02:22:13 2012 +0300 +++ b/sdr/demo.p.glsl Sun Apr 15 07:19:01 2012 +0300 @@ -1,9 +1,32 @@ +#define NBALLS 3 + +uniform float energy[NBALLS]; +uniform vec3 pos[NBALLS]; + +float eval(vec3 p) +{ + float val = 0.0; + + for(int i=0; i +#include +#include #include #include #include "demo.h" #include "sdr.h" #include "volray.h" +#include "ui.h" -#define SZ 128 +#define SZ 128 +#define TIMER_INTERVAL 33 -static Volume *vol; -static unsigned int sdr_mballs; -static unsigned int fbo; -bool init_demo() +Demo::Demo() +{ + vol = 0; + sdr_mballs = 0; + fbo = 0; + timer = 0; + balls = 0; + tmsec = 0; +} + +Demo::~Demo() +{ + glDeleteFramebuffersEXT(1, &fbo); + free_program(sdr_mballs); + delete vol; + delete timer; + + delete [] balls; +} + +void Demo::timer_func() +{ + float tsec = tmsec / 1000.0; + const float speed = 1.0; + + for(int i=0; i(0.7, 1.6), std::mt19937()); + auto rnd_path = std::bind(std::uniform_real_distribution(-0.5, 0.5), std::mt19937()); + + num_balls = 4; + balls = new MetaBall[4]; + + for(int i=0; i<4; i++) { + balls[i].energy = rnd_energy(); + + for(int j=0; jsetSingleShot(false); + connect(timer, SIGNAL(timeout()), this, SLOT(timer_func())); + timer->start(TIMER_INTERVAL); + return true; } -void draw_demo() +void Demo::draw() const { if(volray_getvolume() != vol) { + if(timer->isActive()) { + timer->stop(); + } return; + } else { + if(!timer->isActive()) { + timer->start(TIMER_INTERVAL); + } } glPushAttrib(GL_VIEWPORT_BIT); diff -r 6ca076bf5084 -r 70b937008134 src/demo.h --- a/src/demo.h Sun Apr 15 02:22:13 2012 +0300 +++ b/src/demo.h Sun Apr 15 07:19:01 2012 +0300 @@ -1,8 +1,45 @@ #ifndef DEMO_H_ #define DEMO_H_ -bool init_demo(); -void draw_demo(); +#include +#include +#include + +class Volume; + +#define MB_PATH_SZ 5 + +struct MetaBall { + float energy; + Vector3 pos; + + Vector3 path[MB_PATH_SZ]; +}; + +class Demo : public QObject { +private: + Q_OBJECT + + Volume *vol; + unsigned int sdr_mballs; + unsigned int fbo; + + QTimer *timer; + MetaBall *balls; + int num_balls; + + unsigned long tmsec; + +private slots: + void timer_func(); + +public: + Demo(); + ~Demo(); + + bool init(); + void draw() const; +}; #endif // DEMO_H_ diff -r 6ca076bf5084 -r 70b937008134 src/volray.cc --- a/src/volray.cc Sun Apr 15 02:22:13 2012 +0300 +++ b/src/volray.cc Sun Apr 15 07:19:01 2012 +0300 @@ -48,6 +48,7 @@ static bool clip_z; static float ray_step = 0.01; +static Demo *demo; static Volume *volume; static bool dbg_noray; @@ -72,7 +73,10 @@ set_uniform_int(slice_sdr, "volume", 0); set_uniform_int(slice_sdr, "xfer_tex", 1); - init_demo(); + demo = new Demo; + if(!demo->init()) { + return false; + } return true; } @@ -141,7 +145,7 @@ if(dbg_noray) return; - draw_demo(); + demo->draw(); if(volume) { render_volume();