18 #ifndef PIC_GL_FILTERING_FILTER_OP_HPP 19 #define PIC_GL_FILTERING_FILTER_OP_HPP 21 #include "../../base.hpp" 23 #include "../../gl/filtering/filter.hpp" 24 #include "../../util/string.hpp" 61 float val[4] = {0.0f, 0.0f, 0.0f, 1.0f};
72 float val[4] = {1.0f, 1.0f, 1.0f, 1.0f};
97 tmp[0] = tmp[1] = tmp[2] = tmp[3] = minVal;
171 float *c0 = NULL,
float *c1 = NULL):
FilterGL()
174 memcpy(this->
c0,
c0, 4 *
sizeof(
float));
180 memcpy(this->
c1,
c1, 4 *
sizeof(
float));
203 std::string strOp =
"ret = ";
212 size_t I_found = strOp.find(
"I0");
214 if(I_found != std::string::npos) {
216 strOp.replace(I_found, 2,
"texelFetch(u_tex_0, coords, 0)");
218 strOp.replace(I_found, 2,
"texture(u_tex_0, coords)");
224 strOp =
"vec4 tmp0 = texelFetch(u_tex_0, coords, 0);\n" + strOp;
226 strOp =
"vec4 tmp0 = texture(u_tex_0, coords);\n" + strOp;
237 size_t I_found = strOp.find(
"I1");
239 if(I_found != std::string::npos) {
241 strOp.replace(I_found, 2,
"texelFetch(u_tex_1, coords, 0)");
243 strOp.replace(I_found, 2,
"texture(u_tex_1, coords)");
249 strOp =
"vec4 tmp1 = texelFetch(u_tex_1, coords, 0);\n" + strOp;
251 strOp =
"vec4 tmp1 = texture(u_tex_1, coords);\n" + strOp;
264 uniform sampler2D u_tex_0; \n
265 uniform sampler2D u_tex_1; \n
266 uniform vec4 u_val_0; \n
267 uniform vec4 u_val_1; \n
269 in vec2 v_tex_coord; \n
273 _COORDINATES_FOR_FETCHING_ \n
276 _PROCESSING_OPERATOR_ \n
283 size_t processing_found =
fragment_source.find(
"_COORDINATES_FOR_FETCHING_");
285 "ivec2 coords = ivec2(gl_FragCoord.xy);\n");
287 size_t processing_found =
fragment_source.find(
"_COORDINATES_FOR_FETCHING_");
289 "vec2 coords = v_tex_coord.xy;\n");
292 size_t processing_found =
fragment_source.find(
"_PROCESSING_OPERATOR_");
323 for(
int i = 0; i < 4; i++) {
329 for(
int i = 0; i < 4; i++) {
static FilterGLOp * CreateOpMul(bool bType)
CreateOpMul.
Definition: filter_op.hpp:130
static std::string getVertexProgramWithTexCoordinates()
getVertexProgramWithTexCoordinates creates a simple vertex program with texture coordinates as input...
Definition: quad.hpp:253
static FilterGLOp * CreateOpDivConst(bool bType)
CreateOpDivConst.
Definition: filter_op.hpp:163
TechniqueGL technique
Definition: display.hpp:45
static FilterGLOp * CreateOpDiv(bool bType)
CreateOpDiv.
Definition: filter_op.hpp:152
FilterGLOp(std::string op, bool bTexelFetch, float *c0, float *c1)
FilterGLOp.
int countSubString(std::string str, std::string subStr)
countSubString counts how many subStr are in str.
Definition: string.hpp:240
void printLog(std::string name)
printLog
Definition: display.hpp:176
static FilterGLOp * CreateOpSub(bool bType)
CreateOpSub.
Definition: filter_op.hpp:141
std::string op
Definition: filter_op.hpp:31
void bind()
bind
Definition: display.hpp:189
#define MAKE_STRING(input_string)
Definition: filter_op.hpp:28
void setUniform4fv(const char *name_uniform, const float *value)
setUniform4
Definition: display.hpp:343
static FilterGLOp * CreateOpIdentity(bool bType)
CreateOpIdentity.
Definition: filter_op.hpp:82
static FilterGLOp * CreateOpAdd(bool bType)
CreateOpAdd.
Definition: filter_op.hpp:108
void setAttributeIndex(const char *attribute_name, unsigned int index)
setAttributeIndex
Definition: display.hpp:225
QuadGL * quad
Definition: display.hpp:42
The FilterGL class.
Definition: filter.hpp:35
static FilterGLOp * CreateOpSegmentation(bool bType, float minVal)
CreateOpSegmentation.
Definition: filter_op.hpp:94
The FilterGL class.
Definition: display.hpp:35
#define PIC_INLINE
Definition: base.hpp:33
std::string stdStringRepAll(std::string str, std::string strSub, std::string strRep)
stdStringRepAll replaces all strSub in str with strRep.
Definition: string.hpp:79
void unbind()
unbind
Definition: display.hpp:197
std::string vertex_source
Definition: display.hpp:57
Definition: bilateral_separation.hpp:25
void setOutputFragmentShaderIndex(const char *fragment_output_color_name, unsigned int index)
setOutputFragmentShaderIndex
Definition: display.hpp:215
static T * assign(T *data, int size, T *ret)
assign
Definition: array.hpp:464
void update(float *c0, float *c1)
update
The QuadGL class.
Definition: display.hpp:30
void link()
link
Definition: display.hpp:205
bool bTexelFetch
Definition: filter_op.hpp:33
std::string fragment_source
Definition: display.hpp:57
float c1[4]
Definition: filter_op.hpp:32
float c0[4]
Definition: filter_op.hpp:32
bool init(std::string version_number, std::string vertex_shader_source, std::string fragment_shader_source)
Definition: display.hpp:67
static FilterGLOp * CreateOpMulNeg(bool bType)
CreateOpMulNeg.
Definition: filter_op.hpp:119
static FilterGLOp * CreateOpSetZero()
CreateOpSetZero.
Definition: filter_op.hpp:59
static FilterGLOp * CreateOpSetOne()
CreateOpSetOne.
Definition: filter_op.hpp:70
void setUniform1i(const char *name_uniform, int value0)
SetUniform.
Definition: display.hpp:236