diff --git a/ClassicalSharp/GraphicsAPI/Direct3D9Api.cs b/ClassicalSharp/GraphicsAPI/Direct3D9Api.cs
index b67532797..48ba7f174 100644
--- a/ClassicalSharp/GraphicsAPI/Direct3D9Api.cs
+++ b/ClassicalSharp/GraphicsAPI/Direct3D9Api.cs
@@ -247,8 +247,9 @@ namespace ClassicalSharp.GraphicsAPI {
lastClearCol = col.Pack();
}
- public override bool ColourWrite {
- set { device.SetRenderState(RenderState.ColorWriteEnable, value ? 0xF : 0x0); }
+ public override void ColourWriteMask(bool r, bool g, bool b, bool a) {
+ int flags = (r ? 1 : 0) | (g ? 2 : 0) | (b ? 4 : 0) | (a ? 8 : 0);
+ device.SetRenderState(RenderState.ColorWriteEnable, flags);
}
Compare depthTestFunc;
diff --git a/ClassicalSharp/GraphicsAPI/IGraphicsApi.cs b/ClassicalSharp/GraphicsAPI/IGraphicsApi.cs
index 26955a623..3523d2a14 100644
--- a/ClassicalSharp/GraphicsAPI/IGraphicsApi.cs
+++ b/ClassicalSharp/GraphicsAPI/IGraphicsApi.cs
@@ -144,7 +144,7 @@ namespace ClassicalSharp.GraphicsAPI {
public abstract void DepthTestFunc(CompareFunc func);
/// Whether writing to the colour buffer is enabled.
- public abstract bool ColourWrite { set; }
+ public abstract void ColourWriteMask(bool r, bool g, bool b, bool a);
/// Whether writing to the depth buffer is enabled.
public abstract bool DepthWrite { set; }
diff --git a/ClassicalSharp/GraphicsAPI/OpenGLApi.cs b/ClassicalSharp/GraphicsAPI/OpenGLApi.cs
index a76df97b3..b2b35b767 100644
--- a/ClassicalSharp/GraphicsAPI/OpenGLApi.cs
+++ b/ClassicalSharp/GraphicsAPI/OpenGLApi.cs
@@ -138,7 +138,9 @@ namespace ClassicalSharp.GraphicsAPI {
}
}
- public override bool ColourWrite { set { GL.ColorMask(value, value, value, value); } }
+ public override void ColourWriteMask(bool r, bool g, bool b, bool a) {
+ GL.ColorMask(r, g, b, a);
+ }
public override void DepthTestFunc(CompareFunc func) {
GL.DepthFunc(compareFuncs[(int)func]);
diff --git a/ClassicalSharp/Rendering/MapRenderer.cs b/ClassicalSharp/Rendering/MapRenderer.cs
index 84d6bbb84..506b9d31b 100644
--- a/ClassicalSharp/Rendering/MapRenderer.cs
+++ b/ClassicalSharp/Rendering/MapRenderer.cs
@@ -146,7 +146,7 @@ namespace ClassicalSharp.Renderers {
gfx.SetBatchFormat(VertexFormat.P3fT2fC4b);
gfx.Texturing = false;
gfx.AlphaBlending = false;
- gfx.ColourWrite = false;
+ gfx.ColourWriteMask(false, false, false, false);
for (int batch = 0; batch < _1DUsed; batch++) {
if (translucentPartsCount[batch] <= 0) continue;
if (pendingTranslucent[batch] || usedTranslucent[batch]) {
@@ -159,7 +159,7 @@ namespace ClassicalSharp.Renderers {
// Then actually draw the transluscent blocks
gfx.AlphaBlending = true;
gfx.Texturing = true;
- gfx.ColourWrite = true;
+ gfx.ColourWriteMask(true, true, true, true);
gfx.DepthWrite = false; // we already calculated depth values in depth pass
int[] texIds = game.TerrainAtlas1D.TexIds;
diff --git a/src/Client/D3D9Api.c b/src/Client/D3D9Api.c
index 158dac6d6..340794950 100644
--- a/src/Client/D3D9Api.c
+++ b/src/Client/D3D9Api.c
@@ -411,8 +411,8 @@ void Gfx_SetDepthTestFunc(Int32 compareFunc) {
D3D9_SetRenderState(d3d9_alphaTestFunc, D3DRS_ZFUNC, "D3D9_SetDepthTestFunc");
}
-void Gfx_SetColourWrite(bool enabled) {
- UInt32 channels = enabled ? 0xF : 0x0;
+void Gfx_SetColourWriteMask(bool r, bool g, bool b, bool a) {
+ UInt32 channels = (r ? 1u : 0u) | (g ? 2u : 0u) | (b ? 4u : 0u) | (a ? 8u : 0u);
D3D9_SetRenderState(channels, D3DRS_COLORWRITEENABLE, "D3D9_SetColourWrite");
}
diff --git a/src/Client/MapRenderer.c b/src/Client/MapRenderer.c
index 418faa18a..7c2b9d8dc 100644
--- a/src/Client/MapRenderer.c
+++ b/src/Client/MapRenderer.c
@@ -214,7 +214,7 @@ void MapRenderer_RenderTranslucent(Real64 deltaTime) {
Gfx_SetBatchFormat(VERTEX_FORMAT_P3FT2FC4B);
Gfx_SetTexturing(false);
Gfx_SetAlphaBlending(false);
- Gfx_SetColourWrite(false);
+ Gfx_SetColourWriteMask(false, false, false, false);
UInt32 batch;
for (batch = 0; batch < MapRenderer_1DUsedCount; batch++) {
@@ -229,7 +229,7 @@ void MapRenderer_RenderTranslucent(Real64 deltaTime) {
/* Then actually draw the transluscent blocks */
Gfx_SetAlphaBlending(true);
Gfx_SetTexturing(true);
- Gfx_SetColourWrite(true);
+ Gfx_SetColourWriteMask(true, true, true, true);
Gfx_SetDepthWrite(false); /* we already calculated depth values in depth pass */
Gfx_EnableMipmaps();
diff --git a/src/Client/OpenGLApi.c b/src/Client/OpenGLApi.c
index 39bc4a25e..5d6aec8c0 100644
--- a/src/Client/OpenGLApi.c
+++ b/src/Client/OpenGLApi.c
@@ -230,8 +230,8 @@ void Gfx_ClearColour(PackedCol col) {
gl_lastClearCol = col;
}
-void Gfx_SetColourWrite(bool enabled) {
- glColorMask(enabled, enabled, enabled, enabled);
+void Gfx_SetColourWriteMask(bool r, bool g, bool b, bool a) {
+ glColorMask(r, g, b, a);
}
void Gfx_SetDepthWrite(bool enabled) {