[0]【cbuffer、shader】设置一个 纹理 全局变量给shader用,失败,求助。

   
//一个简单的 CommandBuffer使用
    let viewPort: Laya.Viewport = this._camera.viewport;
        this._camera.enableBuiltInRenderTexture = true;
        let curRender = Laya.RenderTexture.createFromPool(viewPort.width, viewPort.height, Laya.RenderTextureFormat.R8G8B8, Laya.RenderTextureDepthFormat.DEPTHSTENCIL_NONE);
        let lastRender = Laya.RenderTexture.createFromPool(viewPort.width, viewPort.height, Laya.RenderTextureFormat.R8G8B8, Laya.RenderTextureDepthFormat.DEPTHSTENCIL_NONE); 
        this._commonBuffer.blitScreenQuadByMaterial(null, curRender);
//这里设置了个Rt 这个RT是可以用的
        this._commonBuffer.setShaderDataTexture(this._mat.shaderData, Laya.Shader3D.propertyNameToID("u_texture1"), curRender);
        this._commonBuffer.blitScreenQuadByMaterial(curRender, null, new Laya.Vector4(0, 0, 0, 0), this._mat, 0)
        this._camera.addCommandBuffer(Laya.CameraEventFlags.BeforeImageEffect, this._commonBuffer);
        this._commonBuffer.blitScreenQuadByMaterial(null, lastRender);
      // 这里设置了一个全局的 RT ,希望供我的shader使用
  this._commonBuffer.setGlobalTexture(Laya.Shader3D.propertyNameToID("u_texture2"), lastRender);
        Laya.RenderTexture.recoverToPool(curRender);
 
 
 
 
 
//shader FS
 
uniform vec3 u_CameraPos;
uniform sampler2D u_texture1;
uniform sampler2D u_texture2;
varying vec3 v_PositionWorld; 
     
void main()
{
  float x = v_PositionWorld.x * 0.5 + 0.5;
  float y = v_PositionWorld.y * 0.5 + 0.5; 
  vec4 color1 = texture2D(u_texture1,vec2(x,y))*0.5;
//这里插入 我的 u_texture2 纹理2 出来的是 几个矩形色块,
  vec4 color2 = texture2D(u_texture2,vec2(x+0.5,y-0.5))*0.5; 
  // vec4 color = color1+color2+color3+color4;
  vec4 color =color1+color2;
  gl_FragColor = vec4(color.xyz,1.0);
}
 
 
//另外
      //所有的uniform属性
        var uniformMap = {
            'u_Bones': Laya.Shader3D.PERIOD_CUSTOM,//绑定
            'u_CameraPos': Laya.Shader3D.PERIOD_CAMERA,
            'u_MvpMatrix': Laya.Shader3D.PERIOD_SPRITE,
            'u_WorldMat': Laya.Shader3D.PERIOD_SPRITE,
            "u_texture1": Laya.Shader3D.PERIOD_MATERIAL,
            "u_texture2": Laya.Shader3D.PERIOD_MATERIAL,
        };
这个可是设置了。
 
没有其他操作了。
 
我觉得 纹理2 至少有图吧。
 
 
//我是准备做个动态模糊,准备用 前后 的 屏幕纹理,叠加一下,试一下, 纹理1 是当前 纹理2 是上一次。
//现在就关于纹理2的取用问题,我搞了半天。。。。
 
1、希望有大神指导一下。 感觉简单又处处出问题。不知道,纹理2怎么才能存到下次使用。
 
2、全局的这个设置纹理,我用得不对,希望有指导。
 
万分感谢
已邀请:

189*****181

赞同来自:

看来是 commonbuffer 命令 组里面使用   mat  ,是获取不到全局设置的变量得,只有  引擎默认渲染流程的步奏才能获取到。

要回复问题请先

商务合作
商务合作