Quantcast
Channel: beginners - openFrameworks
Viewing all articles
Browse latest Browse all 4929

Draw first frame only

$
0
0

@edwardloveall wrote:

I'm trying to get recreate functionality similar to processing's noLoop() function. I understand that there is no real way to stop the drawing loop, which is fine, but I'm doing a calculation that seems to take much more than a frame to complete and I only need to do it once. Here's my code:

#pragma once

#include "ofMain.h"

class ofApp : public ofBaseApp{

public:
    void setup();
    void update();
    void draw();

    void keyPressed(int key);
    void keyReleased(int key);
    void mouseMoved(int x, int y );
    void mouseDragged(int x, int y, int button);
    void mousePressed(int x, int y, int button);
    void mouseReleased(int x, int y, int button);
    void mouseEntered(int x, int y);
    void mouseExited(int x, int y);
    void windowResized(int w, int h);
    void dragEvent(ofDragInfo dragInfo);
    void gotMessage(ofMessage msg);

    bool drawEnabled;
};

#include "ofApp.h"

//--------------------------------------------------------------
void ofApp::setup(){
    drawEnabled = true;
    ofSetBackgroundAuto(false);
}

//--------------------------------------------------------------
void ofApp::update(){

}

//--------------------------------------------------------------
void ofApp::draw(){
    if (drawEnabled) {
        for (float x = 0; x < ofGetWidth(); x++) {
            for (float y = 0; y < ofGetHeight(); y++) {
                float xOff = x / ofGetWidth();
                float yOff = y / ofGetHeight();

                int color = ofNoise(xOff, yOff) * 255;
                ofSetColor(color, color, color);

                ofDrawRectangle(x, y, 1, 1);
            }
        }
        drawEnabled = false;
    }
    cout << ofGetFrameNum() << endl;
}

...

Some observations:

Since this code seems to run longer than one frame, what seems to happen is 1 frame goes by, the drawing isn't complete yet, so OF skips to the next frame, disabling drawEnabled, resulting in a grey screen.

If I remove the drawEnabled check, my noise does draw after a few frames, but then continues to try and draw throughout the life of the program, which is what I'm trying to avoid.

Any thoughts? How can I get this to draw once and once only?

Posts: 2

Participants: 2

Read full topic


Viewing all articles
Browse latest Browse all 4929

Trending Articles