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

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

が.

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

git

https://github.com/KeitaSumiya/oF/tree/master/drawbackgroundauto

事前) ofSetBackgroundAuto(true)の場合

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

https://github.com/KeitaSumiya/oF/tree/master/drawbackgroundauto/0_1_0a_before_true_drawFrom1frame
#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);
}
#pragma once

#include "ofMain.h"

class ofApp : public ofBaseApp{

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

    int count = 0;
};
true.png

結果

本題) ofSetBackgroundAuto(false)の場合

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

https://github.com/KeitaSumiya/oF/tree/master/drawbackgroundauto/0_1_0b_bad_drawFrom4frame
#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);
}
#pragma once

#include "ofMain.h"

class ofApp : public ofBaseApp{

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

    int count = 0;
};
bad.png

結果

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

https://github.com/KeitaSumiya/oF/tree/master/drawbackgroundauto/0_1_1_better_drawFrom1frame
#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);
}
#pragma once

#include "ofMain.h"

class ofApp : public ofBaseApp{

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

    int count = 0;
};
better.png

結果

参考

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