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 (
131131  renderFillRectF ,
132132  renderFillRectsF ,
133133  renderGeometry ,
134+   renderGeometryRaw ,
134135#endif 
135136  renderGetClipRect ,
136137  renderGetLogicalSize ,
@@ -361,6 +362,7 @@ foreign import ccall "SDL.h SDL_RenderDrawRectsF" renderDrawRectsFFFI :: Rendere
361362foreign  import  ccall " SDL.h SDL_RenderFillRectF"   renderFillRectFFFI ::  Renderer  ->  Ptr  FRect  ->  IO   CInt 
362363foreign  import  ccall " SDL.h SDL_RenderFillRectsF"   renderFillRectsFFFI ::  Renderer  ->  Ptr  FRect  ->  CInt  ->  IO   CInt 
363364foreign  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 
364366#endif 
365367foreign  import  ccall " sqlhelper.c SDLHelper_RenderFillRectEx"   renderFillRectExFFI ::  Renderer  ->  CInt  ->  CInt  ->  CInt  ->  CInt  ->  IO   CInt 
366368foreign  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
954956renderGeometry  ::  MonadIO  m  =>  Renderer  ->  Texture  ->  Ptr  Vertex  ->  CInt  ->  Ptr  CInt  ->  CInt  ->  m  CInt 
955957renderGeometry v1 v2 v3 v4 v5 v6 =  liftIO $  renderGeometryFFI v1 v2 v3 v4 v5 v6
956958{-# 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 #-}
957963#endif 
958964
959965
Original file line number Diff line number Diff line change @@ -44,6 +44,7 @@ module SDL.Video.Renderer
4444  , fillRectsF 
4545  , renderGeometry 
4646  , Raw. Vertex (.. )
47+   , renderGeometryRaw 
4748#endif 
4849  , present 
4950
@@ -764,6 +765,27 @@ renderGeometry (Renderer r) mtexture vertices indices = liftIO $
764765
765766    ipSize =  fromIntegral  (SV. length  indices)
766767
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 )
767789#endif 
768790
769791
    
 
   
 
     
   
   
          
     
  
    
     
 
    
      
     
 
     
    You can’t perform that action at this time.
  
 
    
  
     
    
      
        
     
 
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments