diff options
author | Joe Crayne <joe@jerkface.net> | 2019-05-06 00:30:38 -0400 |
---|---|---|
committer | Joe Crayne <joe@jerkface.net> | 2019-05-06 02:03:02 -0400 |
commit | 154b25e0ad8a8ecedb02876215d29c12e87e6c93 (patch) | |
tree | 993a82722d7f046a5df4c1972b8b7b3ce2452c98 /src/LambdaCube/GL/Type.hs | |
parent | 98b19d6d4076f4f19bdaa3dd8ba795637718bf12 (diff) |
Representation-agnostic matrix/vector pipeline inputs.
Diffstat (limited to 'src/LambdaCube/GL/Type.hs')
-rw-r--r-- | src/LambdaCube/GL/Type.hs | 90 |
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 | |||
5 | import Data.Int | 5 | import Data.Int |
6 | import Data.IntMap.Strict (IntMap) | 6 | import Data.IntMap.Strict (IntMap) |
7 | import Data.Set (Set) | 7 | import Data.Set (Set) |
8 | import Data.Typeable | ||
8 | import Data.Map (Map) | 9 | import Data.Map (Map) |
9 | import Data.Vector (Vector) | 10 | import Data.Vector (Vector) |
10 | import Data.Word | 11 | import Data.Word |
@@ -14,11 +15,12 @@ import Data.ByteString | |||
14 | 15 | ||
15 | import Graphics.GL.Core33 | 16 | import Graphics.GL.Core33 |
16 | 17 | ||
17 | import LambdaCube.Linear | 18 | import LambdaCube.GL.Input.Type |
18 | import LambdaCube.IR | 19 | import LambdaCube.IR |
20 | import LambdaCube.Linear | ||
19 | import LambdaCube.PipelineSchema | 21 | import LambdaCube.PipelineSchema |
20 | 22 | ||
21 | type GLUniformName = ByteString | 23 | type 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 | -} |
70 | data GLUniform = forall a. Storable a => GLUniform !InputType !(IORef a) | 72 | data GLUniform = forall c. Typeable c => GLTypedUniform (TypeTag c) (IORef (GLUniformValue c)) |
73 | | GLUniform !InputType !(IORef TextureData) | ||
74 | |||
75 | data GLUniformValue c = forall a. GLData a c => GLUniformValue a | ||
71 | 76 | ||
72 | instance Show GLUniform where | 77 | instance 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 | ||
75 | data OrderJob | 88 | data 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 | |||
232 | type SetterFun a = a -> IO () | 243 | type 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 |
235 | data InputSetter | 246 | type 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 | {- |