summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crates/teleia/src/assets/shaders/flat/frag.glsl12
-rw-r--r--crates/teleia/src/assets/shaders/flat/vert.glsl4
-rw-r--r--crates/teleia/src/texture.rs22
3 files changed, 38 insertions, 0 deletions
diff --git a/crates/teleia/src/assets/shaders/flat/frag.glsl b/crates/teleia/src/assets/shaders/flat/frag.glsl
new file mode 100644
index 0000000..69fe2ec
--- /dev/null
+++ b/crates/teleia/src/assets/shaders/flat/frag.glsl
@@ -0,0 +1,12 @@
+uniform sampler2D texture_data;
+
+uniform float transparency;
+
+void main()
+{
+ float opacity = 1.0 - clamp(transparency, 0.0, 1.0);
+ vec2 tcfull = vec2(vertex_texcoord.x, 1.0 - vertex_texcoord.y);
+ vec4 texel = texture(texture_data, tcfull);
+ texel.a *= opacity;
+ frag_color = texel;
+}
diff --git a/crates/teleia/src/assets/shaders/flat/vert.glsl b/crates/teleia/src/assets/shaders/flat/vert.glsl
new file mode 100644
index 0000000..e324f7e
--- /dev/null
+++ b/crates/teleia/src/assets/shaders/flat/vert.glsl
@@ -0,0 +1,4 @@
+void main()
+{
+ default_main();
+} \ No newline at end of file
diff --git a/crates/teleia/src/texture.rs b/crates/teleia/src/texture.rs
index ab750c5..f993c08 100644
--- a/crates/teleia/src/texture.rs
+++ b/crates/teleia/src/texture.rs
@@ -56,6 +56,28 @@ impl Texture {
}
}
+ pub fn upload_rgba8(&self, ctx: &context::Context, width: i32, height: i32, data: &[u8]) {
+ unsafe {
+ ctx.gl.bind_texture(glow::TEXTURE_2D, Some(self.tex));
+ ctx.gl.tex_parameter_i32(glow::TEXTURE_2D, glow::TEXTURE_WRAP_S, glow::CLAMP_TO_EDGE as i32);
+ ctx.gl.tex_parameter_i32(glow::TEXTURE_2D, glow::TEXTURE_WRAP_T, glow::CLAMP_TO_EDGE as i32);
+ ctx.gl.tex_parameter_i32(glow::TEXTURE_2D, glow::TEXTURE_MIN_FILTER, glow::NEAREST as i32);
+ ctx.gl.tex_parameter_i32(glow::TEXTURE_2D, glow::TEXTURE_MAG_FILTER, glow::NEAREST as i32);
+ ctx.gl.tex_image_2d(
+ glow::TEXTURE_2D,
+ 0,
+ glow::RGBA as i32,
+ width,
+ height,
+ 0,
+ glow::RGBA,
+ glow::UNSIGNED_BYTE,
+ Some(data),
+ );
+ ctx.gl.generate_mipmap(glow::TEXTURE_2D);
+ }
+ }
+
pub fn set_anisotropic_filtering(&self, ctx: &context::Context) {
unsafe {
ctx.gl.bind_texture(glow::TEXTURE_2D, Some(self.tex));