mirror of
https://github.com/gre/gl-react.git
synced 2026-01-18 16:16:59 +00:00
Fix an ordering issue in the FBOs
This commit is contained in:
parent
69c8b7f6fd
commit
9fbeaaa09d
@ -130,21 +130,18 @@ class GLCanvas extends Component {
|
||||
const fbos = this._fbos;
|
||||
const buffer = this._buffer;
|
||||
|
||||
function recDraw (renderData, rootFrame) {
|
||||
const { shader, uniforms, textures, children, width, height } = renderData;
|
||||
function recDraw (renderData) {
|
||||
const { shader, uniforms, textures, children, width, height, frameIndex } = renderData;
|
||||
|
||||
let fboId = 0;
|
||||
for (let i = 0; i < children.length; i++) {
|
||||
const child = children[i];
|
||||
if (fboId === rootFrame) fboId ++;
|
||||
const fbo = fbos[fboId];
|
||||
const fbo = fbos[child.frameIndex];
|
||||
syncShape(fbo, [ child.width * scale, child.height * scale ]);
|
||||
fbo.bind();
|
||||
recDraw(child);
|
||||
fboId ++;
|
||||
}
|
||||
|
||||
if (rootFrame === -1) {
|
||||
if (frameIndex === -1) {
|
||||
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
|
||||
}
|
||||
|
||||
@ -171,7 +168,7 @@ class GLCanvas extends Component {
|
||||
|
||||
this.syncTargetTextures();
|
||||
|
||||
recDraw(renderData, -1);
|
||||
recDraw(renderData);
|
||||
}
|
||||
|
||||
syncData (data) {
|
||||
@ -189,9 +186,20 @@ class GLCanvas extends Component {
|
||||
const images = {};
|
||||
const fbos = {};
|
||||
|
||||
function traverseTree (data) {
|
||||
function traverseTree (data, frameIndex) {
|
||||
const { shader: s, uniforms: dataUniforms, children: dataChildren, width, height } = data;
|
||||
|
||||
const children = [];
|
||||
const fbosMapping = {};
|
||||
let fboId = 0;
|
||||
for (let i = 0; i < dataChildren.length; i++) {
|
||||
const child = dataChildren[i];
|
||||
if (fboId === frameIndex) fboId ++;
|
||||
fbosMapping[i] = fboId;
|
||||
children.push(traverseTree(child, fboId));
|
||||
fboId ++;
|
||||
}
|
||||
|
||||
// Handle shader sync
|
||||
let shader;
|
||||
if (prevShaders[s]) {
|
||||
@ -221,7 +229,7 @@ class GLCanvas extends Component {
|
||||
break;
|
||||
|
||||
case "framebuffer":
|
||||
const id = value.id;
|
||||
const id = fbosMapping[value.id];
|
||||
let fbo;
|
||||
if (prevFbos[id]) {
|
||||
fbo = prevFbos[id];
|
||||
@ -259,12 +267,10 @@ class GLCanvas extends Component {
|
||||
}
|
||||
}
|
||||
|
||||
const children = dataChildren.map(traverseTree);
|
||||
|
||||
return { shader, uniforms, textures, children, width, height };
|
||||
return { shader, uniforms, textures, children, width, height, frameIndex };
|
||||
}
|
||||
|
||||
this._renderData = traverseTree(data);
|
||||
this._renderData = traverseTree(data, -1);
|
||||
|
||||
diffDispose(shaders, prevShaders);
|
||||
diffDispose(fbos, prevFbos);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user