diff --git a/src/core/scene/globject.cpp b/src/core/scene/globject.cpp index 52fa9c1..508d922 100644 --- a/src/core/scene/globject.cpp +++ b/src/core/scene/globject.cpp @@ -634,6 +634,7 @@ ObjectBase * Light::clone(bool withChildren) { o->decay_linear = decay_linear; o->decay_quadratic = decay_quadratic; o->meta = meta; + o->shadow_map.reinit(); return o; } diff --git a/src/core/scene/glscene.cpp b/src/core/scene/glscene.cpp index 8d94939..3f33a39 100644 --- a/src/core/scene/glscene.cpp +++ b/src/core/scene/glscene.cpp @@ -113,6 +113,10 @@ void Scene::reinitAll() { i->reinit(); for (auto * i: td_geometries) i->reinit(); + auto aol = root_->children(true); + for (auto * i: aol) { + if (i->type() == ObjectBase::glLight) ((Light *)i)->shadow_map.reinit(); + } setTreeChanged(); mat_changed = lights_changed = true; need_reload_materials = true; diff --git a/src/qglview_test/qglview_window.cpp b/src/qglview_test/qglview_window.cpp index 33d458d..f6ecb8a 100644 --- a/src/qglview_test/qglview_window.cpp +++ b/src/qglview_test/qglview_window.cpp @@ -41,7 +41,10 @@ public: } ~Effect1() { deleteShader(mys); } QString name() const { return "Blur"; } - void reloadShaders() { QGLEngineShaders::loadShadersMulti(mys, "test1.glsl"); } + void reloadShaders() { + deleteShader(mys); + QGLEngineShaders::loadShadersMulti(mys, "test1.glsl"); + } void draw() { if (!mys) return; if (!mys->isLinked()) return;