record-gl-0.1.0.0: Utilities for working with OpenGL's GLSL shading language and Nikita Volkov's "Record"s.

Safe HaskellNone
LanguageHaskell2010

Graphics.RecordGL.Uniforms

Contents

Description

Tools for binding vinyl records to GLSL program uniform parameters. The most common usage is to use the setUniforms function to set each field of a Record to the GLSL uniform parameter with the same name. This verifies that each field of the record corresponds to a uniform parameter of the given shader program, and that the types all agree.

Synopsis

Operations for binding uniform values

setAllUniforms :: forall record. UniformFields record => ShaderProgram -> record -> IO () Source

Set GLSL uniform parameters from a Record. A check is performed to verify that all uniforms used by a program are represented by the record type. In other words, the record is a superset of the parameters used by the program.

setSomeUniforms :: forall r. UniformFields r => ShaderProgram -> r -> IO () Source

Set GLSL uniform parameters from those fields of a PlainRec whose names correspond to uniform parameters used by a program.

setUniforms :: forall record. UniformFields record => ShaderProgram -> record -> IO () Source

Set GLSL uniform parameters form a Record representing a subset of all uniform parameters used by a program.

Useful type classes for setting and verifying fields

class HasFieldGLTypes a where Source

Provide the VariableType of each field in a Record. The list of types has the same order as the fields of the Record.

Instances

HasVariableType v1 => HasFieldGLTypes (Record1 n1 v1) 
(HasVariableType v1, HasVariableType v2) => HasFieldGLTypes (Record2 n1 v1 n2 v2) 
(HasVariableType v1, HasVariableType v2, HasVariableType v3) => HasFieldGLTypes (Record3 n1 v1 n2 v2 n3 v3) 
(HasVariableType v1, HasVariableType v2, HasVariableType v3, HasVariableType v4) => HasFieldGLTypes (Record4 n1 v1 n2 v2 n3 v3 n4 v4) 
(HasVariableType v1, HasVariableType v2, HasVariableType v3, HasVariableType v4, HasVariableType v5) => HasFieldGLTypes (Record5 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5) 
(HasVariableType v1, HasVariableType v2, HasVariableType v3, HasVariableType v4, HasVariableType v5, HasVariableType v6) => HasFieldGLTypes (Record6 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6) 
(HasVariableType v1, HasVariableType v2, HasVariableType v3, HasVariableType v4, HasVariableType v5, HasVariableType v6, HasVariableType v7) => HasFieldGLTypes (Record7 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7) 
(HasVariableType v1, HasVariableType v2, HasVariableType v3, HasVariableType v4, HasVariableType v5, HasVariableType v6, HasVariableType v7, HasVariableType v8) => HasFieldGLTypes (Record8 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8) 
(HasVariableType v1, HasVariableType v2, HasVariableType v3, HasVariableType v4, HasVariableType v5, HasVariableType v6, HasVariableType v7, HasVariableType v8, HasVariableType v9) => HasFieldGLTypes (Record9 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8 n9 v9) 
(HasVariableType v1, HasVariableType v2, HasVariableType v3, HasVariableType v4, HasVariableType v5, HasVariableType v6, HasVariableType v7, HasVariableType v8, HasVariableType v9, HasVariableType v10) => HasFieldGLTypes (Record10 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8 n9 v9 n10 v10) 
(HasVariableType v1, HasVariableType v2, HasVariableType v3, HasVariableType v4, HasVariableType v5, HasVariableType v6, HasVariableType v7, HasVariableType v8, HasVariableType v9, HasVariableType v10, HasVariableType v11) => HasFieldGLTypes (Record11 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8 n9 v9 n10 v10 n11 v11) 
(HasVariableType v1, HasVariableType v2, HasVariableType v3, HasVariableType v4, HasVariableType v5, HasVariableType v6, HasVariableType v7, HasVariableType v8, HasVariableType v9, HasVariableType v10, HasVariableType v11, HasVariableType v12) => HasFieldGLTypes (Record12 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8 n9 v9 n10 v10 n11 v11 n12 v12) 
(HasVariableType v1, HasVariableType v2, HasVariableType v3, HasVariableType v4, HasVariableType v5, HasVariableType v6, HasVariableType v7, HasVariableType v8, HasVariableType v9, HasVariableType v10, HasVariableType v11, HasVariableType v12, HasVariableType v13) => HasFieldGLTypes (Record13 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8 n9 v9 n10 v10 n11 v11 n12 v12 n13 v13) 
(HasVariableType v1, HasVariableType v2, HasVariableType v3, HasVariableType v4, HasVariableType v5, HasVariableType v6, HasVariableType v7, HasVariableType v8, HasVariableType v9, HasVariableType v10, HasVariableType v11, HasVariableType v12, HasVariableType v13, HasVariableType v14) => HasFieldGLTypes (Record14 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8 n9 v9 n10 v10 n11 v11 n12 v12 n13 v13 n14 v14) 
(HasVariableType v1, HasVariableType v2, HasVariableType v3, HasVariableType v4, HasVariableType v5, HasVariableType v6, HasVariableType v7, HasVariableType v8, HasVariableType v9, HasVariableType v10, HasVariableType v11, HasVariableType v12, HasVariableType v13, HasVariableType v14, HasVariableType v15) => HasFieldGLTypes (Record15 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8 n9 v9 n10 v10 n11 v11 n12 v12 n13 v13 n14 v14 n15 v15) 
(HasVariableType v1, HasVariableType v2, HasVariableType v3, HasVariableType v4, HasVariableType v5, HasVariableType v6, HasVariableType v7, HasVariableType v8, HasVariableType v9, HasVariableType v10, HasVariableType v11, HasVariableType v12, HasVariableType v13, HasVariableType v14, HasVariableType v15, HasVariableType v16) => HasFieldGLTypes (Record16 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8 n9 v9 n10 v10 n11 v11 n12 v12 n13 v13 n14 v14 n15 v15 n16 v16) 
(HasVariableType v1, HasVariableType v2, HasVariableType v3, HasVariableType v4, HasVariableType v5, HasVariableType v6, HasVariableType v7, HasVariableType v8, HasVariableType v9, HasVariableType v10, HasVariableType v11, HasVariableType v12, HasVariableType v13, HasVariableType v14, HasVariableType v15, HasVariableType v16, HasVariableType v17) => HasFieldGLTypes (Record17 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8 n9 v9 n10 v10 n11 v11 n12 v12 n13 v13 n14 v14 n15 v15 n16 v16 n17 v17) 
(HasVariableType v1, HasVariableType v2, HasVariableType v3, HasVariableType v4, HasVariableType v5, HasVariableType v6, HasVariableType v7, HasVariableType v8, HasVariableType v9, HasVariableType v10, HasVariableType v11, HasVariableType v12, HasVariableType v13, HasVariableType v14, HasVariableType v15, HasVariableType v16, HasVariableType v17, HasVariableType v18) => HasFieldGLTypes (Record18 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8 n9 v9 n10 v10 n11 v11 n12 v12 n13 v13 n14 v14 n15 v15 n16 v16 n17 v17 n18 v18) 
(HasVariableType v1, HasVariableType v2, HasVariableType v3, HasVariableType v4, HasVariableType v5, HasVariableType v6, HasVariableType v7, HasVariableType v8, HasVariableType v9, HasVariableType v10, HasVariableType v11, HasVariableType v12, HasVariableType v13, HasVariableType v14, HasVariableType v15, HasVariableType v16, HasVariableType v17, HasVariableType v18, HasVariableType v19) => HasFieldGLTypes (Record19 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8 n9 v9 n10 v10 n11 v11 n12 v12 n13 v13 n14 v14 n15 v15 n16 v16 n17 v17 n18 v18 n19 v19) 
(HasVariableType v1, HasVariableType v2, HasVariableType v3, HasVariableType v4, HasVariableType v5, HasVariableType v6, HasVariableType v7, HasVariableType v8, HasVariableType v9, HasVariableType v10, HasVariableType v11, HasVariableType v12, HasVariableType v13, HasVariableType v14, HasVariableType v15, HasVariableType v16, HasVariableType v17, HasVariableType v18, HasVariableType v19, HasVariableType v20) => HasFieldGLTypes (Record20 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8 n9 v9 n10 v10 n11 v11 n12 v12 n13 v13 n14 v14 n15 v15 n16 v16 n17 v17 n18 v18 n19 v19 n20 v20) 
(HasVariableType v1, HasVariableType v2, HasVariableType v3, HasVariableType v4, HasVariableType v5, HasVariableType v6, HasVariableType v7, HasVariableType v8, HasVariableType v9, HasVariableType v10, HasVariableType v11, HasVariableType v12, HasVariableType v13, HasVariableType v14, HasVariableType v15, HasVariableType v16, HasVariableType v17, HasVariableType v18, HasVariableType v19, HasVariableType v20, HasVariableType v21) => HasFieldGLTypes (Record21 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8 n9 v9 n10 v10 n11 v11 n12 v12 n13 v13 n14 v14 n15 v15 n16 v16 n17 v17 n18 v18 n19 v19 n20 v20 n21 v21) 
(HasVariableType v1, HasVariableType v2, HasVariableType v3, HasVariableType v4, HasVariableType v5, HasVariableType v6, HasVariableType v7, HasVariableType v8, HasVariableType v9, HasVariableType v10, HasVariableType v11, HasVariableType v12, HasVariableType v13, HasVariableType v14, HasVariableType v15, HasVariableType v16, HasVariableType v17, HasVariableType v18, HasVariableType v19, HasVariableType v20, HasVariableType v21, HasVariableType v22) => HasFieldGLTypes (Record22 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8 n9 v9 n10 v10 n11 v11 n12 v12 n13 v13 n14 v14 n15 v15 n16 v16 n17 v17 n18 v18 n19 v19 n20 v20 n21 v21 n22 v22) 
(HasVariableType v1, HasVariableType v2, HasVariableType v3, HasVariableType v4, HasVariableType v5, HasVariableType v6, HasVariableType v7, HasVariableType v8, HasVariableType v9, HasVariableType v10, HasVariableType v11, HasVariableType v12, HasVariableType v13, HasVariableType v14, HasVariableType v15, HasVariableType v16, HasVariableType v17, HasVariableType v18, HasVariableType v19, HasVariableType v20, HasVariableType v21, HasVariableType v22, HasVariableType v23) => HasFieldGLTypes (Record23 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8 n9 v9 n10 v10 n11 v11 n12 v12 n13 v13 n14 v14 n15 v15 n16 v16 n17 v17 n18 v18 n19 v19 n20 v20 n21 v21 n22 v22 n23 v23) 
(HasVariableType v1, HasVariableType v2, HasVariableType v3, HasVariableType v4, HasVariableType v5, HasVariableType v6, HasVariableType v7, HasVariableType v8, HasVariableType v9, HasVariableType v10, HasVariableType v11, HasVariableType v12, HasVariableType v13, HasVariableType v14, HasVariableType v15, HasVariableType v16, HasVariableType v17, HasVariableType v18, HasVariableType v19, HasVariableType v20, HasVariableType v21, HasVariableType v22, HasVariableType v23, HasVariableType v24) => HasFieldGLTypes (Record24 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8 n9 v9 n10 v10 n11 v11 n12 v12 n13 v13 n14 v14 n15 v15 n16 v16 n17 v17 n18 v18 n19 v19 n20 v20 n21 v21 n22 v22 n23 v23 n24 v24) 

class SetUniformFields a Source

Zips up lists of UniformLocations and a Record setting uniform parameters using the record fields.

Minimal complete definition

setUniformFields

Instances

AsUniform v1 => SetUniformFields (Record1 n1 v1) 
(AsUniform v1, AsUniform v2) => SetUniformFields (Record2 n1 v1 n2 v2) 
(AsUniform v1, AsUniform v2, AsUniform v3) => SetUniformFields (Record3 n1 v1 n2 v2 n3 v3) 
(AsUniform v1, AsUniform v2, AsUniform v3, AsUniform v4) => SetUniformFields (Record4 n1 v1 n2 v2 n3 v3 n4 v4) 
(AsUniform v1, AsUniform v2, AsUniform v3, AsUniform v4, AsUniform v5) => SetUniformFields (Record5 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5) 
(AsUniform v1, AsUniform v2, AsUniform v3, AsUniform v4, AsUniform v5, AsUniform v6) => SetUniformFields (Record6 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6) 
(AsUniform v1, AsUniform v2, AsUniform v3, AsUniform v4, AsUniform v5, AsUniform v6, AsUniform v7) => SetUniformFields (Record7 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7) 
(AsUniform v1, AsUniform v2, AsUniform v3, AsUniform v4, AsUniform v5, AsUniform v6, AsUniform v7, AsUniform v8) => SetUniformFields (Record8 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8) 
(AsUniform v1, AsUniform v2, AsUniform v3, AsUniform v4, AsUniform v5, AsUniform v6, AsUniform v7, AsUniform v8, AsUniform v9) => SetUniformFields (Record9 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8 n9 v9) 
(AsUniform v1, AsUniform v2, AsUniform v3, AsUniform v4, AsUniform v5, AsUniform v6, AsUniform v7, AsUniform v8, AsUniform v9, AsUniform v10) => SetUniformFields (Record10 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8 n9 v9 n10 v10) 
(AsUniform v1, AsUniform v2, AsUniform v3, AsUniform v4, AsUniform v5, AsUniform v6, AsUniform v7, AsUniform v8, AsUniform v9, AsUniform v10, AsUniform v11) => SetUniformFields (Record11 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8 n9 v9 n10 v10 n11 v11) 
(AsUniform v1, AsUniform v2, AsUniform v3, AsUniform v4, AsUniform v5, AsUniform v6, AsUniform v7, AsUniform v8, AsUniform v9, AsUniform v10, AsUniform v11, AsUniform v12) => SetUniformFields (Record12 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8 n9 v9 n10 v10 n11 v11 n12 v12) 
(AsUniform v1, AsUniform v2, AsUniform v3, AsUniform v4, AsUniform v5, AsUniform v6, AsUniform v7, AsUniform v8, AsUniform v9, AsUniform v10, AsUniform v11, AsUniform v12, AsUniform v13) => SetUniformFields (Record13 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8 n9 v9 n10 v10 n11 v11 n12 v12 n13 v13) 
(AsUniform v1, AsUniform v2, AsUniform v3, AsUniform v4, AsUniform v5, AsUniform v6, AsUniform v7, AsUniform v8, AsUniform v9, AsUniform v10, AsUniform v11, AsUniform v12, AsUniform v13, AsUniform v14) => SetUniformFields (Record14 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8 n9 v9 n10 v10 n11 v11 n12 v12 n13 v13 n14 v14) 
(AsUniform v1, AsUniform v2, AsUniform v3, AsUniform v4, AsUniform v5, AsUniform v6, AsUniform v7, AsUniform v8, AsUniform v9, AsUniform v10, AsUniform v11, AsUniform v12, AsUniform v13, AsUniform v14, AsUniform v15) => SetUniformFields (Record15 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8 n9 v9 n10 v10 n11 v11 n12 v12 n13 v13 n14 v14 n15 v15) 
(AsUniform v1, AsUniform v2, AsUniform v3, AsUniform v4, AsUniform v5, AsUniform v6, AsUniform v7, AsUniform v8, AsUniform v9, AsUniform v10, AsUniform v11, AsUniform v12, AsUniform v13, AsUniform v14, AsUniform v15, AsUniform v16) => SetUniformFields (Record16 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8 n9 v9 n10 v10 n11 v11 n12 v12 n13 v13 n14 v14 n15 v15 n16 v16) 
(AsUniform v1, AsUniform v2, AsUniform v3, AsUniform v4, AsUniform v5, AsUniform v6, AsUniform v7, AsUniform v8, AsUniform v9, AsUniform v10, AsUniform v11, AsUniform v12, AsUniform v13, AsUniform v14, AsUniform v15, AsUniform v16, AsUniform v17) => SetUniformFields (Record17 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8 n9 v9 n10 v10 n11 v11 n12 v12 n13 v13 n14 v14 n15 v15 n16 v16 n17 v17) 
(AsUniform v1, AsUniform v2, AsUniform v3, AsUniform v4, AsUniform v5, AsUniform v6, AsUniform v7, AsUniform v8, AsUniform v9, AsUniform v10, AsUniform v11, AsUniform v12, AsUniform v13, AsUniform v14, AsUniform v15, AsUniform v16, AsUniform v17, AsUniform v18) => SetUniformFields (Record18 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8 n9 v9 n10 v10 n11 v11 n12 v12 n13 v13 n14 v14 n15 v15 n16 v16 n17 v17 n18 v18) 
(AsUniform v1, AsUniform v2, AsUniform v3, AsUniform v4, AsUniform v5, AsUniform v6, AsUniform v7, AsUniform v8, AsUniform v9, AsUniform v10, AsUniform v11, AsUniform v12, AsUniform v13, AsUniform v14, AsUniform v15, AsUniform v16, AsUniform v17, AsUniform v18, AsUniform v19) => SetUniformFields (Record19 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8 n9 v9 n10 v10 n11 v11 n12 v12 n13 v13 n14 v14 n15 v15 n16 v16 n17 v17 n18 v18 n19 v19) 
(AsUniform v1, AsUniform v2, AsUniform v3, AsUniform v4, AsUniform v5, AsUniform v6, AsUniform v7, AsUniform v8, AsUniform v9, AsUniform v10, AsUniform v11, AsUniform v12, AsUniform v13, AsUniform v14, AsUniform v15, AsUniform v16, AsUniform v17, AsUniform v18, AsUniform v19, AsUniform v20) => SetUniformFields (Record20 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8 n9 v9 n10 v10 n11 v11 n12 v12 n13 v13 n14 v14 n15 v15 n16 v16 n17 v17 n18 v18 n19 v19 n20 v20) 
(AsUniform v1, AsUniform v2, AsUniform v3, AsUniform v4, AsUniform v5, AsUniform v6, AsUniform v7, AsUniform v8, AsUniform v9, AsUniform v10, AsUniform v11, AsUniform v12, AsUniform v13, AsUniform v14, AsUniform v15, AsUniform v16, AsUniform v17, AsUniform v18, AsUniform v19, AsUniform v20, AsUniform v21) => SetUniformFields (Record21 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8 n9 v9 n10 v10 n11 v11 n12 v12 n13 v13 n14 v14 n15 v15 n16 v16 n17 v17 n18 v18 n19 v19 n20 v20 n21 v21) 
(AsUniform v1, AsUniform v2, AsUniform v3, AsUniform v4, AsUniform v5, AsUniform v6, AsUniform v7, AsUniform v8, AsUniform v9, AsUniform v10, AsUniform v11, AsUniform v12, AsUniform v13, AsUniform v14, AsUniform v15, AsUniform v16, AsUniform v17, AsUniform v18, AsUniform v19, AsUniform v20, AsUniform v21, AsUniform v22) => SetUniformFields (Record22 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8 n9 v9 n10 v10 n11 v11 n12 v12 n13 v13 n14 v14 n15 v15 n16 v16 n17 v17 n18 v18 n19 v19 n20 v20 n21 v21 n22 v22) 
(AsUniform v1, AsUniform v2, AsUniform v3, AsUniform v4, AsUniform v5, AsUniform v6, AsUniform v7, AsUniform v8, AsUniform v9, AsUniform v10, AsUniform v11, AsUniform v12, AsUniform v13, AsUniform v14, AsUniform v15, AsUniform v16, AsUniform v17, AsUniform v18, AsUniform v19, AsUniform v20, AsUniform v21, AsUniform v22, AsUniform v23) => SetUniformFields (Record23 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8 n9 v9 n10 v10 n11 v11 n12 v12 n13 v13 n14 v14 n15 v15 n16 v16 n17 v17 n18 v18 n19 v19 n20 v20 n21 v21 n22 v22 n23 v23) 
(AsUniform v1, AsUniform v2, AsUniform v3, AsUniform v4, AsUniform v5, AsUniform v6, AsUniform v7, AsUniform v8, AsUniform v9, AsUniform v10, AsUniform v11, AsUniform v12, AsUniform v13, AsUniform v14, AsUniform v15, AsUniform v16, AsUniform v17, AsUniform v18, AsUniform v19, AsUniform v20, AsUniform v21, AsUniform v22, AsUniform v23, AsUniform v24) => SetUniformFields (Record24 n1 v1 n2 v2 n3 v3 n4 v4 n5 v5 n6 v6 n7 v7 n8 v8 n9 v9 n10 v10 n11 v11 n12 v12 n13 v13 n14 v14 n15 v15 n16 v16 n17 v17 n18 v18 n19 v19 n20 v20 n21 v21 n22 v22 n23 v23 n24 v24)