fix shaders for the transform tool
This commit is contained in:
@@ -82,8 +82,6 @@ void CanvasModeBasicCamera::on_GestureEvent(GestureEvent* ge)
|
||||
canvas->m_cam_rot = glm::eulerAngleXY(angle.y, angle.x);
|
||||
App::I.brush_update();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -910,8 +908,6 @@ void CanvasModeTransform::enter()
|
||||
shape3d.push_back(v);
|
||||
}
|
||||
auto bb_sz = bb_max - bb_min;
|
||||
auto bb_center = (bb_min + bb_max) * 0.5f;
|
||||
auto center3d = canvas->point_trace(midpoint);
|
||||
for (auto& v : shape3d)
|
||||
{
|
||||
v.uvs2 = v.uvs / canvas->m_size;
|
||||
@@ -929,6 +925,38 @@ void CanvasModeTransform::enter()
|
||||
m_tex[plane].unbind();
|
||||
canvas->m_layers[canvas->m_current_layer_idx].m_rtt[plane].unbindFramebuffer();
|
||||
}
|
||||
|
||||
auto& layer = canvas->m_layers[canvas->m_current_layer_idx];
|
||||
|
||||
GLint vp[4];
|
||||
glGetIntegerv(GL_VIEWPORT, vp);
|
||||
glViewport(0, 0, layer.w, layer.h);
|
||||
|
||||
bool depth = glIsEnabled(GL_DEPTH_TEST);
|
||||
bool blend = glIsEnabled(GL_BLEND);
|
||||
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
glDisable(GL_BLEND);
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
|
||||
glm::mat4 proj = glm::perspective(glm::radians(90.f), 1.f, .01f, 1000.f);
|
||||
ui::ShaderManager::use(ui::kShader::Color);
|
||||
ui::ShaderManager::u_vec4(ui::kShaderUniform::Col, { 0, 0, 0, 0 });
|
||||
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
glm::mat4 plane_camera = glm::lookAt(glm::vec3(0), canvas->m_plane_origin[i], canvas->m_plane_tangent[i]);
|
||||
ui::ShaderManager::u_mat4(ui::kShaderUniform::MVP, proj * plane_camera * m_xform * m_xform_local);
|
||||
|
||||
layer.m_rtt[i].bindFramebuffer();
|
||||
for (int j = 0; j < 6; j++)
|
||||
m_shape[j].draw_fill();
|
||||
|
||||
layer.m_rtt[i].unbindFramebuffer();
|
||||
}
|
||||
depth ? glEnable(GL_DEPTH_TEST) : glDisable(GL_DEPTH_TEST);
|
||||
blend ? glEnable(GL_BLEND) : glDisable(GL_BLEND);
|
||||
glViewport(vp[0], vp[1], vp[2], vp[3]);
|
||||
}
|
||||
|
||||
void CanvasModeTransform::leave()
|
||||
@@ -946,50 +974,35 @@ void CanvasModeTransform::leave()
|
||||
glDisable(GL_BLEND);
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
|
||||
//glm::perspective(glm::radians(m_canvas->m_cam_fov), box.z / box.w, 0.01f, 1000.f);
|
||||
glm::mat4 proj = glm::perspective(glm::radians(90.f), 1.f, .01f, 1000.f);
|
||||
ui::ShaderManager::use(ui::kShader::CompDraw);
|
||||
ui::ShaderManager::u_int(ui::kShaderUniform::Tex, 0);
|
||||
ui::ShaderManager::u_int(ui::kShaderUniform::TexStroke, 1);
|
||||
ui::ShaderManager::u_int(ui::kShaderUniform::TexMask, 2);
|
||||
ui::ShaderManager::u_float(ui::kShaderUniform::Alpha, 1);
|
||||
ui::ShaderManager::u_int(ui::kShaderUniform::Lock, false);
|
||||
ui::ShaderManager::u_int(ui::kShaderUniform::Mask, false);
|
||||
ui::ShaderManager::u_int(ui::kShaderUniform::UseFragCoordUV2, true);
|
||||
ui::ShaderManager::u_vec2(ui::kShaderUniform::Resolution, canvas->m_size);
|
||||
ui::ShaderManager::u_int(ui::kShaderUniform::BlendMode, 0);
|
||||
|
||||
canvas->m_sampler_bg.bind(1);
|
||||
canvas->m_sampler_bg.bind(0);
|
||||
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
glm::mat4 plane_camera = glm::lookAt(glm::vec3(0), canvas->m_plane_origin[i], canvas->m_plane_tangent[i]);
|
||||
layer.m_rtt[i].bindFramebuffer();
|
||||
|
||||
canvas->m_tex2[i].bind();
|
||||
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, canvas->m_width, canvas->m_height);
|
||||
canvas->m_tex2[i].unbind();
|
||||
|
||||
ui::ShaderManager::use(ui::kShader::CompDraw);
|
||||
ui::ShaderManager::u_int(ui::kShaderUniform::Tex, 0);
|
||||
ui::ShaderManager::u_int(ui::kShaderUniform::TexStroke, 1);
|
||||
ui::ShaderManager::u_int(ui::kShaderUniform::TexMask, 2);
|
||||
ui::ShaderManager::u_vec2(ui::kShaderUniform::Resolution, canvas->m_size);
|
||||
ui::ShaderManager::u_float(ui::kShaderUniform::Alpha, 1);
|
||||
ui::ShaderManager::u_int(ui::kShaderUniform::Mask, false);
|
||||
ui::ShaderManager::u_int(ui::kShaderUniform::BlendMode, 0);
|
||||
ui::ShaderManager::u_mat4(ui::kShaderUniform::MVP, proj * plane_camera * m_xform * m_xform_local);
|
||||
|
||||
canvas->m_sampler.bind(1);
|
||||
canvas->m_sampler.bind(0);
|
||||
|
||||
layer.m_rtt[i].bindFramebuffer();
|
||||
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
canvas->m_tex2[i].bind();
|
||||
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, canvas->m_width, canvas->m_height);
|
||||
|
||||
glActiveTexture(GL_TEXTURE1);
|
||||
for (int j = 0; j < 6; j++)
|
||||
{
|
||||
//ui::ShaderManager::use(ui::kShader::Color);
|
||||
//ui::ShaderManager::u_mat4(ui::kShaderUniform::MVP, proj * plane_camera * m_xform * m_xform_local);
|
||||
//ui::ShaderManager::u_vec4(ui::kShaderUniform::Col, { 0, 1, 1, .1 });
|
||||
//m_shape[j].draw_fill();
|
||||
|
||||
//ui::ShaderManager::use(ui::kShader::Texture);
|
||||
//ui::ShaderManager::u_int(ui::kShaderUniform::Tex, 0);
|
||||
//ui::ShaderManager::u_mat4(ui::kShaderUniform::MVP, proj * plane_camera * m_xform * m_xform_local);
|
||||
//m_tex[j].bind();
|
||||
//canvas->m_sampler.bind(0);
|
||||
//m_shape[j].draw_fill();
|
||||
//m_tex[j].unbind();
|
||||
|
||||
|
||||
m_tex[j].bind();
|
||||
m_shape[j].draw_fill();
|
||||
m_tex[j].unbind();
|
||||
@@ -1004,33 +1017,12 @@ void CanvasModeTransform::leave()
|
||||
|
||||
void CanvasModeTransform::on_Draw(const glm::mat4& ortho, const glm::mat4& proj, const glm::mat4& camera)
|
||||
{
|
||||
static float theta = 0;
|
||||
theta += glm::radians(1.f);
|
||||
bool depth = glIsEnabled(GL_DEPTH_TEST);
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
|
||||
auto uv = m_center_point_uv;
|
||||
float x = glm::sin(uv.x) * glm::cos(uv.y);
|
||||
float y = glm::sin(uv.x) * glm::sin(uv.y);
|
||||
float z = glm::cos(uv.x);
|
||||
auto p = glm::vec3(x, y, z);
|
||||
//auto m = glm::inverse(glm::lookAt({ 0, 0, 0 }, m_center_pos, { 0, 1, 0 }));
|
||||
|
||||
auto m = static_cast<CanvasModeMaskFree*>(canvas->modes[(int)ui::Canvas::kCanvasMode::MaskFree][0]);
|
||||
|
||||
auto rot = glm::inverse(glm::lookAt(glm::vec3(0), m_origin, { 0, 1, 0 }));
|
||||
ui::ShaderManager::use(ui::kShader::Color);
|
||||
ui::ShaderManager::u_mat4(ui::kShaderUniform::MVP, proj * camera * rot);
|
||||
ui::ShaderManager::u_vec4(ui::kShaderUniform::Col, { 0, 0, 0, 1 });
|
||||
//m_sphere.draw_fill();
|
||||
|
||||
auto face = canvas->face_to_shape2D(0);
|
||||
auto shape = poly_intersect(m->m_points2d, face);
|
||||
|
||||
glEnable(GL_BLEND);
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
//ui::ShaderManager::use(ui::kShader::UVs);
|
||||
ui::ShaderManager::use(ui::kShader::Color);
|
||||
ui::ShaderManager::u_mat4(ui::kShaderUniform::MVP, proj * camera * m_xform * m_xform_local);
|
||||
ui::ShaderManager::u_vec4(ui::kShaderUniform::Col, { 0, 1, 1, .1 });
|
||||
@@ -1052,7 +1044,8 @@ void CanvasModeTransform::on_Draw(const glm::mat4& ortho, const glm::mat4& proj,
|
||||
{
|
||||
auto c = m2d * glm::vec4(corners[i], 1);
|
||||
auto c2d = ((xy(c) / c.z) * 0.5f + 0.5f) * zw(canvas->m_box);
|
||||
ui::ShaderManager::u_mat4(ui::kShaderUniform::MVP, ortho * glm::translate(glm::vec3(c2d, 0)) * glm::scale(glm::vec3(10.f)));
|
||||
ui::ShaderManager::u_mat4(ui::kShaderUniform::MVP,
|
||||
ortho * glm::translate(glm::vec3(c2d, 0)) * glm::scale(glm::vec3(10.f)));
|
||||
ui::ShaderManager::u_vec4(ui::kShaderUniform::Col, { 0, 0, 0, i == corner_hl ? 1.f : .5f });
|
||||
m_circle.draw_fill();
|
||||
}
|
||||
@@ -1062,7 +1055,8 @@ void CanvasModeTransform::on_Draw(const glm::mat4& ortho, const glm::mat4& proj,
|
||||
|
||||
void CanvasModeTransform::on_MouseEvent(MouseEvent* me, glm::vec2& loc)
|
||||
{
|
||||
auto m2d = glm::scale(glm::vec3(1, -1, 1)) * canvas->m_proj * canvas->m_mv * m_xform * m_xform_local;
|
||||
auto m2d = glm::scale(glm::vec3(1, -1, 1)) * canvas->m_proj *
|
||||
canvas->m_mv * m_xform * m_xform_local;
|
||||
|
||||
switch (me->m_type)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user