Advertisement
Guest User

Untitled

a guest
Jun 27th, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.52 KB | None | 0 0
  1. void setup(){
  2. size(300,300,P2D);
  3. noFill();
  4. background(255);
  5. rectMode(CENTER);
  6. stroke(0,32);
  7. smooth(8);
  8. // instantiate and start rendering thread
  9. new PNGRenderer(this);
  10. }
  11.  
  12. void draw(){
  13. // draw moving shapes
  14. translate(width * 0.5, height * 0.5);
  15. rotate(sin(frameCount * 0.075));
  16. scale(sin(frameCount * 0.01));
  17. translate(cos(frameCount * 0.01) * width * 0.1,sin(frameCount * 0.01) * height * 0.1);
  18. rect(0,0,width * .9,height * .9);
  19. }
  20.  
  21. public class PNGRenderer implements Runnable{
  22.  
  23. PApplet parent;
  24. PImage frame;
  25. boolean shouldSave = false;
  26.  
  27. int savedFrameCount;
  28.  
  29. boolean isRunning = true;
  30.  
  31. PNGRenderer(PApplet parent){
  32. this.parent = parent;
  33. this.parent.registerMethod("draw",this);
  34.  
  35. frame = createImage(parent.width,parent.height,ARGB);
  36. frame.loadPixels();
  37.  
  38. Thread renderThread = new Thread(this);
  39. renderThread.setName("Renderer-Thread");
  40. renderThread.start();
  41. }
  42.  
  43. public void draw(){
  44. // all is well if I sample pixels in the same OpenGL thread
  45. //parent.loadPixels();
  46. shouldSave = true;
  47. }
  48.  
  49. synchronized void sampleAndSavePixels(){
  50. if(shouldSave){
  51. // program crashes if I try to save in a separate thread
  52. parent.loadPixels();
  53. arrayCopy(parent.pixels,frame.pixels);
  54. frame.updatePixels();
  55. frame.save(dataPath("frames/frame_"+nf(savedFrameCount++,4)+".png"));
  56. println("saved frame",savedFrameCount);
  57. shouldSave = false;
  58. }
  59. }
  60.  
  61. public void run(){
  62. while(isRunning){
  63. sampleAndSavePixels();
  64. }
  65. }
  66.  
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement