Draw{Texture,Box}: allow passing in a different draw color

This commit is contained in:
Colin McMillen 2023-07-06 23:14:55 -04:00
parent dd7c3f6615
commit cadc8e4779

View File

@ -50,9 +50,10 @@ void main(void) {
out vec4 outputColor; out vec4 outputColor;
in vec2 texCoord; in vec2 texCoord;
uniform sampler2D texture0; uniform sampler2D texture0;
uniform vec4 color;
void main() { void main() {
outputColor = texture(texture0, texCoord); outputColor = texture(texture0, texCoord) * color;
}"; }";
VertexShader = GL.CreateShader(ShaderType.VertexShader); VertexShader = GL.CreateShader(ShaderType.VertexShader);
@ -306,7 +307,7 @@ public class Game : GameWindow {
Rectangle box = new Rectangle(windowWidth - thumbnailWidth, i * thumbnailHeight, thumbnailWidth, thumbnailHeight); Rectangle box = new Rectangle(windowWidth - thumbnailWidth, i * thumbnailHeight, thumbnailWidth, thumbnailHeight);
DrawTexture(textures[i], box); DrawTexture(textures[i], box);
if (i == textureIndex) { if (i == textureIndex) {
DrawBox(box, 3); DrawBox(box, 3, new Color4(1f, 1f, 0f, 1f));
} }
} }
@ -314,17 +315,22 @@ public class Game : GameWindow {
} }
void DrawTexture(Texture texture, Rectangle box) { void DrawTexture(Texture texture, Rectangle box) {
DrawTexture(texture, box, new Color4(1f, 1f, 1f, 1f));
}
void DrawTexture(Texture texture, Rectangle box, Color4 color) {
GL.Uniform4(shader.GetUniformLocation("color"), color.R, color.G, color.B, color.A);
SetVertices(box.Left, box.Top, box.Width, box.Height); SetVertices(box.Left, box.Top, box.Width, box.Height);
GL.BufferData(BufferTarget.ArrayBuffer, vertices.Length * sizeof(float), vertices, BufferUsageHint.DynamicDraw); GL.BufferData(BufferTarget.ArrayBuffer, vertices.Length * sizeof(float), vertices, BufferUsageHint.DynamicDraw);
GL.BindTexture(TextureTarget.Texture2D, texture.Handle); GL.BindTexture(TextureTarget.Texture2D, texture.Handle);
GL.DrawElements(PrimitiveType.Triangles, indices.Length, DrawElementsType.UnsignedInt, 0); GL.DrawElements(PrimitiveType.Triangles, indices.Length, DrawElementsType.UnsignedInt, 0);
} }
void DrawBox(Rectangle box, int thickness) { void DrawBox(Rectangle box, int thickness, Color4 color) {
DrawTexture(TEXTURE_WHITE, new Rectangle(box.Left, box.Top, box.Width, thickness)); DrawTexture(TEXTURE_WHITE, new Rectangle(box.Left, box.Top, box.Width, thickness), color);
DrawTexture(TEXTURE_WHITE, new Rectangle(box.Left, box.Top, thickness, box.Height)); DrawTexture(TEXTURE_WHITE, new Rectangle(box.Left, box.Top, thickness, box.Height), color);
DrawTexture(TEXTURE_WHITE, new Rectangle(box.Left, box.Top + box.Height - thickness, box.Width, thickness)); DrawTexture(TEXTURE_WHITE, new Rectangle(box.Left, box.Top + box.Height - thickness, box.Width, thickness), color);
DrawTexture(TEXTURE_WHITE, new Rectangle(box.Left + box.Width - thickness, box.Top, thickness, box.Height)); DrawTexture(TEXTURE_WHITE, new Rectangle(box.Left + box.Width - thickness, box.Top, thickness, box.Height), color);
} }
protected override void OnResize(ResizeEventArgs e) { protected override void OnResize(ResizeEventArgs e) {