Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void setup(){
- size(300,300,P2D);
- noFill();
- background(255);
- rectMode(CENTER);
- stroke(0,32);
- smooth(8);
- // instantiate and start rendering thread
- new PNGRenderer(this);
- }
- void draw(){
- // draw moving shapes
- translate(width * 0.5, height * 0.5);
- rotate(sin(frameCount * 0.075));
- scale(sin(frameCount * 0.01));
- translate(cos(frameCount * 0.01) * width * 0.1,sin(frameCount * 0.01) * height * 0.1);
- rect(0,0,width * .9,height * .9);
- }
- public class PNGRenderer implements Runnable{
- PApplet parent;
- PImage frame;
- boolean shouldSave = false;
- int savedFrameCount;
- boolean isRunning = true;
- PNGRenderer(PApplet parent){
- this.parent = parent;
- this.parent.registerMethod("draw",this);
- frame = createImage(parent.width,parent.height,ARGB);
- frame.loadPixels();
- Thread renderThread = new Thread(this);
- renderThread.setName("Renderer-Thread");
- renderThread.start();
- }
- public void draw(){
- // all is well if I sample pixels in the same OpenGL thread
- //parent.loadPixels();
- shouldSave = true;
- }
- synchronized void sampleAndSavePixels(){
- if(shouldSave){
- // program crashes if I try to save in a separate thread
- parent.loadPixels();
- arrayCopy(parent.pixels,frame.pixels);
- frame.updatePixels();
- frame.save(dataPath("frames/frame_"+nf(savedFrameCount++,4)+".png"));
- println("saved frame",savedFrameCount);
- shouldSave = false;
- }
- }
- public void run(){
- while(isRunning){
- sampleAndSavePixels();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement