1
0
Fork 0
Univerxel/src/contouring/FlatSurroundingBox.hpp

50 lines
1.8 KiB
C++
Raw Normal View History

2020-07-18 15:42:45 +00:00
#pragma once
#include "AbstractFlat.hpp"
#include "surrounding.hpp"
2020-07-22 20:55:13 +00:00
#include "../data/safe_queue.hpp"
#include "../data/safe_priority_queue.hpp"
#include "../data/circular_buffer.hpp"
#include "../render/buffer/ShortIndexedBuffer.hpp"
#include <thread>
#define REPORT_BUFFER_SIZE 128
2020-07-18 15:42:45 +00:00
namespace contouring {
class FlatSurroundingBox: public AbstractFlat {
public:
2020-07-22 20:55:13 +00:00
FlatSurroundingBox(const std::string&);
virtual ~FlatSurroundingBox();
void update(const camera_pos&) override;
void onGui() override;
2020-07-18 15:42:45 +00:00
/// Chunk data change
2020-07-23 19:39:08 +00:00
void onUpdate(const chunk_pos &, const robin_hood::unordered_map<chunk_pos, std::shared_ptr<Chunk>> &, Faces) override;
2020-07-18 15:42:45 +00:00
/// Chunk existante ping
/// @note notify for chunks entering view while moving
2020-07-23 19:39:08 +00:00
void onNotify(const chunk_pos &, const robin_hood::unordered_map<chunk_pos, std::shared_ptr<Chunk>> &) override;
2020-07-18 15:42:45 +00:00
2020-07-22 20:55:13 +00:00
protected:
safe_priority_queue_map<chunk_pos, surrounding::chunks, int> loadQueue;
safe_queue<std::pair<chunk_pos, ShortIndexedBuffer::Data>> loadedQueue;
struct report {
circular_buffer<float> count = circular_buffer<float>(REPORT_BUFFER_SIZE, 0); // MAYBE: store int
circular_buffer<float> load = circular_buffer<float>(REPORT_BUFFER_SIZE, 0);
circular_buffer<float> loaded = circular_buffer<float>(REPORT_BUFFER_SIZE, 0);
} reports;
bool running = true;
std::vector<std::thread> workers;
2020-07-23 19:39:08 +00:00
void enqueue(const chunk_pos &, const robin_hood::unordered_map<chunk_pos, std::shared_ptr<Chunk>> &);
2020-07-22 20:55:13 +00:00
2020-07-18 15:42:45 +00:00
private:
static inline bool isTransparent(const surrounding::chunks &surrounding, const std::pair<ushort, ushort> &idx);
static void render(const surrounding::chunks &surrounding, std::vector<VertexData> &vertices);
};
}