Please ACK these patches.
GCC 4.6 include fix.
GCC 4.6 temporary parameter fix.
Code: Select all
--- rts/Map/SMF/BFGroundDrawer.cpp.old 2011-03-28 12:51:56.331599362 +0200
+++ rts/Map/SMF/BFGroundDrawer.cpp 2011-03-28 12:54:43.209600038 +0200
@@ -1342,7 +1342,23 @@
smfShaderGLSL->Enable();
smfShaderGLSL->SetUniform3fv(10, &camera->pos[0]);
smfShaderGLSL->SetUniformMatrix4fv(12, false, &shadowHandler->shadowMatrix.m[0]);
- smfShaderGLSL->SetUniform4fv(13, const_cast<float*>(&(shadowHandler->GetShadowParams().x)));
+
+ {
+ /*
+ * GCC 4.6 barfs on having a temporary copy of float4
+ * passed as pointer to glUniform4fv.
+ * Pending a cleaner solution that will include
+ * changes to shadowHandler and float4,
+ * the only thing remaining is to manually copy
+ * the members to temporary stack array and pass
+ * it down to glUniform4fv.
+ */
+ float4 shadowFloat4 =
+ shadowHandler->GetShadowParams();
+ float shadowFloatArr[4];
+
+ smfShaderGLSL->SetUniform4fv(13, shadowFloat4.as_float_arr(shadowFloatArr));
+ }
glActiveTexture(GL_TEXTURE5); glBindTexture(GL_TEXTURE_2D, map->GetNormalsTexture());
glActiveTexture(GL_TEXTURE6); glBindTexture(GL_TEXTURE_2D, map->GetSpecularTexture());
--- rts/Rendering/Env/GrassDrawer.cpp.old 2011-03-28 14:29:32.521597516 +0200
+++ rts/Rendering/Env/GrassDrawer.cpp 2011-03-28 14:33:18.881600104 +0200
@@ -485,7 +485,24 @@
if (globalRendering->haveGLSL) {
grassShader->SetUniformMatrix4fv(6, false, &shadowHandler->shadowMatrix.m[0]);
- grassShader->SetUniform4fv(7, const_cast<float*>(&(shadowHandler->GetShadowParams().x)));
+
+ {
+ /*
+ * GCC 4.6 barfs on having a temporary copy of float4
+ * passed as pointer to glUniform4fv.
+ * Pending a cleaner solution that will include
+ * changes to shadowHandler and float4,
+ * the only thing remaining is to manually copy
+ * the members to temporary stack array and pass
+ * it down to glUniform4fv.
+ */
+ float4 shadowFloat4 =
+ shadowHandler->GetShadowParams();
+ float shadowFloatArr[4];
+
+ grassShader->SetUniform4fv(7, shadowFloat4.as_float_arr(shadowFloatArr));
+ }
+
grassShader->SetUniform1f(8, gs->frameNum);
grassShader->SetUniform3fv(9, const_cast<float*>(&(windSpeed.x)));
} else {
@@ -585,7 +607,24 @@
if (globalRendering->haveGLSL) {
grassShader->SetUniformMatrix4fv(6, false, &shadowHandler->shadowMatrix.m[0]);
- grassShader->SetUniform4fv(7, const_cast<float*>(&(shadowHandler->GetShadowParams().x)));
+
+ {
+ /*
+ * GCC 4.6 barfs on having a temporary copy of float4
+ * passed as pointer to glUniform4fv.
+ * Pending a cleaner solution that will include
+ * changes to shadowHandler and float4,
+ * the only thing remaining is to manually copy
+ * the members to temporary stack array and pass
+ * it down to glUniform4fv.
+ */
+ float4 shadowFloat4 =
+ shadowHandler->GetShadowParams();
+ float shadowFloatArr[4];
+
+ grassShader->SetUniform4fv(7, shadowFloat4.as_float_arr(shadowFloatArr));
+ }
+
grassShader->SetUniform1f(8, gs->frameNum);
grassShader->SetUniform3fv(9, const_cast<float*>(&(windSpeed.x)));
}
--- rts/Rendering/Env/AdvTreeDrawer.cpp.old 2011-03-28 14:29:47.511601193 +0200
+++ rts/Rendering/Env/AdvTreeDrawer.cpp 2011-03-28 14:35:20.958600022 +0200
@@ -458,7 +458,22 @@
if (globalRendering->haveGLSL) {
treeShader->SetUniformMatrix4fv(7, false, &shadowHandler->shadowMatrix.m[0]);
- treeShader->SetUniform4fv(8, const_cast<float*>(&(shadowHandler->GetShadowParams().x)));
+ {
+ /*
+ * GCC 4.6 barfs on having a temporary copy of float4
+ * passed as pointer to glUniform4fv.
+ * Pending a cleaner solution that will include
+ * changes to shadowHandler and float4,
+ * the only thing remaining is to manually copy
+ * the members to temporary stack array and pass
+ * it down to glUniform4fv.
+ */
+ float4 shadowFloat4 =
+ shadowHandler->GetShadowParams();
+ float shadowFloatArr[4];
+
+ treeShader->SetUniform4fv(8, shadowFloat4.as_float_arr(shadowFloatArr));
+ }
} else {
treeShader->SetUniformTarget(GL_FRAGMENT_PROGRAM_ARB);
treeShader->SetUniform4f(10, L.groundAmbientColor.x, L.groundAmbientColor.y, L.groundAmbientColor.z, 1.0f);
@@ -501,7 +521,23 @@
if (globalRendering->haveGLSL) {
treeShader->SetUniformMatrix4fv(7, false, &shadowHandler->shadowMatrix.m[0]);
- treeShader->SetUniform4fv(8, const_cast<float*>(&(shadowHandler->GetShadowParams().x)));
+
+ {
+ /*
+ * GCC 4.6 barfs on having a temporary copy of float4
+ * passed as pointer to glUniform4fv.
+ * Pending a cleaner solution that will include
+ * changes to shadowHandler and float4,
+ * the only thing remaining is to manually copy
+ * the members to temporary stack array and pass
+ * it down to glUniform4fv.
+ */
+ float4 shadowFloat4 =
+ shadowHandler->GetShadowParams();
+ float shadowFloatArr[4];
+
+ treeShader->SetUniform4fv(8, shadowFloat4.as_float_arr(shadowFloatArr));
+ }
}
glActiveTexture(GL_TEXTURE1);
--- rts/Lua/LuaMaterial.cpp.old 2011-03-16 11:34:10.123708670 +0200
+++ rts/Lua/LuaMaterial.cpp 2011-03-16 14:44:23.736824894 +0200
@@ -379,7 +379,20 @@
}
if (shadowParamsLoc >= 0) {
- glUniform4fv(shadowParamsLoc, 1, const_cast<float*>(&(shadowHandler->GetShadowParams().x)));
+ /*
+ * GCC 4.6 barfs on having a temporary copy of float4
+ * passed as pointer to glUniform4fv.
+ * Pending a cleaner solution that will include
+ * changes to shadowHandler and float4,
+ * the only thing remaining is to manually copy
+ * the members to temporary stack array and pass
+ * it down to glUniform4fv.
+ */
+ float4 shadowFloat4 =
+ shadowHandler->GetShadowParams();
+ float shadowFloatArr[4];
+
+ glUniform4fv(shadowParamsLoc, 1, shadowFloat4.as_float_arr(shadowFloatArr));
}
const int maxTex = std::max(texCount, prev.texCount);
--- rts/Rendering/UnitDrawer.cpp.old 2011-03-28 14:11:57.129599851 +0200
+++ rts/Rendering/UnitDrawer.cpp 2011-03-28 14:14:01.937599970 +0200
@@ -1195,7 +1195,23 @@
modelShaders[MODEL_SHADER_S3O_ACTIVE]->SetUniformMatrix4dv(7, false, const_cast<double*>(camera->GetViewMat()));
modelShaders[MODEL_SHADER_S3O_ACTIVE]->SetUniformMatrix4dv(8, false, const_cast<double*>(camera->GetViewMatInv()));
modelShaders[MODEL_SHADER_S3O_ACTIVE]->SetUniformMatrix4fv(13, false, &shadowHandler->shadowMatrix.m[0]);
- modelShaders[MODEL_SHADER_S3O_ACTIVE]->SetUniform4fv(14, const_cast<float*>(&(shadowHandler->GetShadowParams().x)));
+
+ {
+ /*
+ * GCC 4.6 barfs on having a temporary copy of float4
+ * passed as pointer to glUniform4fv.
+ * Pending a cleaner solution that will include
+ * changes to shadowHandler and float4,
+ * the only thing remaining is to manually copy
+ * the members to temporary stack array and pass
+ * it down to glUniform4fv.
+ */
+ float4 shadowFloat4 =
+ shadowHandler->GetShadowParams();
+ float shadowFloatArr[4];
+
+ modelShaders[MODEL_SHADER_S3O_ACTIVE]->SetUniform4fv(14, shadowFloat4.as_float_arr(shadowFloatArr));
+ }
} else {
modelShaders[MODEL_SHADER_S3O_ACTIVE]->SetUniformTarget(GL_VERTEX_PROGRAM_ARB);
modelShaders[MODEL_SHADER_S3O_ACTIVE]->SetUniform4f(10, mapInfo->light.sunDir.x, mapInfo->light.sunDir.y ,mapInfo->light.sunDir.z, 0.0f);
--- rts/System/float4.h.old 2011-03-31 06:13:26.908050146 +0200
+++ rts/System/float4.h 2011-03-31 06:16:38.697117765 +0200
@@ -54,6 +54,13 @@
return !(*this == f);
}
+ inline float *as_float_arr(float *floatArr) {
+ floatArr[0] = x;
+ floatArr[1] = y;
+ floatArr[2] = z;
+ floatArr[3] = w;
+ return floatArr;
+ }
/// Allows implicit conversion to float* (for passing to gl functions)
operator const float* () const { return &x; }