Package: openarena
Version: 0.8.8+dfsg-2
Severity: grave
Justification: renders package unusable

Dear Maintainer,

   * What led up to the situation?
   I attempted to launch the program.

   * What exactly did you do (or not do) that was effective (or
     ineffective)?
   Ran `openarena` from a terminal.

   * What was the outcome of this action?
   Program failed to launch with a lengthy error message (attached).

   * What outcome did you expect instead?
   I expected the program to launch normally.


-- System Information:
Debian Release: buster/sid
  APT prefers testing
  APT policy: (500, 'testing'), (1, 'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 4.19.0-2-amd64 (SMP w/2 CPU cores)
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8),
LANGUAGE=en_GB:en (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages openarena depends on:
ii  ioquake3                      1.36+u20181222.e5da13f~dfsg-1
ii  libc6                         2.28-7
ii  openarena-081-maps            0.8.5split-11
ii  openarena-081-misc            0.8.5split-11
ii  openarena-081-players         0.8.5split-11
ii  openarena-081-players-mature  0.8.5split-11
ii  openarena-081-textures        0.8.5split-11
ii  openarena-085-data            0.8.5split-11
ii  openarena-088-data            0.8.8-9
ii  openarena-data                0.8.5split-11

Versions of packages openarena recommends:
ii  openarena-oacmp1  3-4

openarena suggests no packages.

Versions of packages ioquake3 depends on:
ii  ioquake3-server  1.36+u20181222.e5da13f~dfsg-1
ii  libc6            2.28-7
ii  libcurl3-gnutls  7.64.0-1
ii  libgl1           1.1.0-1
ii  libjpeg62-turbo  1:1.5.2-2+b1
ii  libogg0          1.3.2-1+b1
ii  libopenal1       1:1.19.1-1
ii  libopus0         1.3-1
ii  libopusfile0     0.9+20170913-1
ii  libsdl2-2.0-0    2.0.9+dfsg1-1
ii  libvorbis0a      1.3.6-2
ii  libvorbisfile3   1.3.6-2
ii  zlib1g           1:1.2.11.dfsg-1

Versions of packages ioquake3 recommends:
ii  x11-utils  7.7+4

-- no debconf information
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
tty]    ioq3 1.36+u20181222.e5da13f~dfsg-1/Debian linux-x86_64 Jan 14 
2019
tty]    SSE instruction set enabled
tty]    ----- FS_Startup -----
tty]    We are looking in the current search path:
tty]    /home/empty/.openarena/baseoa
tty]    /usr/lib/openarena/baseoa
tty]    /usr/lib/openarena/baseoa/z_oacmp-volume1-v3.pk3 (370 files)
tty]    /usr/lib/openarena/baseoa/pak6-patch088.pk3 (711 files)
tty]    /usr/lib/openarena/baseoa/pak6-patch085.pk3 (559 files)
tty]    /usr/lib/openarena/baseoa/pak6-misc.pk3 (229 files)
tty]    /usr/lib/openarena/baseoa/pak5-TA.pk3 (139 files)
tty]    /usr/lib/openarena/baseoa/pak4-textures.pk3 (1753 files)
tty]    /usr/lib/openarena/baseoa/pak2-players.pk3 (669 files)
tty]    /usr/lib/openarena/baseoa/pak2-players-mature.pk3 (231 files)
tty]    /usr/lib/openarena/baseoa/pak1-maps.pk3 (100 files)
tty]    /usr/lib/openarena/baseoa/pak0.pk3 (1042 files)
tty]    
tty]    ----------------------
tty]    5803 files in pk3 files
tty]    execing default.cfg
tty]    couldn't exec q3config.cfg
tty]    couldn't exec autoexec.cfg
tty]    Hunk_Clear: reset the hunk ok
tty][Detaching after fork from child process 7475]
    ----- Client Initialization -----
tty]    Couldn't read q3history.
tty]    ----- Initializing Renderer ----
tty]    Trying to load "renderer_opengl2_x86_64.so" from 
"/usr/lib/ioquake3"...
tty]    -------------------------------
tty]    QKEY found.
tty]    ----- Client Initialization Complete -----
tty]    tty]
tty]q     ----- R_Init -----
tty]q[Detaching after fork from child process 7485]
[New Thread 0x7f89daf18700 (LWP 7486)]
     SDL using driver "x11"
tty]q     Initializing OpenGL display
tty]q     Display aspect: 1.600
tty]q     ...setting mode 3: 640 480
tty]q     Trying to get an OpenGL 3.2 core context
tty]q     SDL_GL_CreateContext failed: Could not create GL context: 
GLXBadFBConfig
tty]q     Reverting to default context
tty]q     Using 24 color bits, 24 depth, 8 stencil display.
tty]q     Available modes: '640x400 1280x800 640x360 720x405 864x486 
960x540 1024x576 1280x720 640x480 800x600 1024x768'
tty]q     GL_RENDERER: Mesa DRI Intel(R) Ironlake Mobile 
tty]q     Initializing OpenGL extensions
tty]q     ...ignoring GL_EXT_texture_compression_s3tc
tty]q     ...ignoring GL_S3_s3tc
tty]q     ...ignoring GL_EXT_texture_filter_anisotropic
tty]q     ...using GL_ARB_framebuffer_object
tty]q     ...using GL_ARB_vertex_array_object
tty]q     ...using GL_ARB_texture_float
tty]q     ...using GL_ARB_depth_clamp
tty]q     ...ignoring GL_ARB_seamless_cube_map
tty]q     ...using GLSL version 1.20
tty]q     ...GL_NVX_gpu_memory_info not found
tty]q     ...GL_ATI_meminfo not found
tty]q     ...ignoring GL_ARB_texture_compression_rgtc
tty]q     ...GL_ARB_texture_compression_bptc not found
tty]q     ...GL_EXT_direct_state_access not found
tty]q     ------- FBO_Init -------
tty]q     ------- GLSL_InitGPUShaders -------
tty]q     Shader source:
tty]q     #version 120
#define shadow2D(a,b) shadow2D(a,b).r 
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
#ifndef deformGen_t
#define deformGen_t
#define DGEN_WAVE_SIN 1
#define DGEN_WAVE_SQUARE 2
#define DGEN_WAVE_TRIANGLE 3
#define DGEN_WAVE_SAWTOOTH 4
#define DGEN_WAVE_INVERSE_SAWTOOTH 5
#define DGEN_BULGE 7
#define DGEN_MOVE 8
#endif
#ifndef tcGen_t
#define tcGen_t
#define TCGEN_LIGHTMAP 2
#define TCGEN_TEXTURE 3
#define TCGEN_ENVIRONMENT_MAPPED 4
#define TCGEN_FOG 5
#define TCGEN_VECTOR 6
#endif
#ifndef colorGen_t
#define colorGen_t
#define CGEN_LIGHTING_DIFFUSE 11
#endif
#ifndef alphaGen_t
#define alphaGen_t
#define AGEN_LIGHTING_SPECULAR 6
#define AGEN_PORTAL 8
#endif
#ifndef r_FBufScale
#define r_FBufScale vec2(0.001563, 0.002083)
#endif
#line 0
uniform sampler2D u_DiffuseMap;

#if defined(USE_LIGHTMAP)
uniform sampler2D u_LightMap;
#endif

#if defined(USE_NORMALMAP)
uniform sampler2D u_NormalMap;
#endif

#if defined(USE_DELUXEMAP)
uniform sampler2D u_DeluxeMap;
#endif

#if defined(USE_SPECULARMAP)
uniform sampler2D u_SpecularMap;
#endif

#if defined(USE_SHADOWMAP)
uniform sampler2D u_ShadowMap;
#endif

#if defined(USE_CUBEMAP)
uniform samplerCube u_CubeMap;
#endif

#if defined(USE_NORMALMAP) || defined(USE_DELUXEMAP) || 
defined(USE_SPECULARMAP) || defined(USE_CUBEMAP)
// y = deluxe, w = cube
uniform vec4      u_EnableTextures; 
#endif

#if defined(USE_PRIMARY_LIGHT) || defined(USE_SHADOWMAP)
uniform vec3  u_PrimaryLightColor;
uniform vec3  u_PrimaryLightAmbient;
#endif

#if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
uniform vec4      u_NormalScale;
uniform vec4      u_SpecularScale;
#endif

#if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
#if defined(USE_CUBEMAP)
uniform vec4      u_CubeMapInfo;
#endif
#endif

uniform int       u_AlphaTest;

varying vec4      var_TexCoords;

varying vec4      var_Color;
#if (defined(USE_LIGHT) && !defined(USE_FAST_LIGHT))
varying vec4      var_ColorAmbient;
#endif

#if (defined(USE_LIGHT) && !defined(USE_FAST_LIGHT))
varying vec4   var_Normal;
varying vec4   var_Tangent;
varying vec4   var_Bitangent;
#endif

#if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
varying vec4      var_LightDir;
#endif

#if defined(USE_PRIMARY_LIGHT) || defined(USE_SHADOWMAP)
varying vec4      var_PrimaryLightDir;
#endif


#define EPSILON 0.00000001

#if defined(USE_PARALLAXMAP)
float SampleDepth(sampler2D normalMap, vec2 t)
{
  #if defined(SWIZZLE_NORMALMAP)
        return 1.0 - texture2D(normalMap, t).r;
  #else
        return 1.0 - texture2D(normalMap, t).a;
  #endif
}

float RayIntersectDisplaceMap(vec2 dp, vec2 ds, sampler2D normalMap)
{
        const int linearSearchSteps = 16;
        const int binarySearchSteps = 6;

        // current size of search window
        float size = 1.0 / float(linearSearchSteps);

        // current depth position
        float depth = 0.0;

        // best match found (starts with last position 1.0)
        float bestDepth = 1.0;

        // texture depth at best depth
        float texDepth = 0.0;

        float prevT = SampleDepth(normalMap, dp);
        float prevTexDepth = prevT;

        // search front to back for first point inside object
        for(int i = 0; i < linearSearchSteps - 1; ++i)
        {
                depth += size;
                
                float t = SampleDepth(normalMap, dp + ds * depth);
                
                if(bestDepth > 0.996)           // if no depth found yet
                        if(depth >= t)
                        {
                                bestDepth = depth;      // store best depth
                                texDepth = t;
                                prevTexDepth = prevT;
                        }
                prevT = t;
        }

        depth = bestDepth;

#if !defined (USE_RELIEFMAP)
        float div = 1.0 / (1.0 + (prevTexDepth - texDepth) * 
float(linearSearchSteps));
        bestDepth -= (depth - size - prevTexDepth) * div;
#else
        // recurse around first point (depth) for closest match
        for(int i = 0; i < binarySearchSteps; ++i)
        {
                size *= 0.5;

                float t = SampleDepth(normalMap, dp + ds * depth);
                
                if(depth >= t)
                {
                        bestDepth = depth;
                        depth -= 2.0 * size;
                }

                depth += size;
        }
#endif

        return bestDepth;
}
#endif

vec3 CalcDiffuse(vec3 diffuseAlbedo, float NH, float EH, float roughness)
{
#if defined(USE_BURLEY)
        // modified from 
https://disney-animation.s3.amazonaws.com/library/s2012_pbs_disney_brdf_notes_v2.pdf
        float fd90 = -0.5 + EH * EH * roughness;
        float burley = 1.0 + fd90 * 0.04 / NH;
        burley *= burley;
        return diffuseAlbedo * burley;
#else
        return diffuseAlbedo;
#endif
}

vec3 EnvironmentBRDF(float roughness, float NE, vec3 specular)
{
        // from 
http://community.arm.com/servlet/JiveServlet/download/96891546-19496/siggraph2015-mmg-renaldas-slides.pdf
        float v = 1.0 - max(roughness, NE);
        v *= v * v;
        return vec3(v) + specular;
}

vec3 CalcSpecular(vec3 specular, float NH, float EH, float roughness)
{
        // from 
http://community.arm.com/servlet/JiveServlet/download/96891546-19496/siggraph2015-mmg-renaldas-slides.pdf
        float rr = roughness*roughness;
        float rrrr = rr*rr;
        float d = (NH * NH) * (rrrr - 1.0) + 1.0;
        float v = (EH * EH) * (roughness + 0.5);
        return specular * (rrrr / (4.0 * d * d * v));
}


float CalcLightAttenuation(float point, float normDist)
{
        // zero light at 1.0, approximating q3 style
        // also don't attenuate directional light
        float attenuation = (0.5 * normDist - 1.5) * point + 1.0;

        // clamp attenuation
        #if defined(NO_LIGHT_CLAMP)
        attenuation = max(attenuation, 0.0);
        #else
        attenuation = clamp(attenuation, 0.0, 1.0);
        #endif

        return attenuation;
}


vec4 hitCube(vec3 ray, vec3 pos, vec3 invSize, float lod, samplerCube tex)
{
        // find any hits on cubemap faces facing the camera
        vec3 scale = (sign(ray) - pos) / ray;

        // find the nearest hit
        float minScale = min(min(scale.x, scale.y), scale.z);

        // if the nearest hit is behind the camera, ignore
        // should not be necessary as long as pos is inside the cube
        //if (minScale < 0.0)
                //return vec4(0.0);

        // calculate the hit position, that's our texture coordinates
        vec3 tc = pos + ray * minScale;

        // if the texture coordinates are outside the cube, ignore
        // necessary since we're not fading out outside the cube
        if (any(greaterThan(abs(tc), vec3(1.00001))))
                return vec4(0.0);

        // fade out when approaching the cubemap edges
        //vec3 fade3 = abs(pos);
        //float fade = max(max(fade3.x, fade3.y), fade3.z);
        //fade = clamp(1.0 - fade, 0.0, 1.0);
                        
        //return vec4(textureCubeLod(tex, tc, lod).rgb * fade, fade);
        return vec4(textureCubeLod(tex, tc, lod).rgb, 1.0);
}

void main()
{
        vec3 viewDir, lightColor, ambientColor, reflectance;
        vec3 L, N, E, H;
        float NL, NH, NE, EH, attenuation;

#if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
        mat3 tangentToWorld = mat3(var_Tangent.xyz, var_Bitangent.xyz, 
var_Normal.xyz);
        viewDir = vec3(var_Normal.w, var_Tangent.w, var_Bitangent.w);
        E = normalize(viewDir);
#endif

        lightColor = var_Color.rgb;

#if defined(USE_LIGHTMAP)
        vec4 lightmapColor = texture2D(u_LightMap, var_TexCoords.zw);
  #if defined(RGBM_LIGHTMAP)
        lightmapColor.rgb *= lightmapColor.a;
  #endif
  #if defined(USE_PBR) && !defined(USE_FAST_LIGHT)
        lightmapColor.rgb *= lightmapColor.rgb;
  #endif
        lightColor *= lightmapColor.rgb;
#endif

        vec2 texCoords = var_TexCoords.xy;

#if defined(USE_PARALLAXMAP)
        vec3 offsetDir = viewDir * tangentToWorld;

        offsetDir.xy *= -u_NormalScale.a / offsetDir.z;

        texCoords += offsetDir.xy * RayIntersectDisplaceMap(texCoords, 
offsetDir.xy, u_NormalMap);
#endif

        vec4 diffuse = texture2D(u_DiffuseMap, texCoords);
        
        float alpha = diffuse.a * var_Color.a;
        if (u_AlphaTest == 1)
        {
                if (alpha == 0.0)
                        discard;
        }
        else if (u_AlphaTest == 2)
        {
                if (alpha >= 0.5)
                        discard;
        }
        else if (u_AlphaTest == 3)
        {
                if (alpha < 0.5)
                        discard;
        }

#if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
        L = var_LightDir.xyz;
  #if defined(USE_DELUXEMAP)
        L += (texture2D(u_DeluxeMap, var_TexCoords.zw).xyz - vec3(0.5)) * 
u_EnableTextures.y;
  #endif
        float sqrLightDist = dot(L, L);
        L /= sqrt(sqrLightDist);

  #if defined(USE_LIGHT_VECTOR)
        attenuation  = CalcLightAttenuation(float(var_LightDir.w > 0.0), 
var_LightDir.w / sqrLightDist);
  #else
        attenuation  = 1.0;
  #endif

  #if defined(USE_NORMALMAP)
    #if defined(SWIZZLE_NORMALMAP)
        N.xy = texture2D(u_NormalMap, texCoords).ag - vec2(0.5);
    #else
        N.xy = texture2D(u_NormalMap, texCoords).rg - vec2(0.5);
    #endif
        N.xy *= u_NormalScale.xy;
        N.z = sqrt(clamp((0.25 - N.x * N.x) - N.y * N.y, 0.0, 1.0));
        N = tangentToWorld * N;
  #else
        N = var_Normal.xyz;
  #endif

        N = normalize(N);

  #if defined(USE_SHADOWMAP) 
        vec2 shadowTex = gl_FragCoord.xy * r_FBufScale;
        float shadowValue = texture2D(u_ShadowMap, shadowTex).r;

        // surfaces not facing the light are always shadowed
        shadowValue *= clamp(dot(N, var_PrimaryLightDir.xyz), 0.0, 1.0);

    #if defined(SHADOWMAP_MODULATE)
        lightColor *= shadowValue * (1.0 - u_PrimaryLightAmbient.r) + 
u_PrimaryLightAmbient.r;
    #endif
  #endif

  #if !defined(USE_LIGHT_VECTOR)
        ambientColor = lightColor;
        float surfNL = clamp(dot(var_Normal.xyz, L), 0.0, 1.0);

        // reserve 25% ambient to avoid black areas on normalmaps
        lightColor *= 0.75;

        // Scale the incoming light to compensate for the baked-in light angle
        // attenuation.
        lightColor /= max(surfNL, 0.25);

        // Recover any unused light as ambient, in case attenuation is over 4x 
or
        // light is below the surface
        ambientColor = max(ambientColor - lightColor * surfNL, vec3(0.0));
  #else
        ambientColor = var_ColorAmbient.rgb;
  #endif

        NL = clamp(dot(N, L), 0.0, 1.0);
        NE = clamp(dot(N, E), 0.0, 1.0);
        H = normalize(L + E);
        EH = clamp(dot(E, H), 0.0, 1.0);
        NH = clamp(dot(N, H), 0.0, 1.0);

  #if defined(USE_SPECULARMAP)
        vec4 specular = texture2D(u_SpecularMap, texCoords);
  #else
        vec4 specular = vec4(1.0);
  #endif
        specular *= u_SpecularScale;

  #if defined(USE_PBR)
        diffuse.rgb *= diffuse.rgb;
  #endif

  #if defined(USE_PBR)
        // diffuse rgb is base color
        // specular red is gloss
        // specular green is metallicness
        float gloss = specular.r;
        float metal = specular.g;
        specular.rgb = metal * diffuse.rgb + vec3(0.04 - 0.04 * metal);
        diffuse.rgb *= 1.0 - metal;
  #else
        // diffuse rgb is diffuse
        // specular rgb is specular reflectance at normal incidence
        // specular alpha is gloss
        float gloss = specular.a;

        // adjust diffuse by specular reflectance, to maintain energy 
conservation
        diffuse.rgb *= vec3(1.0) - specular.rgb;
  #endif

  #if defined(GLOSS_IS_GLOSS)
        float roughness = exp2(-3.0 * gloss);
  #elif defined(GLOSS_IS_SMOOTHNESS)
        float roughness = 1.0 - gloss;
  #elif defined(GLOSS_IS_ROUGHNESS)
        float roughness = gloss;
  #elif defined(GLOSS_IS_SHININESS)
        float roughness = pow(2.0 / (8190.0 * gloss + 2.0), 0.25);
  #endif

        reflectance  = CalcDiffuse(diffuse.rgb, NH, EH, roughness);

  #if defined(r_deluxeSpecular)
    #if defined(USE_LIGHT_VECTOR)
        reflectance += CalcSpecular(specular.rgb, NH, EH, roughness) * 
r_deluxeSpecular;
    #else
        reflectance += CalcSpecular(specular.rgb, NH, EH, pow(roughness, 
r_deluxeSpecular));
    #endif
  #endif

        gl_FragColor.rgb  = lightColor   * reflectance * (attenuation * NL);
        gl_FragColor.rgb += ambientColor * diffuse.rgb;

  #if defined(USE_CUBEMAP)
        reflectance = EnvironmentBRDF(roughness, NE, specular.rgb);

        vec3 R = reflect(E, N);

        // parallax corrected cubemap (cheaper trick)
        // from 
http://seblagarde.wordpress.com/2012/09/29/image-based-lighting-approaches-and-parallax-corrected-cubemap/
        vec3 parallax = u_CubeMapInfo.xyz + u_CubeMapInfo.w * viewDir;

  #if defined(USE_BOX_CUBEMAP_PARALLAX)
        vec3 cubeLightColor = hitCube(R * u_CubeMapInfo.w, parallax, 
u_CubeMapInfo.www, ROUGHNESS_MIPS * roughness, u_CubeMap).rgb * 
u_EnableTextures.w;
  #else
        vec3 cubeLightColor = textureCubeLod(u_CubeMap, R + parallax, 
ROUGHNESS_MIPS * roughness).rgb * u_EnableTextures.w;
  #endif

        // normalize cubemap based on last roughness mip (~diffuse)
        // multiplying cubemap values by lighting below depends on either this 
or the cubemap being normalized at generation
        //vec3 cubeLightDiffuse = max(textureCubeLod(u_CubeMap, N, 
ROUGHNESS_MIPS).rgb, 0.5 / 255.0);
        //cubeLightColor /= dot(cubeLightDiffuse, vec3(0.2125, 0.7154, 0.0721));

    #if defined(USE_PBR)
        cubeLightColor *= cubeLightColor;
    #endif

        // multiply cubemap values by lighting
        // not technically correct, but helps make reflections look less 
unnatural
        //cubeLightColor *= lightColor * (attenuation * NL) + ambientColor;

        gl_FragColor.rgb += cubeLightColor * reflectance;
  #endif

  #if defined(USE_PRIMARY_LIGHT) || defined(SHADOWMAP_MODULATE)
        vec3 L2, H2;
        float NL2, EH2, NH2;

        L2 = var_PrimaryLightDir.xyz;

        // enable when point lights are supported as primary lights
        //sqrLightDist = dot(L2, L2);
        //L2 /= sqrt(sqrLightDist);

        NL2 = clamp(dot(N, L2), 0.0, 1.0);
        H2 = normalize(L2 + E);
        EH2 = clamp(dot(E, H2), 0.0, 1.0);
        NH2 = clamp(dot(N, H2), 0.0, 1.0);

        reflectance  = CalcSpecular(specular.rgb, NH2, EH2, roughness);

        // bit of a hack, with modulated shadowmaps, ignore diffuse
    #if !defined(SHADOWMAP_MODULATE)
        reflectance += CalcDiffuse(diffuse.rgb, NH2, EH2, roughness);
    #endif

        lightColor = u_PrimaryLightColor;

    #if defined(USE_SHADOWMAP)
        lightColor *= shadowValue;
    #endif

        // enable when point lights are supported as primary lights
        //lightColor *= CalcLightAttenuation(float(u_PrimaryLightDir.w > 0.0), 
u_PrimaryLightDir.w / sqrLightDist);

        gl_FragColor.rgb += lightColor * reflectance * NL2;
  #endif

  #if defined(USE_PBR)
        gl_FragColor.rgb = sqrt(gl_FragColor.rgb);
  #endif

#else

        gl_FragColor.rgb = diffuse.rgb * lightColor;

#endif

        gl_FragColor.a = alpha;
}
tty]q     
tty]q     Shader info log:
tty]q     0:224(14): error: no matching function for call to 
`textureCubeLod(samplerCube, vec3, float)'; candidates are:
0:224(14): error: type mismatch
0:224(9): error: cannot construct `vec4' from a non-numeric data type
0:224(2): error: `return' with wrong type error, in function `hitCube' 
returning vec4

tty]q     ********************
ERROR: Couldn't compile shader
********************
tty]q     RE_Shutdown( 0 )
tty]q     Hunk_Clear: reset the hunk ok
tty]q     ----- R_Init -----
tty]q     ------- FBO_Init -------
tty]q     ------- GLSL_InitGPUShaders -------
tty]q     Shader source:
tty]q     #version 120
#define shadow2D(a,b) shadow2D(a,b).r 
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
#ifndef deformGen_t
#define deformGen_t
#define DGEN_WAVE_SIN 1
#define DGEN_WAVE_SQUARE 2
#define DGEN_WAVE_TRIANGLE 3
#define DGEN_WAVE_SAWTOOTH 4
#define DGEN_WAVE_INVERSE_SAWTOOTH 5
#define DGEN_BULGE 7
#define DGEN_MOVE 8
#endif
#ifndef tcGen_t
#define tcGen_t
#define TCGEN_LIGHTMAP 2
#define TCGEN_TEXTURE 3
#define TCGEN_ENVIRONMENT_MAPPED 4
#define TCGEN_FOG 5
#define TCGEN_VECTOR 6
#endif
#ifndef colorGen_t
#define colorGen_t
#define CGEN_LIGHTING_DIFFUSE 11
#endif
#ifndef alphaGen_t
#define alphaGen_t
#define AGEN_LIGHTING_SPECULAR 6
#define AGEN_PORTAL 8
#endif
#ifndef r_FBufScale
#define r_FBufScale vec2(0.001563, 0.002083)
#endif
#line 0
uniform sampler2D u_DiffuseMap;

#if defined(USE_LIGHTMAP)
uniform sampler2D u_LightMap;
#endif

#if defined(USE_NORMALMAP)
uniform sampler2D u_NormalMap;
#endif

#if defined(USE_DELUXEMAP)
uniform sampler2D u_DeluxeMap;
#endif

#if defined(USE_SPECULARMAP)
uniform sampler2D u_SpecularMap;
#endif

#if defined(USE_SHADOWMAP)
uniform sampler2D u_ShadowMap;
#endif

#if defined(USE_CUBEMAP)
uniform samplerCube u_CubeMap;
#endif

#if defined(USE_NORMALMAP) || defined(USE_DELUXEMAP) || 
defined(USE_SPECULARMAP) || defined(USE_CUBEMAP)
// y = deluxe, w = cube
uniform vec4      u_EnableTextures; 
#endif

#if defined(USE_PRIMARY_LIGHT) || defined(USE_SHADOWMAP)
uniform vec3  u_PrimaryLightColor;
uniform vec3  u_PrimaryLightAmbient;
#endif

#if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
uniform vec4      u_NormalScale;
uniform vec4      u_SpecularScale;
#endif

#if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
#if defined(USE_CUBEMAP)
uniform vec4      u_CubeMapInfo;
#endif
#endif

uniform int       u_AlphaTest;

varying vec4      var_TexCoords;

varying vec4      var_Color;
#if (defined(USE_LIGHT) && !defined(USE_FAST_LIGHT))
varying vec4      var_ColorAmbient;
#endif

#if (defined(USE_LIGHT) && !defined(USE_FAST_LIGHT))
varying vec4   var_Normal;
varying vec4   var_Tangent;
varying vec4   var_Bitangent;
#endif

#if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
varying vec4      var_LightDir;
#endif

#if defined(USE_PRIMARY_LIGHT) || defined(USE_SHADOWMAP)
varying vec4      var_PrimaryLightDir;
#endif


#define EPSILON 0.00000001

#if defined(USE_PARALLAXMAP)
float SampleDepth(sampler2D normalMap, vec2 t)
{
  #if defined(SWIZZLE_NORMALMAP)
        return 1.0 - texture2D(normalMap, t).r;
  #else
        return 1.0 - texture2D(normalMap, t).a;
  #endif
}

float RayIntersectDisplaceMap(vec2 dp, vec2 ds, sampler2D normalMap)
{
        const int linearSearchSteps = 16;
        const int binarySearchSteps = 6;

        // current size of search window
        float size = 1.0 / float(linearSearchSteps);

        // current depth position
        float depth = 0.0;

        // best match found (starts with last position 1.0)
        float bestDepth = 1.0;

        // texture depth at best depth
        float texDepth = 0.0;

        float prevT = SampleDepth(normalMap, dp);
        float prevTexDepth = prevT;

        // search front to back for first point inside object
        for(int i = 0; i < linearSearchSteps - 1; ++i)
        {
                depth += size;
                
                float t = SampleDepth(normalMap, dp + ds * depth);
                
                if(bestDepth > 0.996)           // if no depth found yet
                        if(depth >= t)
                        {
                                bestDepth = depth;      // store best depth
                                texDepth = t;
                                prevTexDepth = prevT;
                        }
                prevT = t;
        }

        depth = bestDepth;

#if !defined (USE_RELIEFMAP)
        float div = 1.0 / (1.0 + (prevTexDepth - texDepth) * 
float(linearSearchSteps));
        bestDepth -= (depth - size - prevTexDepth) * div;
#else
        // recurse around first point (depth) for closest match
        for(int i = 0; i < binarySearchSteps; ++i)
        {
                size *= 0.5;

                float t = SampleDepth(normalMap, dp + ds * depth);
                
                if(depth >= t)
                {
                        bestDepth = depth;
                        depth -= 2.0 * size;
                }

                depth += size;
        }
#endif

        return bestDepth;
}
#endif

vec3 CalcDiffuse(vec3 diffuseAlbedo, float NH, float EH, float roughness)
{
#if defined(USE_BURLEY)
        // modified from 
https://disney-animation.s3.amazonaws.com/library/s2012_pbs_disney_brdf_notes_v2.pdf
        float fd90 = -0.5 + EH * EH * roughness;
        float burley = 1.0 + fd90 * 0.04 / NH;
        burley *= burley;
        return diffuseAlbedo * burley;
#else
        return diffuseAlbedo;
#endif
}

vec3 EnvironmentBRDF(float roughness, float NE, vec3 specular)
{
        // from 
http://community.arm.com/servlet/JiveServlet/download/96891546-19496/siggraph2015-mmg-renaldas-slides.pdf
        float v = 1.0 - max(roughness, NE);
        v *= v * v;
        return vec3(v) + specular;
}

vec3 CalcSpecular(vec3 specular, float NH, float EH, float roughness)
{
        // from 
http://community.arm.com/servlet/JiveServlet/download/96891546-19496/siggraph2015-mmg-renaldas-slides.pdf
        float rr = roughness*roughness;
        float rrrr = rr*rr;
        float d = (NH * NH) * (rrrr - 1.0) + 1.0;
        float v = (EH * EH) * (roughness + 0.5);
        return specular * (rrrr / (4.0 * d * d * v));
}


float CalcLightAttenuation(float point, float normDist)
{
        // zero light at 1.0, approximating q3 style
        // also don't attenuate directional light
        float attenuation = (0.5 * normDist - 1.5) * point + 1.0;

        // clamp attenuation
        #if defined(NO_LIGHT_CLAMP)
        attenuation = max(attenuation, 0.0);
        #else
        attenuation = clamp(attenuation, 0.0, 1.0);
        #endif

        return attenuation;
}


vec4 hitCube(vec3 ray, vec3 pos, vec3 invSize, float lod, samplerCube tex)
{
        // find any hits on cubemap faces facing the camera
        vec3 scale = (sign(ray) - pos) / ray;

        // find the nearest hit
        float minScale = min(min(scale.x, scale.y), scale.z);

        // if the nearest hit is behind the camera, ignore
        // should not be necessary as long as pos is inside the cube
        //if (minScale < 0.0)
                //return vec4(0.0);

        // calculate the hit position, that's our texture coordinates
        vec3 tc = pos + ray * minScale;

        // if the texture coordinates are outside the cube, ignore
        // necessary since we're not fading out outside the cube
        if (any(greaterThan(abs(tc), vec3(1.00001))))
                return vec4(0.0);

        // fade out when approaching the cubemap edges
        //vec3 fade3 = abs(pos);
        //float fade = max(max(fade3.x, fade3.y), fade3.z);
        //fade = clamp(1.0 - fade, 0.0, 1.0);
                        
        //return vec4(textureCubeLod(tex, tc, lod).rgb * fade, fade);
        return vec4(textureCubeLod(tex, tc, lod).rgb, 1.0);
}

void main()
{
        vec3 viewDir, lightColor, ambientColor, reflectance;
        vec3 L, N, E, H;
        float NL, NH, NE, EH, attenuation;

#if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
        mat3 tangentToWorld = mat3(var_Tangent.xyz, var_Bitangent.xyz, 
var_Normal.xyz);
        viewDir = vec3(var_Normal.w, var_Tangent.w, var_Bitangent.w);
        E = normalize(viewDir);
#endif

        lightColor = var_Color.rgb;

#if defined(USE_LIGHTMAP)
        vec4 lightmapColor = texture2D(u_LightMap, var_TexCoords.zw);
  #if defined(RGBM_LIGHTMAP)
        lightmapColor.rgb *= lightmapColor.a;
  #endif
  #if defined(USE_PBR) && !defined(USE_FAST_LIGHT)
        lightmapColor.rgb *= lightmapColor.rgb;
  #endif
        lightColor *= lightmapColor.rgb;
#endif

        vec2 texCoords = var_TexCoords.xy;

#if defined(USE_PARALLAXMAP)
        vec3 offsetDir = viewDir * tangentToWorld;

        offsetDir.xy *= -u_NormalScale.a / offsetDir.z;

        texCoords += offsetDir.xy * RayIntersectDisplaceMap(texCoords, 
offsetDir.xy, u_NormalMap);
#endif

        vec4 diffuse = texture2D(u_DiffuseMap, texCoords);
        
        float alpha = diffuse.a * var_Color.a;
        if (u_AlphaTest == 1)
        {
                if (alpha == 0.0)
                        discard;
        }
        else if (u_AlphaTest == 2)
        {
                if (alpha >= 0.5)
                        discard;
        }
        else if (u_AlphaTest == 3)
        {
                if (alpha < 0.5)
                        discard;
        }

#if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
        L = var_LightDir.xyz;
  #if defined(USE_DELUXEMAP)
        L += (texture2D(u_DeluxeMap, var_TexCoords.zw).xyz - vec3(0.5)) * 
u_EnableTextures.y;
  #endif
        float sqrLightDist = dot(L, L);
        L /= sqrt(sqrLightDist);

  #if defined(USE_LIGHT_VECTOR)
        attenuation  = CalcLightAttenuation(float(var_LightDir.w > 0.0), 
var_LightDir.w / sqrLightDist);
  #else
        attenuation  = 1.0;
  #endif

  #if defined(USE_NORMALMAP)
    #if defined(SWIZZLE_NORMALMAP)
        N.xy = texture2D(u_NormalMap, texCoords).ag - vec2(0.5);
    #else
        N.xy = texture2D(u_NormalMap, texCoords).rg - vec2(0.5);
    #endif
        N.xy *= u_NormalScale.xy;
        N.z = sqrt(clamp((0.25 - N.x * N.x) - N.y * N.y, 0.0, 1.0));
        N = tangentToWorld * N;
  #else
        N = var_Normal.xyz;
  #endif

        N = normalize(N);

  #if defined(USE_SHADOWMAP) 
        vec2 shadowTex = gl_FragCoord.xy * r_FBufScale;
        float shadowValue = texture2D(u_ShadowMap, shadowTex).r;

        // surfaces not facing the light are always shadowed
        shadowValue *= clamp(dot(N, var_PrimaryLightDir.xyz), 0.0, 1.0);

    #if defined(SHADOWMAP_MODULATE)
        lightColor *= shadowValue * (1.0 - u_PrimaryLightAmbient.r) + 
u_PrimaryLightAmbient.r;
    #endif
  #endif

  #if !defined(USE_LIGHT_VECTOR)
        ambientColor = lightColor;
        float surfNL = clamp(dot(var_Normal.xyz, L), 0.0, 1.0);

        // reserve 25% ambient to avoid black areas on normalmaps
        lightColor *= 0.75;

        // Scale the incoming light to compensate for the baked-in light angle
        // attenuation.
        lightColor /= max(surfNL, 0.25);

        // Recover any unused light as ambient, in case attenuation is over 4x 
or
        // light is below the surface
        ambientColor = max(ambientColor - lightColor * surfNL, vec3(0.0));
  #else
        ambientColor = var_ColorAmbient.rgb;
  #endif

        NL = clamp(dot(N, L), 0.0, 1.0);
        NE = clamp(dot(N, E), 0.0, 1.0);
        H = normalize(L + E);
        EH = clamp(dot(E, H), 0.0, 1.0);
        NH = clamp(dot(N, H), 0.0, 1.0);

  #if defined(USE_SPECULARMAP)
        vec4 specular = texture2D(u_SpecularMap, texCoords);
  #else
        vec4 specular = vec4(1.0);
  #endif
        specular *= u_SpecularScale;

  #if defined(USE_PBR)
        diffuse.rgb *= diffuse.rgb;
  #endif

  #if defined(USE_PBR)
        // diffuse rgb is base color
        // specular red is gloss
        // specular green is metallicness
        float gloss = specular.r;
        float metal = specular.g;
        specular.rgb = metal * diffuse.rgb + vec3(0.04 - 0.04 * metal);
        diffuse.rgb *= 1.0 - metal;
  #else
        // diffuse rgb is diffuse
        // specular rgb is specular reflectance at normal incidence
        // specular alpha is gloss
        float gloss = specular.a;

        // adjust diffuse by specular reflectance, to maintain energy 
conservation
        diffuse.rgb *= vec3(1.0) - specular.rgb;
  #endif

  #if defined(GLOSS_IS_GLOSS)
        float roughness = exp2(-3.0 * gloss);
  #elif defined(GLOSS_IS_SMOOTHNESS)
        float roughness = 1.0 - gloss;
  #elif defined(GLOSS_IS_ROUGHNESS)
        float roughness = gloss;
  #elif defined(GLOSS_IS_SHININESS)
        float roughness = pow(2.0 / (8190.0 * gloss + 2.0), 0.25);
  #endif

        reflectance  = CalcDiffuse(diffuse.rgb, NH, EH, roughness);

  #if defined(r_deluxeSpecular)
    #if defined(USE_LIGHT_VECTOR)
        reflectance += CalcSpecular(specular.rgb, NH, EH, roughness) * 
r_deluxeSpecular;
    #else
        reflectance += CalcSpecular(specular.rgb, NH, EH, pow(roughness, 
r_deluxeSpecular));
    #endif
  #endif

        gl_FragColor.rgb  = lightColor   * reflectance * (attenuation * NL);
        gl_FragColor.rgb += ambientColor * diffuse.rgb;

  #if defined(USE_CUBEMAP)
        reflectance = EnvironmentBRDF(roughness, NE, specular.rgb);

        vec3 R = reflect(E, N);

        // parallax corrected cubemap (cheaper trick)
        // from 
http://seblagarde.wordpress.com/2012/09/29/image-based-lighting-approaches-and-parallax-corrected-cubemap/
        vec3 parallax = u_CubeMapInfo.xyz + u_CubeMapInfo.w * viewDir;

  #if defined(USE_BOX_CUBEMAP_PARALLAX)
        vec3 cubeLightColor = hitCube(R * u_CubeMapInfo.w, parallax, 
u_CubeMapInfo.www, ROUGHNESS_MIPS * roughness, u_CubeMap).rgb * 
u_EnableTextures.w;
  #else
        vec3 cubeLightColor = textureCubeLod(u_CubeMap, R + parallax, 
ROUGHNESS_MIPS * roughness).rgb * u_EnableTextures.w;
  #endif

        // normalize cubemap based on last roughness mip (~diffuse)
        // multiplying cubemap values by lighting below depends on either this 
or the cubemap being normalized at generation
        //vec3 cubeLightDiffuse = max(textureCubeLod(u_CubeMap, N, 
ROUGHNESS_MIPS).rgb, 0.5 / 255.0);
        //cubeLightColor /= dot(cubeLightDiffuse, vec3(0.2125, 0.7154, 0.0721));

    #if defined(USE_PBR)
        cubeLightColor *= cubeLightColor;
    #endif

        // multiply cubemap values by lighting
        // not technically correct, but helps make reflections look less 
unnatural
        //cubeLightColor *= lightColor * (attenuation * NL) + ambientColor;

        gl_FragColor.rgb += cubeLightColor * reflectance;
  #endif

  #if defined(USE_PRIMARY_LIGHT) || defined(SHADOWMAP_MODULATE)
        vec3 L2, H2;
        float NL2, EH2, NH2;

        L2 = var_PrimaryLightDir.xyz;

        // enable when point lights are supported as primary lights
        //sqrLightDist = dot(L2, L2);
        //L2 /= sqrt(sqrLightDist);

        NL2 = clamp(dot(N, L2), 0.0, 1.0);
        H2 = normalize(L2 + E);
        EH2 = clamp(dot(E, H2), 0.0, 1.0);
        NH2 = clamp(dot(N, H2), 0.0, 1.0);

        reflectance  = CalcSpecular(specular.rgb, NH2, EH2, roughness);

        // bit of a hack, with modulated shadowmaps, ignore diffuse
    #if !defined(SHADOWMAP_MODULATE)
        reflectance += CalcDiffuse(diffuse.rgb, NH2, EH2, roughness);
    #endif

        lightColor = u_PrimaryLightColor;

    #if defined(USE_SHADOWMAP)
        lightColor *= shadowValue;
    #endif

        // enable when point lights are supported as primary lights
        //lightColor *= CalcLightAttenuation(float(u_PrimaryLightDir.w > 0.0), 
u_PrimaryLightDir.w / sqrLightDist);

        gl_FragColor.rgb += lightColor * reflectance * NL2;
  #endif

  #if defined(USE_PBR)
        gl_FragColor.rgb = sqrt(gl_FragColor.rgb);
  #endif

#else

        gl_FragColor.rgb = diffuse.rgb * lightColor;

#endif

        gl_FragColor.a = alpha;
}
tty]q     
tty]q     Shader info log:
tty]q     0:224(14): error: no matching function for call to 
`textureCubeLod(samplerCube, vec3, float)'; candidates are:
0:224(14): error: type mismatch
0:224(9): error: cannot construct `vec4' from a non-numeric data type
0:224(2): error: `return' with wrong type error, in function `hitCube' 
returning vec4

tty]q     recursive error after: Couldn't compile shader
tty]q[Detaching after fork from child process 7487]
     [Thread 0x7f89e6d3d680 (LWP 7470) exited]
[Inferior 1 (process 7470) exited with code 03]
The program is not being run.

Reply via email to