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

indigo.shared.shader.UniformBlock.scala Maven / Gradle / Ivy

The newest version!
package indigo.shared.shader

import indigo.shared.collections.Batch

import scala.annotation.targetName

final case class UniformBlock(blockName: UniformBlockName, uniforms: Batch[(Uniform, ShaderPrimitive)])
    derives CanEqual:

  lazy val uniformHash: String =
    blockName.toString + uniforms.map(_._2.hash).mkString

  def withUniformBlockName(newBlockName: UniformBlockName): UniformBlock =
    this.copy(blockName = newBlockName)

  def withUniforms(newUniforms: Batch[(Uniform, ShaderPrimitive)]): UniformBlock =
    this.copy(uniforms = newUniforms)
  def withUniforms(newUniforms: (Uniform, ShaderPrimitive)*): UniformBlock =
    withUniforms(Batch.fromSeq(newUniforms))

  def addUniforms(newUniforms: Batch[(Uniform, ShaderPrimitive)]): UniformBlock =
    this.copy(uniforms = uniforms ++ newUniforms)
  def addUniforms(newUniforms: (Uniform, ShaderPrimitive)*): UniformBlock =
    addUniforms(Batch.fromSeq(newUniforms))

object UniformBlock:

  def apply(blockName: UniformBlockName, uniforms: (Uniform, ShaderPrimitive)*): UniformBlock =
    UniformBlock(blockName, Batch.fromSeq(uniforms))

  @targetName("UniformBlock_ValueOnly_apply")
  def apply(blockName: UniformBlockName, uniformValues: ShaderPrimitive*): UniformBlock =
    UniformBlock(blockName, Batch.fromSeq(uniformValues).map(v => Uniform("") -> v))

opaque type UniformBlockName = String
object UniformBlockName:
  inline def apply(name: String): UniformBlockName = name

  extension (ubn: UniformBlockName) def toString: String = ubn

opaque type Uniform = String
object Uniform:
  inline def apply(name: String): Uniform = name




© 2015 - 2024 Weber Informatics LLC | Privacy Policy