public bool Bake(TextureCube texture, RenderWrap renderWrap, ref object tag) { var tex = renderWrap.GetTex2D(Source); if (tex == null || tex.Status != GraphicsObjectStatus.loaded) { return(false); } renderWrap.SetRootSignature("Csu"); int width = texture.width; int height = texture.height; var writer = renderWrap.Writer; writer.Write(width); writer.Write(height); writer.SetCBV(0); renderWrap.SetSRVs(new string[] { Source }); renderWrap.SetUAV(texture, 0, 0); renderWrap.Dispatch("ConvertToCube.hlsl", null, width / 8, height / 8, 6); for (int i = 1; i < texture.mipLevels; i++) { int mipPow = 1 << i; renderWrap.SetSRVLim(texture, i - 1, 0); renderWrap.SetUAV(texture, i, 0); writer.Write(width / mipPow); writer.Write(height / mipPow); writer.Write(i - 1); writer.SetCBV(0); renderWrap.Dispatch("GenerateCubeMipMap.hlsl", null, width / mipPow / 8, height / mipPow / 8, 6); } return(true); }
public void Execute(RenderWrap renderWrap) { var texInput = renderWrap.GetRenderTexture2D(input); var texOutput = renderWrap.GetRenderTexture2D(output); int width = texInput.width; int height = texInput.height; renderWrap.SetRootSignature(rs); renderWrap.SetSRV(texInput, 0); renderWrap.SetUAV(texOutput, 0, 0); var writer = renderWrap.Writer; writer.Write(width); writer.Write(height); writer.SetCBV(0); renderWrap.Dispatch(shader, null, (width + 15) / 16, (height + 15) / 16); int x = width; int y = height; for (int i = 1; i < 9; i++) { x = (x + 1) / 2; y = (y + 1) / 2; writer.Write(x); writer.Write(y); writer.SetCBV(0); renderWrap.SetSRVLim(texOutput, i - 1, 0); renderWrap.SetUAV(texOutput, i, 0); renderWrap.Dispatch(shader, null, (x + 15) / 16, (y + 15) / 16); } }