diff options
| -rw-r--r-- | crates/teleia/src/assets/shaders/flat/frag.glsl | 12 | ||||
| -rw-r--r-- | crates/teleia/src/assets/shaders/flat/vert.glsl | 4 | ||||
| -rw-r--r-- | crates/teleia/src/texture.rs | 22 |
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)); |
