2024-04-19 19:38 CEST

View Issue Details Jump to Notes ]
IDProjectCategoryView StatusLast Update
0004643Spring engineGeneralpublic2015-01-04 17:24
Reporterabma 
Assigned Toabma 
PrioritynormalSeverityminorReproducibilityhave not tried
StatusresolvedResolutionfixed 
Product Version98.0.1+git 
Target VersionFixed in Version 
Summary0004643: Shader compile error "cannot construct `mat3' from a matrix in GLSL 1.10 (GLSL 1.20 or GLSL ES 1.00 required)"
Description[Shader] Warning: [GLSL-SO::Compile] shader-object name: unknown, compile-log:
0:86(16): error: cannot construct `mat3' from a matrix in GLSL 1.10 (GLSL 1.20 or GLSL ES 1.00 required)
0:86(16): error: operands to arithmetic operators must be numeric


[f=0000300] [Shader] Warning:
// SHADER VERSION
// SHADER FLAGS
#define DISTANCE_NEAR

#define HAVE_SHADOWS
// SHADER SOURCE
#line 1
uniform vec2 mapSizePO2; // (1.0 / pwr2map{x,z} * SQUARE_SIZE)
uniform vec2 mapSize; // (1.0 / map{x,z} * SQUARE_SIZE)

uniform mat4 shadowMatrix;
uniform vec4 shadowParams;

uniform vec3 camPos;
uniform vec3 camUp;
uniform vec3 camRight;

uniform float frame;
uniform vec3 windSpeed;

uniform vec3 sunDir;
uniform vec3 ambientLightColor;
uniform vec3 diffuseLightColor;

varying vec3 normal;
varying vec4 shadingTexCoords;
varying vec2 bladeTexCoords;
varying vec3 ambientDiffuseLightTerm;
#if defined(HAVE_SHADOWS) || defined(SHADOW_GEN)
  varying vec4 shadowTexCoords;
#endif


const float PI = 3.14159265358979323846264;


//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
// Crytek - foliage animation
// src: http://http.developer.nvidia.com/GPUGems3/gpugems3_ch16.html
//

// This bends the entire plant in the direction of the wind.
// vPos: The world position of the plant *relative* to the base of the plant.
vec3 ApplyMainBending(in vec3 vPos, in vec2 vWind, in float fBendScale)
{
    float fLength = length(vPos);
    float fBF = vPos.y * fBendScale + 1.0;
    fBF *= fBF;
    fBF = fBF * fBF - fBF;
    vPos.xz += vWind.xy * fBF;
    return normalize(vPos) * fLength;
}

vec2 SmoothCurve( vec2 x ) {
    return x * x * (3.0 - 2.0 * x);
}
vec2 TriangleWave( vec2 x ) {
    return abs( fract( x + 0.5 ) * 1.99 - 1.0 );
}
vec2 SmoothTriangleWave( vec2 x ) {
    // similar to sine wave, but faster
    return SmoothCurve( TriangleWave( x ) );
}

const vec2 V_FREQ = vec2(1.975, 0.793);

// This provides "chaotic" motion for leaves and branches (the entire plant, really)
void ApplyDetailBending(inout vec3 vPos, vec3 vNormal, float fDetailPhase, float fTime, float fSpeed, float fDetailAmp)
{
    float vWavesIn = fTime + fDetailPhase;
    vec2 vWaves = (fract( vec2(vWavesIn) * V_FREQ ) * 2.0 - 1.0 ) * fSpeed;
    vWaves = SmoothTriangleWave( vWaves );
    vPos.xyz += vNormal.xyz * vWaves.xxy * fDetailAmp;
}


//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////


void main() {
    vec2 texOffset = vec2(0.);
    gl_FrontColor = gl_Color;

#ifndef DISTANCE_FAR
    // mesh grass
    normal = gl_NormalMatrix * gl_Normal;
    vec4 worldPos = gl_ModelViewMatrix * gl_Vertex;

    // anim
    vec3 objPos = mat3(gl_ModelViewMatrix) * gl_Vertex.xyz;
    worldPos.xyz += ApplyMainBending(objPos, windSpeed.xz, gl_MultiTexCoord0.s * 0.004 + 0.007) - objPos;
    ApplyDetailBending(worldPos.xyz, normal,
            gl_MultiTexCoord0.s,
            frame / 30.0,
            0.3,
            gl_MultiTexCoord0.t * 0.4);

    // compute ambient & diffuse lighting per-vertex, specular is per-pixel
    float fNdotL = dot(normal, sunDir);
    float diffuseTerm = fNdotL * 0.4 + 0.6; // front surface //TODO make constants customizable?
    diffuseTerm = max(diffuseTerm, ((-fNdotL) * 0.3 + 0.7) * 0.8); // back surface //TODO make constants customizable?
    ambientDiffuseLightTerm = ambientLightColor + diffuseTerm * diffuseLightColor;
#else
    // billboards
    gl_FrontColor.a *= gl_Normal.z; // alpha blend far turfs
    vec4 worldPos = /* gl_ModelViewMatrix * */ gl_Vertex; // MVM is empty in far draw pass

    // get the camera angle on the billboard and select the corresponding sprite
    float cosCamAngle = normalize(camPos.xyz - worldPos.xyz).y;
    float ang = acos(-cosCamAngle);
    texOffset.s = clamp(floor((ang + PI / 16.0 - PI / 2.0) / PI * 30.0), 0.0, 15.0) / 16.0;

    // billboard size
    vec2 billboardSize = gl_Normal.xy;

    // cut of lower half in horizontal views (the fartexture is empty in lower 50% in horizontal view!)
    billboardSize.y = max(billboardSize.y, billboardSize.y * cosCamAngle);

    // span the billboard
    worldPos.xyz += camRight * billboardSize.x;
    worldPos.xyz += camUp * billboardSize.y;

    // adjust texcoord for cut of billboard
    texOffset.t = max((0.5 * cosCamAngle - 0.5), -gl_MultiTexCoord0.t);

    // anim
    float seed = fract(abs(dot(gl_Vertex.xyz, vec3(1.0))));
    vec3 objPos = (worldPos.xyz - gl_Vertex.xyz);
    worldPos.xyz += ApplyMainBending(objPos, windSpeed.xz, seed * 0.006 + 0.01) - objPos;
    ApplyDetailBending(worldPos.xyz, vec3(1., 0., 1.),
            seed,
            frame / 30.0,
            0.3,
            0.5 * max(1.0 - gl_MultiTexCoord0.t, cosCamAngle));

    // move up when looking down (to fix clipping issues)
    worldPos.y += 5.0 * cosCamAngle;

    // compute ambient & diffuse lighting per-vertex
    ambientDiffuseLightTerm = ambientLightColor + diffuseLightColor;
#endif

#if defined(HAVE_SHADOWS) || defined(SHADOW_GEN)
    vec4 vertexShadowPos = shadowMatrix * worldPos;
    vertexShadowPos.st += shadowParams.xy;
    shadowTexCoords = vertexShadowPos;
#endif

#ifdef SHADOW_GEN
    {
        bladeTexCoords = gl_MultiTexCoord0.st + texOffset;
        gl_Position = gl_ProjectionMatrix * vertexShadowPos;
        return;
    }
#endif

    shadingTexCoords = worldPos.xzxz * vec4(mapSizePO2, mapSize);
    bladeTexCoords = gl_MultiTexCoord0.st + texOffset;

    gl_Position = gl_ProjectionMatrix * worldPos;

    gl_FogFragCoord = distance(camPos, worldPos.xyz);
    gl_FogFragCoord = (gl_Fog.end - gl_FogFragCoord) * gl_Fog.scale;
    gl_FogFragCoord = clamp(gl_FogFragCoord, 0.0, 1.0);
}

[f=0000300] [CrashHandler] Error: Floating point exception (SIGFPE) in spring 98.0.1-238-g05ddf80 release (Debug)
[f=0000300] [CrashHandler] Error: Halted Stacktrace for Spring 98.0.1-238-g05ddf80 release (Debug) using libunwind:
[f=0000300] [CrashHandler] Error: [00] /home/abma/dev/spring/develop/rts/System/Platform/Linux/CrashHandler.cpp:853 CrashHandler::HaltedStacktrace(std::string const&, siginfo_t*, ucontext*)
[f=0000300] [CrashHandler] Error: [01] /home/abma/dev/spring/develop/rts/System/Platform/Linux/CrashHandler.cpp:959 CrashHandler::HandleSignal(int, siginfo_t*, void*)
[f=0000300] [CrashHandler] Error: [02] ??:? __restore_rt
[f=0000300] [CrashHandler] Error: [03] ??:? radeon_drm_winsys_create
[f=0000300] [CrashHandler] Error: [04] ??:? radeon_drm_winsys_create
[f=0000300] [CrashHandler] Error: [05] ??:? radeon_drm_winsys_create
[f=0000300] [CrashHandler] Error: [06] ??:? radeon_drm_winsys_create
[f=0000300] [CrashHandler] Error: [07] ??:? radeon_drm_winsys_create
[f=0000300] [CrashHandler] Error: [08] ??:? radeon_drm_winsys_create
[f=0000300] [CrashHandler] Error: [09] ??:? radeon_drm_winsys_create
[f=0000300] [CrashHandler] Error: [10] ??:? radeon_drm_winsys_create
[f=0000300] [CrashHandler] Error: [11] ??:? radeon_drm_winsys_create
[f=0000300] [CrashHandler] Error: [12] ??:? radeon_drm_winsys_create
[f=0000300] [CrashHandler] Error: [13] ??:? radeon_drm_winsys_create
[f=0000300] [CrashHandler] Error: [14] ??:? __driDriverGetExtensions_vmwgfx
[f=0000300] [CrashHandler] Error: [15] ??:? __driDriverGetExtensions_vmwgfx
[f=0000300] [CrashHandler] Error: [16] ??:? __driDriverGetExtensions_vmwgfx
[f=0000300] [CrashHandler] Error: [17] ??:? __driDriverGetExtensions_vmwgfx
[f=0000300] [CrashHandler] Error: [18] ??:? __driDriverGetExtensions_vmwgfx
[f=0000300] [CrashHandler] Error: [19] /home/abma/dev/spring/develop/rts/Rendering/Env/GrassDrawer.cpp:396 CGrassDrawer::DrawNear(std::vector<CGrassDrawer::InviewNearGrass, std::allocator<CGrassDrawer: [...]
[f=0000300] [CrashHandler] Error: [20] /home/abma/dev/spring/develop/rts/Rendering/Env/GrassDrawer.cpp:539 CGrassDrawer::Draw()
[f=0000300] [CrashHandler] Error: [21] /home/abma/dev/spring/develop/rts/Rendering/WorldDrawer.cpp:137 CWorldDrawer::Draw()
[f=0000300] [CrashHandler] Error: [22] /home/abma/dev/spring/develop/rts/Game/Game.cpp:1324 CGame::Draw()
[f=0000300] [CrashHandler] Error: [23] /home/abma/dev/spring/develop/rts/System/SpringApp.cpp:845 SpringApp::Update()
[f=0000300] [CrashHandler] Error: [24] /home/abma/dev/spring/develop/rts/System/SpringApp.cpp:873 SpringApp::Run()
[f=0000300] [CrashHandler] Error: [25] /home/abma/dev/spring/develop/rts/System/Main.cpp:48 Run(int, char**)
[f=0000300] [CrashHandler] Error: [26] /home/abma/dev/spring/develop/rts/System/Main.cpp:108 main
[f=0000300] [CrashHandler] Error: [27] /build/buildd/glibc-2.19/csu/libc-start.c:321 __libc_start_main
[f=0000300] [CrashHandler] Error: [28] ??:? _start
[f=0000300] Error: [ErrorMessageBox][1] msg="Spring has crashed:
Floating point exception (SIGFPE).
TagsNo tags attached.
Checked infolog.txt for Errors
Attached Files

-Relationships
+Relationships

-Notes

~0013885

abma (administrator)

http://blenderartists.org/forum/archive/index.php/t-292170.html ?

~0013886

abma (administrator)

to reproduce, i have just to zoom in close to the map ground.

~0013887

abma (administrator)

this fixes it for me:

diff --git a/cont/base/springcontent/shaders/GLSL/GrassVertProg.glsl b/cont/base/springcontent/shaders/GLSL/GrassVertProg.glsl
index 35fdadc..687fa20 100644
--- a/cont/base/springcontent/shaders/GLSL/GrassVertProg.glsl
+++ b/cont/base/springcontent/shaders/GLSL/GrassVertProg.glsl
@@ -67,6 +67,26 @@ void ApplyDetailBending(inout vec3 vPos, vec3 vNormal, float fDetailPhase, float
        vPos.xyz += vNormal.xyz * vWaves.xxy * fDetailAmp;
 }
 
+mat3 m3( mat4 m )
+{
+ mat3 result;
+
+ result[0][0] = m[0][0];
+ result[0][1] = m[0][1];
+ result[0][2] = m[0][2];
+
+
+ result[1][0] = m[1][0];
+ result[1][1] = m[1][1];
+ result[1][2] = m[1][2];
+
+ result[2][0] = m[2][0];
+ result[2][1] = m[2][1];
+ result[2][2] = m[2][2];
+
+ return result;
+}
+
 
 //////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////
@@ -82,7 +102,7 @@ void main() {
        vec4 worldPos = gl_ModelViewMatrix * gl_Vertex;
 
        // anim
- vec3 objPos = mat3(gl_ModelViewMatrix) * gl_Vertex.xyz;
+ vec3 objPos = m3(gl_ModelViewMatrix) * gl_Vertex.xyz;
        worldPos.xyz += ApplyMainBending(objPos, windSpeed.xz, gl_MultiTexCoord0.s * 0.004 + 0.007) - objPos;
        ApplyDetailBending(worldPos.xyz, normal,
                        gl_MultiTexCoord0.s,


is this change fine?
+Notes

-Issue History
Date Modified Username Field Change
2015-01-04 15:49 abma New Issue
2015-01-04 15:50 abma Note Added: 0013885
2015-01-04 15:52 abma Summary Shader compile error resulting in SIGFPE => Shader compile error
2015-01-04 15:53 abma Note Added: 0013886
2015-01-04 15:58 abma Note Added: 0013887
2015-01-04 15:59 abma Summary Shader compile error => Shader compile error "cannot construct `mat3' from a matrix in GLSL 1.10 (GLSL 1.20 or GLSL ES 1.00 required)"
2015-01-04 17:24 abma Changeset attached => spring release 257ef8c3
2015-01-04 17:24 abma Assigned To => abma
2015-01-04 17:24 abma Status new => resolved
2015-01-04 17:24 abma Resolution open => fixed
+Issue History