webGL gl_Position value saving outside shaders
我有顶点着色器用于计算这样的事情
1 2 3 4 5 | gl_Position = vec4(a.x * (0.5 - b.x) * v - a.y * b.y * u - offset * offsetMul * u, 0, 0) + transform * vec4(position, 0, 1); |
我需要保存gl_Position的特定值,以供以后在着色器之外使用。有什么方法可以保存要在着色器外部使用的坐标?
保存
保存"特定"值也不可行。
可以保存所有值。您可以渲染位置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | attribute vec4 position; // your data attribute float a_count; // count 0, 1, 2, 3 uniform vec2 u_resolution; // resolution of output texture // vertex shader varying vec4 v_position; void main() { v_position = vec4(a.x * (0.5 - b.x) * v - a.y * b.y * u - offset * offsetMul * u, 0, 0) + transform * vec4(position, 0, 1); vec2 pixelCoord = vec2( mod(a_count, resolution.x); floor(a_count / resolution.x)); vec2 clipSpaceCoord = (pixelCoord + 0.5) / resolution * 2.0 - 1.0; gl_Position = vec4(clipSpaceCoord, 0, 1); } // fragment shdaer precision highp float varying vec4 v_position; void main() { gl_FragColor = v_position; } |
在上述情况下,我们将创建一个填充有计数0、1、2、3等的缓冲区,以将数据提供给上述
中
请注意,将位置数据本身放入纹理中并执行更多普通的GPGPU操作可能会快得多。底部的一个例子
在WebGL2中,您还可以使用变换反馈。变换反馈将顶点着色器的输出写入一个或多个缓冲区。在WebGL2中,使用着色器版本300 es,您可以将顶点着色器中的变化声明为