env_beam/env_laser: Add ::RendererRestarted to fix textures upon video memory refreshes

This commit is contained in:
Marco Cawthorne 2023-09-20 20:53:13 -07:00
parent a1500166be
commit f5308f6e08
Signed by: eukara
GPG key ID: CE2032F0A2882A22
3 changed files with 18 additions and 3 deletions

View file

@ -93,6 +93,7 @@ public:
#else #else
virtual float predraw(void); virtual float predraw(void);
virtual void ReceiveEntity(float,float); virtual void ReceiveEntity(float,float);
virtual void RendererRestarted(void);
#endif #endif
private: private:
@ -384,14 +385,20 @@ env_beam::ReceiveEntity(float flNew, float flChanged)
drawmask = MASK_ENGINE; drawmask = MASK_ENGINE;
setsize(this, [0,0,0], [0,0,0]); setsize(this, [0,0,0], [0,0,0]);
setorigin(this, m_vecStartPos); origin = m_vecStartPos;
/* the sprite has changed, we need to query a new texture */ /* the sprite has changed, we need to query a new texture */
if (flChanged & BEAM_CHANGED_SPRITE) { if (flChanged & BEAM_CHANGED_SPRITE) {
m_strTexture = spriteframe(modelnameforindex(m_iSpriteID), 0, 0.0f); RendererRestarted();
} }
} }
void
env_beam::RendererRestarted(void)
{
m_strTexture = spriteframe(modelnameforindex(m_iSpriteID), 0, 0.0f);
}
#define BEAM_COUNT 16 #define BEAM_COUNT 16
float float
pseudorand(float input) pseudorand(float input)

View file

@ -296,6 +296,7 @@ env_glow::predraw(void)
vector vecAngle = g_view.GetCameraAngle(); vector vecAngle = g_view.GetCameraAngle();
float flDist = vlen(vecPlayer - origin); float flDist = vlen(vecPlayer - origin);
/* HACK: GoldSrc does this */
if (GetRenderMode() == RM_GLOW) if (GetRenderMode() == RM_GLOW)
scale = 1.0f; scale = 1.0f;

View file

@ -78,6 +78,7 @@ public:
#else #else
virtual float predraw(void); virtual float predraw(void);
virtual void ReceiveEntity(float,float); virtual void ReceiveEntity(float,float);
virtual void RendererRestarted(void);
#endif #endif
private: private:
@ -285,10 +286,16 @@ env_laser::ReceiveEntity(float flNew, float flChanged)
/* the sprite has changed, we need to query a new texture */ /* the sprite has changed, we need to query a new texture */
if (flChanged & LASER_CHANGED_SPRITE) { if (flChanged & LASER_CHANGED_SPRITE) {
m_strTexture = spriteframe(modelnameforindex(m_iSpriteID), 0, 0.0f); RendererRestarted();
} }
} }
void
env_laser::RendererRestarted(void)
{
m_strTexture = spriteframe(modelnameforindex(m_iSpriteID), 0, 0.0f);
}
#define LASER_COUNT 16 #define LASER_COUNT 16
static float env_laser_jitlut[LASER_COUNT] = { static float env_laser_jitlut[LASER_COUNT] = {