sdl_render.odin 8.8 KB

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