naive channel pair refactor (dumb replace one pair with vector of pairs)
This commit is contained in:
parent
0ea53fdae5
commit
7c324ec39d
|
@ -603,10 +603,10 @@ class DivDispatch {
|
|||
|
||||
/**
|
||||
* get "paired" channels.
|
||||
* @param chan the channel to query.
|
||||
* @return a DivChannelPair.
|
||||
* @param ch the channel to query.
|
||||
* @param ret the DivChannelPair vector of pairs.
|
||||
*/
|
||||
virtual DivChannelPair getPaired(int chan);
|
||||
virtual void getPaired(int ch, std::vector<DivChannelPair>& ret);
|
||||
|
||||
/**
|
||||
* get channel mode hints.
|
||||
|
|
|
@ -1549,9 +1549,9 @@ void* DivEngine::getDispatchChanState(int ch) {
|
|||
return disCont[dispatchOfChan[ch]].dispatch->getChanState(dispatchChanOfChan[ch]);
|
||||
}
|
||||
|
||||
DivChannelPair DivEngine::getChanPaired(int ch) {
|
||||
if (ch<0 || ch>=chans) return DivChannelPair();
|
||||
return disCont[dispatchOfChan[ch]].dispatch->getPaired(dispatchChanOfChan[ch]);
|
||||
void DivEngine::getChanPaired(int ch, std::vector<DivChannelPair>& ret) {
|
||||
if (ch<0 || ch>=chans) return;
|
||||
disCont[dispatchOfChan[ch]].dispatch->getPaired(dispatchChanOfChan[ch], ret);
|
||||
}
|
||||
|
||||
DivChannelModeHints DivEngine::getChanModeHints(int ch) {
|
||||
|
|
|
@ -1109,7 +1109,7 @@ class DivEngine {
|
|||
void* getDispatchChanState(int chan);
|
||||
|
||||
// get channel pairs
|
||||
DivChannelPair getChanPaired(int chan);
|
||||
void getChanPaired(int chan, std::vector<DivChannelPair>& ret);
|
||||
|
||||
// get channel mode hints
|
||||
DivChannelModeHints getChanModeHints(int chan);
|
||||
|
|
|
@ -37,8 +37,8 @@ unsigned short DivDispatch::getPan(int chan) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
DivChannelPair DivDispatch::getPaired(int chan) {
|
||||
return DivChannelPair();
|
||||
void DivDispatch::getPaired(int ch, std::vector<DivChannelPair>& ret) {
|
||||
ret.push_back(DivChannelPair());
|
||||
}
|
||||
|
||||
DivChannelModeHints DivDispatch::getModeHints(int chan) {
|
||||
|
|
|
@ -561,12 +561,11 @@ float DivPlatformC140::getPostAmp() {
|
|||
return 3.0f;
|
||||
}
|
||||
|
||||
DivChannelPair DivPlatformC140::getPaired(int ch) {
|
||||
if (!is219) return DivChannelPair();
|
||||
void DivPlatformC140::getPaired(int ch, std::vector<DivChannelPair>& ret) {
|
||||
if (!is219) return;
|
||||
if ((ch&3)==0) {
|
||||
return DivChannelPair(bankLabel[ch>>2],ch+1,ch+2,ch+3,-1,-1,-1,-1,-1);
|
||||
ret.push_back(DivChannelPair(bankLabel[ch>>2],ch+1,ch+2,ch+3,-1,-1,-1,-1,-1));
|
||||
}
|
||||
return DivChannelPair();
|
||||
}
|
||||
|
||||
const void* DivPlatformC140::getSampleMem(int index) {
|
||||
|
|
|
@ -89,7 +89,7 @@ class DivPlatformC140: public DivDispatch {
|
|||
void* getChanState(int chan);
|
||||
DivMacroInt* getChanMacroInt(int ch);
|
||||
unsigned short getPan(int chan);
|
||||
DivChannelPair getPaired(int chan);
|
||||
void getPaired(int ch, std::vector<DivChannelPair>& ret);
|
||||
DivDispatchOscBuffer* getOscBuffer(int chan);
|
||||
unsigned char* getRegisterPool();
|
||||
int getRegisterPoolSize();
|
||||
|
|
|
@ -525,11 +525,10 @@ unsigned short DivPlatformDave::getPan(int ch) {
|
|||
}
|
||||
|
||||
// TODO: the rest
|
||||
DivChannelPair DivPlatformDave::getPaired(int ch) {
|
||||
void DivPlatformDave::getPaired(int ch, std::vector<DivChannelPair>& ret) {
|
||||
if (chan[ch].highPass) {
|
||||
DivChannelPair("high",(ch+1)&3);
|
||||
ret.push_back(DivChannelPair("high",(ch+1)&3));
|
||||
}
|
||||
return DivChannelPair();
|
||||
}
|
||||
|
||||
DivChannelModeHints DivPlatformDave::getModeHints(int ch) {
|
||||
|
|
|
@ -76,7 +76,7 @@ class DivPlatformDave: public DivDispatch {
|
|||
void* getChanState(int chan);
|
||||
DivMacroInt* getChanMacroInt(int ch);
|
||||
unsigned short getPan(int chan);
|
||||
DivChannelPair getPaired(int chan);
|
||||
void getPaired(int ch, std::vector<DivChannelPair>& ret);
|
||||
DivChannelModeHints getModeHints(int chan);
|
||||
DivSamplePos getSamplePos(int ch);
|
||||
DivDispatchOscBuffer* getOscBuffer(int chan);
|
||||
|
|
|
@ -2098,13 +2098,12 @@ unsigned short DivPlatformOPL::getPan(int ch) {
|
|||
return ((chan[ch].pan&1)<<8)|((chan[ch].pan&2)>>1);
|
||||
}
|
||||
|
||||
DivChannelPair DivPlatformOPL::getPaired(int ch) {
|
||||
void DivPlatformOPL::getPaired(int ch, std::vector<DivChannelPair>& ret) {
|
||||
if (oplType==3 && ch<12 && !(ch&1)) {
|
||||
if (chan[ch].fourOp) {
|
||||
return DivChannelPair("4OP",ch+1);
|
||||
ret.push_back(DivChannelPair("4OP",ch+1));
|
||||
}
|
||||
}
|
||||
return DivChannelPair();
|
||||
}
|
||||
|
||||
DivDispatchOscBuffer* DivPlatformOPL::getOscBuffer(int ch) {
|
||||
|
|
|
@ -151,7 +151,7 @@ class DivPlatformOPL: public DivDispatch {
|
|||
void* getChanState(int chan);
|
||||
DivMacroInt* getChanMacroInt(int ch);
|
||||
unsigned short getPan(int chan);
|
||||
DivChannelPair getPaired(int chan);
|
||||
void getPaired(int ch, std::vector<DivChannelPair>& ret);
|
||||
DivDispatchOscBuffer* getOscBuffer(int chan);
|
||||
int mapVelocity(int ch, float vel);
|
||||
float getGain(int ch, int vol);
|
||||
|
|
|
@ -538,11 +538,10 @@ unsigned short DivPlatformPCE::getPan(int ch) {
|
|||
return ((chan[ch].pan&0xf0)<<4)|(chan[ch].pan&15);
|
||||
}
|
||||
|
||||
DivChannelPair DivPlatformPCE::getPaired(int ch) {
|
||||
void DivPlatformPCE::getPaired(int ch, std::vector<DivChannelPair>& ret) {
|
||||
if (ch==1 && lfoMode>0) {
|
||||
return DivChannelPair("mod",0);
|
||||
ret.push_back(DivChannelPair("mod",0));
|
||||
}
|
||||
return DivChannelPair();
|
||||
}
|
||||
|
||||
DivChannelModeHints DivPlatformPCE::getModeHints(int ch) {
|
||||
|
|
|
@ -85,7 +85,7 @@ class DivPlatformPCE: public DivDispatch {
|
|||
void* getChanState(int chan);
|
||||
DivMacroInt* getChanMacroInt(int ch);
|
||||
unsigned short getPan(int chan);
|
||||
DivChannelPair getPaired(int chan);
|
||||
void getPaired(int ch, std::vector<DivChannelPair>& ret);
|
||||
DivChannelModeHints getModeHints(int chan);
|
||||
DivSamplePos getSamplePos(int ch);
|
||||
DivDispatchOscBuffer* getOscBuffer(int chan);
|
||||
|
|
|
@ -407,22 +407,21 @@ DivMacroInt* DivPlatformPOKEY::getChanMacroInt(int ch) {
|
|||
return &chan[ch].std;
|
||||
}
|
||||
|
||||
DivChannelPair DivPlatformPOKEY::getPaired(int ch) {
|
||||
void DivPlatformPOKEY::getPaired(int ch, std::vector<DivChannelPair>& ret) {
|
||||
switch (ch) {
|
||||
case 0:
|
||||
if (audctl&4) return DivChannelPair("filter",2);
|
||||
if (audctl&4) ret.push_back(DivChannelPair("filter",2));
|
||||
break;
|
||||
case 1:
|
||||
if (audctl&16) return DivChannelPair("16-bit",0);
|
||||
if (audctl&16) ret.push_back(DivChannelPair("16-bit",0));
|
||||
break;
|
||||
case 2:
|
||||
if (audctl&8) return DivChannelPair("16-bit",3);
|
||||
if (audctl&8) ret.push_back(DivChannelPair("16-bit",3));
|
||||
break;
|
||||
case 3:
|
||||
if (audctl&2) return DivChannelPair("filter",1);
|
||||
if (audctl&2) ret.push_back(DivChannelPair("filter",1));
|
||||
break;
|
||||
}
|
||||
return DivChannelPair();
|
||||
}
|
||||
|
||||
DivDispatchOscBuffer* DivPlatformPOKEY::getOscBuffer(int ch) {
|
||||
|
|
|
@ -65,7 +65,7 @@ class DivPlatformPOKEY: public DivDispatch {
|
|||
int dispatch(DivCommand c);
|
||||
void* getChanState(int chan);
|
||||
DivMacroInt* getChanMacroInt(int ch);
|
||||
DivChannelPair getPaired(int chan);
|
||||
void getPaired(int ch, std::vector<DivChannelPair>& ret);
|
||||
DivDispatchOscBuffer* getOscBuffer(int chan);
|
||||
unsigned char* getRegisterPool();
|
||||
int getRegisterPoolSize();
|
||||
|
|
|
@ -1244,26 +1244,27 @@ void DivPlatformSID3::setFlags(const DivConfig& flags) {
|
|||
}
|
||||
}
|
||||
|
||||
DivChannelPair DivPlatformSID3::getPaired(int ch)
|
||||
void DivPlatformSID3::getPaired(int ch, std::vector<DivChannelPair>& ret)
|
||||
{
|
||||
if(chan[ch].phase)
|
||||
{
|
||||
return DivChannelPair("phase", chan[ch].phaseSrc);
|
||||
ret.push_back(DivChannelPair("phase", chan[ch].phaseSrc));
|
||||
}
|
||||
if(chan[ch].ring)
|
||||
{
|
||||
if(chan[ch].ringSrc == SID3_NUM_CHANNELS)
|
||||
{
|
||||
return DivChannelPair("ring", ch);
|
||||
ret.push_back(DivChannelPair("ring", ch));
|
||||
}
|
||||
else
|
||||
{
|
||||
ret.push_back(DivChannelPair("ring", chan[ch].ringSrc));
|
||||
}
|
||||
|
||||
return DivChannelPair("ring", chan[ch].ringSrc);
|
||||
}
|
||||
if(chan[ch].sync)
|
||||
{
|
||||
return DivChannelPair("sync", chan[ch].syncSrc);
|
||||
ret.push_back(DivChannelPair("sync", chan[ch].syncSrc));
|
||||
}
|
||||
return DivChannelPair();
|
||||
}
|
||||
|
||||
int DivPlatformSID3::init(DivEngine* p, int channels, int sugRate, const DivConfig& flags) {
|
||||
|
|
|
@ -250,7 +250,7 @@ class DivPlatformSID3: public DivDispatch {
|
|||
const char** getRegisterSheet();
|
||||
int init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags);
|
||||
int getOutputCount();
|
||||
DivChannelPair getPaired(int ch);
|
||||
void getPaired(int ch, std::vector<DivChannelPair>& ret);
|
||||
void quit();
|
||||
~DivPlatformSID3();
|
||||
};
|
||||
|
|
|
@ -710,11 +710,10 @@ unsigned short DivPlatformSNES::getPan(int ch) {
|
|||
return (chan[ch].panL<<8)|chan[ch].panR;
|
||||
}
|
||||
|
||||
DivChannelPair DivPlatformSNES::getPaired(int ch) {
|
||||
void DivPlatformSNES::getPaired(int ch, std::vector<DivChannelPair>& ret) {
|
||||
if (chan[ch].pitchMod) {
|
||||
return DivChannelPair("mod",(ch-1)&7);
|
||||
ret.push_back(DivChannelPair("mod",(ch-1)&7));
|
||||
}
|
||||
return DivChannelPair();
|
||||
}
|
||||
|
||||
DivChannelModeHints DivPlatformSNES::getModeHints(int ch) {
|
||||
|
|
|
@ -102,7 +102,7 @@ class DivPlatformSNES: public DivDispatch {
|
|||
void* getChanState(int chan);
|
||||
DivMacroInt* getChanMacroInt(int ch);
|
||||
unsigned short getPan(int chan);
|
||||
DivChannelPair getPaired(int chan);
|
||||
void getPaired(int ch, std::vector<DivChannelPair>& ret);
|
||||
DivChannelModeHints getModeHints(int chan);
|
||||
DivSamplePos getSamplePos(int ch);
|
||||
DivDispatchOscBuffer* getOscBuffer(int chan);
|
||||
|
|
|
@ -1282,6 +1282,13 @@ void FurnaceGUI::drawPattern() {
|
|||
memset(floors,0,4*4*sizeof(unsigned int));
|
||||
|
||||
for (int i=0; i<chans; i++) {
|
||||
|
||||
|
||||
std::vector<DivChannelPair> pairs;
|
||||
e->getChanPaired(i, pairs);
|
||||
|
||||
for(DivChannelPair pair: pairs)
|
||||
{
|
||||
bool isPaired=false;
|
||||
int numPairs=0;
|
||||
unsigned int pairMin=i;
|
||||
|
@ -1291,10 +1298,9 @@ void FurnaceGUI::drawPattern() {
|
|||
continue;
|
||||
}
|
||||
|
||||
DivChannelPair pairs=e->getChanPaired(i);
|
||||
for (int j=0; j<8; j++) {
|
||||
if (pairs.pairs[j]==-1) continue;
|
||||
int pairCh=e->dispatchFirstChan[i]+pairs.pairs[j];
|
||||
if (pair.pairs[j]==-1) continue;
|
||||
int pairCh=e->dispatchFirstChan[i]+pair.pairs[j];
|
||||
if (!e->curSubSong->chanShow[pairCh]) {
|
||||
continue;
|
||||
}
|
||||
|
@ -1333,10 +1339,10 @@ void FurnaceGUI::drawPattern() {
|
|||
posMax=pos;
|
||||
numPairs++;
|
||||
|
||||
if (pairs.label==NULL) {
|
||||
if (pair.label==NULL) {
|
||||
textSize=ImGui::CalcTextSize("???");
|
||||
} else {
|
||||
textSize=ImGui::CalcTextSize(pairs.label);
|
||||
textSize=ImGui::CalcTextSize(pair.label);
|
||||
}
|
||||
|
||||
posY+=(textSize.y+ImGui::GetStyle().ItemSpacing.y)*curFloor;
|
||||
|
@ -1349,8 +1355,8 @@ void FurnaceGUI::drawPattern() {
|
|||
);
|
||||
|
||||
for (int j=0; j<8; j++) {
|
||||
if (pairs.pairs[j]==-1) continue;
|
||||
int pairCh=e->dispatchFirstChan[i]+pairs.pairs[j];
|
||||
if (pair.pairs[j]==-1) continue;
|
||||
int pairCh=e->dispatchFirstChan[i]+pair.pairs[j];
|
||||
if (!e->curSubSong->chanShow[pairCh]) {
|
||||
continue;
|
||||
}
|
||||
|
@ -1370,7 +1376,7 @@ void FurnaceGUI::drawPattern() {
|
|||
|
||||
posCenter/=numPairs;
|
||||
|
||||
if (pairs.label==NULL) {
|
||||
if (pair.label==NULL) {
|
||||
tdl->AddLine(
|
||||
ImVec2(posMin,posY+textSize.y),
|
||||
ImVec2(posMax,posY+textSize.y),
|
||||
|
@ -1391,7 +1397,8 @@ void FurnaceGUI::drawPattern() {
|
|||
2.0f*dpiScale
|
||||
);
|
||||
|
||||
delayedLabels.push_back(DelayedLabel(posCenter,posY,textSize,pairs.label));
|
||||
delayedLabels.push_back(DelayedLabel(posCenter,posY,textSize,pair.label));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue