2
0

sdl_render.odin 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. package sdl2
  2. import "core:c"
  3. when ODIN_OS == "windows" { foreign import lib "SDL2.lib" }
  4. when ODIN_OS == "linux" { foreign import lib "system:SDL2" }
  5. when ODIN_OS == "darwin" { foreign import lib "system:SDL2" }
  6. when ODIN_OS == "freebsd" { foreign import lib "system:SDL2" }
  7. RendererFlag :: enum u32 {
  8. SOFTWARE = 0, /**< The renderer is a software fallback */
  9. ACCELERATED = 1, /**< The renderer uses hardware acceleration */
  10. PRESENTVSYNC = 2, /**< Present is synchronized with the refresh rate */
  11. TARGETTEXTURE = 3, /**< The renderer supports rendering to texture */
  12. }
  13. RendererFlags :: distinct bit_set[RendererFlag; u32]
  14. RENDERER_SOFTWARE :: RendererFlags{.SOFTWARE}
  15. RENDERER_ACCELERATED :: RendererFlags{.ACCELERATED}
  16. RENDERER_PRESENTVSYNC :: RendererFlags{.PRESENTVSYNC}
  17. RENDERER_TARGETTEXTURE :: RendererFlags{.TARGETTEXTURE}
  18. RendererInfo :: struct {
  19. name: cstring, /**< The name of the renderer */
  20. flags: RendererFlags, /**< Supported ::SDL_RendererFlags */
  21. num_texture_formats: u32, /**< The number of available texture formats */
  22. texture_formats: [16]u32, /**< The available texture formats */
  23. max_texture_width: c.int, /**< The maximum texture width */
  24. max_texture_height: c.int, /**< The maximum texture height */
  25. }
  26. /**
  27. * The scaling mode for a texture.
  28. */
  29. ScaleMode :: enum c.int {
  30. Nearest, /**< nearest pixel sampling */
  31. Linear, /**< linear filtering */
  32. Best, /**< anisotropic filtering */
  33. }
  34. /**
  35. * The access pattern allowed for a texture.
  36. */
  37. TextureAccess :: enum c.int {
  38. STATIC, /**< Changes rarely, not lockable */
  39. STREAMING, /**< Changes frequently, lockable */
  40. TARGET, /**< Texture can be used as a render target */
  41. }
  42. SDL_TEXTUREMODULATE_NONE :: 0x00000000 /**< No modulation */
  43. SDL_TEXTUREMODULATE_COLOR :: 0x00000001 /**< srcC = srcC * color */
  44. SDL_TEXTUREMODULATE_ALPHA :: 0x00000002 /**< srcA = srcA * alpha */
  45. /**
  46. * Flip constants for SDL_RenderCopyEx
  47. */
  48. RendererFlip :: enum c.int {
  49. NONE = 0x00000000, /**< Do not flip */
  50. HORIZONTAL = 0x00000001, /**< flip horizontally */
  51. VERTICAL = 0x00000002, /**< flip vertically */
  52. }
  53. Renderer :: struct {}
  54. Texture :: struct {}
  55. @(default_calling_convention="c", link_prefix="SDL_")
  56. foreign lib {
  57. GetNumRenderDrivers :: proc() -> c.int ---
  58. GetRenderDriverInfo :: proc(index: c.int, info: ^RendererInfo) -> c.int ---
  59. CreateWindowAndRenderer :: proc(width, height: c.int, window_flags: WindowFlags, window: ^^Window, renderer: ^^Renderer) -> c.int ---
  60. CreateRenderer :: proc(window: ^Window, index: c.int, flags: RendererFlags) -> ^Renderer ---
  61. CreateSoftwareRenderer :: proc(surface: ^Surface) -> ^Renderer ---
  62. GetRenderer :: proc(window: ^Window) -> ^Renderer ---
  63. GetRendererInfo :: proc(renderer: ^Renderer, info: ^RendererInfo) -> c.int ---
  64. GetRendererOutputSize :: proc(renderer: ^Renderer, w, h: ^c.int) -> c.int ---
  65. CreateTexture :: proc(renderer: ^Renderer, format: u32, access: TextureAccess, w, h: c.int) -> ^Texture ---
  66. CreateTextureFromSurface :: proc(renderer: ^Renderer, surface: ^Surface) -> ^Texture ---
  67. QueryTexture :: proc(texture: ^Texture, format: ^u32, access, w, h: ^c.int) -> c.int ---
  68. SetTextureColorMod :: proc(texture: ^Texture, r, g, b: u8) -> c.int ---
  69. GetTextureColorMod :: proc(texture: ^Texture, r, g, b: ^u8) -> c.int ---
  70. SetTextureAlphaMod :: proc(texture: ^Texture, alpha: u8) -> c.int ---
  71. GetTextureAlphaMod :: proc(texture: ^Texture, alpha: ^u8) -> c.int ---
  72. SetTextureBlendMode :: proc(texture: ^Texture, blendMode: BlendMode) -> c.int ---
  73. GetTextureBlendMode :: proc(texture: ^Texture, blendMode: ^BlendMode) -> c.int ---
  74. SetTextureScaleMode :: proc(texture: ^Texture, scaleMode: ScaleMode) -> c.int ---
  75. GetTextureScaleMode :: proc(texture: ^Texture, scaleMode: ^ScaleMode) -> c.int ---
  76. UpdateTexture :: proc(texture: ^Texture, rect: ^Rect, pixels: rawptr, pitch: c.int) -> c.int ---
  77. UpdateYUVTexture :: proc(texture: ^Texture, rect: ^Rect, Yplane: ^u8, Ypitch: c.int, Uplane: ^u8, Upitch: c.int, Vplane: ^u8, Vpitch: c.int) -> c.int ---
  78. UpdateNVTexture :: proc(texture: ^Texture, rect: ^Rect, Yplane: ^u8, Ypitch: c.int, UVplane: ^u8, UVpitch: c.int) -> c.int ---
  79. LockTexture :: proc(texture: ^Texture, rect: ^Rect, pixels: ^rawptr, pitch: ^c.int) -> c.int ---
  80. LockTextureToSurface :: proc(texture: ^Texture, rect: ^Rect, surface: ^^Surface) -> c.int ---
  81. UnlockTexture :: proc(texture: ^Texture) ---
  82. RenderTargetSupported :: proc(renderer: ^PixelFormatEnum) -> bool ---
  83. SetRenderTarget :: proc(renderer: ^Renderer, texture: ^Texture) -> c.int ---
  84. GetRenderTarget :: proc(renderer: ^Renderer) -> ^Texture ---
  85. RenderSetLogicalSize :: proc(renderer: ^Renderer, w, h: c.int) -> c.int ---
  86. RenderGetLogicalSize :: proc(renderer: ^Renderer, w, h: ^c.int) ---
  87. RenderSetIntegerScale :: proc(renderer: ^Renderer, enable: bool) -> c.int ---
  88. RenderGetIntegerScale :: proc(renderer: ^Renderer) -> bool ---
  89. RenderSetViewport :: proc(renderer: ^Renderer, rect: ^Rect) -> c.int ---
  90. RenderGetViewport :: proc(renderer: ^Renderer, rect: ^Rect) ---
  91. RenderSetClipRect :: proc(renderer: ^Renderer, rect: ^Rect) -> c.int ---
  92. RenderGetClipRect :: proc(renderer: ^Renderer, rect: ^Rect) ---
  93. RenderIsClipEnabled :: proc(renderer: ^Renderer) -> bool ---
  94. RenderSetScale :: proc(renderer: ^Renderer, scaleX, scaleY: f32) -> c.int ---
  95. RenderGetScale :: proc(renderer: ^Renderer, scaleX, scaleY: ^f32) ---
  96. SetRenderDrawColor :: proc(renderer: ^Renderer, r, g, b, a: u8) -> c.int ---
  97. GetRenderDrawColor :: proc(renderer: ^Renderer, r, g, b, a: ^u8) -> c.int ---
  98. SetRenderDrawBlendMode :: proc(renderer: ^Renderer, blendMode: BlendMode) -> c.int ---
  99. GetRenderDrawBlendMode :: proc(renderer: ^Renderer, blendMode: ^BlendMode) -> c.int ---
  100. RenderClear :: proc(renderer: ^Renderer) -> c.int ---
  101. RenderDrawPoint :: proc(renderer: ^Renderer, x, y: c.int) -> c.int ---
  102. RenderDrawPoints :: proc(renderer: ^Renderer, points: [^]Point, count: c.int) -> c.int ---
  103. RenderDrawLine :: proc(renderer: ^Renderer, x1, y1, x2, y2: c.int) -> c.int ---
  104. RenderDrawLines :: proc(renderer: ^Renderer, points: [^]Point, count: c.int) -> c.int ---
  105. RenderDrawRect :: proc(renderer: ^Renderer, rect: ^Rect) -> c.int ---
  106. RenderDrawRects :: proc(renderer: ^Renderer, rect: ^Rect, count: c.int) -> c.int ---
  107. RenderFillRect :: proc(renderer: ^Renderer, rect: ^Rect) -> c.int ---
  108. RenderFillRects :: proc(renderer: ^Renderer, rects: [^]Rect, count: c.int) -> c.int ---
  109. RenderCopy :: proc(renderer: ^Renderer, texture: ^Texture, srcrect: ^Rect, dstrect: ^Rect) -> c.int ---
  110. RenderCopyEx :: proc(renderer: ^Renderer, texture: ^Texture, srcrect: ^Rect, dstrect: ^Rect, angle: f64, center: ^Point, flip: RendererFlip) -> c.int ---
  111. RenderDrawPointF :: proc(renderer: ^Renderer, x, y: f32) -> c.int ---
  112. RenderDrawPointsF :: proc(renderer: ^Renderer, points: [^]FPoint, count: c.int) -> c.int ---
  113. RenderDrawLineF :: proc(renderer: ^Renderer, x1, y1, x2, y2: f32) -> c.int ---
  114. RenderDrawLinesF :: proc(renderer: ^Renderer, points: [^]FPoint, count: c.int) -> c.int ---
  115. RenderDrawRectF :: proc(renderer: ^Renderer, rect: ^FRect) -> c.int ---
  116. RenderDrawRectsF :: proc(renderer: ^Renderer, rects: [^]FRect, count: c.int) -> c.int ---
  117. RenderFillRectF :: proc(renderer: ^Renderer, rect: ^FRect) -> c.int ---
  118. RenderFillRectsF :: proc(renderer: ^Renderer, rects: [^]FRect, count: c.int) -> c.int ---
  119. RenderCopyF :: proc(renderer: ^Renderer, texture: ^Texture, srcrect: ^Rect, dstrect: ^FRect) -> c.int ---
  120. RenderCopyExF :: proc(renderer: ^Renderer, texture: ^Texture, srcrect: ^Rect, dstrect: ^FRect, angle: f64, center: ^FPoint, flip: RendererFlip) -> c.int ---
  121. RenderReadPixels :: proc(renderer: ^Renderer, rect: ^Rect, format: u32, pixels: rawptr, pitch: c.int) -> c.int ---
  122. RenderPresent :: proc(renderer: ^Renderer) ---
  123. DestroyTexture :: proc(texture: ^Texture) ---
  124. DestroyRenderer :: proc(renderer: ^Renderer) ---
  125. RenderFlush :: proc(renderer: ^Renderer) -> c.int ---
  126. GL_BindTexture :: proc(texture: ^Texture, texw, texh: ^f32) -> c.int ---
  127. GL_UnbindTexture :: proc(texture: ^Texture) -> c.int ---
  128. RenderGetMetalLayer :: proc(renderer: ^Renderer) -> rawptr ---
  129. RenderGetMetalCommandEncoder :: proc(renderer: ^Renderer) -> rawptr ---
  130. }