summaryrefslogtreecommitdiffstats
path: root/src/Runtime/res/effectlib/effect.glsllib
blob: 802a84608595047290e1835177cc78b968cff435 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
/****************************************************************************
**
** Copyright (C) 2014 NVIDIA Corporation.
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt 3D Studio.
**
** $QT_BEGIN_LICENSE:GPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 or (at your option) any later version
** approved by the KDE Free Qt Foundation. The licenses are as published by
** the Free Software Foundation and appearing in the file LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/

#ifndef EFFECT_GLSLLIB
#define EFFECT_GLSLLIB 1

//Defines used in the effect files.

vec4 GetTextureValue( sampler2D sampler, vec2 inUVCoords, float inTextureAlphaInfo )
{
    vec4 c = texture2D(sampler, inUVCoords);
    c.rgb = mix( c.rgb*c.a, c.rgb, inTextureAlphaInfo );
    return c;
}

vec4 GetTextureValuePreMult( sampler2D sampler, vec2 inUVCoords )
{
    return texture2D(sampler, inUVCoords);
}

#define SNAPPER_TITLE( title )

#define SNAPPER_PARAMETER(propName, datatype, rangeMin, rangeMax, propNiceName, defaultValue) datatype propName

#define SNAPPER_ANGLE( propName, propNiceName, defaultValueAsFloat ) uniform float propName;
#define SNAPPER_CHECKBOX(propName, propNiceName, defaultValue) uniform float propName;

#define SNAPPER_ENUM_BEGIN(propName, propNiceName, defaultValueAsIndex) uniform int propName;
#define SNAPPER_ENUM_VALUE(valueNiceName)
#define SNAPPER_ENUM_END()

#define SNAPPER_POINT2(propName, propNiceName, defaultValue) uniform vec2 propName;
#define SNAPPER_COLOR(propName, propNiceName, defaultValue) uniform vec3 propName;


#define TEXTURE_LOOKUP_FUNC(name)         \


//texType = one of: ubyte, ushort, float
//texFormat = one of: rgb, rgba, lum, lum_alpha
//texFilter = one of: nearest, linear
//texWrap = one of: repeat, clamp
#define SNAPPER_EXTERNAL_PARAMETER(propName, datatype, rangeMin, rangeMax, propNiceName, defaultValue)
#define SNAPPER_EXTERNAL_ANGLE(propName, propNiceName, defaultValueAsFloat)

// Provide the ability to render outside a effect boundary.
// Total size = The original effect size * Overrendering value
// Overrendering value needs to be >= 1.0
#define SNAPPER_OVERRENDERING(value) const float OverrenderingValue = value;



#ifdef VERTEX_SHADER
// Attributes and uniforms used throughout the system.
attribute vec3 attr_pos;
attribute vec2 attr_uv;
#endif

uniform mat4 ModelViewProjectionMatrix;
//x holds the texture width, y holds the texture height
//z holds 0,1 value if it should be premultiplied
uniform vec4 Texture0Info;
uniform vec2 DestSize; //size of the destination in pixels including overrendering if specified.
uniform sampler2D Texture0;
varying vec2 TexCoord;
uniform vec2 FragColorAlphaSettings; //x > 0.0 premultiply result, y is an alpha multiplier (opacity setting)

vec4 Transform( mat4 ModelViewProjectionMatrix, vec2 inDestSize, vec4 inVertex )
{
    vec4 temp = ModelViewProjectionMatrix * vec4( inDestSize.x * .5 * inVertex.x, inDestSize.y * .5  * inVertex.y, inVertex.z, inVertex.w );
    return temp;
}
////////////////////////////////////////////////////////////
// provide the texture lookup functions for the default
// texture (Texture0).
vec4 texture2D_0(vec2 uv)
{
    return GetTextureValue( Texture0, uv, Texture0Info.z );
}

#ifdef FRAGMENT_SHADER
////////////////////////////////////////////////////////////
// the functions to set the final frag result.
void colorOutput(vec4 c)
{
    c *= FragColorAlphaSettings.x;
    gl_FragColor = clamp(c, 0.0, c.a );
}

#endif



////////////////////////////////////////////////////////////
// define the main functions.

#ifdef VERTEX_SHADER
#ifndef NO_VERT_MAIN

void vert();
void main()
{
    gl_Position = Transform( ModelViewProjectionMatrix, DestSize, vec4(attr_pos, 1.0) );
    TexCoord = attr_uv;
    vert();
}

#endif
#endif

#ifdef FRAGMENT_SHADER
#ifndef NO_FRAG_MAIN
void frag();
void main()
{
    frag();
}
#endif // NO_FRAG_MAIN
#endif // FRAGMENT_SHADER

#endif // EFFECT_GLSLLIB