跳到主要内容
← Advanced Rendering

Advanced Rendering

Bindless Texturing

sampler2D

代码复盘 GLSL

第 15 课:Bindless Texturing

实现:sampler2D

本课需 多 pass / 后处理,暂以代码复盘呈现。

实现

uniform vec2 iResolution;
uniform float iTime;
uniform sampler2D iChannels[10];

in vec2 vUv;
in float vLayer;

layout(location = 0) out vec4 FragColor;

vec4 textureLayer(vec2 uv, int layer) {
  if (layer == 9) return texture(iChannels[9], uv);
  if (layer == 8) return texture(iChannels[8], uv);
  if (layer == 7) return texture(iChannels[7], uv);
  if (layer == 6) return texture(iChannels[6], uv);
  if (layer == 5) return texture(iChannels[5], uv);
  if (layer == 4) return texture(iChannels[4], uv);
  if (layer == 3) return texture(iChannels[3], uv);
  if (layer == 2) return texture(iChannels[2], uv);
  if (layer == 1) return texture(iChannels[1], uv);

   return texture(iChannels[0], uv);
}

void main() {
  if (mod(iTime, 12.0) < vLayer + 1.0) {
     discard;
   }

  FragColor = textureLayer(vUv, int(vLayer));
}

复盘笔记

  • sampler2D
  • sampler2DArray