|
@@ -212,6 +212,7 @@ export class WebGPUEngine extends Engine {
|
|
|
// Effect is on the parent class
|
|
|
// protected _currentEffect: Nullable<Effect> = null;
|
|
|
private _currentVertexBuffers: Nullable<{ [key: string]: Nullable<VertexBuffer> }> = null;
|
|
|
+ private _currentOverrideVertexBuffers: Nullable<{ [key: string]: Nullable<VertexBuffer> }> = null;
|
|
|
private _currentIndexBuffer: Nullable<DataBuffer> = null;
|
|
|
private __colorWrite = true;
|
|
|
private _uniformsBuffers: { [name: string]: WebGPUDataBuffer } = {};
|
|
@@ -707,7 +708,8 @@ export class WebGPUEngine extends Engine {
|
|
|
this._forceEnableEffect = true;
|
|
|
this._currentIndexBuffer = null;
|
|
|
this._currentVertexBuffers = null;
|
|
|
- this._cacheRenderPipeline.setBuffers(null, null);
|
|
|
+ this._currentOverrideVertexBuffers = null;
|
|
|
+ this._cacheRenderPipeline.setBuffers(null, null, null);
|
|
|
|
|
|
if (bruteForce) {
|
|
|
this._currentProgram = null;
|
|
@@ -1067,11 +1069,13 @@ export class WebGPUEngine extends Engine {
|
|
|
* @param vertexBuffers defines the list of vertex buffers to bind
|
|
|
* @param indexBuffer defines the index buffer to bind
|
|
|
* @param effect defines the effect associated with the vertex buffers
|
|
|
+ * @param overrideVertexBuffers defines optional list of avertex buffers that overrides the entries in vertexBuffers
|
|
|
*/
|
|
|
- public bindBuffers(vertexBuffers: { [key: string]: Nullable<VertexBuffer> }, indexBuffer: Nullable<DataBuffer>, effect: Effect): void {
|
|
|
+ public bindBuffers(vertexBuffers: { [key: string]: Nullable<VertexBuffer> }, indexBuffer: Nullable<DataBuffer>, effect: Effect, overrideVertexBuffers?: {[kind: string]: Nullable<VertexBuffer>}): void {
|
|
|
this._currentIndexBuffer = indexBuffer;
|
|
|
this._currentVertexBuffers = vertexBuffers;
|
|
|
- this._cacheRenderPipeline.setBuffers(vertexBuffers, indexBuffer);
|
|
|
+ this._currentOverrideVertexBuffers = overrideVertexBuffers ?? null;
|
|
|
+ this._cacheRenderPipeline.setBuffers(vertexBuffers, indexBuffer, this._currentOverrideVertexBuffers);
|
|
|
}
|
|
|
|
|
|
/** @hidden */
|
|
@@ -3582,7 +3586,7 @@ export class WebGPUEngine extends Engine {
|
|
|
const order = effect.getAttributeLocation(index);
|
|
|
|
|
|
if (order >= 0) {
|
|
|
- let vertexBuffer = this._currentVertexBuffers![attributes[index]];
|
|
|
+ let vertexBuffer = (this._currentOverrideVertexBuffers && this._currentOverrideVertexBuffers[attributes[index]]) ?? this._currentVertexBuffers![attributes[index]];
|
|
|
if (!vertexBuffer) {
|
|
|
// In WebGL it's valid to not bind a vertex buffer to an attribute, but it's not valid in WebGPU
|
|
|
// So we must bind a dummy buffer when we are not given one for a specific attribute
|