framework2
80 строк · 3.3 Кб
1/*
2* RGBShiftPass.h
3*
4* Copyright (c) 2013, satcy, http://satcy.net
5* All rights reserved.
6*
7* Redistribution and use in source and binary forms, with or without
8* modification, are permitted provided that the following conditions are met:
9*
10* * Redistributions of source code must retain the above copyright notice,
11* this list of conditions and the following disclaimer.
12* * Redistributions in binary form must reproduce the above copyright
13* notice, this list of conditions and the following disclaimer in the
14* documentation and/or other materials provided with the distribution.
15* * Neither the name of Neil Mendoza nor the names of its contributors may be used
16* to endorse or promote products derived from this software without
17* specific prior written permission.
18*
19* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29* POSSIBILITY OF SUCH DAMAGE.
30*
31*/
32#include "RGBShiftPass.h"
33#include "ofMain.h"
34
35namespace itg
36{
37RGBShiftPass::RGBShiftPass(const ofVec2f& aspect, bool arb, float amount, float angle) :
38amount(amount), angle(angle), RenderPass(aspect, arb, "RGBShift")
39{
40
41string fragShaderSrc = STRINGIFY(
42uniform sampler2D tDiffuse;
43uniform float amount;
44uniform float angle;
45
46void main() {
47vec2 vUv = gl_TexCoord[0].st;
48vec2 offset = amount * vec2( cos(angle), sin(angle));
49vec4 cr = texture2D(tDiffuse, vUv + offset);
50vec4 cga = texture2D(tDiffuse, vUv);
51vec4 cb = texture2D(tDiffuse, vUv - offset);
52gl_FragColor = vec4(cr.r, cga.g, cb.b, cga.a);
53
54}
55);
56
57
58shader.setupShaderFromSource(GL_FRAGMENT_SHADER, fragShaderSrc);
59shader.linkProgram();
60
61}
62
63
64void RGBShiftPass::render(ofFbo& readFbo, ofFbo& writeFbo, ofTexture& depthTex)
65{
66writeFbo.begin();
67
68
69shader.begin();
70
71shader.setUniformTexture("tDiffuse", readFbo.getTexture(), 0);
72shader.setUniform1f("amount", amount);
73shader.setUniform1f("angle", angle);
74
75texturedQuad(0, 0, writeFbo.getWidth(), writeFbo.getHeight());
76
77shader.end();
78writeFbo.end();
79}
80}