Mercurial > touhou
diff pytouhou/ui/shaders/eosd.py @ 370:74471afbac37
Add a programmable pipeline renderer, and a --fixed-pipeline switch to use the old one.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Fri, 27 Jul 2012 18:43:48 +0200 |
parents | |
children | 346614f788f1 |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/pytouhou/ui/shaders/eosd.py @@ -0,0 +1,78 @@ +# -*- 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 pytouhou.ui.shader import Shader + + +class GameShader(Shader): + def __init__(self): + Shader.__init__(self, [''' + #version 120 + + uniform mat4 mvp; + + void main() + { + gl_Position = mvp * gl_Vertex; + gl_FrontColor = gl_Color; + gl_TexCoord[0] = gl_MultiTexCoord0; + } + '''], [ ''' + #version 120 + + uniform sampler2D color_map; + + void main() + { + gl_FragColor = texture2D(color_map, gl_TexCoord[0].st) * gl_Color; + } + ''']) + + +class BackgroundShader(Shader): + def __init__(self): + Shader.__init__(self, [''' + #version 120 + + uniform mat4 model_view; + uniform mat4 projection; + + varying float fog_density; + + void main() + { + gl_Position = model_view * gl_Vertex; + gl_FrontColor = gl_Color; + gl_TexCoord[0] = gl_MultiTexCoord0; + + float fog_position = -gl_Position.z / gl_Position.w; + fog_density = clamp((gl_Fog.end - fog_position) * gl_Fog.scale, 0.0f, 1.0f); + + gl_Position = projection * gl_Position; + } + '''], [ ''' + #version 120 + + uniform sampler2D color_map; + + varying float fog_density; + + void main() + { + vec4 color = texture2D(color_map, gl_TexCoord[0].st) * gl_Color; + gl_FragColor = mix(gl_Fog.color, color, fog_density); + gl_FragColor.w = color.w; + } + '''])