zoukankan      html  css  js  c++  java
  • WARNING: Calls to any function that may require a gradient calculation inside a conditional block may return undefined results

    GLES2.0:

    Some device will give a warning on compling shaders(yet the compling will succeed), and the rendering result is incorrect with blink & artifacts.

    the problems is gradient calculation(interpolation) relies on the neighbor pixels,

    if the neighbor pixels are not in the same conditional branch,  the gradient will be invalid and result may be undifed.

    I guess it is an un-defined behavior, so some devices/drivers works good, some don't.

    1 //like this
    2 if( test )
    3     color = texture2D(sampler,UV);
    4 else
    5    color = vec4(0,0,0,0);

    One workaround is use mix() or step() instead of conditional test. 

    1 color = mix(vec4(0,0,0,0), texture2D(...), testVal);

    When using conditional branch, the texture sampling may be not actually executed, which will increase graphics performance.

    One draw back on using mix/step is that the sampling is always performed, then interpolated/multiplied.


    udpate:

    Actually to many conditonal test & branch blocks(even without texture sampling in it) in fragment shader will case rendering halt, no response, and even system restart.

    this result is based on testing on Galaxy S4 (PowerVR SGX544), compared to testing on iPad Air(PowerVR G6430, no such problems).

    maybe it's only a driver issue, since both graphics chips are PowerVR family.

  • 相关阅读:
    ngnix+uwsgi+django 部署mezzanine
    shell三剑客之find
    Flask常见面试问题
    redis宕机如何解决?如果是项目上线的宕机呢?
    UiPath,容智Ibot在线接单,有需求的欢迎过来
    CORS和CSRF
    JWT黑名单和白名单
    Django项目常见面试问题
    降低Redis内存占用
    Redis-缓存有效期与淘汰策略
  • 原文地址:https://www.cnblogs.com/crazii/p/3734545.html
Copyright © 2011-2022 走看看