android - glsl es dFdx/dFdy 模拟

标签 android opengl-es glsl glsles

我正在编写跨平台应用程序。它应该在 Android 设备上运行。
我想使用 dFdx/dFdy 进行抗锯齿。但是,不幸的是,glsl es 2.0 不支持导数。

我可以用什么东西代替 dFdx/dFdy 吗? IE。 1/sprite_width, 1/sprite_height 以屏幕像素为单位。

正如我所说,我需要它才能在 Android 设备上运行。我看到我的设备支持 GL_OES_standard_derivatives,它允许它使用这个函数。所有android opengl es 2.0设备都支持吗?

最佳答案

正如我所说,许多 Opengl ES 2.0 设备都支持 GL_OES_standard_derivatives 扩展。
但是对于那些不这样做的人,我做了这个解决方法:

float myFunc(vec2 p){
return p.x*p.x - p.y; // that's our function. We want derivative from it.
}


// this calculated in vertex shader
// width/height = triangle/quad width/height in px;
vec2 pixel_step = vec2(1/width, 1/height);       

float current = myFunc(texCoord);
float dfdx = myFunc(texCoord + pixel_step.x) - current;
float dfdy = myFunc(texCoord + pixel_step.y) - current;

float fwidth = abs(dx) + abs(dy);       // from khronos doc #http://www.khronos.org/registry/gles/extensions/OES/OES_standard_derivatives.txt

附言我得到的结果与 glsl 内置函数非常接近,有点模糊(在我的着色器中)。为了解决这个问题,我在 1/1.75 上添加了 multiply pixel_step。如果有人知道原因,请告诉我。

关于android - glsl es dFdx/dFdy 模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22442304/

相关文章:

iphone - 尽快显示 CGImage 数据流

java - 关闭预览模式时,动态壁纸引擎不会调用 onDestroy

opengl - GLSL Matrix 的意外行为

c++ - OpenGL3.3 中的代码不在正交投影中渲染纹理

Android - 禁用操作栏中的设置

android 支持比 glreadpixels 更好的方法吗?

android - 有没有办法在 Android list 中指定处理器架构要求?

java - 安卓地理编码器 : search by zip code returns unexpected results

c++ - openGL在不同的显示模式下绘制圆形三角形和正方形

glsl - 在 vulkan 中除了 main 之外使用不同的入口点