gl_FragCoord 在 RenderScript ScriptC 中等效
gl_FragCoord equivalent in RenderScript ScriptC
我正在将一些 GLSL 着色器移植到 Renderscript 中。
在 Renderscript ScriptC 中模拟 gl_FragCoord 的等效方法是什么?
GLSL 着色器:
uniform sampler2D u_texture;
varying vec2 v_texcoord;
uniform vec2 resolution;
void main()
{
vec4 color = texture2D(u_texture, v_texcoord);
vec2 position = (gl_FragCoord.xy / resolution.xy) - vec2(0.5);
float len = length(position);
gl_FragColor = color * vec4(vec3(len), 1.0);
}
渲染脚本:
rs_allocation texture;
rs_sampler sampler;
float2 resolution;
uchar4 __attribute__((kernel)) root(uint32_t x, uint32_t y)
{
float2 texcoord = (float2){(float)x, (float)y} * (float2){ 1.0f / resolution.x, 1.0f / resolution.y};
float4 color = rsSample(texture, sampler, texcoord);
-----------------------------------------------------------------
float2 position = (***gl_FragCoord.xy*** / resolution.xy) - 0.5f;
-----------------------------------------------------------------
float len = length(position);
color *= (float4){len, len, len, 1.0f}
return rsPackColorTo8888(color);
}
你的代码中已经有了,输入的x
和y
参数等价于gl_FragCoord.xy
,还要注意乘以resolution.xy
的倒数是与首先除以它相同:
float2 texcoord = (float2){(float)x, (float)y} / (float2){resolution.x, resolution.y};
我正在将一些 GLSL 着色器移植到 Renderscript 中。
在 Renderscript ScriptC 中模拟 gl_FragCoord 的等效方法是什么?
GLSL 着色器:
uniform sampler2D u_texture;
varying vec2 v_texcoord;
uniform vec2 resolution;
void main()
{
vec4 color = texture2D(u_texture, v_texcoord);
vec2 position = (gl_FragCoord.xy / resolution.xy) - vec2(0.5);
float len = length(position);
gl_FragColor = color * vec4(vec3(len), 1.0);
}
渲染脚本:
rs_allocation texture;
rs_sampler sampler;
float2 resolution;
uchar4 __attribute__((kernel)) root(uint32_t x, uint32_t y)
{
float2 texcoord = (float2){(float)x, (float)y} * (float2){ 1.0f / resolution.x, 1.0f / resolution.y};
float4 color = rsSample(texture, sampler, texcoord);
-----------------------------------------------------------------
float2 position = (***gl_FragCoord.xy*** / resolution.xy) - 0.5f;
-----------------------------------------------------------------
float len = length(position);
color *= (float4){len, len, len, 1.0f}
return rsPackColorTo8888(color);
}
你的代码中已经有了,输入的x
和y
参数等价于gl_FragCoord.xy
,还要注意乘以resolution.xy
的倒数是与首先除以它相同:
float2 texcoord = (float2){(float)x, (float)y} / (float2){resolution.x, resolution.y};