ofSetBackgroundAuto(false)で1frame目から描画する


openFrameworksでブラーなどのように前frameの画を残して描く際にofSetBackgroundAuto(false)を使います.

が.

どうも1frame目から描けない謎がありました.
未だに完全には原因不明ですが, 一応荒業(?)での解決もできたので念のため記録まで.

git

事前) ofSetBackgroundAuto(true)の場合

1frameから描画できることの確認

ofApp.cpp
#include "ofApp.h"

//--------------------------------------------------------------
void ofApp::setup(){
    ofSetFrameRate(1);
    ofBackground(0);
    //ofSetBackgroundAuto(false);
}

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

//--------------------------------------------------------------
void ofApp::draw(){
    count++;
    cout << count << endl;
    ofDrawBitmapString(count, 100, 10*count);
}
ofApp.h
#pragma once

#include "ofMain.h"

class ofApp : public ofBaseApp{

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

    int count = 0;
};

結果

本題) ofSetBackgroundAuto(false)の場合

問題) 4frameから描画されてしまう

ofApp.cpp
#include "ofApp.h"

//--------------------------------------------------------------
void ofApp::setup(){
    ofSetFrameRate(1);
    ofBackground(0);
    ofSetBackgroundAuto(false);
}

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

//--------------------------------------------------------------
void ofApp::draw(){
    count++;
    cout << count << endl;
    ofDrawBitmapString(count, 100, 10*count);
}
ofApp.h
#pragma once

#include "ofMain.h"

class ofApp : public ofBaseApp{

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

    int count = 0;
};

結果

解決) 1frameから描画できた

ofApp.cpp
#include "ofApp.h"

//--------------------------------------------------------------
void ofApp::setup(){
    ofSetFrameRate(1);
    ofBackground(0);
}

//--------------------------------------------------------------
void ofApp::update(){
    ofSetBackgroundAuto(false);
}

//--------------------------------------------------------------
void ofApp::draw(){
    ofSetBackgroundAuto(true);
    count++;
    cout << count << endl;
    ofDrawBitmapString(count, 100, 10*count);
}
ofApp.h
#pragma once

#include "ofMain.h"

class ofApp : public ofBaseApp{

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

    int count = 0;
};

結果

参考

openFrameworksで軌道の残像を描画しつつ画像保存する方法