summary refs log tree commit diff
diff options
context:
space:
mode:
authorChristoph Helma <helma@in-silico.ch>2018-04-09 17:59:01 +0200
committerChristoph Helma <helma@in-silico.ch>2018-04-09 17:59:01 +0200
commit2bc9dc0ea7ac6dc10550625c914411d8ff4cd570 (patch)
tree0ba0b646303f253281bb92b8d50e9de1d0a07220
parent73b5fd788b76fc7d08ae7dd4fe48ca6ab42c8439 (diff)
parameter uniforms fixed, shader prog #1 brighter
-rw-r--r--img2
-rw-r--r--shader.frag2
-rw-r--r--sv.c151
-rw-r--r--vns.pngbin12268 -> 0 bytes
4 files changed, 15 insertions, 140 deletions
diff --git a/img b/img
index 97502f7..96ebb0a 100644
--- a/img
+++ b/img
@@ -6,5 +6,3 @@ void.png
 /home/ch/images/art/20130113_164510.JPG
 /home/ch/images/art/20171014_092615.JPG
 /home/ch/images/art/20171202_151645.JPG
-vns.png
-vns-invert.png
diff --git a/shader.frag b/shader.frag
index 60d5e50..9d8d7fa 100644
--- a/shader.frag
+++ b/shader.frag
@@ -69,7 +69,7 @@ void main (void) {
     coord = zoom(st(),1.0-0.5*(1.0-params[2]));
     coord = translate(coord,vec2(-0.1,-0.1));
     vec3 i2 = texture2D(images[2],coord).rgb;
-    img.rgb = pow((1.0-2.3*img.rgb),1.0+(1.0-params[1])*2*i2);
+    img.rgb = 2.5*pow((1.0-2.3*img.rgb),1.0+(1.0-params[1])*2*i2);
   }
   else if (program == 2) {
     coord = zoom(st(),1.0-0.5*(1.0-params[2]));
diff --git a/sv.c b/sv.c
index ba27f92..1a6b943 100644
--- a/sv.c
+++ b/sv.c
@@ -41,14 +41,7 @@ typedef struct Img {
 } Image;
 
 Image images[8];
-
-float params[4];
-
-int record = 0;
-int recording = 0;
-int fullscreen = 0;
-
-FILE* ffmpeg;
+GLfloat params[4];
 
 static snd_seq_t *midi_seq;
 static int midiin;
@@ -56,64 +49,11 @@ static int midiin;
 int ticks =0;
 int running = 0;
 int program=0;
-int frame = 0;
-unsigned char buffer[1920*1080*4];
-struct arg_struct {
-  unsigned char buffer[1920*1080*4];
-    int frame;
-};
-
-void *screenshot(void * f) {
-  unsigned char pixels[width*height*4];
-  //time_t current_time = time(NULL);
-  //char output_file[25];
-  char output_file[20];
-  //strftime(output_file, 25, "%Y-%m-%d_%H%M%S.png", localtime(&current_time));
-  sprintf(output_file, "record/%i.png",*(int*)f);
-  glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
-
-  // Flip the image on Y
-  int depth = 4;
-  int row,col,z;
-  stbi_uc temp;
-  for (row = 0; row < (height>>1); row++) {
-   for (col = 0; col < width; col++) {
-      for (z = 0; z < depth; z++) {
-         temp = pixels[(row * width + col) * depth + z];
-         pixels[(row * width + col) * depth + z] = pixels[((height - row - 1) * width + col) * depth + z];
-         pixels[((height - row - 1) * width + col) * depth + z] = temp;
-      }
-   }
-  }
-  printf("%s\n",output_file);
-  if (0 == stbi_write_png(output_file, width, height, 4, pixels, width * 4)) { printf("can't create file %s",output_file); }
-}
-
-void *save(void * b) {
-      //struct arg_struct args;
-      //glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
-  char output_file[20];
-  sprintf(output_file, "record/%i.png",frame);
-  printf("%ix%i\n",width,height);
-  printf("%s\n",output_file);
-  int r = stbi_write_png(output_file, width, height, 4, buffer, width * 4);
-  printf("%s\n",output_file);
-  printf("%i\n",r);
-  //struct arg_struct *args = arguments;
-  //char output_file[20];
-  //sprintf(output_file, "record/%i.png",frame);
-  //printf("%s\n",output_file);
-  //int r = stbi_write_png(output_file, width, height, 4, buffer, width * 4);
-  //printf("%i\n",r);
-  //if (0 == stbi_write_png(output_file, width, height, 4, buffer, width * 4)) { printf("can't create file %s",output_file); }
-  return(NULL);
-}
 
 static void error_callback(int error, const char* description) { fputs(description, stderr); }
 
 static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) {
     if (key == GLFW_KEY_Q && action == GLFW_PRESS) glfwSetWindowShouldClose(window, GL_TRUE);
-    //else if (key == GLFW_KEY_SPACE && action == GLFW_PRESS) screenshot();
 }
 
 const char * readShader(char * path) {
@@ -189,7 +129,6 @@ void resize_callback(GLFWwindow* window, int w, int h) {
 void readImage(int i) {
 
   images[i].new = 1;
-
   int w,h,comp;
   stbi_set_flip_vertically_on_load(1);
   unsigned char* pixels = stbi_load(images[i].path, &w, &h, &comp, STBI_rgb_alpha);
@@ -202,10 +141,6 @@ void readImage(int i) {
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
-  //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT);
-  //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT);
-  //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
-  //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
   glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
   stbi_image_free(pixels);
 }
@@ -230,28 +165,10 @@ void *readMidi() {
     }
     else if(ev->type == SND_SEQ_EVENT_SONGPOS)
       ticks = ev->data.control.value*24;
-    else if(ev->type == SND_SEQ_EVENT_START) {
+    else if(ev->type == SND_SEQ_EVENT_START)
       running = 1;
-      if (record) {
-      /*
-        time_t current_time = time(NULL);
-        char output_file[25];
-        strftime(output_file, 25, "%Y-%m-%d_%H%M%S.mkv", localtime(&current_time));
-        char cmd[250];
-        sprintf(cmd, "ffmpeg -framerate 60 -f rawvideo -pix_fmt rgba -s %ix%i -i - -preset ultrafast -y -c:v libx264 -crf 0 -vf vflip %s",width,height,output_file);
-        ffmpeg = popen(cmd, "w");
-        */
-        frame = 0;
-        recording = 1;
-      }
-    }
-    else if(ev->type == SND_SEQ_EVENT_STOP) {
+    else if(ev->type == SND_SEQ_EVENT_STOP) 
       running = 0;
-      if (recording) {
-        recording = 0;
-        //pclose(ffmpeg);
-      }
-    }
     else if(ev->type == SND_SEQ_EVENT_CONTINUE)
       running = 1;
     else if(ev->type == SND_SEQ_EVENT_CLOCK)
@@ -270,15 +187,6 @@ void *watchShader() {
 
 int main(int argc, char **argv) {
 
-  // parse options
-  int opt;
-  while ((opt = getopt(argc, argv, "rf")) != -1) {
-    switch (opt) {
-      case 'r': record = 1; fullscreen = 1; break;
-      case 'f': fullscreen = 1; break;
-    }
-  }
-
   for (int i = optind; i<argc; i++) {
     strncpy(images[i-optind].path, argv[i],40);
     images[i-optind].new = 1;
@@ -291,12 +199,8 @@ int main(int argc, char **argv) {
   const GLFWvidmode * mode = glfwGetVideoMode(glfwGetPrimaryMonitor());
   width = mode->width;
   height = mode->height;
-  if (fullscreen) {
-    window = glfwCreateWindow(width,height, "", glfwGetPrimaryMonitor(), NULL);
-  } else {
-    window = glfwCreateWindow(width,height, "sv", NULL, NULL);
-    glfwSetWindowSizeCallback(window, resize_callback);
-  }
+  window = glfwCreateWindow(width,height, "sv", NULL, NULL);
+  glfwSetWindowSizeCallback(window, resize_callback);
   glfwMakeContextCurrent(window);
   glfwSetKeyCallback(window, key_callback);
   glfwSetErrorCallback(error_callback);
@@ -312,6 +216,7 @@ int main(int argc, char **argv) {
   glCreateTextures(GL_TEXTURE_2D,1,&backbuffer);
   glTextureStorage2D(backbuffer,1,GL_RGBA32F,width,height);
   glBindImageTexture(0,backbuffer, 0, GL_FALSE, 0, GL_READ_WRITE, GL_RGBA32F);
+
   for (int i = 0; i<8; i++) {
     readImage(i);
     images[i].new = 0;
@@ -321,56 +226,28 @@ int main(int argc, char **argv) {
   pthread_create(&midiin_t, NULL, readMidi, NULL);
   pthread_t frag_t;
   pthread_create(&frag_t, NULL, watchShader, NULL);
-
-  int n = 0;
-  printf("%ix%i\n",width,height);
+  
   while (!glfwWindowShouldClose(window)) {
+
     if (shader.new) {
       createShader();
       glUniform2f(glGetUniformLocation(shader.id, "resolution"),width,height); // important!!
       for (int i = 0; i<8; i++) { imageUniforms(i); }
       shader.new = 0;
     }
+
     glUniform1f(glGetUniformLocation(shader.id, "time"),glfwGetTime());
     glUniform1f(glGetUniformLocation(shader.id, "ticks"),(float)ticks);
     glUniform1i(glGetUniformLocation(shader.id, "program"),program);
-    for (int i = 0; i<4; i++) {
-      glUniform1f(glGetUniformLocation(shader.id, "params")+i, params[i]);
-    }
+    glUniform1fv(glGetUniformLocation(shader.id, "params"), 8, params);
 
-    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
-    glfwSwapBuffers(window);
-
-    if (recording) {
-    /*
-      pid_t pid = fork();
-      if (pid == 0) {
-        unsigned char buffer[width*height*4];
-      //struct arg_struct args;
-        glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
-        char output_file[20];
-        sprintf(output_file, "record/%i.png",frame);
-        printf("%s\n",output_file);
-        int r = stbi_write_png(output_file, width, height, 4, buffer, width * 4);
-        printf("%i\n",r);
-        exit(EXIT_SUCCESS);
-      }
-      */
-      //args.buffer = buffer;
-      //args.frame = frame;
-      glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
-      pthread_t tid;
-      pthread_create (&tid, NULL, save, NULL);
-      pthread_detach (tid);
-      //printf("%i\n",frame);
-      frame++;
-      //fwrite(buffer, sizeof(int)*width*height, 1, ffmpeg);
+    if (running) {
+      glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
+      glfwSwapBuffers(window);
+      glfwPollEvents();
     }
-
-    glfwPollEvents();
   }
 
-  //if (recording) pclose(ffmpeg);
   pthread_cancel(midiin_t);
   pthread_cancel(frag_t);
   glfwDestroyWindow(window);
diff --git a/vns.png b/vns.png
deleted file mode 100644
index 3b998d9..0000000
--- a/vns.png
+++ /dev/null
Binary files differ