render_backend_interface.odin 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package karl2d
  2. import "base:runtime"
  3. Shader_Constant_Desc :: struct {
  4. name: string,
  5. size: int,
  6. }
  7. Shader_Texture_Bindpoint_Desc :: struct {
  8. name: string,
  9. }
  10. Shader_Desc :: struct {
  11. constants: []Shader_Constant_Desc,
  12. texture_bindpoints: []Shader_Texture_Bindpoint_Desc,
  13. inputs: []Shader_Input,
  14. }
  15. Render_Backend_Interface :: struct #all_or_none {
  16. state_size: proc() -> int,
  17. init: proc(state: rawptr, window_handle: Window_Handle, swapchain_width, swapchain_height: int, allocator := context.allocator),
  18. shutdown: proc(),
  19. clear: proc(render_target: Render_Target_Handle, color: Color),
  20. present: proc(),
  21. draw: proc(
  22. shader: Shader,
  23. render_target: Render_Target_Handle,
  24. bound_textures: []Texture_Handle,
  25. scissor: Maybe(Rect),
  26. blend: Blend_Mode,
  27. vertex_buffer: []u8,
  28. ),
  29. set_internal_state: proc(state: rawptr),
  30. create_texture: proc(width: int, height: int, format: Pixel_Format) -> Texture_Handle,
  31. load_texture: proc(data: []u8, width: int, height: int, format: Pixel_Format) -> Texture_Handle,
  32. update_texture: proc(handle: Texture_Handle, data: []u8, rect: Rect) -> bool,
  33. destroy_texture: proc(handle: Texture_Handle),
  34. create_render_texture: proc(width: int, height: int) -> (Texture_Handle, Render_Target_Handle),
  35. destroy_render_target: proc(render_texture: Render_Target_Handle),
  36. set_texture_filter: proc(
  37. handle: Texture_Handle,
  38. scale_down_filter: Texture_Filter,
  39. scale_up_filter: Texture_Filter,
  40. mip_filter: Texture_Filter,
  41. ),
  42. load_shader: proc(
  43. vertex_shader_data: []byte,
  44. pixel_shader_data: []byte,
  45. desc_allocator: runtime.Allocator,
  46. layout_formats: []Pixel_Format = {},
  47. ) -> (
  48. handle: Shader_Handle,
  49. desc: Shader_Desc,
  50. ),
  51. destroy_shader: proc(shader: Shader_Handle),
  52. resize_swapchain: proc(width, height: int),
  53. get_swapchain_width: proc() -> int,
  54. get_swapchain_height: proc() -> int,
  55. flip_z: proc() -> bool,
  56. default_shader_vertex_source: proc() -> []byte,
  57. default_shader_fragment_source: proc() -> []byte,
  58. }