00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00024 #ifndef SHUTIL_KERNELPOSTIMPL_HPP
00025 #define SHUTIL_KERNELPOSTIMPL_HPP
00026
00027 #include <sstream>
00028 #include "ShSyntax.hpp"
00029 #include "ShPosition.hpp"
00030 #include "ShManipulator.hpp"
00031 #include "ShAlgebra.hpp"
00032 #include "ShProgram.hpp"
00033 #include "ShNibbles.hpp"
00034 #include "ShKernelPost.hpp"
00035 #include "ShFunc.hpp"
00036
00041 namespace ShUtil {
00042
00043 using namespace SH;
00044
00045 template<typename T>
00046 ShProgram shHalftone(const ShBaseTexture2D<T> &tex) {
00047 ShProgram kernel = SH_BEGIN_FRAGMENT_PROGRAM {
00048 typename T::InputType SH_NAMEDECL(in, "result");
00049 ShInputTexCoord2f SH_NAMEDECL(tc, "texcoord");
00050
00051 typename T::OutputType SH_NAMEDECL(out, "result");
00052
00053
00054
00055 out = in > tex(frac(tc));
00056 } SH_END;
00057 return kernel;
00058 }
00059
00060 template<int N, typename T>
00061 ShProgram shNoisify(bool useTexture) {
00062 ShProgram kernel = SH_BEGIN_FRAGMENT_PROGRAM {
00063 ShInputAttrib1f SH_DECL(noise_scale);
00064 typename T::InputType SH_NAMEDECL(in, "result");
00065 ShAttrib<N, SH_INPUT, typename T::storage_type> SH_NAMEDECL(tc, "texcoord");
00066
00067 typename T::OutputType SH_NAMEDECL(out, "result");
00068
00069 out = in + cellnoise<T::typesize>(tc, useTexture)*noise_scale;
00070 } SH_END;
00071 return kernel;
00072 }
00073
00074 }
00075
00076 #endif