From 12c54cb92bbda0a48afa0dfbc00c9b1d54b8e775 Mon Sep 17 00:00:00 2001 From: Marianne Gagnon Date: Wed, 26 Nov 2014 19:30:09 -0500 Subject: [PATCH 1/2] Revert old workaround, fix the original issue in a cleaner way --- src/karts/kart_model.cpp | 85 +++++++++++++------------ src/states_screens/feature_unlocked.cpp | 2 +- 2 files changed, 45 insertions(+), 42 deletions(-) diff --git a/src/karts/kart_model.cpp b/src/karts/kart_model.cpp index 3f44f062c..125827dc7 100644 --- a/src/karts/kart_model.cpp +++ b/src/karts/kart_model.cpp @@ -779,10 +779,10 @@ void KartModel::update(float dt, float rotation_dt, float steer, float speed) for(unsigned int i=0; i<4; i++) { - if(!m_wheel_node[i]) continue; + if (!m_kart || !m_wheel_node[i]) continue; const btWheelInfo &wi = m_kart->getVehicle()->getWheelInfo(i); #ifdef DEBUG - if(UserConfigParams::m_physics_debug && m_kart) + if(UserConfigParams::m_physics_debug) { // Make wheels that are not touching the ground invisible m_wheel_node[i]->setVisible(wi.m_raycastInfo.m_isInContact); @@ -816,54 +816,57 @@ void KartModel::update(float dt, float rotation_dt, float steer, float speed) if (m_animated_node == NULL) return; // Update the speed-weighted objects' animations - for(size_t i=0 ; i < m_speed_weighted_objects.size() ; i++) + if (m_kart != NULL) { - SpeedWeightedObject& obj = m_speed_weighted_objects[i]; + for (size_t i = 0; i < m_speed_weighted_objects.size(); i++) + { + SpeedWeightedObject& obj = m_speed_weighted_objects[i]; #define GET_VALUE(obj, value_name) \ obj.m_properties.value_name > SPEED_WEIGHTED_OBJECT_PROPERTY_UNDEFINED ? obj.m_properties.value_name : \ m_kart->getKartProperties()->getSpeedWeightedObjectProperties().value_name - // Animation strength - float strength = 1.0f; - const float strength_factor = GET_VALUE(obj, m_strength_factor); - if(strength_factor >= 0.0f) - { - strength = speed * strength_factor; - btClamp(strength, 0.0f, 1.0f); - } - - // Animation speed - const float speed_factor = GET_VALUE(obj, m_speed_factor); - if(speed_factor >= 0.0f) - { - float anim_speed = speed * speed_factor; - obj.m_node->setAnimationSpeed(anim_speed); - } - - // Texture animation - core::vector2df tex_speed; - tex_speed.X = GET_VALUE(obj, m_texture_speed.X); - tex_speed.Y = GET_VALUE(obj, m_texture_speed.Y); - if(tex_speed != core::vector2df(0.0f, 0.0f)) - { - obj.m_texture_cur_offset += speed * tex_speed * dt; - if(obj.m_texture_cur_offset.X > 1.0f) obj.m_texture_cur_offset.X = fmod(obj.m_texture_cur_offset.X, 1.0f); - if(obj.m_texture_cur_offset.Y > 1.0f) obj.m_texture_cur_offset.Y = fmod(obj.m_texture_cur_offset.Y, 1.0f); - - for(unsigned int i=0; igetMaterialCount(); i++) + // Animation strength + float strength = 1.0f; + const float strength_factor = GET_VALUE(obj, m_strength_factor); + if (strength_factor >= 0.0f) { - video::SMaterial &irrMaterial=obj.m_node->getMaterial(i); - for(unsigned int j=0; j(strength, 0.0f, 1.0f); + } + + // Animation speed + const float speed_factor = GET_VALUE(obj, m_speed_factor); + if (speed_factor >= 0.0f) + { + float anim_speed = speed * speed_factor; + obj.m_node->setAnimationSpeed(anim_speed); + } + + // Texture animation + core::vector2df tex_speed; + tex_speed.X = GET_VALUE(obj, m_texture_speed.X); + tex_speed.Y = GET_VALUE(obj, m_texture_speed.Y); + if (tex_speed != core::vector2df(0.0f, 0.0f)) + { + obj.m_texture_cur_offset += speed * tex_speed * dt; + if (obj.m_texture_cur_offset.X > 1.0f) obj.m_texture_cur_offset.X = fmod(obj.m_texture_cur_offset.X, 1.0f); + if (obj.m_texture_cur_offset.Y > 1.0f) obj.m_texture_cur_offset.Y = fmod(obj.m_texture_cur_offset.Y, 1.0f); + + for (unsigned int i = 0; i < obj.m_node->getMaterialCount(); i++) { - video::ITexture* t=irrMaterial.getTexture(j); - if(!t) continue; - core::matrix4 *m = &irrMaterial.getTextureMatrix(j); - m->setTextureTranslate(obj.m_texture_cur_offset.X, obj.m_texture_cur_offset.Y); - } // for jgetMaterial(i); + for (unsigned int j = 0; j < video::MATERIAL_MAX_TEXTURES; j++) + { + video::ITexture* t = irrMaterial.getTexture(j); + if (!t) continue; + core::matrix4 *m = &irrMaterial.getTextureMatrix(j); + m->setTextureTranslate(obj.m_texture_cur_offset.X, obj.m_texture_cur_offset.Y); + } // for jattachModel(true, false); m_unlocked_stuff[n].m_scale = 5.0f; kart_model->setAnimation(KartModel::AF_DEFAULT); - //kart_model->update(0.0f, 0.0f, 0.0f, 0.0f); + kart_model->update(0.0f, 0.0f, 0.0f, 0.0f); // set model current frame to "center" #ifdef DEBUG m_unlocked_stuff[n].m_root_gift_node->setName("unlocked kart"); From bf98d296eb0b40b49d6c333ffd48341b4dda388f Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Thu, 27 Nov 2014 01:31:28 +0100 Subject: [PATCH 2/2] Fix #1734 --- src/graphics/render.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/graphics/render.cpp b/src/graphics/render.cpp index d10e6897b..debd9f35a 100644 --- a/src/graphics/render.cpp +++ b/src/graphics/render.cpp @@ -280,6 +280,13 @@ void IrrDriver::renderGLSL(float dt) PROFILER_POP_CPU_MARKER(); } // for igetNumKarts() + // Use full screen size + float tmp[2]; + tmp[0] = float(UserConfigParams::m_width); + tmp[1] = float(UserConfigParams::m_height); + glBindBuffer(GL_UNIFORM_BUFFER, SharedObject::ViewProjectionMatrixesUBO); + glBufferSubData(GL_UNIFORM_BUFFER, (16 * 9) * sizeof(float), 2 * sizeof(float), tmp); + glBindVertexArray(0); glBindBuffer(GL_ARRAY_BUFFER, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);