summaryrefslogtreecommitdiff
path: root/src/LambdaCube/GL/Type.hs
diff options
context:
space:
mode:
authorJoe Crayne <joe@jerkface.net>2019-05-06 00:30:38 -0400
committerJoe Crayne <joe@jerkface.net>2019-05-06 02:03:02 -0400
commit154b25e0ad8a8ecedb02876215d29c12e87e6c93 (patch)
tree993a82722d7f046a5df4c1972b8b7b3ce2452c98 /src/LambdaCube/GL/Type.hs
parent98b19d6d4076f4f19bdaa3dd8ba795637718bf12 (diff)
Representation-agnostic matrix/vector pipeline inputs.
Diffstat (limited to 'src/LambdaCube/GL/Type.hs')
-rw-r--r--src/LambdaCube/GL/Type.hs90
1 files changed, 18 insertions, 72 deletions
diff --git a/src/LambdaCube/GL/Type.hs b/src/LambdaCube/GL/Type.hs
index bd3f827..97b8e25 100644
--- a/src/LambdaCube/GL/Type.hs
+++ b/src/LambdaCube/GL/Type.hs
@@ -5,6 +5,7 @@ import Data.IORef
5import Data.Int 5import Data.Int
6import Data.IntMap.Strict (IntMap) 6import Data.IntMap.Strict (IntMap)
7import Data.Set (Set) 7import Data.Set (Set)
8import Data.Typeable
8import Data.Map (Map) 9import Data.Map (Map)
9import Data.Vector (Vector) 10import Data.Vector (Vector)
10import Data.Word 11import Data.Word
@@ -14,11 +15,12 @@ import Data.ByteString
14 15
15import Graphics.GL.Core33 16import Graphics.GL.Core33
16 17
17import LambdaCube.Linear 18import LambdaCube.GL.Input.Type
18import LambdaCube.IR 19import LambdaCube.IR
20import LambdaCube.Linear
19import LambdaCube.PipelineSchema 21import LambdaCube.PipelineSchema
20 22
21type GLUniformName = ByteString 23type GLUniformName = String
22 24
23--------------- 25---------------
24-- Input API -- 26-- Input API --
@@ -67,10 +69,21 @@ data ArrayDesc
67 - independent from pipeline 69 - independent from pipeline
68 - per object features: enable/disable visibility, set render ordering 70 - per object features: enable/disable visibility, set render ordering
69-} 71-}
70data GLUniform = forall a. Storable a => GLUniform !InputType !(IORef a) 72data GLUniform = forall c. Typeable c => GLTypedUniform (TypeTag c) (IORef (GLUniformValue c))
73 | GLUniform !InputType !(IORef TextureData)
74
75data GLUniformValue c = forall a. GLData a c => GLUniformValue a
71 76
72instance Show GLUniform where 77instance Show GLUniform where
73 show (GLUniform t _) = "GLUniform " ++ show t 78 showsPrec d (GLTypedUniform t _) = paren '('
79 . mappend "GLUniform "
80 . showsPrec (d+10) (unwitnessType t)
81 . paren ')'
82 where paren | d<=10 = (:)
83 | otherwise = \_ -> id
84 showsPrec d (GLUniform t _) = paren '(' . mappend "GLUniform " . showsPrec (d+10) t . paren ')'
85 where paren | d<=10 = (:)
86 | otherwise = \_ -> id
74 87
75data OrderJob 88data OrderJob
76 = Generate 89 = Generate
@@ -90,7 +103,6 @@ data GLStorage
90 , slotMap :: Map String SlotName 103 , slotMap :: Map String SlotName
91 , slotVector :: Vector (IORef GLSlot) 104 , slotVector :: Vector (IORef GLSlot)
92 , objSeed :: IORef Int 105 , objSeed :: IORef Int
93 , uniformSetter :: Map GLUniformName InputSetter
94 , uniformSetup :: Map String GLUniform 106 , uniformSetup :: Map String GLUniform
95 , screenSize :: IORef (Word,Word) 107 , screenSize :: IORef (Word,Word)
96 , pipelines :: IORef (Vector (Maybe GLRenderer)) -- attached pipelines 108 , pipelines :: IORef (Vector (Maybe GLRenderer)) -- attached pipelines
@@ -102,7 +114,6 @@ data Object -- internal type
102 , objPrimitive :: Primitive 114 , objPrimitive :: Primitive
103 , objIndices :: Maybe (IndexStream Buffer) 115 , objIndices :: Maybe (IndexStream Buffer)
104 , objAttributes :: Map String (Stream Buffer) 116 , objAttributes :: Map String (Stream Buffer)
105 , objUniSetter :: Map GLUniformName InputSetter
106 , objUniSetup :: Map String GLUniform 117 , objUniSetup :: Map String GLUniform
107 , objOrder :: IORef Int 118 , objOrder :: IORef Int
108 , objEnabled :: IORef Bool 119 , objEnabled :: IORef Bool
@@ -232,72 +243,7 @@ data GLObjectCommand
232type SetterFun a = a -> IO () 243type SetterFun a = a -> IO ()
233 244
234-- user will provide scalar input data via this type 245-- user will provide scalar input data via this type
235data InputSetter 246type InputSetter = GLUniform
236 = SBool (SetterFun Bool)
237 | SV2B (SetterFun V2B)
238 | SV3B (SetterFun V3B)
239 | SV4B (SetterFun V4B)
240 | SWord (SetterFun Word32)
241 | SV2U (SetterFun V2U)
242 | SV3U (SetterFun V3U)
243 | SV4U (SetterFun V4U)
244 | SInt (SetterFun Int32)
245 | SV2I (SetterFun V2I)
246 | SV3I (SetterFun V3I)
247 | SV4I (SetterFun V4I)
248 | SFloat (SetterFun Float)
249 | SV2F (SetterFun V2F)
250 | SV3F (SetterFun V3F)
251 | SV4F (SetterFun V4F)
252 | SM22F (SetterFun M22F)
253 | SM23F (SetterFun M23F)
254 | SM24F (SetterFun M24F)
255 | SM32F (SetterFun M32F)
256 | SM33F (SetterFun M33F)
257 | SM34F (SetterFun M34F)
258 | SM42F (SetterFun M42F)
259 | SM43F (SetterFun M43F)
260 | SM44F (SetterFun M44F)
261 -- shadow textures
262 | SSTexture1D
263 | SSTexture2D
264 | SSTextureCube
265 | SSTexture1DArray
266 | SSTexture2DArray
267 | SSTexture2DRect
268 -- float textures
269 | SFTexture1D
270 | SFTexture2D (SetterFun TextureData)
271 | SFTexture3D
272 | SFTextureCube
273 | SFTexture1DArray
274 | SFTexture2DArray
275 | SFTexture2DMS
276 | SFTexture2DMSArray
277 | SFTextureBuffer
278 | SFTexture2DRect
279 -- int textures
280 | SITexture1D
281 | SITexture2D
282 | SITexture3D
283 | SITextureCube
284 | SITexture1DArray
285 | SITexture2DArray
286 | SITexture2DMS
287 | SITexture2DMSArray
288 | SITextureBuffer
289 | SITexture2DRect
290 -- uint textures
291 | SUTexture1D
292 | SUTexture2D
293 | SUTexture3D
294 | SUTextureCube
295 | SUTexture1DArray
296 | SUTexture2DArray
297 | SUTexture2DMS
298 | SUTexture2DMSArray
299 | SUTextureBuffer
300 | SUTexture2DRect
301 247
302-- buffer handling 248-- buffer handling
303{- 249{-