Don't set fog when context is lost, should fix crashing on some AMD gpus.

This commit is contained in:
UnknownShadow200 2018-05-09 22:17:44 +10:00
parent fbbea98edf
commit 108c69fc92
5 changed files with 24 additions and 16 deletions

View File

@ -87,15 +87,15 @@ namespace ClassicalSharp.Gui.Screens {
int index = 0;
idAtlas.tex.Y = (short)(yOffset + (tileSize - idAtlas.tex.Height));
for (int y = 1; y <= TerrainAtlas2D.RowsCount; y++) {
for (int y = 0; y < TerrainAtlas2D.RowsCount; y++) {
for (int x = 0; x < TerrainAtlas2D.TilesPerRow; x++) {
idAtlas.curX = xOffset + tileSize * x + textOffset;
int id = x + ((y - 1) * TerrainAtlas2D.TilesPerRow);
int id = x + y * TerrainAtlas2D.TilesPerRow;
idAtlas.AddInt(id, vertices, ref index);
}
idAtlas.tex.Y += (short)tileSize;
if ((y % 4) != 0) continue;
if ((y % 4) != 3) continue;
game.Graphics.BindTexture(idAtlas.tex.ID);
game.Graphics.UpdateDynamicVb_IndexedTris(dynamicVb, vertices, index);
index = 0;

View File

@ -112,34 +112,41 @@ namespace ClassicalSharp.GraphicsAPI {
bool fogEnable;
public override bool Fog {
get { return fogEnable; }
set { if (value == fogEnable) return;
fogEnable = value; device.SetRenderState(RenderState.FogEnable, value);
set {
if (value == fogEnable) return;
fogEnable = value;
if (LostContext) return;
device.SetRenderState(RenderState.FogEnable, value);
}
}
int fogCol, lastFogCol = FastColour.BlackPacked;
public override void SetFogColour(FastColour col) {
fogCol = col.Pack();
if (fogCol == lastFogCol) return;
device.SetRenderState(RenderState.FogColor, fogCol);
if (fogCol == lastFogCol) return;
lastFogCol = fogCol;
if (LostContext) return;
device.SetRenderState(RenderState.FogColor, fogCol);
}
float fogDensity = -1, fogStart = -1, fogEnd = -1;
public override void SetFogDensity(float value) {
if (value == fogDensity) return;
if (value == fogDensity) return;
fogDensity = value;
if (LostContext) return;
device.SetRenderState(RenderState.FogDensity, value);
}
public override void SetFogStart(float value) {
fogStart = value;
if (LostContext) return;
device.SetRenderState(RenderState.FogStart, value);
}
public override void SetFogEnd(float value) {
if (value == fogEnd) return;
fogEnd = value;
if (LostContext) return;
device.SetRenderState(RenderState.FogEnd, value);
}
@ -149,6 +156,7 @@ namespace ClassicalSharp.GraphicsAPI {
FogMode newMode = modes[(int)fogMode];
if (newMode == fogTableMode) return;
fogTableMode = newMode;
if (LostContext) return;
device.SetRenderState(RenderState.FogTableMode, (int)fogTableMode);
}

View File

@ -289,24 +289,24 @@ bool d3d9_fogEnable = false;
bool Gfx_GetFog(void) { return d3d9_fogEnable; }
void Gfx_SetFog(bool enabled) {
if (d3d9_fogEnable == enabled) return;
d3d9_fogEnable = enabled;
if (Gfx_LostContext) return;
D3D9_SetRenderState(D3DRS_FOGENABLE, (UInt32)enabled, "D3D9_SetFog");
}
UInt32 d3d9_fogCol = 0xFF000000; /* black */
void Gfx_SetFogColour(PackedCol col) {
if (col.Packed == d3d9_fogCol) return;
d3d9_fogCol = col.Packed;
if (Gfx_LostContext) return;
D3D9_SetRenderState(D3DRS_FOGCOLOR, col.Packed, "D3D9_SetFogColour");
}
Real32 d3d9_fogDensity = -1.0f;
void Gfx_SetFogDensity(Real32 value) {
if (value == d3d9_fogDensity) return;
d3d9_fogDensity = value;
if (Gfx_LostContext) return;
IntAndFloat raw; raw.fVal = value;
D3D9_SetRenderState(D3DRS_FOGDENSITY, raw.uVal, "D3D9_SetFogDensity");
}
@ -314,6 +314,7 @@ void Gfx_SetFogDensity(Real32 value) {
Real32 d3d9_fogStart = -1.0f;
void Gfx_SetFogStart(Real32 value) {
d3d9_fogStart = value;
if (Gfx_LostContext) return;
IntAndFloat raw; raw.fVal = value;
D3D9_SetRenderState(D3DRS_FOGSTART, raw.uVal, "D3D9_SetFogStart");
}
@ -321,8 +322,8 @@ void Gfx_SetFogStart(Real32 value) {
Real32 d3d9_fogEnd = -1.0f;
void Gfx_SetFogEnd(Real32 value) {
if (value == d3d9_fogEnd) return;
d3d9_fogEnd = value;
if (Gfx_LostContext) return;
IntAndFloat raw; raw.fVal = value;
D3D9_SetRenderState(D3DRS_FOGEND, raw.uVal, "D3D9_SetFogEnd");
}
@ -331,8 +332,8 @@ D3DFOGMODE d3d9_fogTableMode = D3DFOG_NONE;
void Gfx_SetFogMode(Int32 fogMode) {
D3DFOGMODE mode = d3d9_modes[fogMode];
if (mode == d3d9_fogTableMode) return;
d3d9_fogTableMode = mode;
if (Gfx_LostContext) return;
D3D9_SetRenderState(D3DRS_FOGTABLEMODE, mode, "D3D9_SetFogMode");
}

View File

@ -1,6 +1,5 @@
#ifndef CC_GAME_H
#define CC_GAME_H
#include "String.h"
#include "Picking.h"
#include "Options.h"
/* Represents the game.

View File

@ -58,7 +58,7 @@ typedef struct FontDesc_ { void* Handle; UInt16 Size, Style; } FontDesc;
#define Int32_MaxValue ((Int32)2147483647L)
#define UInt32_MaxValue ((UInt32)4294967295UL)
#define USE_DX false
#define USE_DX true
#if USE_DX
typedef void* GfxResourceID;