community icon indicating copy to clipboard operation
community copied to clipboard

[ERROR ] [Shader ] <fragment> failed to compile (gl:0)

Open rcnn-retall opened this issue 9 months ago • 2 comments

Software Versions

  • Python:3.11.5
  • OS:windos
  • Kivy:2.3.0
  • Kivy installation method:pip install kivy Describe the bug A clear and concise description of what the bug is.

The issue tracker is a tool to address bugs only (search known bugs: https://git.io/vM1iE). Please use the #support Discord channel at https://chat.kivy.org/ or Stack Overflow for support questions, more information at https://git.io/vM1yQ.

Expected behavior A clear and concise description of what you expected to happen. [ERROR ] [Shader ] failed to compile (gl:0) To Reproduce A short, runnable example that reproduces the issue with latest kivy master.

Code and Logs and screenshots

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.graphics import RenderContext
from kivy.base import EventLoop
from kivy.uix.image import Image


fragment_shader ='''
vec4 effect( vec4 color, sampler2D buf0, vec2 texCoords, vec2 coords)
{

    vec2 frameBufSize = resolution;

    float FXAA_SPAN_MAX = 8.0;
    float FXAA_REDUCE_MUL = 1.0/8.0;
    float FXAA_REDUCE_MIN = 1.0/128.0;

    vec3 rgbNW=texture2D(buf0,texCoords+(vec2(-1.0,-1.0)/frameBufSize)).xyz;
    vec3 rgbNE=texture2D(buf0,texCoords+(vec2(1.0,-1.0)/frameBufSize)).xyz;
    vec3 rgbSW=texture2D(buf0,texCoords+(vec2(-1.0,1.0)/frameBufSize)).xyz;
    vec3 rgbSE=texture2D(buf0,texCoords+(vec2(1.0,1.0)/frameBufSize)).xyz;
    vec3 rgbM=texture2D(buf0,texCoords).xyz;

    vec3 luma=vec3(0.299, 0.587, 0.114);
    float lumaNW = dot(rgbNW, luma);
    float lumaNE = dot(rgbNE, luma);
    float lumaSW = dot(rgbSW, luma);
    float lumaSE = dot(rgbSE, luma);
    float lumaM  = dot(rgbM, luma);

    float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));
    float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));

    vec2 dir;
    dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));
    dir.y =  ((lumaNW + lumaSW) - (lumaNE + lumaSE));

    float dirReduce = max(
        (lumaNW + lumaNE + lumaSW + lumaSE) * (0.25 * FXAA_REDUCE_MUL),
        FXAA_REDUCE_MIN);

    float rcpDirMin = 1.0/(min(abs(dir.x), abs(dir.y)) + dirReduce);

    dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),
          max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),
          dir * rcpDirMin)) / frameBufSize;

    vec3 rgbA = (1.0/2.0) * (
        texture2D(buf0, texCoords.xy + dir * (1.0/3.0 - 0.5)).xyz +
        texture2D(buf0, texCoords.xy + dir * (2.0/3.0 - 0.5)).xyz);
    vec3 rgbB = rgbA * (1.0/2.0) + (1.0/4.0) * (
        texture2D(buf0, texCoords.xy + dir * (0.0/3.0 - 0.5)).xyz +
        texture2D(buf0, texCoords.xy + dir * (3.0/3.0 - 0.5)).xyz);
    float lumaB = dot(rgbB, luma);

    vec4 return_color;
    if((lumaB < lumaMin) || (lumaB > lumaMax)){
        return_color = vec4(rgbA, color.w);
    }else{
        return_color = vec4(rgbB, color.w);
    }

    return return_color;
}
'''


class CustomWidget(Widget):
    def __init__(self, **kwargs):
        EventLoop.ensure_window()
        self.canvas = RenderContext(use_parent_projection=True, use_parent_modelview=True)
        # self.canvas.shader.vs = vertex_shader
        self.canvas.shader.fs = fragment_shader
        super(CustomWidget, self).__init__(**kwargs)



class MyApp(App):
    def build(self):
        return CustomWidget()

if __name__ == '__main__':
    MyApp().run()

Additional context Add any other context about the problem here.

rcnn-retall avatar Apr 29 '25 07:04 rcnn-retall

Did you tried to reduce the fragment shader to a bare minimum and then increment the complexity?

At first glance, this does not seem a valid / complete fragment shader to me.

misl6 avatar Apr 29 '25 18:04 misl6

How can I complete this?

rcnn-retall avatar Apr 30 '25 11:04 rcnn-retall