mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-11 15:21:51 +00:00
Clear global state tracking variables when the OpenGL context is (re)created
This commit is contained in:
parent
f79c442df5
commit
960038bb81
5 changed files with 39 additions and 2 deletions
|
@ -80,19 +80,44 @@ void FRenderState::Reset()
|
|||
mDstBlend = GL_ONE_MINUS_SRC_ALPHA;
|
||||
mAlphaThreshold = 0.5f;
|
||||
mBlendEquation = GL_FUNC_ADD;
|
||||
mModelMatrixEnabled = false;
|
||||
mTextureMatrixEnabled = false;
|
||||
mObjectColor = 0xffffffff;
|
||||
mVertexBuffer = mCurrentVertexBuffer = NULL;
|
||||
mColormapState = CM_DEFAULT;
|
||||
mSoftLight = 0;
|
||||
mLightParms[0] = mLightParms[1] = mLightParms[2] = 0.0f;
|
||||
mLightParms[3] = -1.f;
|
||||
mSpecialEffect = EFF_NONE;
|
||||
mClipHeight = 0.f;
|
||||
mClipHeightDirection = 0.f;
|
||||
mShaderTimer = 0.0f;
|
||||
ClearClipSplit();
|
||||
|
||||
stSrcBlend = stDstBlend = -1;
|
||||
stBlendEquation = -1;
|
||||
stAlphaThreshold = -1.f;
|
||||
stAlphaTest = 0;
|
||||
mLastDepthClamp = true;
|
||||
mInterpolationFactor = 0.0f;
|
||||
|
||||
mColor.Set(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
mCameraPos.Set(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
mGlowTop.Set(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
mGlowBottom.Set(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
mGlowTopPlane.Set(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
mGlowBottomPlane.Set(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
mSplitTopPlane.Set(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
mSplitBottomPlane.Set(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
mClipLine.Set(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
mDynColor.Set(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
mClipSplit[0] = mClipSplit[1] = 0.0f;
|
||||
mEffectState = 0;
|
||||
activeShader = nullptr;
|
||||
mProjectionMatrix.loadIdentity();
|
||||
mViewMatrix.loadIdentity();
|
||||
mModelMatrix.loadIdentity();
|
||||
mTextureMatrix.loadIdentity();
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
|
|
|
@ -99,6 +99,11 @@ OpenGLFrameBuffer::OpenGLFrameBuffer(void *hMonitor, int width, int height, int
|
|||
// If wglSwapIntervalEXT is called after glBindFramebuffer in a frame the setting is not changed!
|
||||
SetVSync(vid_vsync);
|
||||
|
||||
// Make sure all global variables tracking OpenGL context state are reset..
|
||||
FHardwareTexture::InitGlobalState();
|
||||
FMaterial::InitGlobalState();
|
||||
gl_RenderState.Reset();
|
||||
|
||||
GLRenderer = new FGLRenderer(this);
|
||||
memcpy (SourcePalette, GPalette.BaseColors, sizeof(PalEntry)*256);
|
||||
UpdatePalette ();
|
||||
|
|
|
@ -48,11 +48,11 @@ private:
|
|||
public:
|
||||
|
||||
static unsigned int lastbound[MAX_TEXTURES];
|
||||
static int lastactivetexture;
|
||||
static int max_texturesize;
|
||||
|
||||
static int GetTexDimension(int value);
|
||||
|
||||
static void InitGlobalState() { for (int i = 0; i < MAX_TEXTURES; i++) lastbound[i] = 0; }
|
||||
|
||||
private:
|
||||
|
||||
short texwidth, texheight;
|
||||
|
|
|
@ -669,6 +669,12 @@ static FMaterial *last;
|
|||
static int lastclamp;
|
||||
static int lasttrans;
|
||||
|
||||
void FMaterial::InitGlobalState()
|
||||
{
|
||||
last = nullptr;
|
||||
lastclamp = 0;
|
||||
lasttrans = 0;
|
||||
}
|
||||
|
||||
void FMaterial::Bind(int clampmode, int translation)
|
||||
{
|
||||
|
|
|
@ -263,6 +263,7 @@ public:
|
|||
static FMaterial *ValidateTexture(FTextureID no, bool expand, bool trans);
|
||||
static void ClearLastTexture();
|
||||
|
||||
static void InitGlobalState();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue