LeStahL / ImageColorPicker

Image color picker tool by Team210
GNU General Public License v3.0
5 stars 1 forks source link

Crashes with GLSL Errors on startup #15

Closed gregorv closed 1 week ago

gregorv commented 6 months ago

After installing all dependencies with poetry, I try to start the program as stated in the README.

It then crashes with the following output:

gregor@XX ~/p/ImageColorPicker (master) [SIGABRT]> poetry run python -m imagecolorpicker
b"0(7) : error C1068: too much data in type constructor\n0(8) : error C1068: too much data in type constructor\n0(9) : error C1068: too much data in type constructor\n0(10) : error C1068: too much data in type constructor\n0(11) : error C0158: invalid digit '9' in octal constant\n0(11) : error C1068: too much data in type constructor\n0(12) : error C1068: too much data in type constructor\n0(13) : error C0158: invalid digit '9' in octal constant\n0(13) : error C1068: too much data in type constructor\n0(24) : error C1068: too much data in type constructor\n0(25) : error C1068: too much data in type constructor\n0(26) : error C1068: too much data in type constructor\n0(27) : error C1068: too much data in type constructor\n0(28) : error C1068: too much data in type constructor\n0(29) : error C1068: too much data in type constructor\n0(30) : error C1068: too much data in type constructor\n0(41) : error C1068: too much data in type constructor\n0(42) : error C1068: too much data in type constructor\n0(43) : error C1068: too much data in type constructor\n0(44) : error C1068: too much data in type constructor\n0(45) : error C0158: invalid digit '9' in octal constant\n0(45) : error C1068: too much data in type constructor\n0(46) : error C1068: too much data in type constructor\n0(47) : error C0158: invalid digit '9' in octal constant\n0(47) : error C1068: too much data in type constructor\n0(58) : error C1068: too much data in type constructor\n0(59) : error C1068: too much data in type constructor\n0(60) : error C1068: too much data in type constructor\n0(61) : error C1068: too much data in type constructor\n0(62) : error C1068: too much data in type constructor\n0(63) : error C1068: too much data in type constructor\n0(64) : error C1068: too much data in type constructor\n0(75) : error C1068: too much data in type constructor\n0(76) : error C1068: too much data in type constructor\n0(77) : error C0158: invalid digit '8' in octal constant\n0(77) : error C1068: too much data in type constructor\n0(78) : error C1068: too much data in type constructor\n0(79) : error C1068: too much data in type constructor\n0(80) : error C1068: too much data in type constructor\n0(81) : error C1068: too much data in type constructor\n0(92) : error C1068: too much data in type constructor\n0(93) : error C1068: too much data in type constructor\n0(94) : error C1068: too much data in type constructor\n0(95) : error C1068: too much data in type constructor\n0(96) : error C1068: too much data in type constructor\n0(97) : error C1068: too much data in type constructor\n0(98) : error C1068: too much data in type constructor\n0(109) : error C1068: too much data in type constructor\n0(110) : error C0158: invalid digit '9' in octal constant\n0(110) : error C1068: too much data in type constructor\n0(111) : error C1068: too much data in type constructor\n0(112) : error C1068: too much data in type constructor\n0(113) : error C1068: too much data in type constructor\n0(114) : error C0158: invalid digit '8' in octal constant\n0(114) : error C1068: too much data in type constructor\n0(115) : error C1068: too much data in type constructor\n0(126) : error C1068: too much data in type constructor\n0(127) : error C1068: too much data in type constructor\n0(128) : error C1068: too much data in type constructor\n0(129) : error C1068: too much data in type constructor\n0(130) : error C1068: too much data in type constructor\n0(131) : error C0158: invalid digit '9' in octal constant\n0(131) : error C1068: too much data in type constructor\n0(132) : error C1068: too much data in type constructor\n0(143) : error C1068: too much data in type constructor\n0(144) : error C0158: invalid digit '9' in octal constant\n0(144) : error C1068: too much data in type constructor\n0(145) : error C1068: too much data in type constructor\n0(146) : error C1068: too much data in type constructor\n0(147) : error C1068: too much data in type constructor\n0(148) : error C0158: invalid digit '8' in octal constant\n0(148) : error C1068: too much data in type constructor\n0(149) : error C1068: too much data in type constructor\n0(160) : error C1068: too much data in type constructor\n0(161) : error C0158: invalid digit '9' in octal constant\n0(161) : error C1068: too much data in type constructor\n0(162) : error C0158: invalid digit '8' in octal constant\n0(162) : error C1068: too much data in type constructor\n0(163) : error C1068: too much data in type constructor\n0(164) : error C1068: too much data in type constructor\n0(165) : error C1068: too much data in type constructor\n0(166) : error C1068: too much data in type constructor\n0(177) : error C1068: too much data in type constructor\n0(178) : error C1068: too much data in type constructor\n0(179) : error C1068: too much data in type constructor\n0(180) : error C1068: too much data in type constructor\n0(181) : error C1068: too much data in type constructor\n0(182) : error C1068: too much data in type constructor\n0(183) : error C1068: too much data in type constructor\n0(194) : error C1068: too much data in type constructor\n0(195) : error C0158: invalid digit '9' in octal constant\n0(195) : error C1068: too much data in type constructor\n0(196) : error C0158: invalid digit '8' in octal constant\n0(196) : error C1068: too much data in type constructor\n0(197) : error C1068: too much data in type constructor\n0(198) : error C1068: too much data in type constructor\n0(199) : error C1068: too much data in type constructor\n0(200) : error C1068: too much data in type constructor\n"
b"Fragment info\n-------------\n0(7) : error C1068: too much data in type constructor\n0(8) : error C1068: too much data in type constructor\n0(9) : error C1068: too much data in type constructor\n0(10) : error C1068: too much data in type constructor\n0(11) : error C0158: invalid digit '9' in octal constant\n0(11) : error C1068: too much data in type constructor\n0(12) : error C1068: too much data in type constructor\n0(13) : error C0158: invalid digit '9' in octal constant\n0(13) : error C1068: too much data in type constructor\n0(24) : error C1068: too much data in type constructor\n0(25) : error C1068: too much data in type constructor\n0(26) : error C1068: too much data in type constructor\n0(27) : error C1068: too much data in type constructor\n0(28) : error C1068: too much data in type constructor\n0(29) : error C1068: too much data in type constructor\n0(30) : error C1068: too much data in type constructor\n0(41) : error C1068: too much data in type constructor\n0(42) : error C1068: too much data in type constructor\n0(43) : error C1068: too much data in type constructor\n0(44) : error C1068: too much data in type constructor\n0(45) : error C0158: invalid digit '9' in octal constant\n0(45) : error C1068: too much data in type constructor\n0(46) : error C1068: too much data in type constructor\n0(47) : error C0158: invalid digit '9' in octal constant\n0(47) : error C1068: too much data in type constructor\n0(58) : error C1068: too much data in type constructor\n0(59) : error C1068: too much data in type constructor\n0(60) : error C1068: too much data in type constructor\n0(61) : error C1068: too much data in type constructor\n0(62) : error C1068: too much data in type constructor\n0(63) : error C1068: too much data in type constructor\n0(64) : error C1068: too much data in type constructor\n0(75) : error C1068: too much data in type constructor\n0(76) : error C1068: too much data in type constructor\n0(77) : error C0158: invalid digit '8' in octal constant\n0(77) : error C1068: too much data in type constructor\n0(78) : error C1068: too much data in type constructor\n0(79) : error C1068: too much data in type constructor\n0(80) : error C1068: too much data in type constructor\n0(81) : error C1068: too much data in type constructor\n0(92) : error C1068: too much data in type constructor\n0(93) : error C1068: too much data in type constructor\n0(94) : error C1068: too much data in type constructor\n0(95) : error C1068: too much data in type constructor\n0(96) : error C1068: too much data in type constructor\n0(97) : error C1068: too much data in type constructor\n0(98) : error C1068: too much data in type constructor\n0(109) : error C1068: too much data in type constructor\n0(110) : error C0158: invalid digit '9' in octal constant\n0(110) : error C1068: too much data in type constructor\n0(111) : error C1068: too much data in type constructor\n0(112) : error C1068: too much data in type constructor\n0(113) : error C1068: too much data in type constructor\n0(114) : error C0158: invalid digit '8' in octal constant\n0(114) : error C1068: too much data in type constructor\n0(115) : error C1068: too much data in type constructor\n0(126) : error C1068: too much data in type constructor\n0(127) : error C1068: too much data in type constructor\n0(128) : error C1068: too much data in type constructor\n0(129) : error C1068: too much data in type constructor\n0(130) : error C1068: too much data in type constructor\n0(131) : error C0158: invalid digit '9' in octal constant\n0(131) : error C1068: too much data in type constructor\n0(132) : error C1068: too much data in type constructor\n0(143) : error C1068: too much data in type constructor\n0(144) : error C0158: invalid digit '9' in octal constant\n0(144) : error C1068: too much data in type constructor\n0(145) : error C1068: too much data in type constructor\n0(146) : error C1068: too much data in type constructor\n0(147) : error C1068: too much data in type constructor\n0(148) : error C0158: invalid digit '8' in octal constant\n0(148) : error C1068: too much data in type constructor\n0(149) : error C1068: too much data in type constructor\n0(160) : error C1068: too much data in type constructor\n0(161) : error C0158: invalid digit '9' in octal constant\n0(161) : error C1068: too much data in type constructor\n0(162) : error C0158: invalid digit '8' in octal constant\n0(162) : error C1068: too much data in type constructor\n0(163) : error C1068: too much data in type constructor\n0(164) : error C1068: too much data in type constructor\n0(165) : error C1068: too much data in type constructor\n0(166) : error C1068: too much data in type constructor\n0(177) : error C1068: too much data in type constructor\n0(178) : error C1068: too much data in type constructor\n0(179) : error C1068: too much data in type constructor\n0(180) : error C1068: too much data in type constructor\n0(181) : error C1068: too much data in type constructor\n0(182) : error C1068: too much data in type constructor\n0(183) : error C1068: too much data in type constructor\n0(194) : error C1068: too much data in type constructor\n0(195) : error C0158: invalid digit '9' in octal constant\n0(195) : error C1068: too much data in type constructor\n0(196) : error C0158: invalid digit '8' in octal constant\n0(196) : error C1068: too much data in type constructor\n0(197) : error C1068: too much data in type constructor\n0(198) : error C1068: too much data in type constructor\n0(199) : error C1068: too much data in type constructor\n0(200) : error C1068: too much data in type constructor\n(0) : error C2003: incompatible options for link\n"
Traceback (most recent call last):
  File "/home/gregor/projects/ImageColorPicker/imagecolorpicker/gradientpreview.py", line 67, in paintGL
    glUseProgram(program)
  File "/home/gregor/projects/ImageColorPicker/.venv/lib/python3.11/site-packages/OpenGL/error.py", line 230, in glCheckError
    raise self._errorClass(
OpenGL.error.GLError: GLError(
    err = 1282,
    description = b'invalid operation',
    baseOperation = glUseProgram,
    cArguments = (2,)
)
fish: Job 1, 'poetry run python -m imagecolor…' terminated by signal SIGABRT (Abbruch)

Machine Information

ArchLinux Kernel 6.6.6

(Partial) glxinfo output:

Memory info (GL_NVX_gpu_memory_info):
    Dedicated video memory: 8192 MB
    Total available memory: 8192 MB
    Currently available dedicated video memory: 7449 MB
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: Quadro RTX 4000/PCIe/SSE2
OpenGL core profile version string: 4.6.0 NVIDIA 545.29.06
OpenGL core profile shading language version string: 4.60 NVIDIA
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL version string: 4.6.0 NVIDIA 545.29.06
OpenGL shading language version string: 4.60 NVIDIA
OpenGL context flags: (none)
OpenGL profile mask: (none)
OpenGL ES profile version string: OpenGL ES 3.2 NVIDIA 545.29.06
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
gregorv commented 6 months ago

Added to gradientpreview.py:52

print(self._source)

generated sources:

#version 450

uniform vec2 iResolution;

out vec4 oColor;
vec3 cmap_UnweightedRGB(float t) {
    const vec3 c0 = vec3(     0,173959,     0,135885,     0,218169 );
    const vec3 c1 = vec3(      1,64414,      5,77274,      5,68568 );
    const vec3 c2 = vec3(      15,2392,     -31,7561,     -25,3377 );
    const vec3 c3 = vec3(     -77,9767,      107,377,      51,4454 );
    const vec3 c4 = vec3(      149,866,     -190,938,     -54,0945 );
    const vec3 c5 = vec3(     -131,897,      158,774,      25,8172 );
    const vec3 c6 = vec3(      43,0969,       -49,19,     -3,45886 );

    return c0
        +t*(c1
        +t*(c2
        +t*(c3
        +t*(c4
        +t*(c5
        +t*(c6))))));
}
vec3 cmap_UnweightedOklab(float t) {
    const vec3 c0 = vec3(     0,160728,     0,117441,     0,202343 );
    const vec3 c1 = vec3(      1,18492,      5,56897,      5,49283 );
    const vec3 c2 = vec3(      20,9307,     -28,5898,     -22,2796 );
    const vec3 c3 = vec3(     -101,541,      94,6487,      38,8066 );
    const vec3 c4 = vec3(      194,757,      -168,49,     -31,2321 );
    const vec3 c5 = vec3(     -172,016,      140,343,      6,66124 );
    const vec3 c6 = vec3(      56,6596,     -43,4146,       2,6308 );

    return c0
        +t*(c1
        +t*(c2
        +t*(c3
        +t*(c4
        +t*(c5
        +t*(c6))))));
}
vec3 cmap_UnweightedCielab(float t) {
    const vec3 c0 = vec3(     0,173959,     0,135885,     0,218169 );
    const vec3 c1 = vec3(      1,64414,      5,77274,      5,68567 );
    const vec3 c2 = vec3(      15,2392,     -31,7562,     -25,3376 );
    const vec3 c3 = vec3(     -77,9766,      107,377,      51,4453 );
    const vec3 c4 = vec3(      149,866,     -190,938,     -54,0944 );
    const vec3 c5 = vec3(     -131,897,      158,774,       25,817 );
    const vec3 c6 = vec3(      43,0969,     -49,1901,     -3,45883 );

    return c0
        +t*(c1
        +t*(c2
        +t*(c3
        +t*(c4
        +t*(c5
        +t*(c6))))));
}
vec3 cmap_RGBRGB(float t) {
    const vec3 c0 = vec3(     0,132952,     0,149859,     0,284426 );
    const vec3 c1 = vec3(      2,62521,      3,23317,     0,144703 );
    const vec3 c2 = vec3(       -18,35,     -22,8959,      16,5337 );
    const vec3 c3 = vec3(      93,9377,      112,804,     -66,4256 );
    const vec3 c4 = vec3(     -192,174,     -248,777,      97,3211 );
    const vec3 c5 = vec3(      166,158,      236,644,     -62,7564 );
    const vec3 c6 = vec3(     -52,1943,      -81,005,      15,1607 );

    return c0
        +t*(c1
        +t*(c2
        +t*(c3
        +t*(c4
        +t*(c5
        +t*(c6))))));
}
vec3 cmap_RGBOklab(float t) {
    const vec3 c0 = vec3(     0,142172,     0,155995,     0,290452 );
    const vec3 c1 = vec3(      1,53972,       2,3262,    -0,682468 );
    const vec3 c2 = vec3(     -9,26495,     -16,0258,      22,9847 );
    const vec3 c3 = vec3(      62,8005,      92,8688,     -85,8874 );
    const vec3 c4 = vec3(     -139,111,     -221,458,      125,375 );
    const vec3 c5 = vec3(      121,714,      218,899,     -82,1648 );
    const vec3 c6 = vec3(     -37,6891,     -76,6116,      20,3489 );

    return c0
        +t*(c1
        +t*(c2
        +t*(c3
        +t*(c4
        +t*(c5
        +t*(c6))))));
}
vec3 cmap_RGBCielab(float t) {
    const vec3 c0 = vec3(     0,132952,     0,149859,     0,284426 );
    const vec3 c1 = vec3(      2,62521,      3,23318,     0,144703 );
    const vec3 c2 = vec3(     -18,3499,      -22,896,      16,5337 );
    const vec3 c3 = vec3(      93,9375,      112,804,     -66,4256 );
    const vec3 c4 = vec3(     -192,174,     -248,778,      97,3211 );
    const vec3 c5 = vec3(      166,158,      236,645,     -62,7563 );
    const vec3 c6 = vec3(     -52,1942,     -81,0052,      15,1607 );

    return c0
        +t*(c1
        +t*(c2
        +t*(c3
        +t*(c4
        +t*(c5
        +t*(c6))))));
}
vec3 cmap_OklabRGB(float t) {
    const vec3 c0 = vec3(     0,106466,     0,153942,     0,296582 );
    const vec3 c1 = vec3(      3,88968,      3,00093,    -0,510287 );
    const vec3 c2 = vec3(     -35,7425,     -25,1935,      18,4254 );
    const vec3 c3 = vec3(      167,926,      131,313,     -62,9814 );
    const vec3 c4 = vec3(     -328,893,     -293,744,      77,9556 );
    const vec3 c5 = vec3(        281,3,      282,131,     -38,0838 );
    const vec3 c6 = vec3(     -88,4588,     -97,5251,      5,14679 );

    return c0
        +t*(c1
        +t*(c2
        +t*(c3
        +t*(c4
        +t*(c5
        +t*(c6))))));
}
vec3 cmap_OklabOklab(float t) {
    const vec3 c0 = vec3(     0,116549,      0,16073,     0,302915 );
    const vec3 c1 = vec3(      2,91912,      2,22442,     -1,21104 );
    const vec3 c2 = vec3(     -28,5102,     -20,3927,      22,9321 );
    const vec3 c3 = vec3(      145,077,      120,652,     -73,7967 );
    const vec3 c4 = vec3(     -291,627,     -284,295,      89,4312 );
    const vec3 c5 = vec3(      250,486,      280,094,     -42,9839 );
    const vec3 c6 = vec3(     -78,3374,     -98,3109,      5,57229 );

    return c0
        +t*(c1
        +t*(c2
        +t*(c3
        +t*(c4
        +t*(c5
        +t*(c6))))));
}
vec3 cmap_OklabCielab(float t) {
    const vec3 c0 = vec3(     0,106466,     0,153941,     0,296582 );
    const vec3 c1 = vec3(      3,88968,      3,00093,    -0,510288 );
    const vec3 c2 = vec3(     -35,7425,     -25,1935,      18,4254 );
    const vec3 c3 = vec3(      167,926,      131,313,     -62,9815 );
    const vec3 c4 = vec3(     -328,893,     -293,744,      77,9556 );
    const vec3 c5 = vec3(        281,3,      282,131,     -38,0839 );
    const vec3 c6 = vec3(     -88,4588,     -97,5252,       5,1468 );

    return c0
        +t*(c1
        +t*(c2
        +t*(c3
        +t*(c4
        +t*(c5
        +t*(c6))))));
}
vec3 cmap_CielabRGB(float t) {
    const vec3 c0 = vec3(     0,170011,     0,141719,     0,217462 );
    const vec3 c1 = vec3(      1,09467,       4,7155,      4,75882 );
    const vec3 c2 = vec3(      17,4981,     -24,0211,      -17,082 );
    const vec3 c3 = vec3(     -78,4019,      89,9512,      25,5914 );
    const vec3 c4 = vec3(      145,399,      -181,31,     -19,1376 );
    const vec3 c5 = vec3(     -131,212,      166,371,      5,19831 );
    const vec3 c6 = vec3(      45,6472,     -55,6732,     0,737844 );

    return c0
        +t*(c1
        +t*(c2
        +t*(c3
        +t*(c4
        +t*(c5
        +t*(c6))))));
}
vec3 cmap_CielabOklab(float t) {
    const vec3 c0 = vec3(     0,162435,     0,129747,     0,207123 );
    const vec3 c1 = vec3(     0,402141,      4,25054,      4,34363 );
    const vec3 c2 = vec3(      25,1586,     -18,8203,     -12,3066 );
    const vec3 c3 = vec3(     -109,117,       70,806,      7,54433 );
    const vec3 c4 = vec3(      203,411,     -149,311,      11,8545 );
    const vec3 c5 = vec3(     -183,274,       141,31,     -19,7323 );
    const vec3 c6 = vec3(      63,4571,     -48,1863,      8,37837 );

    return c0
        +t*(c1
        +t*(c2
        +t*(c3
        +t*(c4
        +t*(c5
        +t*(c6))))));
}
vec3 cmap_CielabCielab(float t) {
    const vec3 c0 = vec3(     0,170011,     0,141719,     0,217462 );
    const vec3 c1 = vec3(      1,09467,       4,7155,      4,75881 );
    const vec3 c2 = vec3(      17,4981,     -24,0211,      -17,082 );
    const vec3 c3 = vec3(     -78,4018,      89,9512,      25,5913 );
    const vec3 c4 = vec3(      145,399,      -181,31,     -19,1375 );
    const vec3 c5 = vec3(     -131,212,      166,371,       5,1982 );
    const vec3 c6 = vec3(      45,6472,     -55,6733,     0,737881 );

    return c0
        +t*(c1
        +t*(c2
        +t*(c3
        +t*(c4
        +t*(c5
        +t*(c6))))));
}

void main() {
    oColor = vec4(0,0,0,1);
    vec2 uv = gl_FragCoord.xy / iResolution;
    if(uv.y > 0.0)
        oColor = vec4(cmap_UnweightedRGB(uv.x), 1.);
    if(uv.y > 0.08333333333333333)
        oColor = vec4(cmap_UnweightedOklab(uv.x), 1.);
    if(uv.y > 0.16666666666666666)
        oColor = vec4(cmap_UnweightedCielab(uv.x), 1.);
    if(uv.y > 0.25)
        oColor = vec4(cmap_RGBRGB(uv.x), 1.);
    if(uv.y > 0.3333333333333333)
        oColor = vec4(cmap_RGBOklab(uv.x), 1.);
    if(uv.y > 0.4166666666666667)
        oColor = vec4(cmap_RGBCielab(uv.x), 1.);
    if(uv.y > 0.5)
        oColor = vec4(cmap_OklabRGB(uv.x), 1.);
    if(uv.y > 0.5833333333333334)
        oColor = vec4(cmap_OklabOklab(uv.x), 1.);
    if(uv.y > 0.6666666666666666)
        oColor = vec4(cmap_OklabCielab(uv.x), 1.);
    if(uv.y > 0.75)
        oColor = vec4(cmap_CielabRGB(uv.x), 1.);
    if(uv.y > 0.8333333333333334)
        oColor = vec4(cmap_CielabOklab(uv.x), 1.);
    if(uv.y > 0.9166666666666666)
        oColor = vec4(cmap_CielabCielab(uv.x), 1.);

    float dy = 1. / float(12);
    oColor.rgb = mix(oColor.rgb, vec3(0.94, 0.94, 0.94), smoothstep(.5/iResolution.y, -.5/iResolution.y, abs(mod(uv.y + .5 * dy, dy) - .5 * dy) - .0065));
}

Looks like some locale issue when formatting the floats in the vector :-)

gregorv commented 6 months ago

Seems to be an issue in glm....

Workaround: LC_ALL=en_EN.UTF-8

LeStahL commented 1 week ago

Should be fixed in https://github.com/LeStahL/ImageColorPicker/commit/9d94413d2afee5fbf543df23e42b728b3acb0b84