Help with broken (?) reaction diffusion system

Hi,
I’ve been trying to implement this reaction diffusion code, and as far as I can tell everything seems right, but for some reason the results dont seem to propogate as much as I’d expect based on other videos with similar parameters, does anyone have any ideas as to what I could be doing wrong, or is this acutally just a parameter issue?

A more specific question as well:

Is using “GL_RGB16F_ARB” the right decision? when using GL_RGB the feedback quickly stabilizes, and when using GL_RGB32F_ARB, both A and B (w.r.t to the gray scott formulas found here) approach 0 extremely fast and then the whole screen ultimately becomes black.

#shader

uniform sampler2DRect src;

float DA=1.0, DB=.5, f=.055, k=.062, dt =1.0;

void main() {

    vec2 st = gl_TexCoord[0].st;
    
    
    vec4 inColor = texture2DRect(src, st);
    vec4 laplacian =
        texture2DRect(src, st + vec2(1.0,0)) * 0.2 +
        texture2DRect(src, st + vec2(0,1.0)) * 0.2 +
        texture2DRect(src, st + vec2(-1.0,0)) * 0.2 +
        texture2DRect(src, st + vec2(0,-1.0)) * 0.2 +
        texture2DRect(src, st + vec2(-1.0,1.0)) * 0.05 +
        texture2DRect(src, st + vec2(-1.0,-1.0)) * 0.05 +
        texture2DRect(src, st + vec2(1.0,1.0)) * 0.05 +
        texture2DRect(src, st + vec2(1.0,-1.0)) * 0.05 -
        inColor;
    
    
    float A = inColor.x;
    float B = inColor.y;
    
    gl_FragColor = vec4(A + (DA * laplacian.r - A*pow(B,2.0) + f*(1.0-A))*dt,
                        B + (DB * laplacian.b + A*pow(B,2.0) - B*(k+f))*dt,
                        0,
                        1);
}

#ofApp.h

#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);
    void renderFrame(float _width, float _height);
    ofShader rd;
    
    vector<ofFbo> fbos;
};

#ofApp.cpp

#include "ofApp.h"

//--------------------------------------------------------------
void ofApp::setup(){
    ofFbo src, dst;
    src.allocate(ofGetWidth(), ofGetHeight(), GL_RGB16F_ARB);
    dst.allocate(ofGetWidth(), ofGetHeight(), GL_RGB16F_ARB);
    fbos.push_back(src);
    fbos.push_back(dst);
                   
    rd.setupShaderFromFile(GL_FRAGMENT_SHADER, "rd.frag");
    rd.linkProgram();

    fbos[ofGetFrameNum()%2].begin();
    ofClear(255,0,0);
    for(int i = 0; i < 100; i++ ){
        ofSetColor(0,255,0);
        ofDrawRectangle(ofRandom(ofGetWidth()), ofRandom(ofGetHeight()), 50, 50);
    }
    fbos[ofGetFrameNum()%2].end();
}

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

}

//--------------------------------------------------------------
void ofApp::draw(){
    ofSetColor(255);
    
    fbos[(ofGetFrameNum()+1)%2].begin();
    rd.begin();
    rd.setUniformTexture("src", fbos[ofGetFrameNum()%2].getTexture(), 1);
    renderFrame(ofGetWidth(), ofGetHeight());
    rd.end();
    fbos[(ofGetFrameNum()+1)%2].end();
    fbos[(ofGetFrameNum()+1)%2].draw(0,0);

}

void ofApp::renderFrame(float _width, float _height){
    glBegin(GL_QUADS);
    glTexCoord2f(0, 0); glVertex3f(0, 0, 0);
    glTexCoord2f(_width, 0); glVertex3f(_width, 0, 0);
    glTexCoord2f(_width, _height); glVertex3f(_width, _height, 0);
    glTexCoord2f(0,_height);  glVertex3f(0,_height, 0);
    glEnd();
}

//--------------------------------------------------------------
void ofApp::keyPressed(int key){

}

//--------------------------------------------------------------
void ofApp::keyReleased(int key){

}

//--------------------------------------------------------------
void ofApp::mouseMoved(int x, int y ){

}

//--------------------------------------------------------------
void ofApp::mouseDragged(int x, int y, int button){
    fbos[ofGetFrameNum()%2].begin();
    ofSetColor(255,255,0);
    ofDrawEllipse(x,y, 50, 50);
    fbos[ofGetFrameNum()%2].end();
}