aboutsummaryrefslogtreecommitdiff
path: root/visualization/qmpvisualization.hpp
diff options
context:
space:
mode:
authorGravatar Chris Xiong <chirs241097@gmail.com> 2016-04-25 23:46:17 +0800
committerGravatar Chris Xiong <chirs241097@gmail.com> 2016-04-25 23:46:17 +0800
commit4ffde0ad55d041229793ca4457123bcbcbf8e0c0 (patch)
tree9457cee58f3a1f35ebe63de79c6811b1c16e36dc /visualization/qmpvisualization.hpp
parent800a0417e9ed175f220c472842a283202c77060b (diff)
downloadQMidiPlayer-4ffde0ad55d041229793ca4457123bcbcbf8e0c0.tar.xz
Plugin API now works correctly. Port old visualization code.
Diffstat (limited to 'visualization/qmpvisualization.hpp')
-rw-r--r--visualization/qmpvisualization.hpp61
1 files changed, 59 insertions, 2 deletions
diff --git a/visualization/qmpvisualization.hpp b/visualization/qmpvisualization.hpp
index 847f37b..df9255c 100644
--- a/visualization/qmpvisualization.hpp
+++ b/visualization/qmpvisualization.hpp
@@ -1,6 +1,12 @@
#ifndef QMPVISUALIZATION_H
#define QMPVISUALIZATION_H
+#include <vector>
+#include <stack>
+#include <thread>
+#include <smelt.hpp>
+#include <smmath.hpp>
+#include <smttfont.hpp>
#include "../include/qmpcorepublic.hpp"
class qmpVisualization;
@@ -12,22 +18,73 @@ class CTestCallBack:public IMidiCallBack
CTestCallBack(qmpVisualization *_par){par=_par;}
void callBack(void *callerdata,void *userdata);
};
+struct MidiVisualEvent
+{
+ uint32_t tcs,tce;
+ uint32_t key,vel;
+ uint32_t ch;
+};
class qmpVisualization:public qmpPluginIntf
{
- friend class CTestCallBack;
private:
qmpPluginAPI* api;
- int c;
CTestCallBack* cb;
+ qmpVisualizationIntf* vi;
+ std::thread* rendererTh;
+ std::vector<MidiVisualEvent*>pool;
+ smHandler* h;
+ std::stack<uint32_t> pendingt[16][128],pendingv[16][128];
+ SMELT *sm;
+ SMTRG tdscn;
+ SMTEX chequer;
+ smTTFont font;
+ float pos[3],rot[3],lastx,lasty;
+ uint32_t ctc,dvs,ctk,fintk;
+ double etps;
+ void drawCube(smvec3d a,smvec3d b,DWORD col,SMTEX tex);
public:
qmpVisualization(qmpPluginAPI* _api);
~qmpVisualization();
+ void pushNoteOn(uint32_t tc,uint32_t ch,uint32_t key,uint32_t vel);
+ void pushNoteOff(uint32_t tc,uint32_t ch,uint32_t key);
+ void pushPitchBend(uint32_t tc,uint32_t ch,uint32_t key);
+ bool update();
+ void start();
+ void stop();
+ void pause();
+ void show();
+ void close();
+ void reset();
+
void init();
void deinit();
const char* pluginGetName();
const char* pluginGetVersion();
};
+class CMidiVisualHandler:public smHandler
+{
+ private:
+ qmpVisualization *p;
+ public:
+ CMidiVisualHandler(qmpVisualization* par){p=par;}
+ bool handlerFunc(){return p->update();}
+};
+
+class CDemoVisualization:public qmpVisualizationIntf
+{
+ private:
+ qmpVisualization* par;
+ public:
+ CDemoVisualization(qmpVisualization *p){par=p;}
+ void show(){par->show();}
+ void close(){par->close();}
+ void start(){par->start();}
+ void stop(){par->stop();}
+ void pause(){par->pause();}
+ void reset(){par->reset();}
+};
+
extern "C"{
qmpPluginIntf* qmpPluginGetInterface(qmpPluginAPI* api)
{return new qmpVisualization(api);}