From e7f6290012f34678c1d1134a003a076980b50fbf Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 17 Mar 2022 01:40:03 -0500 Subject: [PATCH 1/7] OPL: possibly implement drums mode we need a good UI for it --- src/engine/platform/opl.cpp | 72 +++++++++++++++++++++++++++++-------- 1 file changed, 57 insertions(+), 15 deletions(-) diff --git a/src/engine/platform/opl.cpp b/src/engine/platform/opl.cpp index 3c46b1f2..06bba5b5 100644 --- a/src/engine/platform/opl.cpp +++ b/src/engine/platform/opl.cpp @@ -48,6 +48,10 @@ const unsigned short chanMapOPL2[20]={ 0, 1, 2, 3, 4, 5, 6, 7, 8, N, N, N, N, N, N, N, N, N, N, N }; +const unsigned short chanMapOPL2Drums[20]={ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 7, N, N, N, N, N, N, N, N, N +}; + const unsigned char* slotsOPL2[4]={ slotsOPL2i[0], slotsOPL2i[1], @@ -80,6 +84,10 @@ const unsigned short chanMapOPL3[20]={ 0, 3, 1, 4, 2, 5, 0x100, 0x103, 0x101, 0x104, 0x102, 0x105, 0x106, 0x107, 0x108, 6, 7, 8, N, N }; +const unsigned short chanMapOPL3Drums[20]={ + 0, 3, 1, 4, 2, 5, 0x100, 0x103, 0x101, 0x104, 0x102, 0x105, 0x106, 0x107, 0x108, 6, 7, 8, 8, 7 +}; + const unsigned char* slotsOPL3[4]={ slotsOPL3i[0], slotsOPL3i[1], @@ -224,7 +232,7 @@ void DivPlatformOPL::acquire(short* bufL, short* bufR, size_t start, size_t len) } void DivPlatformOPL::tick() { - for (int i=0; icalcFreq(chan[i].baseFreq,chan[i].pitch,false,octave(chan[i].baseFreq)); if (chan[i].freq>131071) chan[i].freq=131071; @@ -387,14 +413,29 @@ void DivPlatformOPL::tick() { chan[i].freqL=freqt&0xff; immWrite(chanMap[i]+ADDR_FREQ,chan[i].freqL); } - if (chan[i].keyOn) { - immWrite(chanMap[i]+ADDR_FREQH,chan[i].freqH|(0x20)); - chan[i].keyOn=false; - } else if (chan[i].freqChanged) { - immWrite(chanMap[i]+ADDR_FREQH,chan[i].freqH|(chan[i].active<<5)); + if (i=melodicChans) return 0; + if (c.chan>=totalChans) return 0; // ineffective in 4-op mode if (oplType==3 && c.chan<14 && (c.chan&1) && c.cmd!=DIV_CMD_GET_VOLMAX && c.cmd!=DIV_ALWAYS_SET_VOLUME) { if (chan[c.chan-1].fourOp) return 0; @@ -879,6 +919,8 @@ void DivPlatformOPL::reset() { dam=false; dvb=false; delay=0; + + immWrite(0xbd,(dam<<7)|(dvb<<6)|(properDrums<<5)|drumState); } bool DivPlatformOPL::isStereo() { @@ -927,7 +969,7 @@ void DivPlatformOPL::setOPLType(int type, bool drums) { slotsNonDrums=slotsOPL2; slotsDrums=slotsOPL2Drums; slots=drums?slotsDrums:slotsNonDrums; - chanMap=chanMapOPL2; + chanMap=drums?chanMapOPL2Drums:chanMapOPL2; chipFreqBase=9440540*0.25; chans=9; melodicChans=drums?6:9; @@ -937,7 +979,7 @@ void DivPlatformOPL::setOPLType(int type, bool drums) { slotsNonDrums=slotsOPL3; slotsDrums=slotsOPL3Drums; slots=drums?slotsDrums:slotsNonDrums; - chanMap=chanMapOPL3; + chanMap=drums?chanMapOPL3Drums:chanMapOPL3; chipFreqBase=9440540; chans=18; melodicChans=drums?15:18; From 5579ef2bc1f6c1ee2eb22082a0137bfc717d4da0 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 17 Mar 2022 01:50:42 -0500 Subject: [PATCH 2/7] OPL: even more drums mode work --- src/engine/platform/opl.cpp | 38 ++++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/src/engine/platform/opl.cpp b/src/engine/platform/opl.cpp index 06bba5b5..2549deed 100644 --- a/src/engine/platform/opl.cpp +++ b/src/engine/platform/opl.cpp @@ -788,8 +788,20 @@ int DivPlatformOPL::dispatch(DivCommand c) { break; } case DIV_CMD_FM_EXTCH: { + if (!properDrumsSys) break; properDrums=c.value; immWrite(0xbd,(dam<<7)|(dvb<<6)|(properDrums<<5)|drumState); + slots=properDrums?slotsDrums:slotsNonDrums; + if (oplType==3) { + chanMap=properDrums?chanMapOPL3Drums:chanMapOPL3; + melodicChans=properDrums?15:18; + totalChans=properDrums?20:18; + } else { + chanMap=properDrums?chanMapOPL2Drums:chanMapOPL2; + melodicChans=properDrums?6:9; + totalChans=properDrums?11:9; + } + printf("CHANGING. DRUMS. MODE.\n"); break; } case DIV_ALWAYS_SET_VOLUME: @@ -812,7 +824,16 @@ int DivPlatformOPL::dispatch(DivCommand c) { } void DivPlatformOPL::forceIns() { - for (int i=0; i Date: Thu, 17 Mar 2022 02:07:46 -0500 Subject: [PATCH 3/7] GUI: work on the drum UI --- src/engine/platform/opl.cpp | 3 +- src/gui/insEdit.cpp | 104 +++++++++++++++++------------------- 2 files changed, 50 insertions(+), 57 deletions(-) diff --git a/src/engine/platform/opl.cpp b/src/engine/platform/opl.cpp index 2549deed..53163114 100644 --- a/src/engine/platform/opl.cpp +++ b/src/engine/platform/opl.cpp @@ -75,7 +75,7 @@ const unsigned char slotsOPL3i[4][20]={ const unsigned char slotsOPL3Drumsi[4][20]={ {0, 6, 1, 7, 2, 8, 18, 24, 19, 25, 20, 26, 30, 31, 32, 12, 16, 14, 17, 13}, // OP1 - {3, 9, 4, 10, 5, 11, 21, 27, 22, 28, 23, 29, 33, 34, 35, N, N, N, N, N}, // OP2 + {3, 9, 4, 10, 5, 11, 21, 27, 22, 28, 23, 29, 33, 34, 35, 15, N, N, N, N}, // OP2 {6, N, 7, N, 8, N, 24, N, 25, N, 26, N, N, N, N, N, N, N, N, N}, // OP3 {9, N, 10, N, 11, N, 27, N, 28, N, 29, N, N, N, N, N, N, N, N, N} // OP4 }; @@ -801,7 +801,6 @@ int DivPlatformOPL::dispatch(DivCommand c) { melodicChans=properDrums?6:9; totalChans=properDrums?11:9; } - printf("CHANGING. DRUMS. MODE.\n"); break; } case DIV_ALWAYS_SET_VOLUME: diff --git a/src/gui/insEdit.cpp b/src/gui/insEdit.cpp index b19904b0..def41aad 100644 --- a/src/gui/insEdit.cpp +++ b/src/gui/insEdit.cpp @@ -878,6 +878,39 @@ if (ImGui::BeginTable("MacroSpace",2)) { \ ImGui::EndTable(); \ } +#define DRUM_FREQ(name,db,df,prop) \ + ImGui::TableNextRow(); \ + ImGui::TableNextColumn(); \ + if (ins->type==DIV_INS_OPLL) { \ + block=(prop>>9)&7; \ + fNum=prop&511; \ + } else { \ + block=(prop>>10)&7; \ + fNum=prop&1023; \ + } \ + ImGui::Text(name); \ + ImGui::TableNextColumn(); \ + if (ImGui::InputInt(db,&block,1,1)) { \ + if (block<0) block=0; \ + if (block>7) block=7; \ + if (ins->type==DIV_INS_OPLL) { \ + prop=(block<<9)|fNum; \ + } else { \ + prop=(block<<10)|fNum; \ + } \ + } \ + ImGui::TableNextColumn(); \ + if (ImGui::InputInt(df,&fNum,1,1)) { \ + if (fNum<0) fNum=0; \ + if (ins->type==DIV_INS_OPLL) { \ + if (fNum>511) fNum=511; \ + prop=(block<<9)|fNum; \ + } else { \ + if (fNum>1023) fNum=1023; \ + prop=(block<<10)|fNum; \ + } \ + } + void FurnaceGUI::drawInsEdit() { if (nextWindow==GUI_WINDOW_INS_EDIT) { insEditOpen=true; @@ -933,9 +966,11 @@ void FurnaceGUI::drawInsEdit() { ImGui::TableNextColumn(); ins->fm.alg&=algMax; P(ImGui::SliderScalar(FM_NAME(FM_FB),ImGuiDataType_U8,&ins->fm.fb,&_ZERO,&_SEVEN)); rightClickable + ImGui::BeginDisabled(ins->fm.opllPreset==16); if (ImGui::Checkbox("4-op",&fourOp)) { PARAMETER ins->fm.ops=fourOp?4:2; } + ImGui::EndDisabled(); ImGui::TableNextColumn(); P(ImGui::SliderScalar(FM_NAME(FM_ALG),ImGuiDataType_U8,&ins->fm.alg,&_ZERO,&algMax)); rightClickable if (ImGui::Checkbox("Drums",&drums)) { PARAMETER @@ -984,7 +1019,8 @@ void FurnaceGUI::drawInsEdit() { ImGui::EndTable(); } - if (ins->type==DIV_INS_OPLL && ins->fm.opllPreset==16) { + if ((ins->type==DIV_INS_OPLL || ins->type==DIV_INS_OPL) && ins->fm.opllPreset==16) { + ins->fm.ops=2; P(ImGui::Checkbox("Fixed frequency mode",&ins->fm.fixedDrums)); if (ImGui::IsItemHovered()) { ImGui::SetTooltip("when enabled, drums will be set to the specified frequencies, ignoring the note."); @@ -1001,59 +1037,9 @@ void FurnaceGUI::drawInsEdit() { ImGui::TableNextColumn(); ImGui::Text("FreqNum"); - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - block=(ins->fm.kickFreq>>9)&7; - fNum=ins->fm.kickFreq&511; - ImGui::Text("Kick"); - ImGui::TableNextColumn(); - if (ImGui::InputInt("##DBlock0",&block,1,1)) { - if (block<0) block=0; - if (block>7) block=7; - ins->fm.kickFreq=(block<<9)|fNum; - } - ImGui::TableNextColumn(); - if (ImGui::InputInt("##DFreq0",&fNum,1,1)) { - if (fNum<0) fNum=0; - if (fNum>511) fNum=511; - ins->fm.kickFreq=(block<<9)|fNum; - } - - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - block=(ins->fm.snareHatFreq>>9)&7; - fNum=ins->fm.snareHatFreq&511; - ImGui::Text("Snare/Hi-hat"); - ImGui::TableNextColumn(); - if (ImGui::InputInt("##DBlock1",&block,1,1)) { - if (block<0) block=0; - if (block>7) block=7; - ins->fm.snareHatFreq=(block<<9)|fNum; - } - ImGui::TableNextColumn(); - if (ImGui::InputInt("##DFreq1",&fNum,1,1)) { - if (fNum<0) fNum=0; - if (fNum>511) fNum=511; - ins->fm.snareHatFreq=(block<<9)|fNum; - } - - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - block=(ins->fm.tomTopFreq>>9)&7; - fNum=ins->fm.tomTopFreq&511; - ImGui::Text("Tom/Top"); - ImGui::TableNextColumn(); - if (ImGui::InputInt("##DBlock2",&block,1,1)) { - if (block<0) block=0; - if (block>7) block=7; - ins->fm.tomTopFreq=(block<<9)|fNum; - } - ImGui::TableNextColumn(); - if (ImGui::InputInt("##DFreq2",&fNum,1,1)) { - if (fNum<0) fNum=0; - if (fNum>511) fNum=511; - ins->fm.tomTopFreq=(block<<9)|fNum; - } + DRUM_FREQ("Kick","##DBlock0","##DFreq0",ins->fm.kickFreq); + DRUM_FREQ("Snare/Hi-hat","##DBlock1","##DFreq1",ins->fm.snareHatFreq); + DRUM_FREQ("Tom/Top","##DBlock2","##DFreq2",ins->fm.tomTopFreq); ImGui::EndTable(); } } @@ -1073,7 +1059,15 @@ void FurnaceGUI::drawInsEdit() { ImGui::Separator(); ImGui::PushID(fmt::sprintf("op%d",i).c_str()); ImGui::Dummy(ImVec2(dpiScale,dpiScale)); - ImGui::Text("OP%d",i+1); + if (ins->type==DIV_INS_OPL && ins->fm.opllPreset==16) { + if (i==1) { + ImGui::Text("Envelope 2 (kick only)"); + } else { + ImGui::Text("Envelope"); + } + } else { + ImGui::Text("OP%d",i+1); + } ImGui::SameLine(); From e6bc0c15e0abe06b5c119316ab7692f0db85f3ce Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 17 Mar 2022 02:13:45 -0500 Subject: [PATCH 4/7] default to 2 ops to make OPL happy next up: work on a default patch that is both OPL and other OP friendly --- src/engine/instrument.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/instrument.h b/src/engine/instrument.h index 97d64da0..ea52e6d8 100644 --- a/src/engine/instrument.h +++ b/src/engine/instrument.h @@ -105,7 +105,7 @@ struct DivInstrumentFM { fb(0), fms(0), ams(0), - ops(4), + ops(2), opllPreset(0), fixedDrums(false), kickFreq(0x520), From 5d6bbce916a5378f45d37c9b69862b672a38cd71 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 17 Mar 2022 02:33:41 -0500 Subject: [PATCH 5/7] change default patch this makes the patch better on OPL --- src/engine/instrument.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/engine/instrument.h b/src/engine/instrument.h index ea52e6d8..7141899f 100644 --- a/src/engine/instrument.h +++ b/src/engine/instrument.h @@ -115,11 +115,12 @@ struct DivInstrumentFM { fb=4; op[0].tl=42; op[0].ar=31; - op[0].dr=8; + op[0].dr=2; op[0].sl=15; op[0].rr=3; op[0].mult=5; op[0].dt=5; + op[0].rs=3; op[2].tl=18; op[2].ar=31; @@ -129,13 +130,14 @@ struct DivInstrumentFM { op[2].mult=1; op[2].dt=0; - op[1].tl=48; + op[1].tl=64; op[1].ar=31; - op[1].dr=4; + op[1].dr=2; op[1].sl=11; - op[1].rr=1; + op[1].rr=8; op[1].mult=1; op[1].dt=5; + op[1].rs=2; op[3].tl=2; op[3].ar=31; From d6dfe2636a19b409c2f33cc2637b7f9be65a52ac Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 17 Mar 2022 02:40:10 -0500 Subject: [PATCH 6/7] OPL: implement fixed frequency mode --- src/engine/platform/opl.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/engine/platform/opl.cpp b/src/engine/platform/opl.cpp index 53163114..42ce1158 100644 --- a/src/engine/platform/opl.cpp +++ b/src/engine/platform/opl.cpp @@ -582,7 +582,19 @@ int DivPlatformOPL::dispatch(DivCommand c) { chan[c.chan].insChanged=false; if (c.value!=DIV_NOTE_NULL) { - chan[c.chan].baseFreq=NOTE_FREQUENCY(c.value); + if (c.chan>=melodicChans && chan[c.chan].state.opllPreset==16 && chan[c.chan].state.fixedDrums) { // drums + if (c.chan==melodicChans) { + chan[c.chan].baseFreq=(chan[c.chan].state.kickFreq&1023)<<(chan[c.chan].state.kickFreq>>10); + } else if (c.chan==melodicChans+1 || c.chan==melodicChans+4) { + chan[c.chan].baseFreq=(chan[c.chan].state.snareHatFreq&1023)<<(chan[c.chan].state.snareHatFreq>>10); + } else if (c.chan==melodicChans+2 || c.chan==melodicChans+3) { + chan[c.chan].baseFreq=(chan[c.chan].state.tomTopFreq&1023)<<(chan[c.chan].state.tomTopFreq>>10); + } else { + chan[c.chan].baseFreq=NOTE_FREQUENCY(c.value); + } + } else { + chan[c.chan].baseFreq=NOTE_FREQUENCY(c.value); + } chan[c.chan].note=c.value; chan[c.chan].freqChanged=true; } From 3c1b1b69fc2cb5f9095a16d6d6bcf4c6a8ef05bd Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 17 Mar 2022 03:43:02 -0500 Subject: [PATCH 7/7] GUI: define sample edit texture --- src/gui/gui.cpp | 4 ++ src/gui/gui.h | 4 ++ src/gui/sampleEdit.cpp | 133 ++++++++++++++++++++++++++++++----------- 3 files changed, 107 insertions(+), 34 deletions(-) diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index d48a20c9..1e06fa8b 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -6952,6 +6952,10 @@ bool FurnaceGUI::finish() { FurnaceGUI::FurnaceGUI(): e(NULL), + sampleTex(NULL), + sampleTexW(0), + sampleTexH(0), + updateSampleTex(true), quit(false), warnQuit(false), willCommit(false), diff --git a/src/gui/gui.h b/src/gui/gui.h index a0eb52fe..677f2b54 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -466,6 +466,10 @@ class FurnaceGUI { SDL_Window* sdlWin; SDL_Renderer* sdlRend; + SDL_Texture* sampleTex; + int sampleTexW, sampleTexH; + bool updateSampleTex; + String workingDir, fileName, clipboard, warnString, errorString, lastError, curFileName, nextFile; String workingDirSong, workingDirIns, workingDirWave, workingDirSample, workingDirAudioExport, workingDirVGMExport, workingDirFont; String mmlString[13]; diff --git a/src/gui/sampleEdit.cpp b/src/gui/sampleEdit.cpp index 4edc1dfa..6592e215 100644 --- a/src/gui/sampleEdit.cpp +++ b/src/gui/sampleEdit.cpp @@ -17,9 +17,13 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "gui.h" +#include "../ta-log.h" #include "IconsFontAwesome4.h" #include "misc/cpp/imgui_stdlib.h" #include "guiConst.h" +#include +#include +#include #include void FurnaceGUI::drawSampleEdit() { @@ -40,45 +44,60 @@ void FurnaceGUI::drawSampleEdit() { sampleType=sampleDepths[sample->depth]; } } - ImGui::InputText("Name",&sample->name); - if (ImGui::BeginCombo("Type",sampleType.c_str())) { - for (int i=0; i<17; i++) { - if (sampleDepths[i]==NULL) continue; - if (ImGui::Selectable(sampleDepths[i])) { - sample->depth=i; - e->renderSamplesP(); - } - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("no undo for sample type change operations!"); + ImGui::Text("Name"); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + ImGui::InputText("##SampleName",&sample->name); + + if (ImGui::BeginTable("SampleProps",4,ImGuiTableFlags_SizingStretchSame)) { + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + if (ImGui::BeginCombo("Type",sampleType.c_str())) { + for (int i=0; i<17; i++) { + if (sampleDepths[i]==NULL) continue; + if (ImGui::Selectable(sampleDepths[i])) { + sample->depth=i; + e->renderSamplesP(); + } + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("no undo for sample type change operations!"); + } } + ImGui::EndCombo(); } - ImGui::EndCombo(); - } - if (ImGui::InputInt("Rate (Hz)",&sample->rate,10,200)) { - if (sample->rate<100) sample->rate=100; - if (sample->rate>96000) sample->rate=96000; - } - if (ImGui::InputInt("Pitch of C-4 (Hz)",&sample->centerRate,10,200)) { - if (sample->centerRate<100) sample->centerRate=100; - if (sample->centerRate>65535) sample->centerRate=65535; - } - ImGui::Text("effective rate: %dHz",e->getEffectiveSampleRate(sample->rate)); - bool doLoop=(sample->loopStart>=0); - if (ImGui::Checkbox("Loop",&doLoop)) { - if (doLoop) { - sample->loopStart=0; - } else { - sample->loopStart=-1; + + ImGui::TableNextColumn(); + if (ImGui::InputInt("Rate (Hz)",&sample->rate,10,200)) { + if (sample->rate<100) sample->rate=100; + if (sample->rate>96000) sample->rate=96000; } - } - if (doLoop) { - ImGui::SameLine(); - if (ImGui::InputInt("##LoopPosition",&sample->loopStart,1,10)) { - if (sample->loopStart<0 || sample->loopStart>=(int)sample->samples) { + + ImGui::TableNextColumn(); + if (ImGui::InputInt("Pitch of C-4 (Hz)",&sample->centerRate,10,200)) { + if (sample->centerRate<100) sample->centerRate=100; + if (sample->centerRate>65535) sample->centerRate=65535; + } + + ImGui::TableNextColumn(); + bool doLoop=(sample->loopStart>=0); + if (ImGui::Checkbox("Loop",&doLoop)) { + if (doLoop) { sample->loopStart=0; + } else { + sample->loopStart=-1; } } + if (doLoop) { + ImGui::SameLine(); + if (ImGui::InputInt("##LoopPosition",&sample->loopStart,1,10)) { + if (sample->loopStart<0 || sample->loopStart>=(int)sample->samples) { + sample->loopStart=0; + } + } + } + ImGui::EndTable(); } + + /* if (ImGui::Button("Apply")) { e->renderSamplesP(); } @@ -89,8 +108,54 @@ void FurnaceGUI::drawSampleEdit() { ImGui::SameLine(); if (ImGui::Button(ICON_FA_VOLUME_OFF "##StopSample")) { e->stopSamplePreview(); - } + }*/ ImGui::Separator(); + + ImVec2 avail=ImGui::GetContentRegionAvail(); + //int availX=avail.x; + int availY=avail.y; + + if (sampleTex==NULL || sampleTexW!=avail.x || sampleTexH!=avail.y) { + if (sampleTex!=NULL) { + SDL_DestroyTexture(sampleTex); + sampleTex=NULL; + } + if (avail.x>=1 && avail.y>=1) { + logD("recreating sample texture.\n"); + sampleTex=SDL_CreateTexture(sdlRend,SDL_PIXELFORMAT_ARGB8888,SDL_TEXTUREACCESS_STREAMING,avail.x,avail.y); + sampleTexW=avail.x; + sampleTexH=avail.y; + if (sampleTex==NULL) { + logE("error while creating sample texture! %s\n",SDL_GetError()); + } else { + updateSampleTex=true; + } + } + } + + if (sampleTex!=NULL) { + if (updateSampleTex) { + unsigned char* data=NULL; + int pitch=0; + logD("updating sample texture.\n"); + if (SDL_LockTexture(sampleTex,NULL,(void**)&data,&pitch)!=0) { + logE("error while locking sample texture! %s\n",SDL_GetError()); + } else { + for (int i=0; iloopStart>=0) { @@ -129,7 +194,7 @@ void FurnaceGUI::drawSampleEdit() { } if (!considerations) { ImGui::Text("- none"); - } + }*/ } } if (ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows)) curWindow=GUI_WINDOW_SAMPLE_EDIT;