From 0d0cd3db7f2b5f613444dac3c9a521cdf0069565 Mon Sep 17 00:00:00 2001 From: omigamedev Date: Sun, 25 Nov 2018 16:16:01 +0100 Subject: [PATCH] fix shaders for the transform tool --- src/app_shaders.cpp | 59 +++++++++---------- src/canvas.cpp | 10 +++- src/canvas_modes.cpp | 112 ++++++++++++++++++------------------- src/canvas_modes.h | 8 +-- src/node_canvas.cpp | 4 +- src/node_dialog_resize.cpp | 2 +- src/shader.h | 1 + src/shape.cpp | 2 +- 8 files changed, 100 insertions(+), 98 deletions(-) diff --git a/src/app_shaders.cpp b/src/app_shaders.cpp index bd7f35c..7171cc2 100644 --- a/src/app_shaders.cpp +++ b/src/app_shaders.cpp @@ -11,26 +11,25 @@ void App::initShaders() "uniform mat4 mvp;" "in vec4 pos;" "in vec2 uvs;" - "out vec3 uv;" + "out vec2 uv;" "void main(){" - " uv = vec3(uvs, pos.w);" + " uv = uvs;" " gl_Position = mvp * vec4(pos.xyz, 1.0);" "}"; static const char* shader_f = SHADER_VERSION "uniform sampler2D tex;" - "in mediump vec3 uv;" + "in mediump vec2 uv;" "out mediump vec4 frag;" "void main(){" - //" frag = texture(tex, uv.xy/uv.z);" - " frag = texture(tex, uv.xy);" + " frag = texture(tex, uv);" "}"; static const char* shader_uv_f = SHADER_VERSION - "in mediump vec3 uv;" + "in mediump vec2 uv;" "out mediump vec4 frag;" "void main(){" - " frag = vec4(uv.xy, 0.0, 1.0);" + " frag = vec4(uv, 0.0, 1.0);" "}"; // TEXTURE ALPHA static const char* shader_alpha_f = @@ -38,13 +37,13 @@ void App::initShaders() "uniform sampler2D tex;\n" "uniform mediump float alpha;\n" "uniform bool highlight;\n" - "in mediump vec3 uv;\n" + "in mediump vec2 uv;\n" "out mediump vec4 frag;\n" "void main(){\n" - " mediump vec4 c = texture(tex, uv.xy);\n" + " mediump vec4 c = texture(tex, uv);\n" " frag = highlight ? \n" - " vec4(clamp(vec3(.3)+c.rgb, vec3(0), vec3(1)), c.a) : \n" - " texture(tex, uv.xy) * vec4(1,1,1,alpha);\n" + " vec4(clamp(vec3(0.3) + c.rgb, vec3(0.0), vec3(1.0)), c.a) : \n" + " c * vec4(1.0, 1.0, 1.0, alpha);\n" "}\n"; // TEXTURE ALPHA SEPARATED static const char* shader_alpha_sep_f = @@ -53,15 +52,15 @@ void App::initShaders() "uniform sampler2D tex_alpha;\n" "uniform mediump float alpha;\n" "uniform bool highlight;\n" - "in mediump vec3 uv;\n" + "in mediump vec2 uv;\n" "out mediump vec4 frag;\n" "void main(){\n" - " mediump vec3 rgb = texture(tex, uv.xy).rgb;\n" - " mediump float a = texture(tex_alpha, uv.xy).a;\n" + " mediump vec3 rgb = texture(tex, uv).rgb;\n" + " mediump float a = texture(tex_alpha, uv).a;\n" " mediump vec4 c = vec4(rgb, a);\n" " frag = highlight ? \n" - " vec4(clamp(vec3(.3)+c.rgb, vec3(0), vec3(1)), c.a) : \n" - " texture(tex, uv.xy) * vec4(1,1,1,alpha);\n" + " vec4(clamp(vec3(0.3) + c.rgb, vec3(0.0), vec3(1.0)), c.a) : \n" + " texture(tex, uv) * vec4(1.0, 1.0, 1.0, alpha);\n" "}\n"; // STROKE PREVIEW static const char* shader_stroke_preview_f = @@ -69,10 +68,10 @@ void App::initShaders() "uniform sampler2D tex;\n" "uniform mediump float alpha;\n" "uniform mediump vec4 col;\n" - "in mediump vec3 uv;\n" + "in mediump vec2 uv;\n" "out mediump vec4 frag;\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" "}"; // TEXTURE COMP ERASE @@ -80,14 +79,15 @@ void App::initShaders() SHADER_VERSION "uniform sampler2D tex;\n" "uniform sampler2D tex_stroke;\n" - "uniform sampler2D tex_mask;\n" "uniform mediump float alpha;\n" - "uniform bool lock;\n" - "in mediump vec3 uv;\n" + "uniform mediump vec2 resolution;\n" + "uniform bool fragUV2;\n" + "in mediump vec2 uv;\n" "out mediump vec4 frag;\n" "void main(){\n" - " mediump vec4 base = texture(tex, uv.xy);\n" - " mediump vec4 stroke = texture(tex_stroke, uv.xy);\n" + " mediump vec2 uv2 = fragUV2 ? (gl_FragCoord.st / resolution) : uv;\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" " frag = vec4(base.rgb, clamp(a, 0.0, 1.0));\n" "}\n"; @@ -98,13 +98,13 @@ void App::initShaders() "uniform sampler2D tex_stroke;\n" "uniform sampler2D tex_mask;\n" "uniform sampler2D tex_stencil;\n" - //"uniform image2D img_mixer;\n" "uniform mediump float alpha;\n" "uniform mediump int blend_mode;\n" "uniform mediump vec2 resolution;\n" "uniform bool lock;\n" "uniform bool mask;\n" - "in mediump vec3 uv;\n" + "uniform bool fragUV2;\n" + "in mediump vec2 uv;\n" "out mediump vec4 frag;\n" "mediump vec4 blur(sampler2D t, mediump vec2 uv){\n" " mediump vec4 sum = texture(t, uv);\n" @@ -140,9 +140,10 @@ void App::initShaders() "}\n" "void main(){\n" - " mediump vec4 base = texture(tex, gl_FragCoord.st / resolution);\n" - " mediump vec4 stroke = texture(tex_stroke, uv.xy);\n" - " stroke.a = mask ? stroke.a * alpha * blur(tex_mask, uv.xy).r : stroke.a * alpha;\n" + " mediump vec2 uv2 = fragUV2 ? (gl_FragCoord.st / resolution) : uv;\n" + " mediump vec4 base = texture(tex, uv2);\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" " 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);" "}" "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);" "}"; diff --git a/src/canvas.cpp b/src/canvas.cpp index 8cdb89d..f081f06 100644 --- a/src/canvas.cpp +++ b/src/canvas.cpp @@ -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::TexStroke, 1); 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_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::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_mat4(kShaderUniform::MVP, plane_mvp_z); glActiveTexture(GL_TEXTURE0); @@ -762,6 +763,7 @@ void ui::Canvas::stroke_commit() ui::ShaderManager::u_int(kShaderUniform::Tex, 0); ui::ShaderManager::u_int(kShaderUniform::TexStroke, 1); //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); 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::TexStroke, 1); 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_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_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::u_int(kShaderUniform::Tex, 0); // dest 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_int(kShaderUniform::Lock, false); ui::ShaderManager::u_int(kShaderUniform::BlendMode, 0); // TODO: defaulted to normal, change to layer blend mode when implemented diff --git a/src/canvas_modes.cpp b/src/canvas_modes.cpp index dcd3302..18f350e 100644 --- a/src/canvas_modes.cpp +++ b/src/canvas_modes.cpp @@ -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(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) { diff --git a/src/canvas_modes.h b/src/canvas_modes.h index 5f66d4a..8ea177a 100644 --- a/src/canvas_modes.h +++ b/src/canvas_modes.h @@ -158,16 +158,16 @@ class CanvasModeTransform : public CanvasMode int corner_hl = -1; glm::vec3 m_center_point{}; glm::vec2 m_center_point_uv{}; - glm::mat4 m_xform{}; - glm::mat4 m_xform_local{}; + glm::mat4 m_xform{1}; + glm::mat4 m_xform_local{1}; int m_counter = 0; bool m_dragging = false; int m_drag_corner = -1; float m_drag_diag = 0; std::vector m_drag_corners2d{}; glm::vec2 m_drag_start{}; - glm::mat4 m_drag_xform{}; - glm::mat4 m_drag_xform_local{}; + glm::mat4 m_drag_xform{1}; + glm::mat4 m_drag_xform_local{1}; std::vector m_points{}; std::vector m_points2d{}; std::map m_dirty_planes{}; diff --git a/src/node_canvas.cpp b/src/node_canvas.cpp index 778d276..1fca42e 100644 --- a/src/node_canvas.cpp +++ b/src/node_canvas.cpp @@ -152,6 +152,7 @@ void NodeCanvas::draw() ui::ShaderManager::u_int(kShaderUniform::TexStroke, 1); //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_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::Mask, m_canvas->m_smask_active); 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::TexStroke, 1); 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_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::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_mat4(kShaderUniform::MVP, plane_mvp_z); glActiveTexture(GL_TEXTURE0); diff --git a/src/node_dialog_resize.cpp b/src/node_dialog_resize.cpp index dab7dcb..2a9bf5a 100644 --- a/src/node_dialog_resize.cpp +++ b/src/node_dialog_resize.cpp @@ -34,7 +34,7 @@ void NodeDialogResize::init_controls() text = find("current-res"); resolution = ui::Canvas::I->m_width; 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); btn_cancel->on_click = [this](Node*) { destroy(); diff --git a/src/shader.h b/src/shader.h index 9097959..9cb2a6d 100644 --- a/src/shader.h +++ b/src/shader.h @@ -30,6 +30,7 @@ enum class kShaderUniform : uint16_t BlendMode = const_hash("blend_mode"), Noise = const_hash("noise"), Direction = const_hash("dir"), + UseFragCoordUV2 = const_hash("fragUV2"), }; enum class kShader : uint16_t diff --git a/src/shape.cpp b/src/shape.cpp index 7ab1610..8a08f03 100644 --- a/src/shape.cpp +++ b/src/shape.cpp @@ -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.z = 0; v.pos.w = 1; - v.uvs = glm::vec2(x, y) / (float)div; + v.uvs2 = v.uvs = glm::vec2(x, y) / (float)div; *vertices++ = v; } }