File tree Expand file tree Collapse file tree 2 files changed +28
-0
lines changed Expand file tree Collapse file tree 2 files changed +28
-0
lines changed Original file line number Diff line number Diff line change @@ -131,6 +131,7 @@ module SDL.Raw.Video (
131
131
renderFillRectF ,
132
132
renderFillRectsF ,
133
133
renderGeometry ,
134
+ renderGeometryRaw ,
134
135
#endif
135
136
renderGetClipRect ,
136
137
renderGetLogicalSize ,
@@ -361,6 +362,7 @@ foreign import ccall "SDL.h SDL_RenderDrawRectsF" renderDrawRectsFFFI :: Rendere
361
362
foreign import ccall " SDL.h SDL_RenderFillRectF" renderFillRectFFFI :: Renderer -> Ptr FRect -> IO CInt
362
363
foreign import ccall " SDL.h SDL_RenderFillRectsF" renderFillRectsFFFI :: Renderer -> Ptr FRect -> CInt -> IO CInt
363
364
foreign import ccall " SDL.h SDL_RenderGeometry" renderGeometryFFI :: Renderer -> Texture -> Ptr Vertex -> CInt -> Ptr CInt -> CInt -> IO CInt
365
+ foreign import ccall " SDL.h SDL_RenderGeometryRaw" renderGeometryRawFFI :: Renderer -> Texture -> Ptr FPoint -> CInt -> Ptr Color -> CInt -> Ptr FPoint -> CInt -> CInt -> Ptr () -> CInt -> CInt -> IO CInt
364
366
#endif
365
367
foreign import ccall " sqlhelper.c SDLHelper_RenderFillRectEx" renderFillRectExFFI :: Renderer -> CInt -> CInt -> CInt -> CInt -> IO CInt
366
368
foreign import ccall " SDL.h SDL_RenderFillRects" renderFillRectsFFI :: Renderer -> Ptr Rect -> CInt -> IO CInt
@@ -954,6 +956,10 @@ renderFillRectsF v1 v2 v3 = liftIO $ renderFillRectsFFFI v1 v2 v3
954
956
renderGeometry :: MonadIO m => Renderer -> Texture -> Ptr Vertex -> CInt -> Ptr CInt -> CInt -> m CInt
955
957
renderGeometry v1 v2 v3 v4 v5 v6 = liftIO $ renderGeometryFFI v1 v2 v3 v4 v5 v6
956
958
{-# INLINE renderGeometry #-}
959
+
960
+ renderGeometryRaw :: MonadIO m => Renderer -> Texture -> Ptr FPoint -> CInt -> Ptr Color -> CInt -> Ptr FPoint -> CInt -> CInt -> Ptr () -> CInt -> CInt -> m CInt
961
+ renderGeometryRaw v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 = liftIO $ renderGeometryRawFFI v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12
962
+ {-# INLINE renderGeometryRaw #-}
957
963
#endif
958
964
959
965
Original file line number Diff line number Diff line change @@ -44,6 +44,7 @@ module SDL.Video.Renderer
44
44
, fillRectsF
45
45
, renderGeometry
46
46
, Raw. Vertex (.. )
47
+ , renderGeometryRaw
47
48
#endif
48
49
, present
49
50
@@ -764,6 +765,27 @@ renderGeometry (Renderer r) mtexture vertices indices = liftIO $
764
765
765
766
ipSize = fromIntegral (SV. length indices)
766
767
768
+ -- | Render a list of triangles, optionally using a texture and indices into the
769
+ -- vertex array Color and alpha modulation is done per vertex
770
+ -- (SDL_SetTextureColorMod and SDL_SetTextureAlphaMod are ignored).
771
+ --
772
+ -- This version allows storeing vertex data in arbitrary types, but you have to provide
773
+ -- pointers and strides yourself.
774
+ renderGeometryRaw :: forall ix m . (Storable ix , MonadIO m ) => Renderer -> Maybe Texture -> Ptr Raw. FPoint -> CInt -> Ptr Raw. Color -> CInt -> Ptr Raw. FPoint -> CInt -> CInt -> SV. Vector ix -> m ()
775
+ renderGeometryRaw (Renderer r) mtexture xy xyStride color colorStride uv uvStride numVertices indices = liftIO $
776
+ throwIfNeg_ " SDL.Video.renderGeometryRaw" " SDL_RenderGeometryRaw" $
777
+ SV. unsafeWith indices $ \ ip ->
778
+ Raw. renderGeometryRaw r t xy xyStride color colorStride uv uvStride numVertices (castPtr $ ipOrNull ip) ipSize sizeOfip
779
+ where
780
+ t = case mtexture of
781
+ Just (Texture found) -> found
782
+ Nothing -> nullPtr
783
+
784
+ ipOrNull ip = if ipSize == 0 then nullPtr else ip
785
+
786
+ ipSize = fromIntegral (SV. length indices)
787
+
788
+ sizeOfip = fromIntegral $ sizeOf (undefined :: ix )
767
789
#endif
768
790
769
791
You can’t perform that action at this time.
0 commit comments