Skip to content

error C1008: undefined variable "translateBefore4" #18

@ghost

Description

Compiled the following program.

makeFrame (time :: Float)
          (vertexstream :: PrimitiveStream Triangle ((Vec 4 Float)))

          = imageFrame (emptyDepthImage 1, emptyColorImage navy)
  `overlay` fragments
  where
    projmat = perspective 0.1 100.0 (30 * pi / 180) 1.0
          .*. lookat (V3 3.0 1.3 0.3) (V3 0.0 0.0 0.0) (V3 0.0 1.0 0.0)
          .*. rotMatrixY (pi / 24.0 * time)
          .*. translateBefore4 (V3 0.5 0.5 0.5)

    fragments =
          vertexstream
        & mapPrimitives (\((x)) -> (scale 0.5 (projmat *. x), x))
        & rasterizePrimitives (TriangleCtx CullNone (PolygonLine 1.0) NoOffset LastVertex) ((Smooth))
        & accumulateWith (DepthOp Less True, ColorOp NoBlending (V4 True True True True))

cube = map (\v -> V4 v%x v%y v%z 1)
    [ V3 0 0 0, V3 1 0 0, V3 0 1 0
    , V3 0 1 0, V3 1 1 0, V3 1 0 0
    , V3 0 0 0, V3 0 0 1, V3 0 1 1
    , V3 0 0 0, V3 0 1 0, V3 0 1 1
    , V3 1 0 0, V3 1 0 1, V3 1 1 1
    , V3 1 0 0, V3 1 1 0, V3 1 1 1
    , V3 0 0 0, V3 0 0 1, V3 1 0 0
    , V3 0 0 1, V3 1 0 1, V3 1 0 0
    , V3 0 1 0, V3 0 1 1, V3 1 1 0
    , V3 0 1 1, V3 1 1 1, V3 1 1 0
    , V3 0 0 1, V3 1 0 1, V3 0 1 1
    , V3 0 1 1, V3 1 1 1, V3 1 0 1
    ]

cubeStream = fetchArrays @Triangle ((cube))

main = renderFrame $
   makeFrame (Uniform "time")
             cubeStream

The generated vertex shader

#version 330 core
vec4 texture2D(sampler2D s,vec2 uv) {
    return texture(s,uv);
}
uniform float time;
in vec4 vi1;
smooth out vec4 vo1;
vec4 ext0_Float_3(vec3 z0) {
    return vec4 ((z0).x,(z0).y,(z0).z,0.0);
}
vec3 neg_VecSFloat3(vec3 z0) {
    return - (z0);
}
mat4 lookat(vec3 z0,vec3 z1,vec3 z2) {
    return (transpose (mat4 (ext0_Float_3 (normalize (cross (z2
                                                            ,normalize ((z0) - (z1)))))
                            ,ext0_Float_3 (cross (normalize ((z0) - (z1))
                                                 ,normalize (cross (z2,normalize ((z0) - (z1))))))
                            ,ext0_Float_3 (normalize ((z0) - (z1)))
                            ,vec4 (0.0,0.0,0.0,1.0)))) * (translateBefore4 (neg_VecSFloat3 (z0)));
}
mat4 perspective(float z0,float z1,float z2,float z3) {
    return mat4 (vec4 (((2.0) * (z0)) / (((z3) * ((z0) * (tan
                      ((z2) / (2.0))))) - ((0.0) - ((z3) * ((z0) * (tan ((z2) / (2.0)))))))
                      ,0.0
                      ,0.0
                      ,0.0)
                ,vec4 (0.0
                      ,((2.0) * (z0)) / (((z0) * (tan ((z2) / (2.0)))) - ((0.0) - ((z0) * (tan
                      ((z2) / (2.0))))))
                      ,0.0
                      ,0.0)
                ,vec4 ((((z3) * ((z0) * (tan ((z2) / (2.0))))) + ((0.0) - ((z3) * ((z0) * (tan
                      ((z2) / (2.0))))))) / (((z3) * ((z0) * (tan
                      ((z2) / (2.0))))) - ((0.0) - ((z3) * ((z0) * (tan ((z2) / (2.0)))))))
                      ,(((z0) * (tan ((z2) / (2.0)))) + ((0.0) - ((z0) * (tan
                      ((z2) / (2.0)))))) / (((z0) * (tan ((z2) / (2.0)))) - ((0.0) - ((z0) * (tan
                      ((z2) / (2.0))))))
                      ,(0.0) - (((z1) + (z0)) / ((z1) - (z0)))
                      ,-1.0)
                ,vec4 (0.0,0.0,(0.0) - ((((2.0) * (z1)) * (z0)) / ((z1) - (z0))),0.0));
}
mat4 rotMatrixY(float z0) {
    return mat4 (vec4 (cos (z0),0.0,(0.0) - (sin (z0)),0.0)
                ,vec4 (0.0,1.0,0.0,0.0)
                ,vec4 (sin (z0),0.0,cos (z0),0.0)
                ,vec4 (0.0,0.0,0.0,1.0));
}
vec4 scale(float z0,vec4 z1) {
    return (z1) * (vec4 (z0,z0,z0,1.0));
}
mat4 translateBefore4(vec3 z0) {
    return mat4 (vec4 (1.0,0.0,0.0,0.0)
                ,vec4 (0.0,1.0,0.0,0.0)
                ,vec4 (0.0,0.0,1.0,0.0)
                ,vec4 ((z0).x,(z0).y,(z0).z,1.0));
}
void main() {
    gl_Position = scale (0.5
                        ,((((perspective (0.1,100.0,0.5235987755982988,1.0)) * (lookat (vec3 (3.0
                                                                                             ,1.3
                                                                                             ,0.3)
                                                                                       ,vec3 (0.0,0.0,0.0)
                                                                                       ,vec3 (0.0,1.0,0.0)))) * (rotMatrixY
                        ((0.1308996938995747) * (time)))) * (translateBefore4 (vec3 (0.5
                                                                                    ,0.5
                                                                                    ,0.5)))) * (vi1));
    vo1 = vi1;
}

Manually placing translateBefore4 before lookat in the generated vertex shader resolves the issue.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions