remove glm swizzling for better debugability
This commit is contained in:
@@ -142,8 +142,8 @@ void ui::Canvas::snap_history(const std::vector<int>& planes)
|
||||
m_layers[m_current_layer_idx].m_rtt[i].bindFramebuffer();
|
||||
|
||||
// save image before commit
|
||||
glm::vec2 box_or = m_layers[m_current_layer_idx].m_dirty_box[i].xy();
|
||||
glm::vec2 box_sz = m_layers[m_current_layer_idx].m_dirty_box[i].zw() - m_layers[m_current_layer_idx].m_dirty_box[i].xy();
|
||||
glm::vec2 box_or = xy(m_layers[m_current_layer_idx].m_dirty_box[i]);
|
||||
glm::vec2 box_sz = zw(m_layers[m_current_layer_idx].m_dirty_box[i]) - xy(m_layers[m_current_layer_idx].m_dirty_box[i]);
|
||||
action->m_image[i] = std::make_unique<uint8_t[]>(box_sz.x * box_sz.y * 4);
|
||||
glReadPixels(box_or.x, box_or.y, box_sz.x, box_sz.y, GL_RGBA, GL_UNSIGNED_BYTE, action->m_image[i].get());
|
||||
|
||||
@@ -216,7 +216,7 @@ void ui::Canvas::stroke_draw()
|
||||
{
|
||||
// check if plane is even visible
|
||||
glm::vec4 forward = m_mv * glm::vec4(0, 0, 1, 1);
|
||||
float dot = glm::dot(forward.xyz(), m_plane_normal[i]);
|
||||
float dot = glm::dot(xyz(forward), m_plane_normal[i]);
|
||||
// TODO: use better threshold than 0.3
|
||||
// some trigonometric shit, tangent and stuff
|
||||
// if (dot < -0.3f)
|
||||
@@ -263,7 +263,7 @@ void ui::Canvas::stroke_draw()
|
||||
for (int j = 0; j < 4; j++)
|
||||
{
|
||||
glm::vec3 ray_origin, ray_dir;
|
||||
point_unproject(s.pos + off[j] * glm::orientate2(-s.angle), { 0, 0, m_box.zw }, m_mv, m_proj, ray_origin, ray_dir);
|
||||
point_unproject(s.pos + off[j] * glm::orientate2(-s.angle), { 0, 0, zw(m_box) }, m_mv, m_proj, ray_origin, ray_dir);
|
||||
glm::vec3 hit;
|
||||
if (ray_intersect(ray_origin, ray_dir, m_plane_origin[i], m_plane_normal[i], m_plane_tangent[i], hit))
|
||||
{
|
||||
@@ -294,8 +294,8 @@ void ui::Canvas::stroke_draw()
|
||||
glm::vec2 bb_max(0, 0);
|
||||
for (int j = 0; j < 4; j++)
|
||||
{
|
||||
bb_min = glm::max({ 0, 0 }, glm::min(bb_min, P[j].xy()));
|
||||
bb_max = glm::min({ m_width, m_height }, glm::max(bb_max, P[j].xy()));
|
||||
bb_min = glm::max({ 0, 0 }, glm::min(bb_min, xy(P[j])));
|
||||
bb_max = glm::min({ m_width, m_height }, glm::max(bb_max, xy(P[j])));
|
||||
}
|
||||
auto bb_sz = bb_max - bb_min;
|
||||
|
||||
@@ -309,8 +309,10 @@ void ui::Canvas::stroke_draw()
|
||||
tex_sz.x, tex_sz.y);
|
||||
#endif
|
||||
|
||||
m_dirty_box[i].xy = glm::min(m_dirty_box[i].xy(), (glm::vec2)tex_pos);
|
||||
m_dirty_box[i].zw = glm::max(m_dirty_box[i].zw(), (glm::vec2)(tex_pos + tex_sz));
|
||||
m_dirty_box[i] = glm::vec4(
|
||||
glm::min(xy(m_dirty_box[i]), (glm::vec2)tex_pos),
|
||||
glm::max(zw(m_dirty_box[i]), (glm::vec2)(tex_pos + tex_sz))
|
||||
);
|
||||
|
||||
ShaderManager::u_mat4(kShaderUniform::MVP, ortho_proj);
|
||||
ShaderManager::u_float(kShaderUniform::Alpha, s.flow);
|
||||
@@ -353,7 +355,7 @@ void ui::Canvas::stroke_draw()
|
||||
bool ui::Canvas::point_trace(glm::vec2 loc, glm::vec3& ray_origin, glm::vec3& ray_dir,
|
||||
glm::vec3& hit_pos, glm::vec2& fb_pos, glm::vec3& hit_normal, int& out_plane_id)
|
||||
{
|
||||
point_unproject(loc, { 0, 0, m_box.zw }, m_mv, m_proj, ray_origin, ray_dir);
|
||||
point_unproject(loc, { 0, 0, zw(m_box) }, m_mv, m_proj, ray_origin, ray_dir);
|
||||
glm::vec3 hit;
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
@@ -379,7 +381,7 @@ bool ui::Canvas::point_trace(glm::vec2 loc, glm::vec3& ray_origin, glm::vec3& ra
|
||||
bool ui::Canvas::point_trace_plane(glm::vec2 loc, glm::vec3& ray_origin, glm::vec3& ray_dir,
|
||||
glm::vec3& hit_pos, glm::vec3& hit_normal, glm::vec2& hit_fb_pos, int plane_id)
|
||||
{
|
||||
point_unproject(loc, { 0, 0, m_box.zw }, m_mv, m_proj, ray_origin, ray_dir);
|
||||
point_unproject(loc, { 0, 0, zw(m_box) }, m_mv, m_proj, ray_origin, ray_dir);
|
||||
glm::vec3 hit;
|
||||
glm::vec2 fb_pos;
|
||||
if (ray_intersect(ray_origin, ray_dir, m_plane_origin[plane_id],
|
||||
@@ -413,12 +415,12 @@ bool ui::Canvas::ray_intersect(glm::vec3 ray_origin, glm::vec3 ray_dir, glm::vec
|
||||
void ui::Canvas::point_unproject(glm::vec2 loc, glm::vec4 vp, glm::mat4 camera, glm::mat4 proj,
|
||||
glm::vec3& out_origin, glm::vec3& out_dir)
|
||||
{
|
||||
auto clip_space = glm::vec2(loc.x, vp.w - loc.y - 1.f) / vp.zw() * 2.f - 1.f;
|
||||
auto clip_space = glm::vec2(loc.x, vp.w - loc.y - 1.f) / zw(vp) * 2.f - 1.f;
|
||||
auto inv = glm::inverse(proj * camera);
|
||||
auto wp0 = inv * glm::vec4(clip_space, 0, 1);
|
||||
auto wp1 = inv * glm::vec4(clip_space, .5, 1);
|
||||
out_origin = (wp0 / wp0.w).xyz();
|
||||
out_dir = glm::normalize((wp1 / wp1.w).xyz() - out_origin);
|
||||
out_origin = xyz(wp0 / wp0.w);
|
||||
out_dir = glm::normalize(xyz(wp1 / wp1.w) - out_origin);
|
||||
};
|
||||
void ui::Canvas::stroke_commit()
|
||||
{
|
||||
@@ -449,7 +451,7 @@ void ui::Canvas::stroke_commit()
|
||||
m_layers[m_current_layer_idx].m_rtt[i].bindFramebuffer();
|
||||
|
||||
// save image before commit
|
||||
glm::vec2 box_sz = m_dirty_box[i].zw() - m_dirty_box[i].xy();
|
||||
glm::vec2 box_sz = zw(m_dirty_box[i]) - xy(m_dirty_box[i]);
|
||||
action->m_image[i] = std::make_unique<uint8_t[]>(box_sz.x * box_sz.y * 4);
|
||||
glReadPixels(m_dirty_box[i].x, m_dirty_box[i].y, box_sz.x, box_sz.y, GL_RGBA, GL_UNSIGNED_BYTE, action->m_image[i].get());
|
||||
|
||||
@@ -458,8 +460,10 @@ void ui::Canvas::stroke_commit()
|
||||
action->m_old_dirty[i] = m_layers[m_current_layer_idx].m_dirty_face[i];
|
||||
|
||||
auto& lbox = m_layers[m_current_layer_idx].m_dirty_box[i];
|
||||
lbox.xy = glm::min(m_dirty_box[i].xy(), lbox.xy());
|
||||
lbox.zw = glm::max(m_dirty_box[i].zw(), lbox.zw());
|
||||
lbox = glm::vec4(
|
||||
glm::min(xy(m_dirty_box[i]), xy(lbox)),
|
||||
glm::max(zw(m_dirty_box[i]), zw(lbox))
|
||||
);
|
||||
m_layers[m_current_layer_idx].m_dirty_face[i] = true;
|
||||
|
||||
// copy to tmp2 for layer blending
|
||||
@@ -659,8 +663,10 @@ void ui::Canvas::layer_merge(int source_idx, int dest_idx) // m_layer index
|
||||
*/
|
||||
|
||||
auto& lbox = m_layers[dest_idx].m_dirty_box[i];
|
||||
lbox.xy = glm::min(m_layers[source_idx].m_dirty_box[i].xy(), lbox.xy());
|
||||
lbox.zw = glm::max(m_layers[source_idx].m_dirty_box[i].zw(), lbox.zw());
|
||||
lbox = glm::vec4(
|
||||
glm::min(xy(m_layers[source_idx].m_dirty_box[i]), xy(lbox)),
|
||||
glm::max(zw(m_layers[source_idx].m_dirty_box[i]), zw(lbox))
|
||||
);
|
||||
m_layers[dest_idx].m_dirty_face[i] = true;
|
||||
|
||||
// copy to tmp2 for layer blending
|
||||
@@ -1205,7 +1211,7 @@ void ui::Canvas::project_save_thread(std::string file_path)
|
||||
if (has_data)
|
||||
{
|
||||
glm::ivec4 b = snap.m_dirty_box[plane_index];
|
||||
glm::vec2 sz = b.zw() - b.xy();
|
||||
glm::vec2 sz = zw(b) - xy(b);
|
||||
int box[4] = { b.x, b.y, b.z, b.w };
|
||||
fwrite(&box, sizeof(box), 1, fp);
|
||||
|
||||
@@ -1331,7 +1337,7 @@ void ui::Canvas::project_open_thread(std::string file_path)
|
||||
int b[4];
|
||||
fread(&b, sizeof(b), 1, fp);
|
||||
snap.m_dirty_box[plane_index] = glm::vec4(b[0], b[1], b[2], b[3]);
|
||||
glm::vec2 sz = snap.m_dirty_box[plane_index].zw() - snap.m_dirty_box[plane_index].xy();
|
||||
glm::vec2 sz = zw(snap.m_dirty_box[plane_index]) - xy(snap.m_dirty_box[plane_index]);
|
||||
|
||||
int data_size;
|
||||
fread(&data_size, sizeof(int), 1, fp);
|
||||
@@ -1659,7 +1665,7 @@ void ui::Layer::restore(const Snapshot& snap)
|
||||
|
||||
m_rtt[i].recreate(); // TODO: this should not be recreated here! Sorry I messed up with this, just quick fix DON'T SHIP!!
|
||||
m_rtt[i].bindTexture();
|
||||
glm::vec2 box_sz = m_dirty_box[i].zw() - m_dirty_box[i].xy();
|
||||
glm::vec2 box_sz = zw(m_dirty_box[i]) - xy(m_dirty_box[i]);
|
||||
glTexSubImage2D(GL_TEXTURE_2D, 0, m_dirty_box[i].x, m_dirty_box[i].y, box_sz.x, box_sz.y, GL_RGBA, GL_UNSIGNED_BYTE, snap.image[i].get());
|
||||
m_rtt[i].unbindTexture();
|
||||
LOG("restore face %d - %d bytes (%dx%d)", i, (int)box_sz.x * (int)box_sz.y * 4, (int)box_sz.x, (int)box_sz.y);
|
||||
@@ -1685,7 +1691,7 @@ ui::Layer::Snapshot ui::Layer::snapshot(std::string data_path)
|
||||
|
||||
glReadBuffer(GL_BACK);
|
||||
m_rtt[i].bindFramebuffer();
|
||||
glm::vec2 box_sz = m_dirty_box[i].zw() - m_dirty_box[i].xy();
|
||||
glm::vec2 box_sz = zw(m_dirty_box[i]) - xy(m_dirty_box[i]);
|
||||
glReadPixels(m_dirty_box[i].x, m_dirty_box[i].y, box_sz.x, box_sz.y, GL_RGBA, GL_UNSIGNED_BYTE, snap.image[i].get());
|
||||
m_rtt[i].unbindFramebuffer();
|
||||
glReadBuffer(GL_NONE);
|
||||
|
||||
Reference in New Issue
Block a user