#pragma once #include "raycaster/RayCaster.h" #include struct PackedData; class Software_Caster : public RayCaster { public: Software_Caster(); virtual ~Software_Caster(); int init() override; // In interop mode, this will create a GL texture that we share // Otherwise, it will create the pixel buffer and pass that in as an image, retrieving it each draw // Both will create the view matrix, view res buffer void create_viewport(int width, int height, float v_fov, float h_fov) override; void assign_lights(std::vector *data) override; void assign_map(Old_Map *map) override; void assign_camera(Camera *camera) override; void validate() override; // draw will abstract the gl sharing and software rendering // methods of retrieving the screen buffer void compute() override; void draw(sf::RenderWindow* window) override; private: void cast_viewport(); void cast_thread(int start_id, int end_id); void cast_ray(int id); void blit_pixel(sf::Color color, sf::Vector2i position, sf::Vector3i mask); sf::Color global_light(sf::Color in, sf::Vector3i mask); };