diff --git a/data/layout.xml b/data/layout.xml index c5e4c05..ab45da4 100644 --- a/data/layout.xml +++ b/data/layout.xml @@ -649,7 +649,6 @@ - --> @@ -666,6 +665,8 @@ + + @@ -724,9 +725,11 @@ - - - + + + + + diff --git a/engine/app_layout.cpp b/engine/app_layout.cpp index d808370..b9f72d6 100644 --- a/engine/app_layout.cpp +++ b/engine/app_layout.cpp @@ -580,7 +580,8 @@ void App::initLayout() if (auto* slider = layout[main_id]->find("frames-slider")) { - slider->on_value_changed = [this](Node*, float value) + auto frame_text = layout[main_id]->find("timeline-frame"); + slider->on_value_changed = [this, frame_text](Node*, float value) { auto& c = *ui::Canvas::I; @@ -590,7 +591,7 @@ void App::initLayout() layers->handle_layer_opacity(l, .0f); } - int current_layer = (int)floor(value * c.m_layers.size()); + int current_layer = (int)std::min(floor(value * c.m_layers.size()), c.m_layers.size() - 1); auto l = layers->get_layer_at(current_layer); layers->handle_layer_selected(l); layers->handle_layer_opacity(l, 1.f); @@ -599,8 +600,17 @@ void App::initLayout() auto l = layers->get_layer_at(current_layer - 1); layers->handle_layer_opacity(l, .25f); } + + if (frame_text) + { + char str[16]; + snprintf(str, sizeof(str), "%02d", current_layer); + frame_text->set_text(str); + } }; } + + App::I.redraw = true; }; LOG("initializing layout xml"); if (layout.m_loaded) diff --git a/engine/canvas.cpp b/engine/canvas.cpp index 46f7518..532b479 100644 --- a/engine/canvas.cpp +++ b/engine/canvas.cpp @@ -1123,7 +1123,7 @@ void ui::Canvas::export_anim(std::string data_path) // prepare common states glViewport(0, 0, m_width, m_height); - glDisable(GL_BLEND); + glEnable(GL_BLEND); RTT m_latlong; m_latlong.create(m_width * 4, m_height * 2); // NOTE: w and h must be equal to make sense @@ -1153,29 +1153,18 @@ void ui::Canvas::export_anim(std::string data_path) ui::ShaderManager::u_mat4(kShaderUniform::MVP, glm::ortho(-.5f, .5f, -.5f, .5f, -1.f, 1.f)); m_plane.draw_fill(); - // copy to tmp2 for layer blending - glActiveTexture(GL_TEXTURE0); // TODO: maybe remove this line - m_tex2[i].bind(); - glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, m_width, m_height); - m_tex2[i].unbind(); - - m_layers[layer_index].m_rtt[i].bindTexture(); - glActiveTexture(GL_TEXTURE1); - m_tex2[i].bind(); - m_sampler.bind(0); - m_sampler_bg.bind(1); + glActiveTexture(GL_TEXTURE0); ShaderManager::use(ui::kShader::TextureAlpha); - ShaderManager::u_int(kShaderUniform::TexBG, 1); ShaderManager::u_float(kShaderUniform::Alpha, 1); ShaderManager::u_int(kShaderUniform::Highlight, false); ShaderManager::u_int(kShaderUniform::Tex, 0); ShaderManager::u_mat4(kShaderUniform::MVP, glm::ortho(-.5f, .5f, -.5f, .5f, -1.f, 1.f)); + + m_sampler_mask.bind(0); + m_layers[layer_index].m_rtt[i].bindTexture(); m_plane.draw_fill(); - m_sampler.unbind(); - m_sampler_bg.unbind(); - m_tex2[i].unbind(); - glActiveTexture(GL_TEXTURE0); m_layers[layer_index].m_rtt[i].unbindTexture(); + m_sampler_mask.unbind(); // copy result to cubemap glBindTexture(GL_TEXTURE_CUBE_MAP, cube_id); @@ -1183,13 +1172,6 @@ void ui::Canvas::export_anim(std::string data_path) glBindTexture(GL_TEXTURE_CUBE_MAP, 0); m_tmp[i].unbindFramebuffer(); - -// m_layers[layer_index].m_rtt[i].bindFramebuffer(); -// // copy result to cubemap -// glBindTexture(GL_TEXTURE_CUBE_MAP, cube_id); -// glCopyTexImage2D(faces[i], 0, GL_RGBA8, 0, 0, m_width, m_height, 0); -// glBindTexture(GL_TEXTURE_CUBE_MAP, 0); -// m_layers[layer_index].m_rtt[i].unbindFramebuffer(); } glViewport(0, 0, m_latlong.getWidth(), m_latlong.getHeight()); diff --git a/engine/main.cpp b/engine/main.cpp index e1d6202..b545a20 100644 --- a/engine/main.cpp +++ b/engine/main.cpp @@ -379,6 +379,10 @@ int main(int argc, char** argv) SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)LoadIcon(GetModuleHandle(0), MAKEINTRESOURCE(IDI_ICON1))); + SetTimer(hWnd, 1, 500, [](HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime) { + App::I.redraw = true; + }); + MSG msg; bool running = true; unsigned long t0 = GetTickCount();