I wrote up a little program over the weekend that renders squares to the screen (a cellular automata sandbox), and decided that I’d like to record some GIFs and videos of animations generated on screen, which seems to require me to render all my artifacts to an FBO, then pass that FBO’s pixel data to an add-on class.
Almost all of my code is being handled by a custom class (CA2D.h/cpp), so I’m curious if maybe there is something small I am missing about rendering FBOs to the screen from custom classes?
First I added an ofFbo object in my class header and initialized it using the procedure outlined in the oF documentation: http://openframeworks.cc/documentation/gl/ofFbo.html
fbo.allocate(ofGetWidth(), ofGetHeight());
fbo.begin();
ofClear(0,0,0);
fbo.end();
Next I wrapped all the data I want to render in the fbo begin() and end() functions like so:
void CA2D::render2D() {
if(drawGrid) {
ofSetLineWidth(1);
// Draw the row lines
for(int i=0; i<=columns; i++)
ofLine(0, i*(cellSize+spacingY), columns*(cellSize+spacingX), i*(cellSize+spacingY));
// Draw the column lines
for(int i=0; i<=rows; i++)
ofLine(i*(cellSize+spacingX), 0, i*(cellSize+spacingX), rows*(cellSize+spacingY));
}
// Draw the cells
for(int i=0; i<rows; i++) {
for(int j=0; j<columns; j++) {
int s = cells[i][j]->getState();
if(s) ofSetColor(255);
else ofSetColor(0);
ofFill();
ofRect(cells[i][j]->getX()*(cellSize+spacingX), cells[i][j]->getY()*(cellSize+spacingY), cellSize, cellSize);
}
}
fbo.end();
fbo.draw(0,0);
}
Then, in my ofApp::draw() function I call this function (ca->render2D()), expecting to have the FBO drawn to the screen. But I get nothing.
If I commet out the fbo.begin() and fbo.end() lines in this class function then everything renders just fine, but the FBO doesn’t seem to want to work.
Any ideas on what I’m missing?