fix shaders for the transform tool
This commit is contained in:
@@ -11,26 +11,25 @@ void App::initShaders()
|
|||||||
"uniform mat4 mvp;"
|
"uniform mat4 mvp;"
|
||||||
"in vec4 pos;"
|
"in vec4 pos;"
|
||||||
"in vec2 uvs;"
|
"in vec2 uvs;"
|
||||||
"out vec3 uv;"
|
"out vec2 uv;"
|
||||||
"void main(){"
|
"void main(){"
|
||||||
" uv = vec3(uvs, pos.w);"
|
" uv = uvs;"
|
||||||
" gl_Position = mvp * vec4(pos.xyz, 1.0);"
|
" gl_Position = mvp * vec4(pos.xyz, 1.0);"
|
||||||
"}";
|
"}";
|
||||||
static const char* shader_f =
|
static const char* shader_f =
|
||||||
SHADER_VERSION
|
SHADER_VERSION
|
||||||
"uniform sampler2D tex;"
|
"uniform sampler2D tex;"
|
||||||
"in mediump vec3 uv;"
|
"in mediump vec2 uv;"
|
||||||
"out mediump vec4 frag;"
|
"out mediump vec4 frag;"
|
||||||
"void main(){"
|
"void main(){"
|
||||||
//" frag = texture(tex, uv.xy/uv.z);"
|
" frag = texture(tex, uv);"
|
||||||
" frag = texture(tex, uv.xy);"
|
|
||||||
"}";
|
"}";
|
||||||
static const char* shader_uv_f =
|
static const char* shader_uv_f =
|
||||||
SHADER_VERSION
|
SHADER_VERSION
|
||||||
"in mediump vec3 uv;"
|
"in mediump vec2 uv;"
|
||||||
"out mediump vec4 frag;"
|
"out mediump vec4 frag;"
|
||||||
"void main(){"
|
"void main(){"
|
||||||
" frag = vec4(uv.xy, 0.0, 1.0);"
|
" frag = vec4(uv, 0.0, 1.0);"
|
||||||
"}";
|
"}";
|
||||||
// TEXTURE ALPHA
|
// TEXTURE ALPHA
|
||||||
static const char* shader_alpha_f =
|
static const char* shader_alpha_f =
|
||||||
@@ -38,13 +37,13 @@ void App::initShaders()
|
|||||||
"uniform sampler2D tex;\n"
|
"uniform sampler2D tex;\n"
|
||||||
"uniform mediump float alpha;\n"
|
"uniform mediump float alpha;\n"
|
||||||
"uniform bool highlight;\n"
|
"uniform bool highlight;\n"
|
||||||
"in mediump vec3 uv;\n"
|
"in mediump vec2 uv;\n"
|
||||||
"out mediump vec4 frag;\n"
|
"out mediump vec4 frag;\n"
|
||||||
"void main(){\n"
|
"void main(){\n"
|
||||||
" mediump vec4 c = texture(tex, uv.xy);\n"
|
" mediump vec4 c = texture(tex, uv);\n"
|
||||||
" frag = highlight ? \n"
|
" frag = highlight ? \n"
|
||||||
" vec4(clamp(vec3(.3)+c.rgb, vec3(0), vec3(1)), c.a) : \n"
|
" vec4(clamp(vec3(0.3) + c.rgb, vec3(0.0), vec3(1.0)), c.a) : \n"
|
||||||
" texture(tex, uv.xy) * vec4(1,1,1,alpha);\n"
|
" c * vec4(1.0, 1.0, 1.0, alpha);\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
// TEXTURE ALPHA SEPARATED
|
// TEXTURE ALPHA SEPARATED
|
||||||
static const char* shader_alpha_sep_f =
|
static const char* shader_alpha_sep_f =
|
||||||
@@ -53,15 +52,15 @@ void App::initShaders()
|
|||||||
"uniform sampler2D tex_alpha;\n"
|
"uniform sampler2D tex_alpha;\n"
|
||||||
"uniform mediump float alpha;\n"
|
"uniform mediump float alpha;\n"
|
||||||
"uniform bool highlight;\n"
|
"uniform bool highlight;\n"
|
||||||
"in mediump vec3 uv;\n"
|
"in mediump vec2 uv;\n"
|
||||||
"out mediump vec4 frag;\n"
|
"out mediump vec4 frag;\n"
|
||||||
"void main(){\n"
|
"void main(){\n"
|
||||||
" mediump vec3 rgb = texture(tex, uv.xy).rgb;\n"
|
" mediump vec3 rgb = texture(tex, uv).rgb;\n"
|
||||||
" mediump float a = texture(tex_alpha, uv.xy).a;\n"
|
" mediump float a = texture(tex_alpha, uv).a;\n"
|
||||||
" mediump vec4 c = vec4(rgb, a);\n"
|
" mediump vec4 c = vec4(rgb, a);\n"
|
||||||
" frag = highlight ? \n"
|
" frag = highlight ? \n"
|
||||||
" vec4(clamp(vec3(.3)+c.rgb, vec3(0), vec3(1)), c.a) : \n"
|
" vec4(clamp(vec3(0.3) + c.rgb, vec3(0.0), vec3(1.0)), c.a) : \n"
|
||||||
" texture(tex, uv.xy) * vec4(1,1,1,alpha);\n"
|
" texture(tex, uv) * vec4(1.0, 1.0, 1.0, alpha);\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
// STROKE PREVIEW
|
// STROKE PREVIEW
|
||||||
static const char* shader_stroke_preview_f =
|
static const char* shader_stroke_preview_f =
|
||||||
@@ -69,10 +68,10 @@ void App::initShaders()
|
|||||||
"uniform sampler2D tex;\n"
|
"uniform sampler2D tex;\n"
|
||||||
"uniform mediump float alpha;\n"
|
"uniform mediump float alpha;\n"
|
||||||
"uniform mediump vec4 col;\n"
|
"uniform mediump vec4 col;\n"
|
||||||
"in mediump vec3 uv;\n"
|
"in mediump vec2 uv;\n"
|
||||||
"out mediump vec4 frag;\n"
|
"out mediump vec4 frag;\n"
|
||||||
"void main(){\n"
|
"void main(){\n"
|
||||||
" mediump float stroke = 1.0 - texture(tex, uv.xy).r;\n"
|
" mediump float stroke = 1.0 - texture(tex, uv).r;\n"
|
||||||
" frag = vec4(col.rgb, stroke * alpha);\n"
|
" frag = vec4(col.rgb, stroke * alpha);\n"
|
||||||
"}";
|
"}";
|
||||||
// TEXTURE COMP ERASE
|
// TEXTURE COMP ERASE
|
||||||
@@ -80,14 +79,15 @@ void App::initShaders()
|
|||||||
SHADER_VERSION
|
SHADER_VERSION
|
||||||
"uniform sampler2D tex;\n"
|
"uniform sampler2D tex;\n"
|
||||||
"uniform sampler2D tex_stroke;\n"
|
"uniform sampler2D tex_stroke;\n"
|
||||||
"uniform sampler2D tex_mask;\n"
|
|
||||||
"uniform mediump float alpha;\n"
|
"uniform mediump float alpha;\n"
|
||||||
"uniform bool lock;\n"
|
"uniform mediump vec2 resolution;\n"
|
||||||
"in mediump vec3 uv;\n"
|
"uniform bool fragUV2;\n"
|
||||||
|
"in mediump vec2 uv;\n"
|
||||||
"out mediump vec4 frag;\n"
|
"out mediump vec4 frag;\n"
|
||||||
"void main(){\n"
|
"void main(){\n"
|
||||||
" mediump vec4 base = texture(tex, uv.xy);\n"
|
" mediump vec2 uv2 = fragUV2 ? (gl_FragCoord.st / resolution) : uv;\n"
|
||||||
" mediump vec4 stroke = texture(tex_stroke, uv.xy);\n"
|
" mediump vec4 base = texture(tex, uv2);\n"
|
||||||
|
" mediump vec4 stroke = texture(tex_stroke, uv);\n"
|
||||||
" mediump float a = base.a - (stroke.a * alpha);\n"
|
" mediump float a = base.a - (stroke.a * alpha);\n"
|
||||||
" frag = vec4(base.rgb, clamp(a, 0.0, 1.0));\n"
|
" frag = vec4(base.rgb, clamp(a, 0.0, 1.0));\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
@@ -98,13 +98,13 @@ void App::initShaders()
|
|||||||
"uniform sampler2D tex_stroke;\n"
|
"uniform sampler2D tex_stroke;\n"
|
||||||
"uniform sampler2D tex_mask;\n"
|
"uniform sampler2D tex_mask;\n"
|
||||||
"uniform sampler2D tex_stencil;\n"
|
"uniform sampler2D tex_stencil;\n"
|
||||||
//"uniform image2D img_mixer;\n"
|
|
||||||
"uniform mediump float alpha;\n"
|
"uniform mediump float alpha;\n"
|
||||||
"uniform mediump int blend_mode;\n"
|
"uniform mediump int blend_mode;\n"
|
||||||
"uniform mediump vec2 resolution;\n"
|
"uniform mediump vec2 resolution;\n"
|
||||||
"uniform bool lock;\n"
|
"uniform bool lock;\n"
|
||||||
"uniform bool mask;\n"
|
"uniform bool mask;\n"
|
||||||
"in mediump vec3 uv;\n"
|
"uniform bool fragUV2;\n"
|
||||||
|
"in mediump vec2 uv;\n"
|
||||||
"out mediump vec4 frag;\n"
|
"out mediump vec4 frag;\n"
|
||||||
"mediump vec4 blur(sampler2D t, mediump vec2 uv){\n"
|
"mediump vec4 blur(sampler2D t, mediump vec2 uv){\n"
|
||||||
" mediump vec4 sum = texture(t, uv);\n"
|
" mediump vec4 sum = texture(t, uv);\n"
|
||||||
@@ -140,9 +140,10 @@ void App::initShaders()
|
|||||||
"}\n"
|
"}\n"
|
||||||
|
|
||||||
"void main(){\n"
|
"void main(){\n"
|
||||||
" mediump vec4 base = texture(tex, gl_FragCoord.st / resolution);\n"
|
" mediump vec2 uv2 = fragUV2 ? (gl_FragCoord.st / resolution) : uv;\n"
|
||||||
" mediump vec4 stroke = texture(tex_stroke, uv.xy);\n"
|
" mediump vec4 base = texture(tex, uv2);\n"
|
||||||
" stroke.a = mask ? stroke.a * alpha * blur(tex_mask, uv.xy).r : stroke.a * alpha;\n"
|
" mediump vec4 stroke = texture(tex_stroke, uv);\n"
|
||||||
|
" stroke.a = mask ? stroke.a * alpha * blur(tex_mask, uv2).r : stroke.a * alpha;\n"
|
||||||
|
|
||||||
" if (!lock && base.a == 0.0) { frag = stroke; return; }\n"
|
" if (!lock && base.a == 0.0) { frag = stroke; return; }\n"
|
||||||
" mediump float contribution = (1.0 - base.a) * stroke.a;\n"
|
" mediump float contribution = (1.0 - base.a) * stroke.a;\n"
|
||||||
@@ -242,7 +243,7 @@ void App::initShaders()
|
|||||||
" return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);"
|
" return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);"
|
||||||
"}"
|
"}"
|
||||||
"void main() {"
|
"void main() {"
|
||||||
" mediump float sat = tan(atan(uv.y, uv.x)) *.5 + .5;"
|
" mediump float sat = tan(atan(uv.y, uv.x)) * 0.5 + 0.5;"
|
||||||
" frag = vec4(hsv2rgb(vec3(col.r, sat, uv.x)), 1.0);"
|
" frag = vec4(hsv2rgb(vec3(col.r, sat, uv.x)), 1.0);"
|
||||||
"}";
|
"}";
|
||||||
|
|
||||||
|
|||||||
@@ -291,11 +291,12 @@ void ui::Canvas::stroke_draw_mix(const glm::vec2& bb_min, const glm::vec2& bb_sz
|
|||||||
//ui::ShaderManager::u_int(kShaderUniform::TexA, 0);
|
//ui::ShaderManager::u_int(kShaderUniform::TexA, 0);
|
||||||
ui::ShaderManager::u_int(kShaderUniform::TexStroke, 1);
|
ui::ShaderManager::u_int(kShaderUniform::TexStroke, 1);
|
||||||
ui::ShaderManager::u_int(kShaderUniform::TexMask, 2);
|
ui::ShaderManager::u_int(kShaderUniform::TexMask, 2);
|
||||||
ui::ShaderManager::u_vec2(ui::kShaderUniform::Resolution, m_size);
|
//ui::ShaderManager::u_vec2(ui::kShaderUniform::Resolution, m_size);
|
||||||
//ui::ShaderManager::u_int(kShaderUniform::TexStencil, 3);
|
//ui::ShaderManager::u_int(kShaderUniform::TexStencil, 3);
|
||||||
ui::ShaderManager::u_float(kShaderUniform::Alpha, m_current_stroke->m_brush.m_tip_opacity);
|
ui::ShaderManager::u_float(kShaderUniform::Alpha, m_current_stroke->m_brush.m_tip_opacity);
|
||||||
ui::ShaderManager::u_int(kShaderUniform::Lock, m_layers[layer_index].m_alpha_locked);
|
ui::ShaderManager::u_int(kShaderUniform::Lock, m_layers[layer_index].m_alpha_locked);
|
||||||
ui::ShaderManager::u_int(kShaderUniform::Mask, m_smask_active);
|
ui::ShaderManager::u_int(kShaderUniform::Mask, m_smask_active);
|
||||||
|
ui::ShaderManager::u_int(ui::kShaderUniform::UseFragCoordUV2, false);
|
||||||
ui::ShaderManager::u_int(kShaderUniform::BlendMode, m_current_stroke->m_brush.m_blend_mode);
|
ui::ShaderManager::u_int(kShaderUniform::BlendMode, m_current_stroke->m_brush.m_blend_mode);
|
||||||
ui::ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp_z);
|
ui::ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp_z);
|
||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
@@ -762,6 +763,7 @@ void ui::Canvas::stroke_commit()
|
|||||||
ui::ShaderManager::u_int(kShaderUniform::Tex, 0);
|
ui::ShaderManager::u_int(kShaderUniform::Tex, 0);
|
||||||
ui::ShaderManager::u_int(kShaderUniform::TexStroke, 1);
|
ui::ShaderManager::u_int(kShaderUniform::TexStroke, 1);
|
||||||
//ui::ShaderManager::u_int(kShaderUniform::TexMask, 2);
|
//ui::ShaderManager::u_int(kShaderUniform::TexMask, 2);
|
||||||
|
ui::ShaderManager::u_int(ui::kShaderUniform::UseFragCoordUV2, false);
|
||||||
ui::ShaderManager::u_float(kShaderUniform::Alpha, m_current_stroke->m_brush.m_tip_opacity);
|
ui::ShaderManager::u_float(kShaderUniform::Alpha, m_current_stroke->m_brush.m_tip_opacity);
|
||||||
ShaderManager::u_mat4(kShaderUniform::MVP, glm::ortho(-.5f, .5f, -.5f, .5f, -1.f, 1.f));
|
ShaderManager::u_mat4(kShaderUniform::MVP, glm::ortho(-.5f, .5f, -.5f, .5f, -1.f, 1.f));
|
||||||
|
|
||||||
@@ -786,9 +788,10 @@ void ui::Canvas::stroke_commit()
|
|||||||
ui::ShaderManager::u_int(kShaderUniform::Tex, 0);
|
ui::ShaderManager::u_int(kShaderUniform::Tex, 0);
|
||||||
ui::ShaderManager::u_int(kShaderUniform::TexStroke, 1);
|
ui::ShaderManager::u_int(kShaderUniform::TexStroke, 1);
|
||||||
ui::ShaderManager::u_int(kShaderUniform::TexMask, 2);
|
ui::ShaderManager::u_int(kShaderUniform::TexMask, 2);
|
||||||
ui::ShaderManager::u_vec2(ui::kShaderUniform::Resolution, m_size);
|
//ui::ShaderManager::u_vec2(ui::kShaderUniform::Resolution, m_size);
|
||||||
ui::ShaderManager::u_float(kShaderUniform::Alpha, m_current_stroke->m_brush.m_tip_opacity);
|
ui::ShaderManager::u_float(kShaderUniform::Alpha, m_current_stroke->m_brush.m_tip_opacity);
|
||||||
ui::ShaderManager::u_int(kShaderUniform::Mask, m_smask_active);
|
ui::ShaderManager::u_int(kShaderUniform::Mask, m_smask_active);
|
||||||
|
ui::ShaderManager::u_int(ui::kShaderUniform::UseFragCoordUV2, false);
|
||||||
ui::ShaderManager::u_int(kShaderUniform::BlendMode, m_current_stroke->m_brush.m_blend_mode);
|
ui::ShaderManager::u_int(kShaderUniform::BlendMode, m_current_stroke->m_brush.m_blend_mode);
|
||||||
ui::ShaderManager::u_mat4(kShaderUniform::MVP, glm::ortho(-.5f, .5f, -.5f, .5f, -1.f, 1.f));
|
ui::ShaderManager::u_mat4(kShaderUniform::MVP, glm::ortho(-.5f, .5f, -.5f, .5f, -1.f, 1.f));
|
||||||
|
|
||||||
@@ -962,7 +965,8 @@ void ui::Canvas::layer_merge(int source_idx, int dest_idx) // m_layer index
|
|||||||
ui::ShaderManager::use(kShader::CompDraw);
|
ui::ShaderManager::use(kShader::CompDraw);
|
||||||
ui::ShaderManager::u_int(kShaderUniform::Tex, 0); // dest
|
ui::ShaderManager::u_int(kShaderUniform::Tex, 0); // dest
|
||||||
ui::ShaderManager::u_int(kShaderUniform::TexStroke, 1); // source
|
ui::ShaderManager::u_int(kShaderUniform::TexStroke, 1); // source
|
||||||
ui::ShaderManager::u_vec2(ui::kShaderUniform::Resolution, m_size);
|
//ui::ShaderManager::u_vec2(ui::kShaderUniform::Resolution, m_size);
|
||||||
|
ui::ShaderManager::u_int(ui::kShaderUniform::UseFragCoordUV2, false);
|
||||||
ui::ShaderManager::u_float(kShaderUniform::Alpha, m_layers[source_idx].m_opacity);
|
ui::ShaderManager::u_float(kShaderUniform::Alpha, m_layers[source_idx].m_opacity);
|
||||||
ui::ShaderManager::u_int(kShaderUniform::Lock, false);
|
ui::ShaderManager::u_int(kShaderUniform::Lock, false);
|
||||||
ui::ShaderManager::u_int(kShaderUniform::BlendMode, 0); // TODO: defaulted to normal, change to layer blend mode when implemented
|
ui::ShaderManager::u_int(kShaderUniform::BlendMode, 0); // TODO: defaulted to normal, change to layer blend mode when implemented
|
||||||
|
|||||||
@@ -82,8 +82,6 @@ void CanvasModeBasicCamera::on_GestureEvent(GestureEvent* ge)
|
|||||||
canvas->m_cam_rot = glm::eulerAngleXY(angle.y, angle.x);
|
canvas->m_cam_rot = glm::eulerAngleXY(angle.y, angle.x);
|
||||||
App::I.brush_update();
|
App::I.brush_update();
|
||||||
break;
|
break;
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -910,8 +908,6 @@ void CanvasModeTransform::enter()
|
|||||||
shape3d.push_back(v);
|
shape3d.push_back(v);
|
||||||
}
|
}
|
||||||
auto bb_sz = bb_max - bb_min;
|
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)
|
for (auto& v : shape3d)
|
||||||
{
|
{
|
||||||
v.uvs2 = v.uvs / canvas->m_size;
|
v.uvs2 = v.uvs / canvas->m_size;
|
||||||
@@ -929,6 +925,38 @@ void CanvasModeTransform::enter()
|
|||||||
m_tex[plane].unbind();
|
m_tex[plane].unbind();
|
||||||
canvas->m_layers[canvas->m_current_layer_idx].m_rtt[plane].unbindFramebuffer();
|
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()
|
void CanvasModeTransform::leave()
|
||||||
@@ -946,50 +974,35 @@ void CanvasModeTransform::leave()
|
|||||||
glDisable(GL_BLEND);
|
glDisable(GL_BLEND);
|
||||||
glActiveTexture(GL_TEXTURE0);
|
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);
|
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++)
|
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]);
|
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);
|
ui::ShaderManager::u_mat4(ui::kShaderUniform::MVP, proj * plane_camera * m_xform * m_xform_local);
|
||||||
|
|
||||||
canvas->m_sampler.bind(1);
|
layer.m_rtt[i].bindFramebuffer();
|
||||||
canvas->m_sampler.bind(0);
|
|
||||||
|
|
||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
canvas->m_tex2[i].bind();
|
canvas->m_tex2[i].bind();
|
||||||
|
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, canvas->m_width, canvas->m_height);
|
||||||
|
|
||||||
glActiveTexture(GL_TEXTURE1);
|
glActiveTexture(GL_TEXTURE1);
|
||||||
for (int j = 0; j < 6; j++)
|
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_tex[j].bind();
|
||||||
m_shape[j].draw_fill();
|
m_shape[j].draw_fill();
|
||||||
m_tex[j].unbind();
|
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)
|
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);
|
bool depth = glIsEnabled(GL_DEPTH_TEST);
|
||||||
glDisable(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);
|
glEnable(GL_BLEND);
|
||||||
for (int i = 0; i < 6; i++)
|
for (int i = 0; i < 6; i++)
|
||||||
{
|
{
|
||||||
//ui::ShaderManager::use(ui::kShader::UVs);
|
|
||||||
ui::ShaderManager::use(ui::kShader::Color);
|
ui::ShaderManager::use(ui::kShader::Color);
|
||||||
ui::ShaderManager::u_mat4(ui::kShaderUniform::MVP, proj * camera * m_xform * m_xform_local);
|
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 });
|
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 c = m2d * glm::vec4(corners[i], 1);
|
||||||
auto c2d = ((xy(c) / c.z) * 0.5f + 0.5f) * zw(canvas->m_box);
|
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 });
|
ui::ShaderManager::u_vec4(ui::kShaderUniform::Col, { 0, 0, 0, i == corner_hl ? 1.f : .5f });
|
||||||
m_circle.draw_fill();
|
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)
|
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)
|
switch (me->m_type)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -158,16 +158,16 @@ class CanvasModeTransform : public CanvasMode
|
|||||||
int corner_hl = -1;
|
int corner_hl = -1;
|
||||||
glm::vec3 m_center_point{};
|
glm::vec3 m_center_point{};
|
||||||
glm::vec2 m_center_point_uv{};
|
glm::vec2 m_center_point_uv{};
|
||||||
glm::mat4 m_xform{};
|
glm::mat4 m_xform{1};
|
||||||
glm::mat4 m_xform_local{};
|
glm::mat4 m_xform_local{1};
|
||||||
int m_counter = 0;
|
int m_counter = 0;
|
||||||
bool m_dragging = false;
|
bool m_dragging = false;
|
||||||
int m_drag_corner = -1;
|
int m_drag_corner = -1;
|
||||||
float m_drag_diag = 0;
|
float m_drag_diag = 0;
|
||||||
std::vector<glm::vec2> m_drag_corners2d{};
|
std::vector<glm::vec2> m_drag_corners2d{};
|
||||||
glm::vec2 m_drag_start{};
|
glm::vec2 m_drag_start{};
|
||||||
glm::mat4 m_drag_xform{};
|
glm::mat4 m_drag_xform{1};
|
||||||
glm::mat4 m_drag_xform_local{};
|
glm::mat4 m_drag_xform_local{1};
|
||||||
std::vector<vertex_t> m_points{};
|
std::vector<vertex_t> m_points{};
|
||||||
std::vector<glm::vec2> m_points2d{};
|
std::vector<glm::vec2> m_points2d{};
|
||||||
std::map<int, int> m_dirty_planes{};
|
std::map<int, int> m_dirty_planes{};
|
||||||
|
|||||||
@@ -152,6 +152,7 @@ void NodeCanvas::draw()
|
|||||||
ui::ShaderManager::u_int(kShaderUniform::TexStroke, 1);
|
ui::ShaderManager::u_int(kShaderUniform::TexStroke, 1);
|
||||||
//ui::ShaderManager::u_int(kShaderUniform::TexMask, 2);
|
//ui::ShaderManager::u_int(kShaderUniform::TexMask, 2);
|
||||||
ui::ShaderManager::u_float(kShaderUniform::Alpha, m_canvas->m_current_stroke->m_brush.m_tip_opacity);
|
ui::ShaderManager::u_float(kShaderUniform::Alpha, m_canvas->m_current_stroke->m_brush.m_tip_opacity);
|
||||||
|
ui::ShaderManager::u_int(ui::kShaderUniform::UseFragCoordUV2, false);
|
||||||
//ui::ShaderManager::u_int(kShaderUniform::Lock, m_canvas->m_layers[layer_index].m_alpha_locked);
|
//ui::ShaderManager::u_int(kShaderUniform::Lock, m_canvas->m_layers[layer_index].m_alpha_locked);
|
||||||
//ui::ShaderManager::u_int(kShaderUniform::Mask, m_canvas->m_smask_active);
|
//ui::ShaderManager::u_int(kShaderUniform::Mask, m_canvas->m_smask_active);
|
||||||
ui::ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp_z);
|
ui::ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp_z);
|
||||||
@@ -176,11 +177,12 @@ void NodeCanvas::draw()
|
|||||||
ui::ShaderManager::u_int(kShaderUniform::Tex, 0);
|
ui::ShaderManager::u_int(kShaderUniform::Tex, 0);
|
||||||
ui::ShaderManager::u_int(kShaderUniform::TexStroke, 1);
|
ui::ShaderManager::u_int(kShaderUniform::TexStroke, 1);
|
||||||
ui::ShaderManager::u_int(kShaderUniform::TexMask, 2);
|
ui::ShaderManager::u_int(kShaderUniform::TexMask, 2);
|
||||||
ui::ShaderManager::u_vec2(ui::kShaderUniform::Resolution, m_canvas->m_size);
|
//ui::ShaderManager::u_vec2(ui::kShaderUniform::Resolution, zw(m_canvas->m_box) / zoom);
|
||||||
//ui::ShaderManager::u_int(kShaderUniform::TexStencil, 3);
|
//ui::ShaderManager::u_int(kShaderUniform::TexStencil, 3);
|
||||||
ui::ShaderManager::u_float(kShaderUniform::Alpha, m_canvas->m_current_stroke->m_brush.m_tip_opacity);
|
ui::ShaderManager::u_float(kShaderUniform::Alpha, m_canvas->m_current_stroke->m_brush.m_tip_opacity);
|
||||||
ui::ShaderManager::u_int(kShaderUniform::Lock, m_canvas->m_layers[layer_index].m_alpha_locked);
|
ui::ShaderManager::u_int(kShaderUniform::Lock, m_canvas->m_layers[layer_index].m_alpha_locked);
|
||||||
ui::ShaderManager::u_int(kShaderUniform::Mask, m_canvas->m_smask_active);
|
ui::ShaderManager::u_int(kShaderUniform::Mask, m_canvas->m_smask_active);
|
||||||
|
ui::ShaderManager::u_int(ui::kShaderUniform::UseFragCoordUV2, false);
|
||||||
ui::ShaderManager::u_int(kShaderUniform::BlendMode, m_canvas->m_current_stroke->m_brush.m_blend_mode);
|
ui::ShaderManager::u_int(kShaderUniform::BlendMode, m_canvas->m_current_stroke->m_brush.m_blend_mode);
|
||||||
ui::ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp_z);
|
ui::ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp_z);
|
||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ void NodeDialogResize::init_controls()
|
|||||||
text = find<NodeText>("current-res");
|
text = find<NodeText>("current-res");
|
||||||
resolution = ui::Canvas::I->m_width;
|
resolution = ui::Canvas::I->m_width;
|
||||||
static char txt[128];
|
static char txt[128];
|
||||||
sprintf(txt, "Current: %s", App::I.res_to_string(resolution));
|
sprintf(txt, "Current: %s", App::I.res_to_string(resolution).c_str());
|
||||||
text->set_text(txt);
|
text->set_text(txt);
|
||||||
btn_cancel->on_click = [this](Node*) {
|
btn_cancel->on_click = [this](Node*) {
|
||||||
destroy();
|
destroy();
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ enum class kShaderUniform : uint16_t
|
|||||||
BlendMode = const_hash("blend_mode"),
|
BlendMode = const_hash("blend_mode"),
|
||||||
Noise = const_hash("noise"),
|
Noise = const_hash("noise"),
|
||||||
Direction = const_hash("dir"),
|
Direction = const_hash("dir"),
|
||||||
|
UseFragCoordUV2 = const_hash("fragUV2"),
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class kShader : uint16_t
|
enum class kShader : uint16_t
|
||||||
|
|||||||
@@ -205,7 +205,7 @@ void Plane::create_impl(float w, float h, int div, GLushort *idx, vertex_t *vert
|
|||||||
v.pos.y = oy + dy * (float)y;
|
v.pos.y = oy + dy * (float)y;
|
||||||
v.pos.z = 0;
|
v.pos.z = 0;
|
||||||
v.pos.w = 1;
|
v.pos.w = 1;
|
||||||
v.uvs = glm::vec2(x, y) / (float)div;
|
v.uvs2 = v.uvs = glm::vec2(x, y) / (float)div;
|
||||||
*vertices++ = v;
|
*vertices++ = v;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user