shader编辑器中可以显示,浏览器里面没效果

// Copyright (c) 2017-2020 Xiamen Yaji Software Co., Ltd.

CCEffect %{
techniques:

  • passes:
    • vert: sprite-vs:vert
      frag: sprite-fs:frag
      depthStencilState:
      depthTest: false
      depthWrite: false
      blendState:
      targets:
      • blend: true
        blendSrc: src_alpha
        blendDst: one_minus_src_alpha
        blendDstAlpha: one_minus_src_alpha
        rasterizerState:
        cullMode: none
        properties:
        alphaThreshold: { value: 0.5 }
        }%

CCProgram sprite-vs %{
precision highp float;
#include <builtin/uniforms/cc-global>
#if USE_LOCAL
#include <builtin/uniforms/cc-local>
#endif
#if SAMPLE_FROM_RT
#include <common/common-define>
#endif
in vec3 a_position;
in vec2 a_texCoord;
in vec4 a_color;

out vec4 color;
out vec2 uv0;

vec4 vert () {
vec4 pos = vec4(a_position, 1);

#if USE_LOCAL
  pos = cc_matWorld * pos;
#endif

#if USE_PIXEL_ALIGNMENT
  pos = cc_matView * pos;
  pos.xyz = floor(pos.xyz);
  pos = cc_matProj * pos;
#else
  pos = cc_matViewProj * pos;
#endif

uv0 = a_texCoord;
#if SAMPLE_FROM_RT
  CC_HANDLE_RT_SAMPLE_FLIP(uv0);
#endif
color = a_color;

return pos;

}
}%

CCProgram sprite-fs %{
precision highp float;
#include <builtin/internal/embedded-alpha>
#include <builtin/internal/alpha-test>

in vec4 color;

#if USE_TEXTURE
in vec2 uv0;
#pragma builtin(local)
layout(set = 2, binding = 12) uniform sampler2D cc_spriteTexture;
#endif

vec4 frag () {
vec4 o = vec4(1, 1, 1, 1);

#if USE_TEXTURE
  o *= CCSampleWithAlphaSeparated(cc_spriteTexture, uv0);
  #if IS_GRAY
    float gray  = 0.2126 * o.r + 0.7152 * o.g + 0.0722 * o.b;
    o.r = o.g = o.b = gray;
  #endif
#endif

o *= color;
ALPHA_TEST(o);

if(uv0.x > uv0.y){
  o.a = 0.0;
}
return o;

}
}%
写了个简单的效果,,在编辑器里面显示正常,在浏览器里面预览,,啥也看不见,,这是啥情况。。。

image 就简单写了这么一个判断。。把图片对角线切开…

不要动态合图

把shader使用到的图的packable勾选去掉。 动态合图后,uv发生变化,导致和uv相关的shader内容会出错。