Files
panopainter/src/node_panel_grid.h
2019-01-19 20:39:25 +01:00

88 lines
2.6 KiB
C++

#pragma once
#include "node.h"
#include "node_stroke_preview.h"
#include "node_slider.h"
#include "brush.h"
#include "node_checkbox.h"
#include "node_combobox.h"
#include "node_image_texture.h"
#include "node_button.h"
#include "shape.h"
#include "image.h"
#define NANORT_USE_CPP11_FEATURE
#define NANORT_ENABLE_PARALLEL_BUILD
#include "nanort.h"
class NodeHeightmapOverlay : public NodeBorder
{
NodeBorder* m_picker{ nullptr };
bool dragging = false;
public:
glm::vec2 m_value{ 0.5f, 0.5f };
glm::vec2 m_old_value{ 0.f };
std::function<void(Node* target, glm::vec2 value)> on_value_changed;
virtual Node* clone_instantiate() const override;
virtual void clone_finalize(Node* dest) const override;
virtual void init() override;
void set_value(float x, float y);
virtual kEventResult handle_event(Event* e) override;
virtual void draw() override;
virtual void handle_resize(glm::vec2 old_size, glm::vec2 new_size) override;
};
class NodePanelGrid : public Node
{
public:
enum class ShadeMode : uint8_t { Transparent, Flat, Solid, Textured };
NodeSliderH* m_groud_opacity;
NodeSliderH* m_groud_value;
NodeComboBox* m_groud_resolution;
NodeSliderH* m_groud_offset;
NodeImageTexture* m_hm_preview;
NodeButton* m_hm_load;
NodeButton* m_hm_clear;
NodeButton* m_hm_reload;
NodeComboBox* m_hm_shading;
NodeSliderH* m_hm_height;
NodeSliderH* m_hm_wireframe;
NodeSliderH* m_hm_thickness;
NodeSliderH* m_hm_lyaw;
NodeSliderH* m_hm_lpitch;
NodeSliderH* m_hm_ambient;
NodeSliderH* m_hm_radius;
NodeComboBox* m_hm_texres;
NodeComboBox* m_hm_samples;
NodeButton* m_render;
NodeButton* m_commit;
HeightmapPlane m_hm_plane;
NodeHeightmapOverlay* m_hm_preview_nav;
Plane m_plane;
Image m_hm_image;
Texture2D m_texture;
Sampler m_sampler_mipmap;
Sampler m_sampler_linear;
std::string m_file_path;
nanort::BVHAccel<float> m_rt_accel;
bool m_rt_dirty = true;;
ShadeMode m_shade_mode{ ShadeMode::Transparent };
GLfloat m_line_range[2];
GLfloat m_line_granularity;
virtual Node* clone_instantiate() const override;
virtual void clone_finalize(Node* dest) const override;
virtual void init() override;
void init_controls();
int get_samples() const;
int get_texres() const;
float get_radius() const;
float get_ambient() const;
float get_thickness() const;
float get_resolution() const;
float get_height() const;
float get_offset() const;
void draw_heightmap(const glm::mat4& proj, const glm::mat4& camera, bool commit) const;
void bake_uvs();
};