Device.h 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. /*
  2. * Copyright (c) 2022, Stephan Unverwerth <s.unverwerth@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/Array.h>
  8. #include <AK/Error.h>
  9. #include <AK/NonnullRefPtr.h>
  10. #include <AK/RefCounted.h>
  11. #include <AK/RefPtr.h>
  12. #include <AK/Vector.h>
  13. #include <LibGPU/DeviceInfo.h>
  14. #include <LibGPU/Enums.h>
  15. #include <LibGPU/Image.h>
  16. #include <LibGPU/ImageFormat.h>
  17. #include <LibGPU/Light.h>
  18. #include <LibGPU/LightModelParameters.h>
  19. #include <LibGPU/Material.h>
  20. #include <LibGPU/RasterPosition.h>
  21. #include <LibGPU/RasterizerOptions.h>
  22. #include <LibGPU/SamplerConfig.h>
  23. #include <LibGPU/StencilConfiguration.h>
  24. #include <LibGPU/TexCoordGenerationConfig.h>
  25. #include <LibGPU/Vertex.h>
  26. #include <LibGfx/Bitmap.h>
  27. #include <LibGfx/Matrix3x3.h>
  28. #include <LibGfx/Matrix4x4.h>
  29. #include <LibGfx/Rect.h>
  30. #include <LibGfx/Size.h>
  31. #include <LibGfx/Vector4.h>
  32. namespace GPU {
  33. class Device {
  34. public:
  35. virtual ~Device() { }
  36. virtual DeviceInfo info() const = 0;
  37. virtual void draw_primitives(PrimitiveType, FloatMatrix4x4 const& model_view_transform, FloatMatrix4x4 const& projection_transform, FloatMatrix4x4 const& texture_transform, Vector<Vertex> const& vertices, Vector<size_t> const& enabled_texture_units) = 0;
  38. virtual void resize(Gfx::IntSize const& min_size) = 0;
  39. virtual void clear_color(FloatVector4 const&) = 0;
  40. virtual void clear_depth(DepthType) = 0;
  41. virtual void clear_stencil(StencilType) = 0;
  42. virtual void blit_color_buffer_to(Gfx::Bitmap& target) = 0;
  43. virtual void blit_to_color_buffer_at_raster_position(Gfx::Bitmap const&) = 0;
  44. virtual void blit_to_depth_buffer_at_raster_position(Vector<DepthType> const&, int, int) = 0;
  45. virtual void set_options(RasterizerOptions const&) = 0;
  46. virtual void set_light_model_params(LightModelParameters const&) = 0;
  47. virtual RasterizerOptions options() const = 0;
  48. virtual LightModelParameters light_model() const = 0;
  49. virtual ColorType get_color_buffer_pixel(int x, int y) = 0;
  50. virtual DepthType get_depthbuffer_value(int x, int y) = 0;
  51. virtual NonnullRefPtr<Image> create_image(ImageFormat format, unsigned width, unsigned height, unsigned depth, unsigned levels, unsigned layers) = 0;
  52. virtual void set_sampler_config(unsigned, SamplerConfig const&) = 0;
  53. virtual void set_light_state(unsigned, Light const&) = 0;
  54. virtual void set_material_state(Face, Material const&) = 0;
  55. virtual void set_stencil_configuration(Face, StencilConfiguration const&) = 0;
  56. virtual RasterPosition raster_position() const = 0;
  57. virtual void set_raster_position(RasterPosition const& raster_position) = 0;
  58. virtual void set_raster_position(FloatVector4 const& position, FloatMatrix4x4 const& model_view_transform, FloatMatrix4x4 const& projection_transform) = 0;
  59. };
  60. }
  61. typedef GPU::Device* (*serenity_gpu_create_device_t)(Gfx::IntSize const& size);
  62. extern "C" GPU::Device* serenity_gpu_create_device(Gfx::IntSize const& size);