18 #ifndef PIC_UTIL_GL_QUAD_HPP 19 #define PIC_UTIL_GL_QUAD_HPP 25 #include "../../util/gl/technique.hpp" 45 QuadGL(
bool bTextureCoordinates,
float halfSizeX = 1.0f,
float halfSizeY = 1.0f)
51 init(bTextureCoordinates, halfSizeX, halfSizeY);
57 glDeleteBuffers(1, &
vao);
62 glDeleteBuffers(1, &
vbo[0]);
68 glDeleteBuffers(1, &
vbo[1]);
78 void init(
bool bTexCoordinates,
float halfSizeX = 1.0f,
float halfSizeY = 1.0f)
86 glGenBuffers(1, &
vbo[0]);
87 glBindBuffer(GL_ARRAY_BUFFER,
vbo[0]);
88 glBufferData(GL_ARRAY_BUFFER, 8 *
sizeof(GLfloat), data_pos, GL_STATIC_DRAW);
89 glBindBuffer(GL_ARRAY_BUFFER, 0);
92 glGenBuffers(1, &
vbo[1]);
93 glBindBuffer(GL_ARRAY_BUFFER,
vbo[1]);
94 glBufferData(GL_ARRAY_BUFFER, 8 *
sizeof(GLfloat), data_tex, GL_STATIC_DRAW);
95 glBindBuffer(GL_ARRAY_BUFFER, 0);
98 glGenVertexArrays(1, &
vao);
99 glBindVertexArray(
vao);
101 glBindBuffer(GL_ARRAY_BUFFER,
vbo[0]);
102 glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
103 glEnableVertexAttribArray(0);
105 glBindBuffer(GL_ARRAY_BUFFER,
vbo[1]);
106 glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, 0);
107 glEnableVertexAttribArray(1);
109 glBindVertexArray(0);
110 glDisableVertexAttribArray(0);
111 glBindBuffer(GL_ARRAY_BUFFER, 0);
116 glGenBuffers(1, &
vbo[0]);
117 glBindBuffer(GL_ARRAY_BUFFER,
vbo[0]);
118 glBufferData(GL_ARRAY_BUFFER, 8 *
sizeof(GLfloat), data_pos, GL_STATIC_DRAW);
119 glBindBuffer(GL_ARRAY_BUFFER, 0);
122 glGenVertexArrays(1, &
vao);
123 glBindVertexArray(
vao);
124 glBindBuffer(GL_ARRAY_BUFFER,
vbo[0]);
126 glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
128 glEnableVertexAttribArray(0);
129 glBindVertexArray(0);
130 glDisableVertexAttribArray(0);
131 glBindBuffer(GL_ARRAY_BUFFER, 0);
142 glBindVertexArray(
vao);
143 glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
144 glBindVertexArray(0);
156 glEnable(GL_TEXTURE_2D);
157 glActiveTexture(GL_TEXTURE0);
158 glBindTexture(GL_TEXTURE_2D, texture);
162 glActiveTexture(GL_TEXTURE0);
163 glBindTexture(GL_TEXTURE_2D, 0);
174 float *data =
new float[8];
176 data[0] = -halfSizeX;
179 data[2] = -halfSizeX;
180 data[3] = -halfSizeY;
186 data[7] = -halfSizeY;
196 float *data =
new float[8];
223 gl_Position = vec4(a_position, 1.0);
227 return vertex_program;
241 gl_Position = vec4(a_position, 0.0, 1.0);
245 return vertex_program;
259 out vec2 v_tex_coord;
262 gl_Position = vec4(a_position, 0.0, 1.0);
263 v_tex_coord = a_tex_coord;
267 return vertex_program;
279 uniform sampler2D u_tex;
283 ivec2 coords = ivec2(gl_FragCoord.xy);
284 f_color = vec4(texelFetch(u_tex, coords, 0).xyz, 1.0);
288 return fragment_program;
300 uniform sampler2D u_tex;
304 ivec2 coords = ivec2(gl_FragCoord.xy);
305 ivec2 texSize = textureSize(u_tex, 0);
306 coords.y = texSize.y - coords.y;
307 f_color = vec4(texelFetch(u_tex, coords, 0).xyz, 1.0);
311 return fragment_program;
320 static void getTechnique(
TechniqueGL &technique, std::string vp_src =
"", std::string fp_src =
"",
bool bTextureCoordinates =
false)
322 if(vp_src.empty() || fp_src.empty()) {
325 technique.
init(
"330", vp_src, fp_src);
335 if(bTextureCoordinates) {
348 #ifdef PIC_DEPRECATED 354 glDisable(GL_DEPTH_TEST);
356 glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
359 glBegin(GL_TRIANGLE_STRIP);
361 glVertex2f( -1.0f, 1.0f);
362 glVertex2f( -1.0f, -1.0f);
363 glVertex2f( 1.0f, 1.0f);
364 glVertex2f( 1.0f, -1.0f);
373 static void Draw(GLuint tex)
375 glEnable(GL_TEXTURE_2D);
377 glActiveTexture(GL_TEXTURE0);
378 glBindTexture(GL_TEXTURE_2D, tex);
380 glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
383 glBegin(GL_TRIANGLE_STRIP);
385 glTexCoord2f( 0.0f, 0.0f);
386 glVertex2f( -1.0f, 1.0f);
388 glTexCoord2f( 0.0f, 1.0f);
389 glVertex2f( -1.0f, -1.0f);
391 glTexCoord2f( 1.0f, 0.0f);
392 glVertex2f( 1.0f, 1.0f);
394 glTexCoord2f( 1.0f, 1.0f);
395 glVertex2f( 1.0f, -1.0f);
399 glDisable(GL_TEXTURE_2D);
407 static void Draw(GLuint tex,
float *color)
409 glEnable(GL_TEXTURE_2D);
410 glActiveTexture(GL_TEXTURE0);
411 glBindTexture(GL_TEXTURE_2D, tex);
414 glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
420 glBegin(GL_TRIANGLE_STRIP);
422 glTexCoord2f(0.0f, 0.0f);
423 glVertex2f( -1.0f, 1.0f);
425 glTexCoord2f(0.0f, 1.0f);
426 glVertex2f( -1.0f, -1.0f);
428 glTexCoord2f(1.0f, 0.0f);
429 glVertex2f( 1.0f, 1.0f);
431 glTexCoord2f(1.0f, 1.0f);
432 glVertex2f( 1.0f, -1.0f);
436 glDisable(GL_TEXTURE_2D);
446 static void Draw(GLuint texture,
int width,
int height, TechniqueGL &technique)
450 glMatrixMode(GL_PROJECTION);
453 glMatrixMode(GL_MODELVIEW);
456 glDisable(GL_DEPTH_TEST);
457 glViewport(0, 0, (GLsizei)width, (GLsizei)height);
461 glEnable(GL_TEXTURE_2D);
462 glActiveTexture(GL_TEXTURE0);
463 glBindTexture(GL_TEXTURE_2D, texture);
466 glBegin(GL_TRIANGLE_STRIP);
467 glVertex2f(1.0f, -1.0f);
469 glVertex2f(-1.0f, -1.0f);
471 glVertex2f(1.0f, 1.0f);
473 glVertex2f(-1.0f, 1.0f);
477 glDisable(GL_TEXTURE_2D);
480 glEnable(GL_DEPTH_TEST);
482 #endif // end PIC_DEPRECATED QuadGL()
Definition: quad.hpp:38
static std::string getVertexProgramWithTexCoordinates()
getVertexProgramWithTexCoordinates creates a simple vertex program with texture coordinates as input...
Definition: quad.hpp:253
QuadGL(bool bTextureCoordinates, float halfSizeX=1.0f, float halfSizeY=1.0f)
Definition: quad.hpp:45
void init(bool bTexCoordinates, float halfSizeX=1.0f, float halfSizeY=1.0f)
init initializates the QuadGL by allocating memory on the GPU.
Definition: quad.hpp:78
void setOutputFragmentShaderIndex(const char *fragment_output_color_name, unsigned int index)
setOutputFragmentShaderIndex
Definition: technique.hpp:215
static std::string getVertexProgramV2()
getVertexProgramV2 creates a simple vertex program.
Definition: quad.hpp:234
void unbind()
unbind
Definition: technique.hpp:197
void link()
link
Definition: technique.hpp:205
#define MAKE_STRING(input_string)
void Render(TechniqueGL &technique, GLuint texture)
Render.
Definition: quad.hpp:152
bool init(std::string version_number, std::string vertex_shader_source, std::string fragment_shader_source)
Definition: technique.hpp:67
The TechniqueGL class.
Definition: technique.hpp:31
static std::string getVertexProgramV3()
getVertexProgramV3 creates a simple vertex program.
Definition: quad.hpp:216
The QuadGL class.
Definition: quad.hpp:30
static float * createPosCoord(float halfSizeX=1.0f, float halfSizeY=1.0f)
createPosCoord allocates memory for a position buffer.
Definition: quad.hpp:172
void printLog(std::string name)
printLog
Definition: technique.hpp:176
static std::string getFragmentProgram()
getFragmentProgram
Definition: quad.hpp:274
static void getTechnique(TechniqueGL &technique, std::string vp_src="", std::string fp_src="", bool bTextureCoordinates=false)
getProgram creates a simple program.
Definition: quad.hpp:320
void setAttributeIndex(const char *attribute_name, unsigned int index)
setAttributeIndex
Definition: technique.hpp:225
void Render()
Render draws a quad on screen.
Definition: quad.hpp:140
static float * createTexCoord()
createTexCoord allocates memory for a texture coordinates buffer.
Definition: quad.hpp:194
Definition: bilateral_separation.hpp:25
static std::string getFragmentProgramForView()
getFragmentProgramForView
Definition: quad.hpp:295
void setUniform1i(const char *name_uniform, int value0)
SetUniform.
Definition: technique.hpp:236
GLuint vbo[2]
Definition: quad.hpp:34
GLuint vao
Definition: quad.hpp:33
void bind()
bind
Definition: technique.hpp:189
~QuadGL()
Definition: quad.hpp:54