All Downloads are FREE. Search and download functionalities are using the official Maven repository.

indigo.shared.materials.ShaderData.scala Maven / Gradle / Ivy

The newest version!
package indigo.shared.materials

import indigo.shared.assets.AssetName
import indigo.shared.collections.Batch
import indigo.shared.shader.ShaderId
import indigo.shared.shader.UniformBlock

final case class ShaderData(
    shaderId: ShaderId,
    uniformBlocks: Batch[UniformBlock],
    channel0: Option[AssetName],
    channel1: Option[AssetName],
    channel2: Option[AssetName],
    channel3: Option[AssetName]
) extends Material
    derives CanEqual:

  def withShaderId(newShaderId: ShaderId): ShaderData =
    this.copy(shaderId = newShaderId)

  def withUniformBlocks(newUniformBlocks: Batch[UniformBlock]): ShaderData =
    this.copy(uniformBlocks = newUniformBlocks)
  def withUniformBlocks(newUniformBlocks: UniformBlock*): ShaderData =
    withUniformBlocks(Batch.fromSeq(newUniformBlocks))
  def addUniformBlock(additional: Batch[UniformBlock]): ShaderData =
    this.copy(uniformBlocks = uniformBlocks ++ additional)
  def addUniformBlock(additional: UniformBlock*): ShaderData =
    addUniformBlock(Batch.fromSeq(additional))

  def withChannel0(assetName: AssetName): ShaderData =
    this.copy(channel0 = Some(assetName))
  def withChannel1(assetName: AssetName): ShaderData =
    this.copy(channel1 = Some(assetName))
  def withChannel2(assetName: AssetName): ShaderData =
    this.copy(channel2 = Some(assetName))
  def withChannel3(assetName: AssetName): ShaderData =
    this.copy(channel3 = Some(assetName))

  lazy val toShaderData: ShaderData =
    this

object ShaderData:

  def apply(shaderId: ShaderId): ShaderData =
    ShaderData(shaderId, Batch.empty, None, None, None, None)

  def apply(shaderId: ShaderId, uniformBlocks: UniformBlock*): ShaderData =
    ShaderData(shaderId, Batch.fromSeq(uniformBlocks), None, None, None, None)

  def apply(
      shaderId: ShaderId,
      channel0: AssetName,
      channel1: AssetName,
      channel2: AssetName,
      channel3: AssetName
  ): ShaderData =
    ShaderData(shaderId, Batch.empty, Option(channel0), Option(channel1), Option(channel2), Option(channel3))




© 2015 - 2024 Weber Informatics LLC | Privacy Policy