pixel shader texture sum
This commit is contained in:
parent
75d1a0db40
commit
dd24f051aa
86
src/main.c
86
src/main.c
@ -53,23 +53,32 @@ int main()
|
|||||||
|
|
||||||
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
|
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
|
||||||
|
|
||||||
|
const int buf_width = 4;
|
||||||
|
const int buf_height = 4;
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
// textures
|
// textures
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
const char * data = "arst";
|
const char * data =
|
||||||
|
"arst"
|
||||||
|
"qwfp"
|
||||||
|
"1234"
|
||||||
|
"6789";
|
||||||
|
int input_width = 4;
|
||||||
|
int input_height = 4;
|
||||||
|
|
||||||
uint texture_input = make_texture(data,
|
uint texture_input = make_texture(data,
|
||||||
GL_R8, // internalformat
|
GL_R8, // internalformat
|
||||||
2, // width
|
input_width,
|
||||||
2, // height
|
input_height,
|
||||||
GL_RED,
|
GL_RED,
|
||||||
GL_UNSIGNED_BYTE);
|
GL_UNSIGNED_BYTE);
|
||||||
|
|
||||||
uint texture_framebuffer = make_texture(NULL,
|
uint texture_framebuffer = make_texture(NULL,
|
||||||
GL_RGBA32F,
|
GL_RGBA32F,
|
||||||
2,
|
buf_width,
|
||||||
2,
|
buf_height,
|
||||||
GL_RGBA,
|
GL_RGBA,
|
||||||
GL_UNSIGNED_BYTE);
|
GL_UNSIGNED_BYTE);
|
||||||
|
|
||||||
@ -83,6 +92,8 @@ int main()
|
|||||||
src_shader_test_vs_glsl_size,
|
src_shader_test_vs_glsl_size,
|
||||||
src_shader_test_fs_glsl_start,
|
src_shader_test_fs_glsl_start,
|
||||||
src_shader_test_fs_glsl_size);
|
src_shader_test_fs_glsl_size);
|
||||||
|
uint program_test__tex_sampler = glGetUniformLocation(program_test, "tex_sampler");
|
||||||
|
uint program_test__tex_size = glGetUniformLocation(program_test, "tex_size");
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
// buffers
|
// buffers
|
||||||
@ -111,12 +122,56 @@ int main()
|
|||||||
if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
|
if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
|
||||||
glfwSetWindowShouldClose(window, true);
|
glfwSetWindowShouldClose(window, true);
|
||||||
|
|
||||||
/*
|
//
|
||||||
|
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
|
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
|
||||||
|
glViewport(0, 0, buf_width, buf_height);
|
||||||
|
|
||||||
|
glClearColor(0.78, 0.56, 0.34, 0.12);
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
|
glActiveTexture(GL_TEXTURE0);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, texture_input);
|
||||||
uint draw_buffers[1] = {GL_COLOR_ATTACHMENT0};
|
uint draw_buffers[1] = {GL_COLOR_ATTACHMENT0};
|
||||||
glDrawBuffers(1, draw_buffers);
|
glDrawBuffers(1, draw_buffers);
|
||||||
glViewport(0, 0, 2, 2);
|
glUseProgram(program_test);
|
||||||
*/
|
glUniform1i(program_test__tex_sampler, 0);
|
||||||
|
glUniform4f(program_test__tex_size,
|
||||||
|
input_width, input_height,
|
||||||
|
0.5f / input_width,
|
||||||
|
0.5f / input_height);
|
||||||
|
glBindVertexArray(vertex_array);
|
||||||
|
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
||||||
|
|
||||||
|
float out[4 * buf_width * buf_height] = {};
|
||||||
|
glReadPixels(0, 0,
|
||||||
|
buf_width, buf_height,
|
||||||
|
GL_RGBA,
|
||||||
|
GL_FLOAT,
|
||||||
|
out);
|
||||||
|
|
||||||
|
for (int y = 0; y < buf_height; y++) {
|
||||||
|
for (int x = 0; x < buf_width; x++) {
|
||||||
|
printf("[% 2.3f % 2.3f % 2.3f % 2.3f ] ",
|
||||||
|
out[(y * buf_width + x) * 4 + 0],
|
||||||
|
out[(y * buf_width + x) * 4 + 1],
|
||||||
|
out[(y * buf_width + x) * 4 + 2],
|
||||||
|
out[(y * buf_width + x) * 4 + 3]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
int sum = 0;
|
||||||
|
for (int i = 0; i < buf_width * buf_height; i++) {
|
||||||
|
printf("%d ", data[i]);
|
||||||
|
if ((i % 4) == 3)
|
||||||
|
printf("\n");
|
||||||
|
sum += data[i];
|
||||||
|
}
|
||||||
|
printf("sum: %d\n", sum);
|
||||||
|
break;
|
||||||
|
|
||||||
|
/*
|
||||||
|
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||||
glViewport(0, 0, vp_width, vp_height);
|
glViewport(0, 0, vp_width, vp_height);
|
||||||
|
|
||||||
glClearColor(0.1, 0.2, 0.0, 0.4);
|
glClearColor(0.1, 0.2, 0.0, 0.4);
|
||||||
@ -125,24 +180,11 @@ int main()
|
|||||||
glUseProgram(program_test);
|
glUseProgram(program_test);
|
||||||
glBindVertexArray(vertex_array);
|
glBindVertexArray(vertex_array);
|
||||||
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
||||||
|
*/
|
||||||
|
|
||||||
//glFlush();
|
//glFlush();
|
||||||
//glFinish();
|
//glFinish();
|
||||||
|
|
||||||
/*
|
|
||||||
float out[4 * 2 * 2] = {0};
|
|
||||||
glReadPixels(0, 0,
|
|
||||||
2, 2,
|
|
||||||
GL_RGBA,
|
|
||||||
GL_FLOAT,
|
|
||||||
out);
|
|
||||||
|
|
||||||
for (int i = 0; i < 4 * 2 * 2; i++) {
|
|
||||||
printf("%f\n", out[i]);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
//printf("swap\n");
|
|
||||||
|
|
||||||
glfwSwapBuffers(window);
|
glfwSwapBuffers(window);
|
||||||
glfwPollEvents();
|
glfwPollEvents();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,9 +2,24 @@
|
|||||||
|
|
||||||
out vec4 fragment_color;
|
out vec4 fragment_color;
|
||||||
|
|
||||||
|
uniform sampler2D tex_sampler;
|
||||||
|
uniform vec4 tex_size;
|
||||||
|
|
||||||
in vec2 f_position;
|
in vec2 f_position;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
fragment_color = vec4(f_position, 0, 0);
|
vec4 p = texture(tex_sampler, f_position);
|
||||||
|
|
||||||
|
float sum = 0;
|
||||||
|
for (float y = 0; y < tex_size.y; y++) {
|
||||||
|
for (float x = 0; x < tex_size.x; x++) {
|
||||||
|
vec2 coord = vec2((x * 2 + 1) * tex_size.z,
|
||||||
|
(y * 2 + 1) * tex_size.w);
|
||||||
|
|
||||||
|
sum += texture(tex_sampler, coord).x * 255;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fragment_color = vec4(p.x * 255, sum, f_position);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,7 +6,7 @@ out vec2 f_position;
|
|||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
f_position = position;
|
f_position = position * 0.5 + 0.5;
|
||||||
|
|
||||||
gl_Position = vec4(position, 0, 1);
|
gl_Position = vec4(position, 0, 1);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user