render_backend_interface.odin 1.8 KB

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