From 4388d97db6f2440037f23b0fac547ddd411f81c2 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sat, 20 May 2017 20:56:43 +0200 Subject: [PATCH 1/3] - PlayerPawn.PlayerThink needs to consider the possibility of the player getting unmorphed and must call any function after a potential unmorph through 'player.mo' instead of 'self'. --- wadsrc/static/zscript/shared/player.txt | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/wadsrc/static/zscript/shared/player.txt b/wadsrc/static/zscript/shared/player.txt index 1223b6bf8..98b504985 100644 --- a/wadsrc/static/zscript/shared/player.txt +++ b/wadsrc/static/zscript/shared/player.txt @@ -489,7 +489,7 @@ class PlayerPawn : Actor native Pitch = 0.; } } - CalcHeight (); + player.mo.CalcHeight (); if (player.attacker && player.attacker != self) { // Watch killer @@ -1243,9 +1243,9 @@ class PlayerPawn : Actor native CheckEnvironment(); CheckUse(); CheckUndoMorph(); - // Cycle psprites - TickPSprites(); - + // Cycle psprites. + // Note that after this point the PlayerPawn may have changed due to getting unmorphed so 'self' is no longer safe to use. + player.mo.TickPSprites(); // Other Counters if (player.damagecount) player.damagecount--; if (player.bonuscount) player.bonuscount--; @@ -1254,12 +1254,11 @@ class PlayerPawn : Actor native { player.hazardcount--; if (!(level.time % player.hazardinterval) && player.hazardcount > 16*TICRATE) - DamageMobj (NULL, NULL, 5, player.hazardtype); + player.mo.DamageMobj (NULL, NULL, 5, player.hazardtype); } - - CheckPoison(); - CheckDegeneration(); - CheckAirSupply(); + player.mo.CheckPoison(); + player.mo.CheckDegeneration(); + player.mo.CheckAirSupply(); } } From 371a8755c2bc9196a6e73dc5e4174fdbae8c5056 Mon Sep 17 00:00:00 2001 From: svdijk Date: Sat, 20 May 2017 21:50:52 +0200 Subject: [PATCH 2/3] vid_glswfb: Prevent defunct windows. --- src/posix/sdl/sdlglvideo.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/posix/sdl/sdlglvideo.cpp b/src/posix/sdl/sdlglvideo.cpp index e2318a1fb..6401e52cf 100644 --- a/src/posix/sdl/sdlglvideo.cpp +++ b/src/posix/sdl/sdlglvideo.cpp @@ -255,7 +255,10 @@ DFrameBuffer *SDLGLVideo::CreateFrameBuffer (int width, int height, bool bgra, b { fb = (SDLBaseFB*)CreateGLSWFrameBuffer(width, height, bgra, fullscreen); if (!fb->IsValid()) + { + delete fb; fb = new SDLFB(width, height, bgra, fullscreen, nullptr); + } } retry = 0; From aff9205057368492d799d73f3ad47be065d5fcc7 Mon Sep 17 00:00:00 2001 From: Magnus Norddahl Date: Sun, 21 May 2017 11:01:37 +0200 Subject: [PATCH 3/3] - Fix mipmap filtering bug when using nearest filter --- src/swrenderer/drawers/r_draw_span32.h | 9 +++++---- src/swrenderer/drawers/r_draw_span32_sse2.h | 9 +++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/swrenderer/drawers/r_draw_span32.h b/src/swrenderer/drawers/r_draw_span32.h index dcd43312f..a48ec844b 100644 --- a/src/swrenderer/drawers/r_draw_span32.h +++ b/src/swrenderer/drawers/r_draw_span32.h @@ -86,9 +86,6 @@ namespace swrenderer texdata.ystep = args.TextureVStep(); texdata.xfrac = args.TextureUPos(); texdata.yfrac = args.TextureVPos(); - texdata.yshift = 32 - texdata.ybits; - texdata.xshift = texdata.yshift - texdata.xbits; - texdata.xmask = ((1 << texdata.xbits) - 1) << texdata.ybits; texdata.source = (const uint32_t*)args.TexturePixels(); @@ -111,7 +108,11 @@ namespace swrenderer } } - bool is_nearest_filter = !((magnifying && r_magfilter) || (!magnifying && r_minfilter)); + texdata.yshift = 32 - texdata.ybits; + texdata.xshift = texdata.yshift - texdata.xbits; + texdata.xmask = ((1 << texdata.xbits) - 1) << texdata.ybits; + + bool is_nearest_filter = (magnifying && !r_magfilter) || (!magnifying && !r_minfilter); bool is_64x64 = texdata.xbits == 6 && texdata.ybits == 6; auto shade_constants = args.ColormapConstants(); diff --git a/src/swrenderer/drawers/r_draw_span32_sse2.h b/src/swrenderer/drawers/r_draw_span32_sse2.h index 68d68ec82..8a4e28608 100644 --- a/src/swrenderer/drawers/r_draw_span32_sse2.h +++ b/src/swrenderer/drawers/r_draw_span32_sse2.h @@ -86,9 +86,6 @@ namespace swrenderer texdata.ystep = args.TextureVStep(); texdata.xfrac = args.TextureUPos(); texdata.yfrac = args.TextureVPos(); - texdata.yshift = 32 - texdata.ybits; - texdata.xshift = texdata.yshift - texdata.xbits; - texdata.xmask = ((1 << texdata.xbits) - 1) << texdata.ybits; texdata.source = (const uint32_t*)args.TexturePixels(); @@ -111,7 +108,11 @@ namespace swrenderer } } - bool is_nearest_filter = !((magnifying && r_magfilter) || (!magnifying && r_minfilter)); + texdata.yshift = 32 - texdata.ybits; + texdata.xshift = texdata.yshift - texdata.xbits; + texdata.xmask = ((1 << texdata.xbits) - 1) << texdata.ybits; + + bool is_nearest_filter = (magnifying && !r_magfilter) || (!magnifying && !r_minfilter); bool is_64x64 = texdata.xbits == 6 && texdata.ybits == 6; auto shade_constants = args.ColormapConstants();