mirror of
https://github.com/lxsang/Diya-API.git
synced 2024-12-26 11:28:22 +01:00
76 lines
1.6 KiB
Smalltalk
76 lines
1.6 KiB
Smalltalk
Class {
|
|
#name : #Diya2DShader,
|
|
#superclass : #OpenGLSL,
|
|
#category : #'Diya-Shaders'
|
|
}
|
|
|
|
{ #category : #accessing }
|
|
Diya2DShader class >> fragmentShader [
|
|
^'
|
|
#ifdef GL_ES
|
|
precision highp float;
|
|
#endif
|
|
uniform vec2 u_resolution;
|
|
uniform vec2 u_mouse;
|
|
uniform float u_time;
|
|
// 2D uniforms
|
|
uniform int u_texture_type;
|
|
uniform vec4 u_color;
|
|
uniform vec4 u_bg_color;
|
|
uniform sampler2D u_texture;
|
|
varying vec2 texcoord;
|
|
void main(void) {
|
|
if(u_texture_type == 1)
|
|
{
|
|
// draw border
|
|
gl_FragColor = u_color;
|
|
return;
|
|
}
|
|
vec4 texcolor = u_bg_color;
|
|
// alpha
|
|
if(u_texture_type == 0x1906) {
|
|
texcolor = vec4(1, 1, 1, texture2D(u_texture, texcoord).a);
|
|
}
|
|
// rgba
|
|
else if (u_texture_type == 0x1908){
|
|
texcolor = texture2D(u_texture, texcoord);
|
|
}
|
|
vec4 pxcolor = texcolor * u_color;
|
|
if(pxcolor.a > 0.0)
|
|
{
|
|
gl_FragColor = pxcolor;
|
|
}
|
|
else
|
|
{
|
|
gl_FragColor = u_bg_color;
|
|
}
|
|
}'
|
|
]
|
|
|
|
{ #category : #accessing }
|
|
Diya2DShader class >> vertexShader [
|
|
^'
|
|
#ifdef GL_ES
|
|
precision mediump float;
|
|
#endif
|
|
uniform mat4 u_projection;
|
|
uniform mat3 u_transform;
|
|
varying vec2 texcoord;
|
|
void main()
|
|
{
|
|
vec3 coord_global = u_transform * vec3(gl_Vertex.xy, 1.0);
|
|
gl_Position = u_projection * vec4(coord_global.xy, 0, 1.0);
|
|
texcoord = gl_Vertex.zw;
|
|
}'
|
|
]
|
|
|
|
{ #category : #initialization }
|
|
Diya2DShader >> setUpUniforms [
|
|
self addUniform: #u_texture of: Uniform1i.
|
|
self addUniform: #u_texture_type of: Uniform1i.
|
|
self addUniform: #u_color of: Uniform4F.
|
|
self addUniform: #u_bg_color of: Uniform4F.
|
|
self addUniform: #u_border_color of: Uniform4F.
|
|
self addUniform: #u_border of: Uniform1F.
|
|
]
|