Try to resolve some of the things RennyC complained about.

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5938 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2021-07-01 21:05:45 +00:00
parent c452bccd94
commit 3409df483e
9 changed files with 74 additions and 39 deletions

View File

@ -4,7 +4,7 @@
static plugin_t *protocolclientplugin;
static void PlugMenu_Close(menu_t *m)
static void PlugMenu_Close(menu_t *m, qboolean forced)
{
Z_Free(m);
}
@ -48,7 +48,7 @@ static qboolean QDECL Plug_SetMenuFocus (qboolean wantkeyfocus, const char *curs
}
}
else if (m)
Menu_Unlink(m);
Menu_Unlink(m, false);
if (wantkeyfocus)
{
@ -1058,7 +1058,7 @@ static void Plug_Client_Close(plugin_t *plug)
Plug_FreePlugImages(plug);
if (m)
Menu_Unlink(m);
Menu_Unlink(m, true);
if (protocolclientplugin == plug)
{
protocolclientplugin = NULL;

View File

@ -41,7 +41,7 @@ void Q3_SetKeyCatcher(int newcatcher)
if (newcatcher&2)
Menu_Push(&uimenu, false);
else
Menu_Unlink(&uimenu);
Menu_Unlink(&uimenu, false);
}
}
int Q3_GetKeyCatcher(void)
@ -1739,7 +1739,7 @@ static qintptr_t EXPORT_FN UI_SystemCallsNative(qintptr_t arg, ...)
return UI_SystemCalls(NULL, ~(quintptr_t)0, arg, args);
}
static void UI_Release(menu_t *m)
static void UI_Release(menu_t *m, qboolean forced)
{
keycatcher &= ~2;
}
@ -1800,7 +1800,7 @@ static qboolean UI_MousePosition(struct menu_s *m, qboolean abs, unsigned int de
void UI_Reset(void)
{
Menu_Unlink(&uimenu);
Menu_Unlink(&uimenu, true);
if (qrenderer == QR_NONE) //no renderer loaded
UI_Stop();
@ -1810,7 +1810,7 @@ void UI_Reset(void)
void UI_Stop (void)
{
Menu_Unlink(&uimenu);
Menu_Unlink(&uimenu, true);
if (uivm)
{

View File

@ -1776,7 +1776,7 @@ static qboolean M_KeyEvent(menu_t *m, qboolean isdown, unsigned int devid, int k
}
}
void M_Release (menu_t *m)
void M_Release (menu_t *m, qboolean forced)
{
emenu_t *menu = (emenu_t*)m;
menuoption_t *op, *oop;
@ -1836,7 +1836,7 @@ emenu_t *M_CreateMenu (int extrasize)
}
void M_RemoveMenu (emenu_t *menu)
{
Menu_Unlink((menu_t*)menu);
Menu_Unlink((menu_t*)menu, false);
}
void M_ReloadMenus(void)
@ -1851,24 +1851,29 @@ void M_ReloadMenus(void)
}
void M_RemoveAllMenus (qboolean leaveprompts)
{
menu_t **link, *m;
{ //certain menuqc mods are evil and force themselves open again each time we ask them to close, which means we get into an infinite loop trying to ask them to kindly fuck off.
//so only kill the current ones.
menu_t **list, *m;
int count = 0;
for (m = topmenu; m; m = m->prev)
count++;
list = BZ_Malloc(count * sizeof(list));
for (link = &topmenu; *link; )
for (count = 0, m = topmenu; m; m = m->prev)
{
m = *link;
if (m->persist && leaveprompts)
link = &m->prev;
else
Menu_Unlink(m);
continue;
list[count++] = m;
}
while(count --> 0)
Menu_Unlink(list[count], true);
BZ_Free(list);
}
void M_MenuPop_f (void)
{
if (!topmenu)
return;
Menu_Unlink(topmenu);
Menu_Unlink(topmenu, false);
}
static menuoption_t *M_NextItem(emenu_t *m, menuoption_t *old)

View File

@ -2538,7 +2538,7 @@ static void MediaView_DrawFilm(menu_t *m)
}
}
else if (!videoshader)
Menu_Unlink(m);
Menu_Unlink(m, true);
}
static qboolean MediaView_KeyEvent(menu_t *m, qboolean isdown, unsigned int devid, int key, int unicode)
{
@ -2560,7 +2560,7 @@ static qboolean MediaView_MouseMove(menu_t *m, qboolean isabs, unsigned int devi
cin->cursormove(cin, x, y);
return true;
}
static void MediaView_StopFilm(menu_t *m)
static void MediaView_StopFilm(menu_t *m, qboolean forced)
{ //display is going away for some reason. might as well kill them all
Media_StopFilm(true);
}
@ -2612,7 +2612,7 @@ static qboolean Media_BeginNextFilm(void)
Menu_Push(&videomenu, false);
}
else
Menu_Unlink(&videomenu);
Menu_Unlink(&videomenu, true);
return !!videoshader;
}
qboolean Media_StopFilm(qboolean all)

View File

@ -75,7 +75,7 @@ menu_t *Menu_FindContext(void *ctx)
}
return NULL;
}
void Menu_Unlink(menu_t *menu)
void Menu_Unlink(menu_t *menu, qboolean forced)
{
menu_t **link;
for (link = &promptmenu; *link; link = &(*link)->prev)
@ -84,7 +84,7 @@ void Menu_Unlink(menu_t *menu)
{
*link = menu->prev;
if (menu->release)
menu->release(menu);
menu->release(menu, forced);
Menu_UpdateFocus();
return;
@ -96,7 +96,7 @@ void Menu_Unlink(menu_t *menu)
{
*link = menu->prev;
if (menu->release)
menu->release(menu);
menu->release(menu, forced);
Menu_UpdateFocus();
return;
@ -150,7 +150,7 @@ void Menu_PopAll(void)
}
//third link to actually unlink them safely without unlinking multiple times etc (grr menuqc mods re-grabbing focus when closing)
for (i = 0; i < count; i++)
Menu_Unlink(menus[i]);
Menu_Unlink(menus[i], true);
}
void Menu_Draw(void)
@ -511,7 +511,7 @@ static qboolean Prompt_MenuKeyEvent(struct menu_s *gm, qboolean isdown, unsigned
return false; // no idea what that is
m->callback = NULL; //so the remove handler can't fire.
Menu_Unlink(&m->m);
Menu_Unlink(&m->m, false);
if (callback)
callback(ctx, action);
@ -580,7 +580,7 @@ static void Prompt_Draw(struct menu_s *g)
}
}
}
static void Prompt_Release(struct menu_s *gm)
static void Prompt_Release(struct menu_s *gm, qboolean forced)
{
promptmenu_t *m = (promptmenu_t*)gm;
void (*callback)(void *, promptbutton_t) = m->callback;

View File

@ -102,7 +102,7 @@ typedef struct menu_s {
void *ctx; //for finding a specific menu
void (*videoreset) (struct menu_s *); //called after a video mode switch / shader reload.
void (*release) (struct menu_s *); //
void (*release) (struct menu_s *, qboolean forced); //forced says 'dont load any other menus'.
qboolean (*keyevent)(struct menu_s *, qboolean isdown, unsigned int devid, int key, int unicode); //true if key was handled
qboolean (*mousemove)(struct menu_s *, qboolean abs, unsigned int devid, float x, float y);
qboolean (*joyaxis) (struct menu_s *, unsigned int devid, int axis, float val);
@ -117,9 +117,10 @@ void Menu_KeyEvent(qboolean down, int qdeviceid, int key, int unicode);
void Menu_Draw(void);
void Prompts_Draw(void);
void Menu_PopAll(void); //attempts to pop all menus (this is for map starts, some might linger)
void Menu_Unlink(menu_t *menu);
void Menu_Unlink(menu_t *menu, qboolean forced);
void Menu_Push(menu_t *menu, qboolean prompt);
menu_t *Menu_FindContext(void *ctx);
qboolean Menu_IsLinked(menu_t *menu);
typedef enum
{

View File

@ -7191,8 +7191,8 @@ static void PScript_DrawParticleTypes (void)
RQ_AddDistReorder(pdraw, p, type->slooks, p->org);
// make sure emitter runs at least once
if (type->emit >= 0 && type->emitstart <= 0)
P_RunParticleEffectType(p->org, p->vel, 1, type->emit);
if (type->emit >= 0 && type->emitstart <= 0 && pframetime)
P_RunParticleEffectType(p->org, p->vel, pframetime, type->emit);
// make sure stain effect runs
if (type->stainonimpact && r_bloodstains.value)

View File

@ -1622,7 +1622,7 @@ void QCBUILTIN PF_cl_setkeydest (pubprogfuncs_t *prinst, struct globalvars_s *pr
// key_game
if (Key_Dest_Has(kdm_menu))
{
Menu_Unlink(&menuqc);
Menu_Unlink(&menuqc, false);
Key_Dest_Remove(kdm_menu);
// Key_Dest_Remove(kdm_message);
// if (cls.state == ca_disconnected)
@ -2881,12 +2881,6 @@ static qboolean MP_KeyEvent(menu_t *menu, qboolean isdown, unsigned int devid, i
R2D_Flush();
return result;
}
static void MP_TryRelease(menu_t *m)
{
if (inmenuprogs)
return; //if the qc asked for it, the qc probably already knows about it. don't recurse.
MP_Toggle(0);
}
void MP_Shutdown (void)
{
@ -2895,7 +2889,7 @@ void MP_Shutdown (void)
return;
menuqc.release = NULL; //don't notify
Menu_Unlink(&menuqc);
Menu_Unlink(&menuqc, false);
/*
{
char *buffer;
@ -2926,6 +2920,20 @@ void MP_Shutdown (void)
key_dest_absolutemouse &= ~kdm_menu;
}
static void MP_TryRelease(menu_t *m, qboolean force)
{
if (inmenuprogs)
return; //if the qc asked for it, the qc probably already knows about it. don't recurse.
MP_Toggle(0);
if (force && Menu_IsLinked(m))
{
Con_Printf(CON_ERROR"Menuqc retook key grabs when ordered to yield. Killing.\n");
MP_Shutdown();
M_Init_Internal();
}
}
void *VARGS PR_CB_Malloc(int size); //these functions should be tracked by the library reliably, so there should be no need to track them ourselves.
void VARGS PR_CB_Free(void *mem);

View File

@ -5911,6 +5911,27 @@ int GLBE_FBO_Update(fbostate_t *state, unsigned int enables, texid_t *destcol, i
Con_Printf("glCheckFramebufferStatus returned %#x\n", i);
break;
}
Con_Printf("FBO Enables: %x %i*%i\n", enables, width, height);
for (i = 0; i < mrt; i++)
{
if (destcol[i])
{
Con_Printf("^[\\imgptr\\%#"PRIxSIZE"^]", (quintptr_t)destcol[i]);
Con_Printf("Colour%i: \"%s\" %x %i*%i*%i%s %s\n", i, destcol[i]->ident, destcol[i]->flags, destcol[i]->width, destcol[i]->height, destcol[i]->depth, (destcol[i]->status != TEX_LOADED)?" NOT LOADED":"", Image_FormatName(destcol[i]->format));
}
else
Con_Printf("Colour%i: <NO IMAGE>\n", i);
}
if (enables & FBO_TEX_DEPTH && destdepth)
{
Con_Printf("^[\\imgptr\\%#"PRIxSIZE"^]", (quintptr_t)destdepth);
Con_Printf("Depth: \"%s\" %x %i*%i*%i%s %s\n", destdepth->ident, destdepth->flags, destdepth->width, destdepth->height, destdepth->depth, (destdepth->status != TEX_LOADED)?" NOT LOADED":"", Image_FormatName(destdepth->format));
}
else if (enables & FBO_TEX_DEPTH)
Con_Printf("Depth: <NO IMAGE>\n");
else if (enables & FBO_RB_DEPTH)
Con_Printf("Depth: <RenderBuffer>\n");
}
return old;
}