/// <summary> /// </summary> /// <param name="kind"> /// </param> /// <param name="data"> /// </param> /// <param name="updatable"> /// </param> public virtual void setVerticesData(VertexBufferKind kind, Array <double> data, bool updatable = false) { this._vertexBuffers = this._vertexBuffers ?? new Map <VertexBufferKind, VertexBuffer>(); if (this._vertexBuffers.ContainsKey(kind)) { this._vertexBuffers[kind].dispose(); } this._vertexBuffers[kind] = new VertexBuffer(this._engine, data, kind, updatable, this._meshes.Length == 0); if (kind == VertexBufferKind.PositionKind) { var stride = this._vertexBuffers[kind].getStrideSize(); this._totalVertices = data.Length / stride; var extend = Tools.ExtractMinAndMax(data, 0, this._totalVertices); var meshes = this._meshes; var numOfMeshes = meshes.Length; for (var index = 0; index < numOfMeshes; index++) { var mesh = meshes[index]; mesh._resetPointsArrayCache(); mesh._boundingInfo = new BoundingInfo(extend.minimum, extend.maximum); mesh._createGlobalSubMesh(); mesh.computeWorldMatrix(true); } } }
/// <summary> /// </summary> /// <param name="kind"> /// </param> /// <param name="data"> /// </param> /// <param name="updateExtends"> /// </param> /// <param name="makeItUnique"> /// </param> public virtual void updateVerticesData(VertexBufferKind kind, Array <double> data, bool updateExtends = false, bool makeItUnique = false) { var vertexBuffer = this.getVertexBuffer(kind); if (vertexBuffer == null) { return; } vertexBuffer.update(data); if (kind == VertexBufferKind.PositionKind) { MinMax extend = null; if (updateExtends) { var stride = vertexBuffer.getStrideSize(); this._totalVertices = data.Length / stride; extend = Tools.ExtractMinAndMax(data, 0, this._totalVertices); } var meshes = this._meshes; var numOfMeshes = meshes.Length; for (var index = 0; index < numOfMeshes; index++) { var mesh = meshes[index]; mesh._resetPointsArrayCache(); if (updateExtends) { mesh._boundingInfo = new BoundingInfo(extend.minimum, extend.maximum); } } } }
/// <summary> /// </summary> /// <param name="data"> /// </param> /// <param name="kind"> /// </param> public virtual void set(Array <double> data, VertexBufferKind kind) { switch (kind) { case VertexBufferKind.PositionKind: this.positions = data; break; case VertexBufferKind.NormalKind: this.normals = data; break; case VertexBufferKind.UVKind: this.uvs = data; break; case VertexBufferKind.UV2Kind: this.uv2s = data; break; case VertexBufferKind.ColorKind: this.colors = data; break; case VertexBufferKind.MatricesIndicesKind: this.matricesIndices = data; break; case VertexBufferKind.MatricesWeightsKind: this.matricesWeights = data; break; } }
/// <summary> /// </summary> /// <param name="kind"> /// </param> /// <returns> /// </returns> public virtual VertexBuffer getVertexBuffer(VertexBufferKind kind) { if (!this.isReady()) { return(null); } return(this._vertexBuffers[kind]); }
/// <summary> /// </summary> /// <param name="kind"> /// </param> /// <returns> /// </returns> public override Array <double> getVerticesData(VertexBufferKind kind) { if (this._geometry == null) { return(null); } return(this._geometry.getVerticesData(kind)); }
public override void setVerticesData(VertexBufferKind kind, Array <double> data, bool updatable = false) { if (!this._beingRegenerated) { return; } base.setVerticesData(kind, data, updatable); }
/// <summary> /// </summary> /// <param name="kind"> /// </param> /// <returns> /// </returns> public virtual VertexBuffer getVertexBuffer(VertexBufferKind kind) { if (this._geometry == null) { return(null); } return(this._geometry.getVertexBuffer(kind)); }
/// <summary> /// </summary> /// <param name="kind"> /// </param> /// <returns> /// </returns> public virtual Array <double> getVerticesData(VertexBufferKind kind) { var vertexBuffer = this.getVertexBuffer(kind); if (vertexBuffer == null) { return(null); } return(vertexBuffer.getData()); }
/// <summary> /// </summary> /// <param name="kind"> /// </param> /// <param name="data"> /// </param> /// <param name="updatable"> /// </param> public virtual void setVerticesData(VertexBufferKind kind, Array <double> data, bool updatable = false) { if (this._geometry == null) { var vertexData = new VertexData(); vertexData.set(data, kind); var scene = this.getScene(); new Geometry(Geometry.RandomId(), scene, vertexData, updatable, this); } else { this._geometry.setVerticesData(kind, data, updatable); } }
/// <summary> /// </summary> /// <param name="kind"> /// </param> /// <returns> /// </returns> public override bool isVerticesDataPresent(VertexBufferKind kind) { if (this._geometry == null) { if (this._delayInfo != null) { return(this._delayInfo.IndexOf(kind) != -1); } return(false); } return(this._geometry.isVerticesDataPresent(kind)); }
/// <summary> /// </summary> /// <param name="kind"> /// </param> /// <returns> /// </returns> public virtual bool isVerticesDataPresent(VertexBufferKind kind) { if (this._vertexBuffers == null) { if (this._delayInfo != null) { return(this._delayInfo.IndexOf(kind) != -1); } return(false); } return(this._vertexBuffers[kind] != null); }
/// <summary> /// </summary> /// <param name="kind"> /// </param> /// <param name="data"> /// </param> /// <param name="updateExtends"> /// </param> /// <param name="makeItUnique"> /// </param> public virtual void updateVerticesData(VertexBufferKind kind, Array <double> data, bool updateExtends = false, bool makeItUnique = false) { if (this._geometry == null) { return; } if (!makeItUnique) { this._geometry.updateVerticesData(kind, data, updateExtends); } else { this.makeGeometryUnique(); this.updateVerticesData(kind, data, updateExtends, false); } }
/// <summary> /// </summary> /// <param name="engine"> /// </param> /// <param name="data"> /// </param> /// <param name="kind"> /// </param> /// <param name="updatable"> /// </param> /// <param name="postponeInternalCreation"> /// </param> public VertexBuffer(Engine engine, Array <double> data, VertexBufferKind kind, bool updatable, bool postponeInternalCreation = false) { this._engine = engine; this._updatable = updatable; this._data = data; if (!postponeInternalCreation) { this.create(); } this._kind = kind; switch (kind) { case VertexBufferKind.PositionKind: this._strideSize = 3; break; case VertexBufferKind.NormalKind: this._strideSize = 3; break; case VertexBufferKind.UVKind: this._strideSize = 2; break; case VertexBufferKind.UV2Kind: this._strideSize = 2; break; case VertexBufferKind.ColorKind: this._strideSize = 3; break; case VertexBufferKind.MatricesIndicesKind: this._strideSize = 4; break; case VertexBufferKind.MatricesWeightsKind: this._strideSize = 4; break; } }
/// <summary> /// </summary> /// <param name="kind"> /// </param> /// <returns> /// </returns> public virtual Array <double> getVerticesData(VertexBufferKind kind) { return(null); }
/// <summary> /// </summary> /// <param name="kind"> /// </param> /// <returns> /// </returns> public virtual bool isVerticesDataPresent(VertexBufferKind kind) { return(false); }
/// <summary> /// </summary> /// <param name="kind"> /// </param> /// <returns> /// </returns> public override bool isVerticesDataPresent(VertexBufferKind kind) { return(this._sourceMesh.isVerticesDataPresent(kind)); }
/// <summary> /// </summary> /// <param name="kind"> /// </param> /// <returns> /// </returns> public override Array <double> getVerticesData(VertexBufferKind kind) { return(this._sourceMesh.getVerticesData(kind)); }