Skip to content
This repository was archived by the owner on Sep 16, 2019. It is now read-only.

Commit c6fa811

Browse files
committed
Decal rendering #5: Render decal colours
1 parent 08a0ba3 commit c6fa811

File tree

4 files changed

+63
-11
lines changed

4 files changed

+63
-11
lines changed

Sledge.Editor/Editor.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,8 @@ private void EditorLoad(object sender, EventArgs e)
136136
TextureProvider.Register(new SprProvider());
137137

138138
var spritesFolder = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Sprites");
139-
TexturePackage.Load(spritesFolder);
140-
TexturePackage.LoadTextureData(TexturePackage.GetLoadedItems().Select(x => x.Name));
139+
//TexturePackage.Load(spritesFolder);
140+
//TexturePackage.LoadTextureData(TexturePackage.GetLoadedItems().Select(x => x.Name));
141141

142142
Subscribe();
143143
}

Sledge.Editor/Rendering/RenderManager.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ void main()
6767
vertexLighting = (vec4(1,1,1,1) * light1intensity * incidence1) * 0.5
6868
+ (vec4(1,1,1,1) * light2intensity * incidence2) * 0.5
6969
+ (vec4(1,1,1,1) * ambient);
70+
vertexLighting.w = 1; // Reset the alpha channel or transparency gets messed up later
7071
texCoord = texture;
7172
vertexSelected = selected;
7273
}

Sledge.Graphics/Helpers/TextureHelper.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ private static int CreateAndBindTexture()
9191

9292
private static void SetTextureParameters()
9393
{
94+
GL.TexEnv(TextureEnvTarget.TextureEnv, TextureEnvParameter.TextureEnvMode, (int)TextureEnvMode.Modulate);
9495
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.LinearMipmapLinear);
9596
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);
9697
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)TextureWrapMode.Repeat);

Sledge.Providers/Texture/WadProvider.cs

Lines changed: 59 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Drawing.Imaging;
34
using System.Linq;
45
using System.IO;
56
using Sledge.Graphics;
@@ -11,6 +12,54 @@ namespace Sledge.Providers.Texture
1112
{
1213
public class WadProvider : TextureProvider
1314
{
15+
private static Bitmap PostProcessBitmap(string name, Bitmap bmp)
16+
{
17+
// Transparent textures are named like: {Name
18+
if (name.StartsWith("{"))
19+
{
20+
var palette = bmp.Palette;
21+
22+
// Two transparency types: "blue" transparency and "decal" transparency
23+
// Decal transparency is all greyscale and doesn't contain any of palette #255 colour
24+
var blueTransparency = false;
25+
for (var i = 0; i < palette.Entries.Length - 1; i++)
26+
{
27+
var color = palette.Entries[i];
28+
if (color.R != color.B || color.R != color.G || color.B != color.G)
29+
{
30+
blueTransparency = true;
31+
break;
32+
}
33+
}
34+
35+
if (blueTransparency)
36+
{
37+
// We found the last index, therefore it should be transparent
38+
palette.Entries[palette.Entries.Length - 1] = Color.Transparent;
39+
}
40+
else
41+
{
42+
// If we didn't find the last index, we have a decal
43+
var last = palette.Entries[palette.Entries.Length - 1];
44+
for (var i = 0; i < palette.Entries.Length - 1; i++)
45+
{
46+
palette.Entries[i] = Color.FromArgb(255 - palette.Entries[i].R, last);
47+
}
48+
}
49+
bmp.Palette = palette;
50+
51+
// Copy the bitmap to a new one with a proper alpha channel
52+
var clone = new Bitmap(bmp.Width, bmp.Height, PixelFormat.Format32bppArgb);
53+
using (var g = System.Drawing.Graphics.FromImage(clone))
54+
{
55+
g.DrawImage(bmp, new Rectangle(0, 0, clone.Width, clone.Height));
56+
}
57+
bmp.Dispose();
58+
return clone;
59+
}
60+
return bmp;
61+
}
62+
1463
public class WadStreamSource : TextureStreamSource
1564
{
1665
private readonly Dictionary<string, Tuple<HLLib.Package, HLLib.Folder>> _packages;
@@ -34,7 +83,8 @@ public override Bitmap GetImage(TextureItem item)
3483
{
3584
using (var stream = root.Item1.CreateStream(search))
3685
{
37-
return new Bitmap(new MemoryStream(stream.ReadAll()));
86+
var bmp = new Bitmap(new MemoryStream(stream.ReadAll()));
87+
return PostProcessBitmap(item.Name, bmp);
3888
}
3989
}
4090
return null;
@@ -72,10 +122,10 @@ protected override void LoadTexture(TexturePackage package, string name)
72122
var item = pack.GetRootFolder().GetItemByName(name + ".bmp", HLLib.FindType.Files);
73123
using (var stream = pack.CreateStream(item))
74124
{
75-
using (var bmp = new Bitmap(new MemoryStream(stream.ReadAll())))
76-
{
77-
TextureHelper.Create(name, bmp);
78-
}
125+
var bmp = new Bitmap(new MemoryStream(stream.ReadAll()));
126+
bmp = PostProcessBitmap(name, bmp);
127+
TextureHelper.Create(name, bmp);
128+
bmp.Dispose();
79129
}
80130
}
81131
}
@@ -99,10 +149,10 @@ protected override void LoadTextures(TexturePackage package, IEnumerable<string>
99149
if (!item.Exists) continue;
100150
using (var stream = pack.CreateStream(item))
101151
{
102-
using (var bmp = new Bitmap(new MemoryStream(stream.ReadAll())))
103-
{
104-
TextureHelper.Create(name, bmp);
105-
}
152+
var bmp = new Bitmap(new MemoryStream(stream.ReadAll()));
153+
bmp = PostProcessBitmap(name, bmp);
154+
TextureHelper.Create(name, bmp);
155+
bmp.Dispose();
106156
}
107157
}
108158
}

0 commit comments

Comments
 (0)