From 57058ef727dcbfcf92d20559291db94dfb63f66a Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 26 Nov 2017 15:23:07 +0100 Subject: [PATCH] - removed all remains of the old EAX editor. --- src/CMakeLists.txt | 1 - src/c_bind.cpp | 2 +- src/s_environment.cpp | 385 ++++++++++++++++++- src/win32/eaxedit.cpp | 758 -------------------------------------- src/win32/i_input.cpp | 26 +- src/win32/wglext.h | 120 +++--- wadsrc/static/menudef.txt | 70 ++-- 7 files changed, 485 insertions(+), 877 deletions(-) delete mode 100644 src/win32/eaxedit.cpp diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 39bd0933e9..1ec06da076 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -474,7 +474,6 @@ endif() # Start defining source files for ZDoom set( PLAT_WIN32_SOURCES sound/mididevices/music_win_mididevice.cpp - win32/eaxedit.cpp win32/critsec.cpp win32/fb_d3d9.cpp win32/fb_d3d9_wipe.cpp diff --git a/src/c_bind.cpp b/src/c_bind.cpp index b1a5575149..5098b9a95a 100644 --- a/src/c_bind.cpp +++ b/src/c_bind.cpp @@ -744,7 +744,7 @@ bool C_DoKey (event_t *ev, FKeyBindings *binds, FKeyBindings *doublebinds) dclick = false; // This used level.time which didn't work outside a level. - nowtime = I_msTime(); + nowtime = (unsigned)I_msTime(); if (doublebinds != NULL && int(DClickTime[ev->data1] - nowtime) > 0 && ev->type == EV_KeyDown) { // Key pressed for a double click diff --git a/src/s_environment.cpp b/src/s_environment.cpp index 14ed21eec6..a052986e2e 100644 --- a/src/s_environment.cpp +++ b/src/s_environment.cpp @@ -3,7 +3,7 @@ ** **--------------------------------------------------------------------------- ** Copyright 2005-2016 Randy Heit -** Copyright 2005-2016 Christoph Oelckers +** Copyright 2005-2017 Christoph Oelckers ** All rights reserved. ** ** Redistribution and use in source and binary forms, with or without @@ -41,7 +41,19 @@ #include "w_wad.h" #include "i_system.h" +#include "c_cvars.h" +#include "c_dispatch.h" +#include "files.h" +#include "vm.h" +#include "dobject.h" +#include "menu/menu.h" + + + void InitReverbMenu(); +REVERB_PROPERTIES SavedProperties; +ReverbContainer *CurrentEnv; +extern ReverbContainer *ForcedEnvironment; struct FReverbField { @@ -51,6 +63,7 @@ struct FReverbField unsigned int Flag; }; + static const FReverbField ReverbFields[] = { { 0, 25, 0, &REVERB_PROPERTIES::Environment, 0 }, @@ -656,3 +669,373 @@ void S_UnloadReverbDef () } Environments = &Off; } + +CUSTOM_CVAR(Bool, eaxedit_test, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL) +{ + if (self) + { + ForcedEnvironment = CurrentEnv; + } + else + { + ForcedEnvironment = nullptr; + } +} + +struct EnvFlag +{ + const char *Name; + int CheckboxControl; + unsigned int Flag; +}; + +inline int HIBYTE(int i) +{ + return (i >> 8) & 255; +} + +inline int LOBYTE(int i) +{ + return i & 255; +} + +uint16_t FirstFreeID(uint16_t base, bool builtin) +{ + int tryCount = 0; + int priID = HIBYTE(base); + + // If the original sound is built-in, start searching for a new + // primary ID at 30. + if (builtin) + { + for (priID = 30; priID < 256; ++priID) + { + if (S_FindEnvironment(priID << 8) == nullptr) + { + break; + } + } + if (priID == 256) + { // Oh well. + priID = 30; + } + } + + for (;;) + { + uint16_t lastID = Environments->ID; + const ReverbContainer *env = Environments->Next; + + // Find the lowest-numbered free ID with the same primary ID as base + // If none are available, add 100 to base's primary ID and try again. + // If that fails, then the primary ID gets incremented + // by 1 until a match is found. If all the IDs searchable by this + // algorithm are in use, then you're in trouble. + + while (env != nullptr) + { + if (HIBYTE(env->ID) > priID) + { + break; + } + if (HIBYTE(env->ID) == priID) + { + if (HIBYTE(lastID) == priID) + { + if (LOBYTE(env->ID) - LOBYTE(lastID) > 1) + { + return lastID + 1; + } + } + lastID = env->ID; + } + env = env->Next; + } + if (LOBYTE(lastID) == 255) + { + if (tryCount == 0) + { + base += 100 * 256; + tryCount = 1; + } + else + { + base += 256; + } + } + else if (builtin && lastID == 0) + { + return priID << 8; + } + else + { + return lastID + 1; + } + } +} + +FString SuggestNewName(const ReverbContainer *env) +{ + const ReverbContainer *probe = nullptr; + char text[32]; + size_t len; + int number, numdigits; + + strncpy(text, env->Name, 31); + text[31] = 0; + + len = strlen(text); + while (text[len - 1] >= '0' && text[len - 1] <= '9') + { + len--; + } + number = atoi(text + len); + if (number < 1) + { + number = 1; + } + + if (text[len - 1] != ' ' && len < 31) + { + text[len++] = ' '; + } + + for (; number < 100000; ++number) + { + if (number < 10) numdigits = 1; + else if (number < 100) numdigits = 2; + else if (number < 1000) numdigits = 3; + else if (number < 10000)numdigits = 4; + else numdigits = 5; + if (len + numdigits > 31) + { + len = 31 - numdigits; + } + mysnprintf(text + len, countof(text) - len, "%d", number); + + probe = Environments; + while (probe != nullptr) + { + if (stricmp(probe->Name, text) == 0) + break; + probe = probe->Next; + } + if (probe == nullptr) + { + break; + } + } + return text; +} + +void ExportEnvironments(const char *filename, uint32_t count, const ReverbContainer **envs) +{ + FileWriter *f = FileWriter::Open("filename"); + + if (f != nullptr) + { + for (uint32_t i = 0; i < count; ++i) + { + const ReverbContainer *env = envs[i]; + const ReverbContainer *base; + size_t j; + + if ((unsigned int)env->Properties.Environment < 26) + { + base = DefaultEnvironments[env->Properties.Environment]; + } + else + { + base = nullptr; + } + f->Printf("\"%s\" %u %u\n{\n", env->Name, HIBYTE(env->ID), LOBYTE(env->ID)); + for (j = 0; j < countof(ReverbFields); ++j) + { + const FReverbField *ctl = &ReverbFields[j]; + const char *ctlName = ReverbFieldNames[j]; + if (ctlName) + { + if (j == 0 || + (ctl->Float && base->Properties.*ctl->Float != env->Properties.*ctl->Float) || + (ctl->Int && base->Properties.*ctl->Int != env->Properties.*ctl->Int)) + { + f->Printf("\t%s ", ctlName); + if (ctl->Float) + { + float v = env->Properties.*ctl->Float * 1000; + int vi = int(v >= 0.0 ? v + 0.5 : v - 0.5); + f->Printf("%d.%03d\n", vi / 1000, abs(vi % 1000)); + } + else + { + f->Printf("%d\n", env->Properties.*ctl->Int); + } + } + else + { + if ((1 << ctl->Flag) & (env->Properties.Flags ^ base->Properties.Flags)) + { + f->Printf("\t%s %s\n", ctlName, ctl->Flag & env->Properties.Flags ? "true" : "false"); + } + } + } + } + f->Printf("}\n\n"); + } + delete f; + } + else + { + M_StartMessage("Save failed", 1); + } +} + +DEFINE_ACTION_FUNCTION(DReverbEdit, GetValue) +{ + PARAM_PROLOGUE; + PARAM_INT(index); + ACTION_RETURN_FLOAT(0); + return 1; +} + +DEFINE_ACTION_FUNCTION(DReverbEdit, SetValue) +{ + PARAM_PROLOGUE; + PARAM_INT(index); + PARAM_FLOAT(value); + ACTION_RETURN_FLOAT(value); + return 1; +} + +DEFINE_ACTION_FUNCTION(DReverbEdit, GrayCheck) +{ + PARAM_PROLOGUE; + ACTION_RETURN_BOOL(CurrentEnv->Builtin); + return 1; +} + +DEFINE_ACTION_FUNCTION(DReverbEdit, GetSelectedEnvironment) +{ + PARAM_PROLOGUE; + if (numret > 1) + { + numret = 2; + ret[1].SetInt(CurrentEnv ? CurrentEnv->ID : -1); + } + if (numret > 0) + { + ret[0].SetString(CurrentEnv ? CurrentEnv->Name : ""); + } + return numret; +} + +DEFINE_ACTION_FUNCTION(DReverbEdit, FillSelectMenu) +{ + PARAM_PROLOGUE; + PARAM_STRING(ccmd); + PARAM_OBJECT(desc, DOptionMenuDescriptor); + desc->mItems.Clear(); + for (auto env = Environments; env != nullptr; env = env->Next) + { + FStringf text("(%d, %d) %s", HIBYTE(env->ID), LOBYTE(env->ID), env->Name); + FStringf cmd("%s \"%s\"", ccmd.GetChars(), env->Name); + PClass *cls = PClass::FindClass("OptionMenuItemCommand"); + if (cls != nullptr && cls->IsDescendantOf("OptionMenuItem")) + { + auto func = dyn_cast(cls->FindSymbol("Init", true)); + if (func != nullptr) + { + DMenuItemBase *item = (DMenuItemBase*)cls->CreateNew(); + VMValue params[] = { item, &text, FName(cmd).GetIndex(), false, true }; + VMCall(func->Variants[0].Implementation, params, 5, nullptr, 0); + desc->mItems.Push((DMenuItemBase*)item); + } + } + } + return 0; +} + +// These are for internal use only and not supposed to be user-settable +CVAR(String, reverbedit_name, "", CVAR_NOSET); +CVAR(Int, reverbedit_id1, 0, CVAR_NOSET); +CVAR(Int, reverbedit_id2, 0, CVAR_NOSET); + +static void SelectEnvironment(const char *envname) +{ + for (auto env = Environments; env != nullptr; env = env->Next) + { + if (!strcmp(env->Name, envname)) + { + CurrentEnv = env; + SavedProperties = env->Properties; + if (eaxedit_test) ForcedEnvironment = env; + + // Set up defaults for a new environment based on this one. + int newid = FirstFreeID(env->ID, env->Builtin); + UCVarValue cv; + cv.Int = HIBYTE(newid); + reverbedit_id1.ForceSet(cv, CVAR_Int); + cv.Int = LOBYTE(newid); + reverbedit_id2.ForceSet(cv, CVAR_Int); + FString selectname = SuggestNewName(env); + cv.String = selectname.GetChars(); + reverbedit_name.ForceSet(cv, CVAR_String); + return; + } + } +} + +void InitReverbMenu() +{ + // Make sure that the editor's variables are properly initialized. + SelectEnvironment("Off"); +} + +CCMD(selectenvironment) +{ + if (argv.argc() > 1) + { + auto str = argv[1]; + SelectEnvironment(str); + } + else + InitReverbMenu(); +} + +CCMD(revertenvironment) +{ + if (CurrentEnv != nullptr) + { + CurrentEnv->Properties = SavedProperties; + } +} + +CCMD(createenvironment) +{ + if (S_FindEnvironment(reverbedit_name)) + { + M_StartMessage(FStringf("An environment with the name '%s' already exists", *reverbedit_name), 1); + return; + } + int id = (reverbedit_id1 * 255) + reverbedit_id2; + if (S_FindEnvironment(id)) + { + M_StartMessage(FStringf("An environment with the ID (%d, %d) already exists", *reverbedit_id1, *reverbedit_id2), 1); + return; + } + + auto newenv = new ReverbContainer; + newenv->Builtin = false; + newenv->ID = id; + newenv->Name = copystring(reverbedit_name); + newenv->Next = nullptr; + newenv->Properties = CurrentEnv->Properties; + S_AddEnvironment(newenv); + SelectEnvironment(newenv->Name); +} + +CCMD(reverbedit) +{ + C_DoCommand("openmenu reverbedit"); +} + diff --git a/src/win32/eaxedit.cpp b/src/win32/eaxedit.cpp deleted file mode 100644 index 11d1c20847..0000000000 --- a/src/win32/eaxedit.cpp +++ /dev/null @@ -1,758 +0,0 @@ -/* -** -** -**--------------------------------------------------------------------------- -** Copyright 2005-2016 Randy Heit -** All rights reserved. -** -** Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions -** are met: -** -** 1. Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** 2. Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in the -** documentation and/or other materials provided with the distribution. -** 3. The name of the author may not be used to endorse or promote products -** derived from this software without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -**--------------------------------------------------------------------------- -** -*/ - -#include -#include -#include - -#include "resource.h" -#include "s_sound.h" -#include "templates.h" -#include "cmdlib.h" -#include "c_dispatch.h" -#include "c_cvars.h" -#include "doomstat.h" -#include "v_video.h" -#include "c_cvars.h" -#include "vm.h" -#include "symbols.h" -#include "menu/menu.h" - - -REVERB_PROPERTIES SavedProperties; -ReverbContainer *CurrentEnv; -extern ReverbContainer *ForcedEnvironment; - -CUSTOM_CVAR (Bool, eaxedit_test, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG|CVAR_NOINITCALL) -{ - if (self) - { - ForcedEnvironment = CurrentEnv; - } - else - { - ForcedEnvironment = nullptr; - } -} - -struct MySaveData -{ - const ReverbContainer *Default; - const ReverbContainer **Saves; - uint32_t NumSaves; - - MySaveData (const ReverbContainer *def) - : Default (def), Saves (nullptr), NumSaves (0) {} - ~MySaveData () - { - if (Saves) delete[] Saves; - } -}; - -struct EnvControl -{ - const char *Name; - int EditControl; - int SliderControl; - int Min; - int Max; - float REVERB_PROPERTIES::*Float; - int REVERB_PROPERTIES::*Int; - HWND EditHWND; - HWND SliderHWND; -}; - -struct EnvFlag -{ - const char *Name; - int CheckboxControl; - unsigned int Flag; -}; - -EnvControl EnvControls[] = -{ - { "Environment", 0, 0, 0, 25, 0, &REVERB_PROPERTIES::Environment }, - { "EnvironmentSize", IDCE_ENVIRONMENTSIZE, IDCS_ENVIRONMENTSIZE, 1000, 100000, &REVERB_PROPERTIES::EnvSize, 0 }, - { "EnvironmentDiffusion", IDCE_ENVIRONMENTDIFFUSION, IDCS_ENVIRONMENTDIFFUSION, 0, 1000, &REVERB_PROPERTIES::EnvDiffusion, 0 }, - { "Room", IDCE_ROOM, IDCS_ROOM, -10000, 0, 0, &REVERB_PROPERTIES::Room }, - { "RoomHF", IDCE_ROOMHF, IDCS_ROOMHF, -10000, 0, 0, &REVERB_PROPERTIES::RoomHF }, - { "RoomLF", IDCE_ROOMLF, IDCS_ROOMLF, -10000, 0, 0, &REVERB_PROPERTIES::RoomLF }, - { "DecayTime", IDCE_DECAYTIME, IDCS_DECAYTIME, 100, 20000, &REVERB_PROPERTIES::DecayTime, 0 }, - { "DecayHFRatio", IDCE_DECAYHFRATIO, IDCS_DECAYHFRATIO, 100, 2000, &REVERB_PROPERTIES::DecayHFRatio, 0 }, - { "DecayLFRatio", IDCE_DECAYLFRATIO, IDCS_DECAYLFRATIO, 100, 2000, &REVERB_PROPERTIES::DecayLFRatio, 0 }, - { "Reflections", IDCE_REFLECTIONS, IDCS_REFLECTIONS, -10000, 1000, 0, &REVERB_PROPERTIES::Reflections }, - { "ReflectionsDelay", IDCE_REFLECTIONSDELAY, IDCS_REFLECTIONSDELAY, 0, 300, &REVERB_PROPERTIES::ReflectionsDelay, 0 }, - { "ReflectionsPanX", IDCE_REFLECTIONSPANX, IDCS_REFLECTIONSPANX, -2000000, 2000000, &REVERB_PROPERTIES::ReflectionsPan0, 0 }, - { "ReflectionsPanY", IDCE_REFLECTIONSPANY, IDCS_REFLECTIONSPANY, -2000000, 2000000, &REVERB_PROPERTIES::ReflectionsPan1, 0 }, - { "ReflectionsPanZ", IDCE_REFLECTIONSPANZ, IDCS_REFLECTIONSPANZ, -2000000, 2000000, &REVERB_PROPERTIES::ReflectionsPan2, 0 }, - { "Reverb", IDCE_REVERB, IDCS_REVERB, -10000, 2000, 0, &REVERB_PROPERTIES::Reverb }, - { "ReverbDelay", IDCE_REVERBDELAY, IDCS_REVERBDELAY, 0, 100, &REVERB_PROPERTIES::ReverbDelay, 0 }, - { "ReverbPanX", IDCE_REVERBPANX, IDCS_REVERBPANX, -2000000, 2000000, &REVERB_PROPERTIES::ReverbPan0, 0 }, - { "ReverbPanY", IDCE_REVERBPANY, IDCS_REVERBPANY, -2000000, 2000000, &REVERB_PROPERTIES::ReverbPan1, 0 }, - { "ReverbPanZ", IDCE_REVERBPANZ, IDCS_REVERBPANZ, -2000000, 2000000, &REVERB_PROPERTIES::ReverbPan2, 0 }, - { "EchoTime", IDCE_ECHOTIME, IDCS_ECHOTIME, 75, 250, &REVERB_PROPERTIES::EchoTime, 0 }, - { "EchoDepth", IDCE_ECHODEPTH, IDCS_ECHODEPTH, 0, 1000, &REVERB_PROPERTIES::EchoDepth, 0 }, - { "ModulationTime", IDCE_MODULATIONTIME, IDCS_MODULATIONTIME, 40, 4000, &REVERB_PROPERTIES::ModulationTime, 0 }, - { "ModulationDepth", IDCE_MODULATIONDEPTH, IDCS_MODULATIONDEPTH, 0, 1000, &REVERB_PROPERTIES::ModulationDepth, 0 }, - { "AirAbsorptionHF", IDCE_AIRABSORPTIONHF, IDCS_AIRABSORPTIONHF, -100000, 0, &REVERB_PROPERTIES::AirAbsorptionHF, 0 }, - { "HFReference", IDCE_HFREFERENCE, IDCS_HFREFERENCE, 1000000, 20000000, &REVERB_PROPERTIES::HFReference, 0 }, - { "LFReference", IDCE_LFREFERENCE, IDCS_LFREFERENCE, 20000, 1000000, &REVERB_PROPERTIES::LFReference, 0 }, - { "RoomRolloffFactor", IDCE_ROOMROLLOFFFACTOR, IDCS_ROOMROLLOFFFACTOR, 0, 10000, &REVERB_PROPERTIES::RoomRolloffFactor, 0 }, - { "Diffusion", 0, 0, 0, 100000, &REVERB_PROPERTIES::Diffusion, 0 }, - { "Density", 0, 0, 0, 100000, &REVERB_PROPERTIES::Density, 0 }, -}; - -EnvFlag EnvFlags[] = -{ - { "bReflectionsScale", IDC_REFLECTIONSSCALE, REVERB_FLAGS_REFLECTIONSSCALE }, - { "bReflectionsDelayScale", IDC_REFLECTIONSDELAYSCALE, REVERB_FLAGS_REFLECTIONSDELAYSCALE }, - { "bDecayTimeScale", IDC_DECAYTIMESCALE, REVERB_FLAGS_DECAYTIMESCALE }, - { "bDecayHFLimit", IDC_DECAYHFLIMIT, REVERB_FLAGS_DECAYHFLIMIT }, - { "bReverbScale", IDC_REVERBSCALE, REVERB_FLAGS_REVERBSCALE }, - { "bReverbDelayScale", IDC_REVERBDELAYSCALE, REVERB_FLAGS_REVERBDELAYSCALE }, - { "bEchoTimeScale", IDC_ECHOTIMESCALE, REVERB_FLAGS_ECHOTIMESCALE }, - { "bModulationTimeScale", IDC_MODULATIONTIMESCALE, REVERB_FLAGS_MODULATIONTIMESCALE } -}; - -inline int HIBYTE(int i) -{ - return (i >> 8) & 255; -} - -inline int LOBYTE(int i) -{ - return i & 255; -} - -uint16_t FirstFreeID (uint16_t base, bool builtin) -{ - int tryCount = 0; - int priID = HIBYTE(base); - - // If the original sound is built-in, start searching for a new - // primary ID at 30. - if (builtin) - { - for (priID = 30; priID < 256; ++priID) - { - if (S_FindEnvironment (priID << 8) == nullptr) - { - break; - } - } - if (priID == 256) - { // Oh well. - priID = 30; - } - } - - for (;;) - { - uint16_t lastID = Environments->ID; - const ReverbContainer *env = Environments->Next; - - // Find the lowest-numbered free ID with the same primary ID as base - // If none are available, add 100 to base's primary ID and try again. - // If that fails, then the primary ID gets incremented - // by 1 until a match is found. If all the IDs searchable by this - // algorithm are in use, then you're in trouble. - - while (env != nullptr) - { - if (HIBYTE(env->ID) > priID) - { - break; - } - if (HIBYTE(env->ID) == priID) - { - if (HIBYTE(lastID) == priID) - { - if (LOBYTE(env->ID) - LOBYTE(lastID) > 1) - { - return lastID+1; - } - } - lastID = env->ID; - } - env = env->Next; - } - if (LOBYTE(lastID) == 255) - { - if (tryCount == 0) - { - base += 100*256; - tryCount = 1; - } - else - { - base += 256; - } - } - else if (builtin && lastID == 0) - { - return priID << 8; - } - else - { - return lastID+1; - } - } -} - -FString SuggestNewName (const ReverbContainer *env) -{ - const ReverbContainer *probe = nullptr; - char text[32]; - size_t len; - int number, numdigits; - - strncpy (text, env->Name, 31); - text[31] = 0; - - len = strlen (text); - while (text[len-1] >= '0' && text[len-1] <= '9') - { - len--; - } - number = atoi (text + len); - if (number < 1) - { - number = 1; - } - - if (text[len-1] != ' ' && len < 31) - { - text[len++] = ' '; - } - - for (; number < 100000; ++number) - { - if (number < 10) numdigits = 1; - else if (number < 100) numdigits = 2; - else if (number < 1000) numdigits = 3; - else if (number < 10000)numdigits = 4; - else numdigits = 5; - if (len + numdigits > 31) - { - len = 31 - numdigits; - } - mysnprintf (text + len, countof(text) - len, "%d", number); - - probe = Environments; - while (probe != nullptr) - { - if (stricmp (probe->Name, text) == 0) - break; - probe = probe->Next; - } - if (probe == nullptr) - { - break; - } - } - return text; -} - -void ExportEnvironments (const char *filename, uint32_t count, const ReverbContainer **envs) -{ - FILE *f; - -retry: - f = fopen (filename, "w"); - - if (f != nullptr) - { - for (uint32_t i = 0; i < count; ++i) - { - const ReverbContainer *env = envs[i]; - const ReverbContainer *base; - size_t j; - - if ((unsigned int)env->Properties.Environment < 26) - { - base = DefaultEnvironments[env->Properties.Environment]; - } - else - { - base = nullptr; - } - fprintf (f, "\"%s\" %u %u\n{\n", env->Name, HIBYTE(env->ID), LOBYTE(env->ID)); - for (j = 0; j < countof(EnvControls); ++j) - { - const EnvControl *ctl = &EnvControls[j]; - if (ctl->Name && - (j == 0 || - (ctl->Float && base->Properties.*ctl->Float != env->Properties.*ctl->Float) || - (ctl->Int && base->Properties.*ctl->Int != env->Properties.*ctl->Int)) - ) - { - fprintf (f, "\t%s ", ctl->Name); - if (ctl->Float) - { - float v = env->Properties.*ctl->Float * 1000; - int vi = int(v >= 0.0 ? v + 0.5 : v - 0.5); - fprintf (f, "%d.%03d\n", vi/1000, abs(vi%1000)); - } - else - { - fprintf (f, "%d\n", env->Properties.*ctl->Int); - } - } - } - for (j = 0; j < countof(EnvFlags); ++j) - { - if (EnvFlags[j].Flag & (env->Properties.Flags ^ base->Properties.Flags)) - { - fprintf (f, "\t%s %s\n", EnvFlags[j].Name, - EnvFlags[j].Flag & env->Properties.Flags ? "true" : "false"); - } - } - fprintf (f, "}\n\n"); - } - fclose (f); - } - else - { - LPVOID lpMsgBuf; - FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, - nullptr, - GetLastError(), - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPTSTR)&lpMsgBuf, - 0, - nullptr); - if (IDRETRY == MessageBox (EAXEditWindow, (LPCTSTR)lpMsgBuf, "Save Failed!", MB_RETRYCANCEL|MB_ICONERROR)) - { - LocalFree (lpMsgBuf); - goto retry; - } - LocalFree (lpMsgBuf); - } -} - -void SaveEnvironments (HWND owner, const ReverbContainer *defEnv) -{ - MySaveData msd (defEnv); - OPENFILENAME ofn = { sizeof(ofn) }; - char filename[PATH_MAX]; - - ofn.hwndOwner = owner; - ofn.hInstance = g_hInst; - ofn.lpstrFilter = "Text Files\0*.txt\0All Files\0*.*\0"; - ofn.lpstrCustomFilter = nullptr; - ofn.nMaxCustFilter = 0; - ofn.nFilterIndex = 1; - ofn.lpstrFile = filename; - ofn.nMaxFile = sizeof(filename); - ofn.lpstrFileTitle = nullptr; - ofn.nMaxFileTitle = 0; - ofn.lpstrInitialDir = nullptr; - ofn.lpstrTitle = "Save EAX Environments As..."; - ofn.Flags = OFN_ENABLEHOOK|OFN_ENABLESIZING|OFN_ENABLETEMPLATE|OFN_EXPLORER| - OFN_NOCHANGEDIR|OFN_OVERWRITEPROMPT; - ofn.nFileOffset = 0; - ofn.nFileExtension = 0; - ofn.lpstrDefExt = "txt"; - ofn.lCustData = (LPARAM)&msd; - ofn.lpfnHook = SaveHookProc; - ofn.lpTemplateName = MAKEINTRESOURCE(IDD_SAVEEAX); - - filename[0] = 0; - - if (GetSaveFileName ((tagOFNA *)&ofn) && msd.NumSaves != 0) - { - ExportEnvironments (filename, msd.NumSaves, msd.Saves); - } -} - -INT_PTR CALLBACK EAXProc (HWND hDlg, uint32_t uMsg, WPARAM wParam, LPARAM lParam) -{ - SCROLLINFO scrollInfo; - HWND hWnd; - RECT rect; - POINT ul; - ReverbContainer *env; - - switch (uMsg) - { - case WM_INITDIALOG: - hPropList = CreateDialog (g_hInst, MAKEINTRESOURCE(IDD_EAXPROPERTYLIST), hDlg, EAXProp); - hWnd = GetDlgItem (hDlg, IDC_DUMMY); - GetWindowRect (hPropList, &rect); - PropListMaxSize.x = rect.right - rect.left; - PropListMaxSize.y = rect.bottom - rect.top; - GetWindowRect (hWnd, &rect); - DestroyWindow (hWnd); - ul.x = rect.left; - ul.y = rect.top; - ScreenToClient (hDlg, &ul); - PropListMaxSize.x = rect.right - rect.left; - - scrollInfo.cbSize = sizeof(scrollInfo); - scrollInfo.fMask = SIF_RANGE|SIF_POS|SIF_PAGE|SIF_DISABLENOSCROLL; - scrollInfo.nMin = 0; - scrollInfo.nMax = PropListMaxSize.y; - scrollInfo.nPos = 0; - scrollInfo.nPage = rect.bottom - rect.top; - SetScrollInfo (hPropList, SB_VERT, &scrollInfo, TRUE); - - MoveWindow (hPropList, ul.x, ul.y, PropListMaxSize.x, rect.bottom - rect.top, FALSE); - ShowWindow (hPropList, SW_SHOW); - - // Windows should have a layout control like MUI so that I don't have - // to do any extra work to make the dialog resizable. - - GetClientRect (hDlg, &rect); - PropListHeightDiff = (rect.bottom - rect.top) - scrollInfo.nPage; - - // Using a scroll bar to create a size box seems like an odd way of - // doing things. - - hWnd = CreateWindow( - "Scrollbar", - (LPSTR)nullptr, - WS_CHILD | WS_VISIBLE | SBS_SIZEGRIP | SBS_SIZEBOXBOTTOMRIGHTALIGN | WS_CLIPSIBLINGS, - 0,0,rect.right,rect.bottom, - hDlg, - (HMENU)IDC_SIZEBOX, - g_hInst, - nullptr); - - TestLocation.x = DoneLocation.x = rect.right; - TestLocation.y = DoneLocation.y = rect.bottom; - GetWindowRect (GetDlgItem (hDlg, IDOK), &rect); - ScreenToClient (hDlg, (LPPOINT)&rect.left); - DoneLocation.x -= rect.left; - DoneLocation.y -= rect.top; - - GetWindowRect (GetDlgItem (hDlg, IDC_TESTEAX), &rect); - ScreenToClient (hDlg, (LPPOINT)&rect.left); - TestLocation.x -= rect.left; - TestLocation.y -= rect.top; - - GetWindowRect (hDlg, &rect); - EditWindowSize.x = rect.right - rect.left; - EditWindowSize.y = (rect.bottom - rect.top) - scrollInfo.nPage; - - GetWindowRect (GetDlgItem (hDlg, IDC_NEW), &rect); - ScreenToClient (hDlg, (LPPOINT)&rect.left); - NewLeft = rect.left; - - GetWindowRect (GetDlgItem (hDlg, IDC_SAVE), &rect); - ScreenToClient (hDlg, (LPPOINT)&rect.left); - SaveLeft = rect.left; - - GetWindowRect (GetDlgItem (hDlg, IDC_REVERT), &rect); - ScreenToClient (hDlg, (LPPOINT)&rect.left); - RevertLeft = rect.left; - - hWnd = GetDlgItem (hDlg, IDC_CURRENTENVIRONMENT); - PopulateEnvDropDown (hWnd, IsDlgButtonChecked (hDlg, IDC_SHOWIDS)==BST_CHECKED, nullptr); - EAXProc (hDlg, WM_COMMAND, MAKELONG(IDC_CURRENTENVIRONMENT,CBN_SELENDOK), (LPARAM)hWnd); - - CheckDlgButton (hDlg, IDC_TESTEAX, eaxedit_test ? BST_CHECKED : BST_UNCHECKED); - return 0; - - case WM_SIZE: - if (wParam != SIZE_MAXHIDE && wParam != SIZE_MAXSHOW) - { - GetClientRect (hWnd = GetDlgItem (hDlg, IDC_SIZEBOX), &rect); - SetWindowPos (hWnd, HWND_BOTTOM, LOWORD(lParam)-rect.right, HIWORD(lParam)-rect.bottom, 0, 0, SWP_NOSIZE); - - SetWindowPos (hPropList, nullptr, 0, 0, PropListMaxSize.x, HIWORD(lParam)-PropListHeightDiff, SWP_NOMOVE|SWP_NOZORDER|SWP_NOOWNERZORDER|SWP_DEFERERASE); - SetWindowPos (GetDlgItem (hDlg, IDOK), nullptr, LOWORD(lParam)-DoneLocation.x, HIWORD(lParam)-DoneLocation.y, 0, 0, SWP_NOZORDER|SWP_NOOWNERZORDER|SWP_NOSIZE); - SetWindowPos (GetDlgItem (hDlg, IDC_NEW), nullptr, NewLeft, HIWORD(lParam)-DoneLocation.y, 0, 0, SWP_NOZORDER|SWP_NOOWNERZORDER|SWP_NOSIZE); - SetWindowPos (GetDlgItem (hDlg, IDC_SAVE), nullptr, SaveLeft, HIWORD(lParam)-DoneLocation.y, 0, 0, SWP_NOZORDER|SWP_NOOWNERZORDER|SWP_NOSIZE); - SetWindowPos (GetDlgItem (hDlg, IDC_REVERT), nullptr, RevertLeft, HIWORD(lParam)-DoneLocation.y, 0, 0, SWP_NOZORDER|SWP_NOOWNERZORDER|SWP_NOSIZE); - SetWindowPos (GetDlgItem (hDlg, IDC_TESTEAX), nullptr, LOWORD(lParam)-TestLocation.x, HIWORD(lParam)-TestLocation.y, 0, 0, SWP_NOZORDER|SWP_NOOWNERZORDER|SWP_NOSIZE); - } - return 0; - - case WM_NCDESTROY: - EAXEditWindow = 0; - //new FS_Switcher; - ForceWindowed = false; - if (fullscreen) - { - setmodeneeded = true; - } - ForcedEnvironment = nullptr; - break; - - case WM_COMMAND: - switch (LOWORD(wParam)) - { - case IDOK: - case IDCANCEL: - DestroyWindow (hPropList); - DestroyWindow (hDlg); - return 1; - - case IDC_NEW: - hWnd = GetDlgItem (hDlg, IDC_CURRENTENVIRONMENT); - env = (ReverbContainer *)DialogBoxParam (g_hInst, - MAKEINTRESOURCE(IDD_NEWEAX), hDlg, NewEAXProc, - SendMessage (hWnd, CB_GETITEMDATA, - SendMessage (hWnd, CB_GETCURSEL, 0, 0), 0)); - if (env != nullptr) - { - LRESULT i = AddEnvToDropDown (hWnd, - SendMessage (GetDlgItem (hDlg, IDC_SHOWIDS), BM_GETCHECK, 0, 0)==BST_CHECKED, - env); - SendMessage (hWnd, CB_SETCURSEL, i, 0); - UpdateControls (env, hDlg); - - hWnd = GetDlgItem (hPropList, IDCE_ENVIRONMENTSIZE); - SetFocus (hWnd); - SendMessage (hWnd, EM_SETSEL, 0, -1); - } - return 0; - - case IDC_REVERT: - hWnd = GetDlgItem (hDlg, IDC_CURRENTENVIRONMENT); - env = (ReverbContainer *)SendMessage (hWnd, CB_GETITEMDATA, - SendMessage (hWnd, CB_GETCURSEL, 0, 0), 0); - env->Properties = SavedProperties; - UpdateControls (env, hDlg); - return 0; - - case IDC_SAVE: - hWnd = GetDlgItem (hDlg, IDC_CURRENTENVIRONMENT); - SaveEnvironments (hDlg, - (ReverbContainer *)SendMessage (hWnd, CB_GETITEMDATA, - SendMessage (hWnd, CB_GETCURSEL, 0, 0), 0)); - return 0; - - case IDC_TESTEAX: - if (HIWORD(wParam) == BN_CLICKED) - { - eaxedit_test = (SendMessage ((HWND)lParam, BM_GETCHECK, 0, 0) == BST_CHECKED); - } - break; - - case IDC_SHOWIDS: - if (HIWORD(wParam) == BN_CLICKED) - { - hWnd = GetDlgItem (hDlg, IDC_CURRENTENVIRONMENT); - PopulateEnvDropDown (hWnd, - SendMessage ((HWND)lParam, BM_GETCHECK, 0, 0)==BST_CHECKED, - (ReverbContainer *)SendMessage (hWnd, CB_GETITEMDATA, - SendMessage (hWnd, CB_GETCURSEL, 0, 0), 0)); - EAXProc (hDlg, WM_COMMAND, MAKELONG(IDC_CURRENTENVIRONMENT,CBN_SELENDOK), - (LPARAM)hWnd); - return 0; - } - break; - - case IDC_CURRENTENVIRONMENT: - if (HIWORD(wParam) == CBN_SELENDOK) - { - env = (ReverbContainer *)SendMessage ((HWND)lParam, CB_GETITEMDATA, - SendMessage ((HWND)lParam, CB_GETCURSEL, 0, 0), 0); - UpdateControls (env, hDlg); - } - return 0; - } - return 1; - - case WM_GETMINMAXINFO: - ((MINMAXINFO *)lParam)->ptMaxTrackSize.x = - ((MINMAXINFO *)lParam)->ptMinTrackSize.x = EditWindowSize.x; - ((MINMAXINFO *)lParam)->ptMaxTrackSize.y = EditWindowSize.y + PropListMaxSize.y + 5; - GetClientRect (GetDlgItem (hDlg, IDOK), &rect); - ((MINMAXINFO *)lParam)->ptMinTrackSize.y = rect.bottom * 10; - return 0; - } - return FALSE; -} - -void ShowEAXEditor () -{ - EAXEditWindow = CreateDialog (g_hInst, MAKEINTRESOURCE(IDD_EAXEDIT), Window, EAXProc); -} - -extern int NewWidth, NewHeight, NewBits, DisplayBits; - - - -DEFINE_ACTION_FUNCTION(DReverbEdit, GetValue) -{ - PARAM_PROLOGUE; - PARAM_INT(index); - ACTION_RETURN_FLOAT(0); - return 1; -} - -DEFINE_ACTION_FUNCTION(DReverbEdit, SetValue) -{ - PARAM_PROLOGUE; - PARAM_INT(index); - PARAM_FLOAT(value); - ACTION_RETURN_FLOAT(value); - return 1; -} - -DEFINE_ACTION_FUNCTION(DReverbEdit, GrayCheck) -{ - PARAM_PROLOGUE; - ACTION_RETURN_BOOL(CurrentEnv->Builtin); - return 1; -} - -DEFINE_ACTION_FUNCTION(DReverbEdit, GetSelectedEnvironment) -{ - PARAM_PROLOGUE; - if (numret > 1) - { - numret = 2; - ret[1].SetInt(CurrentEnv ? CurrentEnv->ID : -1); - } - if (numret > 0) - { - ret[0].SetString(CurrentEnv ? CurrentEnv->Name : ""); - } - return numret; -} - -DEFINE_ACTION_FUNCTION(DReverbEdit, FillSelectMenu) -{ - PARAM_PROLOGUE; - PARAM_STRING(ccmd); - PARAM_OBJECT(desc, DOptionMenuDescriptor); - desc->mItems.Clear(); - for (auto env = Environments; env != nullptr; env = env->Next) - { - FStringf text("(%d, %d) %s", HIBYTE(env->ID), LOBYTE(env->ID), env->Name); - FStringf cmd("%s \"%s\"", ccmd.GetChars(), env->Name); - PClass *cls = PClass::FindClass("OptionMenuItemCommand"); - if (cls != nullptr && cls->IsDescendantOf("OptionMenuItem")) - { - auto func = dyn_cast(cls->FindSymbol("Init", true)); - if (func != nullptr) - { - DMenuItemBase *item = (DMenuItemBase*)cls->CreateNew(); - VMValue params[] = { item, &text, FName(cmd).GetIndex(), false, true }; - VMCall(func->Variants[0].Implementation, params, 5, nullptr, 0); - desc->mItems.Push((DMenuItemBase*)item); - } - } - } - return 0; -} - -// These are for internal use only and not supposed to be user-settable -CVAR(String, reverbedit_name, "", CVAR_NOSET); -CVAR(Int, reverbedit_id1, 0, CVAR_NOSET); -CVAR(Int, reverbedit_id2, 0, CVAR_NOSET); - -static void SelectEnvironment(const char *envname) -{ - for (auto env = Environments; env != nullptr; env = env->Next) - { - if (!strcmp(env->Name, envname)) - { - CurrentEnv = env; - SavedProperties = env->Properties; - if (eaxedit_test) ForcedEnvironment = env; - - // Set up defaults for a new environment based on this one. - int newid = FirstFreeID(env->ID, env->Builtin); - UCVarValue cv; - cv.Int = HIBYTE(newid); - reverbedit_id1.ForceSet(cv, CVAR_Int); - cv.Int = LOBYTE(newid); - reverbedit_id2.ForceSet(cv, CVAR_Int); - FString selectname = SuggestNewName(env); - cv.String = selectname.GetChars(); - reverbedit_name.ForceSet(cv, CVAR_String); - return; - } - } -} - -void InitReverbMenu() -{ - // Make sure that the editor's variables are properly initialized. - SelectEnvironment("Off"); -} - -CCMD(selectenvironment) -{ - if (argv.argc() > 1) - { - auto str = argv[1]; - SelectEnvironment(str); - } - else - InitReverbMenu(); -} - -CCMD(revertenvironment) -{ - if (CurrentEnv != nullptr) - { - CurrentEnv->Properties = SavedProperties; - } -} - -CCMD(createenvironment) -{ - if (S_FindEnvironment(reverbedit_name)) - { - M_StartMessage(FStringf("An environment with the name '%s' already exists", *reverbedit_name), 1); - return; - } - int id = (reverbedit_id1 * 255) + reverbedit_id2; - if (S_FindEnvironment(id)) - { - M_StartMessage(FStringf("An environment with the ID (%d, %d) already exists", *reverbedit_id1, *reverbedit_id2), 1); - return; - } - - auto newenv = new ReverbContainer; - newenv->Builtin = false; - newenv->ID = id; - newenv->Name = copystring(reverbedit_name); - newenv->Next = nullptr; - newenv->Properties = CurrentEnv->Properties; - S_AddEnvironment(newenv); - SelectEnvironment(newenv->Name); -} - -CCMD(reverbedit) -{ - C_DoCommand("openmenu reverbedit"); -} - diff --git a/src/win32/i_input.cpp b/src/win32/i_input.cpp index 9b05775feb..4da5fdc759 100644 --- a/src/win32/i_input.cpp +++ b/src/win32/i_input.cpp @@ -130,9 +130,6 @@ FJoystickCollection *JoyDevices[NUM_JOYDEVICES]; extern HINSTANCE g_hInst; extern DWORD SessionID; -extern void ShowEAXEditor (); -extern bool SpawnEAXWindow; - static HMODULE DInputDLL; bool GUICapture; @@ -141,10 +138,8 @@ extern FKeyboard *Keyboard; bool VidResizing; -extern bool SpawnEAXWindow; extern BOOL vidactive; extern HWND Window, ConWindow; -extern HWND EAXEditWindow; EXTERN_CVAR (String, language) EXTERN_CVAR (Bool, lookstrafe) @@ -499,12 +494,6 @@ LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) break; case WM_KEYDOWN: - // When the EAX editor is open, pressing Ctrl+Tab will switch to it - if (EAXEditWindow != 0 && wParam == VK_TAB && !(lParam & 0x40000000) && - (GetKeyState (VK_CONTROL) & 0x8000)) - { - SetForegroundWindow (EAXEditWindow); - } break; case WM_SYSKEYDOWN: @@ -530,11 +519,6 @@ LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) case WM_DISPLAYCHANGE: case WM_STYLECHANGED: - if (SpawnEAXWindow) - { - SpawnEAXWindow = false; - ShowEAXEditor (); - } return DefWindowProc(hWnd, message, wParam, lParam); case WM_GETMINMAXINFO: @@ -797,14 +781,12 @@ void I_GetEvent () { if (mess.message == WM_QUIT) exit (mess.wParam); - if (EAXEditWindow == 0 || !IsDialogMessage (EAXEditWindow, &mess)) + + if (GUICapture) { - if (GUICapture) - { - TranslateMessage (&mess); - } - DispatchMessage (&mess); + TranslateMessage (&mess); } + DispatchMessage (&mess); } if (Keyboard != NULL) diff --git a/src/win32/wglext.h b/src/win32/wglext.h index 57130570e2..daba41091c 100644 --- a/src/win32/wglext.h +++ b/src/win32/wglext.h @@ -58,12 +58,12 @@ extern "C" { #define WGL_BACK_COLOR_BUFFER_BIT_ARB 0x00000002 #define WGL_DEPTH_BUFFER_BIT_ARB 0x00000004 #define WGL_STENCIL_BUFFER_BIT_ARB 0x00000008 -typedef HANDLE (WINAPI * PFNWGLCREATEBUFFERREGIONARBPROC) (HDC hDC, int iLayerPlane, uint32_t uType); +typedef HANDLE (WINAPI * PFNWGLCREATEBUFFERREGIONARBPROC) (HDC hDC, int iLayerPlane, UINT uType); typedef VOID (WINAPI * PFNWGLDELETEBUFFERREGIONARBPROC) (HANDLE hRegion); typedef BOOL (WINAPI * PFNWGLSAVEBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height); typedef BOOL (WINAPI * PFNWGLRESTOREBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc); #ifdef WGL_WGLEXT_PROTOTYPES -HANDLE WINAPI wglCreateBufferRegionARB (HDC hDC, int iLayerPlane, uint32_t uType); +HANDLE WINAPI wglCreateBufferRegionARB (HDC hDC, int iLayerPlane, UINT uType); VOID WINAPI wglDeleteBufferRegionARB (HANDLE hRegion); BOOL WINAPI wglSaveBufferRegionARB (HANDLE hRegion, int x, int y, int width, int height); BOOL WINAPI wglRestoreBufferRegionARB (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc); @@ -215,13 +215,13 @@ BOOL WINAPI wglQueryPbufferARB (HPBUFFERARB hPbuffer, int iAttribute, int *piVal #define WGL_SWAP_UNDEFINED_ARB 0x202A #define WGL_TYPE_RGBA_ARB 0x202B #define WGL_TYPE_COLORINDEX_ARB 0x202C -typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, uint32_t nAttributes, const int *piAttributes, int *piValues); -typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, uint32_t nAttributes, const int *piAttributes, FLOAT *pfValues); -typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, uint32_t nMaxFormats, int *piFormats, uint32_t *nNumFormats); +typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues); +typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues); +typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); #ifdef WGL_WGLEXT_PROTOTYPES -BOOL WINAPI wglGetPixelFormatAttribivARB (HDC hdc, int iPixelFormat, int iLayerPlane, uint32_t nAttributes, const int *piAttributes, int *piValues); -BOOL WINAPI wglGetPixelFormatAttribfvARB (HDC hdc, int iPixelFormat, int iLayerPlane, uint32_t nAttributes, const int *piAttributes, FLOAT *pfValues); -BOOL WINAPI wglChoosePixelFormatARB (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, uint32_t nMaxFormats, int *piFormats, uint32_t *nNumFormats); +BOOL WINAPI wglGetPixelFormatAttribivARB (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues); +BOOL WINAPI wglGetPixelFormatAttribfvARB (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues); +BOOL WINAPI wglChoosePixelFormatARB (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); #endif #endif /* WGL_ARB_pixel_format */ @@ -296,9 +296,9 @@ BOOL WINAPI wglSetPbufferAttribARB (HPBUFFERARB hPbuffer, const int *piAttribLis #define WGL_STEREO_EMITTER_DISABLE_3DL 0x2056 #define WGL_STEREO_POLARITY_NORMAL_3DL 0x2057 #define WGL_STEREO_POLARITY_INVERT_3DL 0x2058 -typedef BOOL (WINAPI * PFNWGLSETSTEREOEMITTERSTATE3DLPROC) (HDC hDC, uint32_t uState); +typedef BOOL (WINAPI * PFNWGLSETSTEREOEMITTERSTATE3DLPROC) (HDC hDC, UINT uState); #ifdef WGL_WGLEXT_PROTOTYPES -BOOL WINAPI wglSetStereoEmitterState3DL (HDC hDC, uint32_t uState); +BOOL WINAPI wglSetStereoEmitterState3DL (HDC hDC, UINT uState); #endif #endif /* WGL_3DL_stereo_control */ @@ -314,21 +314,21 @@ BOOL WINAPI wglSetStereoEmitterState3DL (HDC hDC, uint32_t uState); #define WGL_GPU_NUM_SIMD_AMD 0x21A6 #define WGL_GPU_NUM_RB_AMD 0x21A7 #define WGL_GPU_NUM_SPI_AMD 0x21A8 -typedef uint32_t (WINAPI * PFNWGLGETGPUIDSAMDPROC) (uint32_t maxCount, uint32_t *ids); -typedef INT (WINAPI * PFNWGLGETGPUINFOAMDPROC) (uint32_t id, int property, GLenum dataType, uint32_t size, void *data); -typedef uint32_t (WINAPI * PFNWGLGETCONTEXTGPUIDAMDPROC) (HGLRC hglrc); -typedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC) (uint32_t id); -typedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC) (uint32_t id, HGLRC hShareContext, const int *attribList); +typedef UINT (WINAPI * PFNWGLGETGPUIDSAMDPROC) (UINT maxCount, UINT *ids); +typedef INT (WINAPI * PFNWGLGETGPUINFOAMDPROC) (UINT id, int property, GLenum dataType, UINT size, void *data); +typedef UINT (WINAPI * PFNWGLGETCONTEXTGPUIDAMDPROC) (HGLRC hglrc); +typedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC) (UINT id); +typedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC) (UINT id, HGLRC hShareContext, const int *attribList); typedef BOOL (WINAPI * PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC) (HGLRC hglrc); typedef BOOL (WINAPI * PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC) (HGLRC hglrc); typedef HGLRC (WINAPI * PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC) (void); typedef VOID (WINAPI * PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC) (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); #ifdef WGL_WGLEXT_PROTOTYPES -uint32_t WINAPI wglGetGPUIDsAMD (uint32_t maxCount, uint32_t *ids); -INT WINAPI wglGetGPUInfoAMD (uint32_t id, int property, GLenum dataType, uint32_t size, void *data); -uint32_t WINAPI wglGetContextGPUIDAMD (HGLRC hglrc); -HGLRC WINAPI wglCreateAssociatedContextAMD (uint32_t id); -HGLRC WINAPI wglCreateAssociatedContextAttribsAMD (uint32_t id, HGLRC hShareContext, const int *attribList); +UINT WINAPI wglGetGPUIDsAMD (UINT maxCount, UINT *ids); +INT WINAPI wglGetGPUInfoAMD (UINT id, int property, GLenum dataType, UINT size, void *data); +UINT WINAPI wglGetContextGPUIDAMD (HGLRC hglrc); +HGLRC WINAPI wglCreateAssociatedContextAMD (UINT id); +HGLRC WINAPI wglCreateAssociatedContextAttribsAMD (UINT id, HGLRC hShareContext, const int *attribList); BOOL WINAPI wglDeleteAssociatedContextAMD (HGLRC hglrc); BOOL WINAPI wglMakeAssociatedContextCurrentAMD (HGLRC hglrc); HGLRC WINAPI wglGetCurrentAssociatedContextAMD (void); @@ -473,13 +473,13 @@ BOOL WINAPI wglQueryPbufferEXT (HPBUFFEREXT hPbuffer, int iAttribute, int *piVal #define WGL_SWAP_UNDEFINED_EXT 0x202A #define WGL_TYPE_RGBA_EXT 0x202B #define WGL_TYPE_COLORINDEX_EXT 0x202C -typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, uint32_t nAttributes, int *piAttributes, int *piValues); -typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, uint32_t nAttributes, int *piAttributes, FLOAT *pfValues); -typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATEXTPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, uint32_t nMaxFormats, int *piFormats, uint32_t *nNumFormats); +typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *piValues); +typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, FLOAT *pfValues); +typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATEXTPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); #ifdef WGL_WGLEXT_PROTOTYPES -BOOL WINAPI wglGetPixelFormatAttribivEXT (HDC hdc, int iPixelFormat, int iLayerPlane, uint32_t nAttributes, int *piAttributes, int *piValues); -BOOL WINAPI wglGetPixelFormatAttribfvEXT (HDC hdc, int iPixelFormat, int iLayerPlane, uint32_t nAttributes, int *piAttributes, FLOAT *pfValues); -BOOL WINAPI wglChoosePixelFormatEXT (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, uint32_t nMaxFormats, int *piFormats, uint32_t *nNumFormats); +BOOL WINAPI wglGetPixelFormatAttribivEXT (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *piValues); +BOOL WINAPI wglGetPixelFormatAttribfvEXT (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, FLOAT *pfValues); +BOOL WINAPI wglChoosePixelFormatEXT (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); #endif #endif /* WGL_EXT_pixel_format */ @@ -546,28 +546,28 @@ BOOL WINAPI wglSetGammaTableI3D (HDC hDC, int iEntries, const USHORT *puRed, con typedef BOOL (WINAPI * PFNWGLENABLEGENLOCKI3DPROC) (HDC hDC); typedef BOOL (WINAPI * PFNWGLDISABLEGENLOCKI3DPROC) (HDC hDC); typedef BOOL (WINAPI * PFNWGLISENABLEDGENLOCKI3DPROC) (HDC hDC, BOOL *pFlag); -typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEI3DPROC) (HDC hDC, uint32_t uSource); -typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEI3DPROC) (HDC hDC, uint32_t *uSource); -typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, uint32_t uEdge); -typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, uint32_t *uEdge); -typedef BOOL (WINAPI * PFNWGLGENLOCKSAMPLERATEI3DPROC) (HDC hDC, uint32_t uRate); -typedef BOOL (WINAPI * PFNWGLGETGENLOCKSAMPLERATEI3DPROC) (HDC hDC, uint32_t *uRate); -typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, uint32_t uDelay); -typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, uint32_t *uDelay); -typedef BOOL (WINAPI * PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC) (HDC hDC, uint32_t *uMaxLineDelay, uint32_t *uMaxPixelDelay); +typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEI3DPROC) (HDC hDC, UINT uSource); +typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEI3DPROC) (HDC hDC, UINT *uSource); +typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT uEdge); +typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT *uEdge); +typedef BOOL (WINAPI * PFNWGLGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT uRate); +typedef BOOL (WINAPI * PFNWGLGETGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT *uRate); +typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT uDelay); +typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT *uDelay); +typedef BOOL (WINAPI * PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC) (HDC hDC, UINT *uMaxLineDelay, UINT *uMaxPixelDelay); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglEnableGenlockI3D (HDC hDC); BOOL WINAPI wglDisableGenlockI3D (HDC hDC); BOOL WINAPI wglIsEnabledGenlockI3D (HDC hDC, BOOL *pFlag); -BOOL WINAPI wglGenlockSourceI3D (HDC hDC, uint32_t uSource); -BOOL WINAPI wglGetGenlockSourceI3D (HDC hDC, uint32_t *uSource); -BOOL WINAPI wglGenlockSourceEdgeI3D (HDC hDC, uint32_t uEdge); -BOOL WINAPI wglGetGenlockSourceEdgeI3D (HDC hDC, uint32_t *uEdge); -BOOL WINAPI wglGenlockSampleRateI3D (HDC hDC, uint32_t uRate); -BOOL WINAPI wglGetGenlockSampleRateI3D (HDC hDC, uint32_t *uRate); -BOOL WINAPI wglGenlockSourceDelayI3D (HDC hDC, uint32_t uDelay); -BOOL WINAPI wglGetGenlockSourceDelayI3D (HDC hDC, uint32_t *uDelay); -BOOL WINAPI wglQueryGenlockMaxSourceDelayI3D (HDC hDC, uint32_t *uMaxLineDelay, uint32_t *uMaxPixelDelay); +BOOL WINAPI wglGenlockSourceI3D (HDC hDC, UINT uSource); +BOOL WINAPI wglGetGenlockSourceI3D (HDC hDC, UINT *uSource); +BOOL WINAPI wglGenlockSourceEdgeI3D (HDC hDC, UINT uEdge); +BOOL WINAPI wglGetGenlockSourceEdgeI3D (HDC hDC, UINT *uEdge); +BOOL WINAPI wglGenlockSampleRateI3D (HDC hDC, UINT uRate); +BOOL WINAPI wglGetGenlockSampleRateI3D (HDC hDC, UINT *uRate); +BOOL WINAPI wglGenlockSourceDelayI3D (HDC hDC, UINT uDelay); +BOOL WINAPI wglGetGenlockSourceDelayI3D (HDC hDC, UINT *uDelay); +BOOL WINAPI wglQueryGenlockMaxSourceDelayI3D (HDC hDC, UINT *uMaxLineDelay, UINT *uMaxPixelDelay); #endif #endif /* WGL_I3D_genlock */ @@ -575,15 +575,15 @@ BOOL WINAPI wglQueryGenlockMaxSourceDelayI3D (HDC hDC, uint32_t *uMaxLineDelay, #define WGL_I3D_image_buffer 1 #define WGL_IMAGE_BUFFER_MIN_ACCESS_I3D 0x00000001 #define WGL_IMAGE_BUFFER_LOCK_I3D 0x00000002 -typedef LPVOID (WINAPI * PFNWGLCREATEIMAGEBUFFERI3DPROC) (HDC hDC, DWORD dwSize, uint32_t uFlags); +typedef LPVOID (WINAPI * PFNWGLCREATEIMAGEBUFFERI3DPROC) (HDC hDC, DWORD dwSize, UINT uFlags); typedef BOOL (WINAPI * PFNWGLDESTROYIMAGEBUFFERI3DPROC) (HDC hDC, LPVOID pAddress); -typedef BOOL (WINAPI * PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, uint32_t count); -typedef BOOL (WINAPI * PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const LPVOID *pAddress, uint32_t count); +typedef BOOL (WINAPI * PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, UINT count); +typedef BOOL (WINAPI * PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const LPVOID *pAddress, UINT count); #ifdef WGL_WGLEXT_PROTOTYPES -LPVOID WINAPI wglCreateImageBufferI3D (HDC hDC, DWORD dwSize, uint32_t uFlags); +LPVOID WINAPI wglCreateImageBufferI3D (HDC hDC, DWORD dwSize, UINT uFlags); BOOL WINAPI wglDestroyImageBufferI3D (HDC hDC, LPVOID pAddress); -BOOL WINAPI wglAssociateImageBufferEventsI3D (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, uint32_t count); -BOOL WINAPI wglReleaseImageBufferEventsI3D (HDC hDC, const LPVOID *pAddress, uint32_t count); +BOOL WINAPI wglAssociateImageBufferEventsI3D (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, UINT count); +BOOL WINAPI wglReleaseImageBufferEventsI3D (HDC hDC, const LPVOID *pAddress, UINT count); #endif #endif /* WGL_I3D_image_buffer */ @@ -686,16 +686,16 @@ struct _GPU_DEVICE { typedef struct _GPU_DEVICE *PGPU_DEVICE; #define ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV 0x20D0 #define ERROR_MISSING_AFFINITY_MASK_NV 0x20D1 -typedef BOOL (WINAPI * PFNWGLENUMGPUSNVPROC) (uint32_t iGpuIndex, HGPUNV *phGpu); -typedef BOOL (WINAPI * PFNWGLENUMGPUDEVICESNVPROC) (HGPUNV hGpu, uint32_t iDeviceIndex, PGPU_DEVICE lpGpuDevice); +typedef BOOL (WINAPI * PFNWGLENUMGPUSNVPROC) (UINT iGpuIndex, HGPUNV *phGpu); +typedef BOOL (WINAPI * PFNWGLENUMGPUDEVICESNVPROC) (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice); typedef HDC (WINAPI * PFNWGLCREATEAFFINITYDCNVPROC) (const HGPUNV *phGpuList); -typedef BOOL (WINAPI * PFNWGLENUMGPUSFROMAFFINITYDCNVPROC) (HDC hAffinityDC, uint32_t iGpuIndex, HGPUNV *hGpu); +typedef BOOL (WINAPI * PFNWGLENUMGPUSFROMAFFINITYDCNVPROC) (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu); typedef BOOL (WINAPI * PFNWGLDELETEDCNVPROC) (HDC hdc); #ifdef WGL_WGLEXT_PROTOTYPES -BOOL WINAPI wglEnumGpusNV (uint32_t iGpuIndex, HGPUNV *phGpu); -BOOL WINAPI wglEnumGpuDevicesNV (HGPUNV hGpu, uint32_t iDeviceIndex, PGPU_DEVICE lpGpuDevice); +BOOL WINAPI wglEnumGpusNV (UINT iGpuIndex, HGPUNV *phGpu); +BOOL WINAPI wglEnumGpuDevicesNV (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice); HDC WINAPI wglCreateAffinityDCNV (const HGPUNV *phGpuList); -BOOL WINAPI wglEnumGpusFromAffinityDCNV (HDC hAffinityDC, uint32_t iGpuIndex, HGPUNV *hGpu); +BOOL WINAPI wglEnumGpusFromAffinityDCNV (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu); BOOL WINAPI wglDeleteDCNV (HDC hdc); #endif #endif /* WGL_NV_gpu_affinity */ @@ -769,14 +769,14 @@ void WINAPI wglFreeMemoryNV (void *pointer); DECLARE_HANDLE(HVIDEOINPUTDEVICENV); #define WGL_UNIQUE_ID_NV 0x20CE #define WGL_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF -typedef BOOL (WINAPI * PFNWGLBINDVIDEOCAPTUREDEVICENVPROC) (uint32_t uVideoSlot, HVIDEOINPUTDEVICENV hDevice); -typedef uint32_t (WINAPI * PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC) (HDC hDc, HVIDEOINPUTDEVICENV *phDeviceList); +typedef BOOL (WINAPI * PFNWGLBINDVIDEOCAPTUREDEVICENVPROC) (UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice); +typedef UINT (WINAPI * PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC) (HDC hDc, HVIDEOINPUTDEVICENV *phDeviceList); typedef BOOL (WINAPI * PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice); typedef BOOL (WINAPI * PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int *piValue); typedef BOOL (WINAPI * PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice); #ifdef WGL_WGLEXT_PROTOTYPES -BOOL WINAPI wglBindVideoCaptureDeviceNV (uint32_t uVideoSlot, HVIDEOINPUTDEVICENV hDevice); -uint32_t WINAPI wglEnumerateVideoCaptureDevicesNV (HDC hDc, HVIDEOINPUTDEVICENV *phDeviceList); +BOOL WINAPI wglBindVideoCaptureDeviceNV (UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice); +UINT WINAPI wglEnumerateVideoCaptureDevicesNV (HDC hDc, HVIDEOINPUTDEVICENV *phDeviceList); BOOL WINAPI wglLockVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice); BOOL WINAPI wglQueryVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int *piValue); BOOL WINAPI wglReleaseVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice); diff --git a/wadsrc/static/menudef.txt b/wadsrc/static/menudef.txt index 7f6a32da00..d00e6c2b91 100644 --- a/wadsrc/static/menudef.txt +++ b/wadsrc/static/menudef.txt @@ -2231,41 +2231,43 @@ OptionMenu "ReverbSettings" protected Title "Edit Reverb Environment" SafeCommand "Revert settings", "revertenvironment" StaticText " " - SliderReverbEditOption "Environment Size", 1, 100, 0.01, 3, 0 - SliderReverbEditOption "Environment Diffusion", 0, 10, 0.01, 3, 1 - SliderReverbEditOption "Room", -10000, 0, 1, 0, 2 - SliderReverbEditOption "Room HF", -10000, 0, 1, 0, 3 - SliderReverbEditOption "Room LF", -10000, 0, 1, 0, 4 - SliderReverbEditOption "Decay Time", 1, 200, 0.01, 3, 5 - SliderReverbEditOption "Decay HF Ratio", 1, 20, 0.01, 3, 6 - SliderReverbEditOption "Decay LF Ratio", 1, 20, 0.01, 3, 7 - SliderReverbEditOption "Reflections", -10000, 1000, 1, 0, 8 - SliderReverbEditOption "Reflections Delay", 0, 0.3, 1, 3, 9 - SliderReverbEditOption "Reflections Pan X", -2000, 2000, 1, 3, 10 - SliderReverbEditOption "Reflections Pan Y", -2000, 2000, 1, 3, 11 - SliderReverbEditOption "Reflections Pan Z", -2000, 2000, 1, 3, 12 - SliderReverbEditOption "Reverb", -10000, 2000, 1, 0, 13 - SliderReverbEditOption "Reverb Delay", 0, 0.1, 0.01, 3, 14 - SliderReverbEditOption "Reverb Pan X", -2000, 2000, 1, 3, 15 - SliderReverbEditOption "Reverb Pan Y", -2000, 2000, 1, 3, 16 - SliderReverbEditOption "Reverb Pan Z", -2000, 2000, 1, 3, 17 - SliderReverbEditOption "Echo Time", 0.075, 0.25, 0.005, 3, 18 - SliderReverbEditOption "Echo Depth", 0, 1, 0.01, 3, 19 - SliderReverbEditOption "Modulation Time", 0.04, 4, 0.01, 3, 20 - SliderReverbEditOption "Modulation Depth",0, 1, 0.01, 3, 21 - SliderReverbEditOption "Air Absorption HF", -100, 0, 0.01, 3, 22 - SliderReverbEditOption "HF Reference", 10000, 200000, 1, 3, 23 - SliderReverbEditOption "LF Reference",20, 10000, 0.1, 3, 24 - SliderReverbEditOption "Room Rolloff Factor",0, 10, 0.01, 3, 25 + SliderReverbEditOption "Environment Size", 1, 100, 0.01, 3, 1 + SliderReverbEditOption "Environment Diffusion", 0, 10, 0.01, 3, 2 + SliderReverbEditOption "Room", -10000, 0, 1, 0, 3 + SliderReverbEditOption "Room HF", -10000, 0, 1, 0, 4 + SliderReverbEditOption "Room LF", -10000, 0, 1, 0, 5 + SliderReverbEditOption "Decay Time", 1, 200, 0.01, 3, 6 + SliderReverbEditOption "Decay HF Ratio", 1, 20, 0.01, 3, 7 + SliderReverbEditOption "Decay LF Ratio", 1, 20, 0.01, 3, 8 + SliderReverbEditOption "Reflections", -10000, 1000, 1, 0, 9 + SliderReverbEditOption "Reflections Delay", 0, 0.3, 1, 3, 10 + SliderReverbEditOption "Reflections Pan X", -2000, 2000, 1, 3, 11 + SliderReverbEditOption "Reflections Pan Y", -2000, 2000, 1, 3, 12 + SliderReverbEditOption "Reflections Pan Z", -2000, 2000, 1, 3, 13 + SliderReverbEditOption "Reverb", -10000, 2000, 1, 0, 14 + SliderReverbEditOption "Reverb Delay", 0, 0.1, 0.01, 3, 15 + SliderReverbEditOption "Reverb Pan X", -2000, 2000, 1, 3, 16 + SliderReverbEditOption "Reverb Pan Y", -2000, 2000, 1, 3, 17 + SliderReverbEditOption "Reverb Pan Z", -2000, 2000, 1, 3, 18 + SliderReverbEditOption "Echo Time", 0.075, 0.25, 0.005, 3, 19 + SliderReverbEditOption "Echo Depth", 0, 1, 0.01, 3, 20 + SliderReverbEditOption "Modulation Time", 0.04, 4, 0.01, 3, 21 + SliderReverbEditOption "Modulation Depth",0, 1, 0.01, 3, 22 + SliderReverbEditOption "Air Absorption HF", -100, 0, 0.01, 3, 23 + SliderReverbEditOption "HF Reference", 10000, 200000, 1, 3, 24 + SliderReverbEditOption "LF Reference",20, 10000, 0.1, 3, 25 + SliderReverbEditOption "Room Rolloff Factor",0, 10, 0.01, 3, 26 + SliderReverbEditOption "Diffusion",0, 100, 0.01, 3, 27 + SliderReverbEditOption "Density",0, 100, 0.01, 3, 28 StaticText " " - ReverbOption "Reflections Scale", 26, OnOff - ReverbOption "Reflections Delay Scale", 27, OnOff - ReverbOption "Decay Time Scale", 28, OnOff - ReverbOption "Decay HF Limit", 29, OnOff - ReverbOption "Reverb Scale", 30, OnOff - ReverbOption "Reverb Delay Scale", 31, OnOff - ReverbOption "Echo Time Scale", 32, OnOff - ReverbOption "Modulation Time Scale", 33, OnOff + ReverbOption "Reflections Scale", 29, OnOff + ReverbOption "Reflections Delay Scale", 30, OnOff + ReverbOption "Decay Time Scale", 31, OnOff + ReverbOption "Decay HF Limit", 32, OnOff + ReverbOption "Reverb Scale", 33, OnOff + ReverbOption "Reverb Delay Scale", 34, OnOff + ReverbOption "Echo Time Scale", 35, OnOff + ReverbOption "Modulation Time Scale", 36, OnOff } OptionMenu "ReverbNew" protected