private void UpdateQuads() { var rotation = Quaternion.CreateFromAxisAngle(Vector3.UnitZ, CurRotationAngle); var right = Vector3.Transform(Vector3.UnitX * data.width, rotation); var up = Vector3.Transform(Vector3.UnitY * data.width, rotation); var center = data.circlesAround ? Vector3.Transform(Vector3.UnitY * data.yOffset, rotation) : Vector3.Zero; var newTexCoords1 = EffectPartUtility.TexShift(texCoords, 2 * curTexShift, data.texShift); var newTexCoords2 = EffectPartUtility.TexShift(texCoords, 2 * curTexShift, -data.texShift); var vertices = quadMeshBuffer[quadRange]; vertices.UpdateQuad(center, right, up, curColor, newTexCoords1); if (!data.disableSecondPlane) { vertices[4..].UpdateQuad(center, -right, up, curColor, newTexCoords2);
public MovingPlanesRenderer(ITagContainer diContainer, DeviceBufferRange locationRange, MovingPlanes data) { this.data = data; var textureLoader = diContainer.GetTag <IAssetLoader <Texture> >(); var camera = diContainer.GetTag <Camera>(); quadMeshBuffer = diContainer.GetTag <IQuadMeshBuffer <EffectVertex> >(); material = EffectMaterial.CreateFor(data.renderMode, diContainer); material.LinkTransformsTo(camera); material.World.BufferRange = locationRange; material.Uniforms.Value = EffectMaterialUniforms.Default; material.Uniforms.Ref.isBillboard = !data.circlesAround && !data.useDirection; material.MainTexture.Texture = textureLoader.LoadTexture( IEffectPartRenderer.TexturePath, data.texName); material.Sampler.Value = IEffectPartRenderer.SamplerDescription; AddDisposable(material); quadRange = quadMeshBuffer.Reserve(data.disableSecondPlane ? 1 : 2); texCoords = EffectPartUtility.GetTileUV(data.tileW, data.tileH, data.tileId); Reset(); }
public RandomPlanesRenderer(ITagContainer diContainer, DeviceBufferRange locationRange, RandomPlanes data) { this.data = data; var textureLoader = diContainer.GetTag <IAssetLoader <Texture> >(); var camera = diContainer.GetTag <Camera>(); quadMeshBuffer = diContainer.GetTag <IQuadMeshBuffer <EffectVertex> >(); material = EffectMaterial.CreateFor(data.renderMode, diContainer); material.LinkTransformsTo(camera); material.World.BufferRange = locationRange; material.Uniforms.Value = EffectMaterialUniforms.Default; material.Uniforms.Ref.isBillboard = !data.circlesAround; AddDisposable(material.MainTexture.Texture = textureLoader.LoadTexture( IEffectPartRenderer.TexturePath, data.texName)); material.Sampler.Value = SamplerAddressMode.Clamp.AsDescription(SamplerFilter.MinLinear_MagLinear_MipLinear); AddDisposable(material); planes = new RandomPlane[(int)(data.planeLife * data.spawnRate / 1000)]; quadRange = quadMeshBuffer.Reserve(planes.Length); tileTexCoords = EffectPartUtility.GetTileUV(data.tileW, data.tileH, data.tileId, data.tileCount); Reset(); }