sdl_render.odin 8.8 KB

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