@animech-public/playcanvas
Version:
PlayCanvas WebGL game engine
2 lines (1 loc) • 1.41 kB
JavaScript
import{BUFFER_GPUDYNAMIC as e,PRIMITIVE_POINTS as t}from"./constants.js";import{VertexBuffer as r}from"./vertex-buffer.js";import{Shader as u}from"./shader.js";import{ShaderUtils as f}from"./shader-utils.js";class s{constructor(t,u=e){this.device=t.device;const f=this.device.gl;this._inputBuffer=t,u===e&&t.usage!==u&&(f.bindBuffer(f.ARRAY_BUFFER,t.impl.bufferId),f.bufferData(f.ARRAY_BUFFER,t.storage,f.DYNAMIC_COPY)),this._outputBuffer=new r(t.device,t.format,t.numVertices,{usage:u,data:t.storage})}static createShader(e,t,r){return new u(e,f.createDefinition(e,{name:r,vertexCode:t,useTransformFeedback:!0}))}destroy(){this._outputBuffer.destroy()}process(e,r=!0){const u=this.device,f=u.getRenderTarget();if(u.setRenderTarget(null),u.updateBegin(),u.setVertexBuffer(this._inputBuffer,0),u.setRaster(!1),u.setTransformFeedbackBuffer(this._outputBuffer),u.setShader(e),u.draw({type:t,base:0,count:this._inputBuffer.numVertices,indexed:!1}),u.setTransformFeedbackBuffer(null),u.setRaster(!0),u.updateEnd(),u.setRenderTarget(f),r){let e=this._inputBuffer.impl.bufferId;this._inputBuffer.impl.bufferId=this._outputBuffer.impl.bufferId,this._outputBuffer.impl.bufferId=e,e=this._inputBuffer.impl.vao,this._inputBuffer.impl.vao=this._outputBuffer.impl.vao,this._outputBuffer.impl.vao=e}}get inputBuffer(){return this._inputBuffer}get outputBuffer(){return this._outputBuffer}}export{s as TransformFeedback};