Mercurial > touhou
view pytouhou/ui/opengl/shaders/eosd.py @ 772:7492d384d122 default tip
Rust: Add a Glide renderer (2D only for now)
This is an experiment for a Rust renderer, iterating over the Python data using
pyo3. It requires --feature=glide to be passed to cargo build, doesn’t support
NPOT textures, text rendering, the background, or even msg faces, some of that
may come in a future changeset.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Mon, 05 Sep 2022 17:53:36 +0200 |
parents | aca9551ee8b4 |
children |
line wrap: on
line source
# -*- encoding: utf-8 -*- ## ## Copyright (C) 2012 Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published ## by the Free Software Foundation; version 3 only. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## from ..shader import Shader class GameShader(Shader): def __init__(self): Shader.__init__(self, ''' attribute vec3 in_position; attribute vec2 in_texcoord; attribute vec4 in_color; uniform mat4 mvp; varying vec2 texcoord; varying vec4 color; void main() { gl_Position = mvp * vec4(in_position, 1.0); texcoord = in_texcoord; color = in_color; } ''', ''' varying vec2 texcoord; varying vec4 color; uniform sampler2D color_map; void main() { gl_FragColor = texture2D(color_map, texcoord) * color; } ''') class BackgroundShader(Shader): def __init__(self): Shader.__init__(self, ''' attribute vec3 in_position; attribute vec2 in_texcoord; attribute vec4 in_color; uniform mat4 mvp; varying vec2 texcoord; varying vec4 color; void main() { gl_Position = mvp * vec4(in_position, 1.0); texcoord = in_texcoord; color = in_color; } ''', ''' varying vec2 texcoord; varying vec4 color; uniform sampler2D color_map; uniform float fog_scale; uniform float fog_end; uniform vec4 fog_color; void main() { vec4 temp_color = texture2D(color_map, texcoord) * color; float depth = gl_FragCoord.z / gl_FragCoord.w; float fog_density = clamp((fog_end - depth) * fog_scale, 0.0, 1.0); gl_FragColor = vec4(mix(fog_color, temp_color, fog_density).rgb, temp_color.a); } ''') class PassthroughShader(Shader): def __init__(self): Shader.__init__(self, ''' attribute vec2 in_position; attribute vec2 in_texcoord; uniform mat4 mvp; varying vec2 texcoord; void main() { gl_Position = mvp * vec4(in_position, 0.0, 1.0); texcoord = in_texcoord; } ''', ''' varying vec2 texcoord; uniform sampler2D color_map; void main() { gl_FragColor = texture2D(color_map, texcoord); } ''')