/// <summary> /// /// </summary> /// <param name="w"></param> /// <param name="h"></param> public void ScreenSizeChanged(int w, int h) { csMgr_.ScreenSizeChanged(w, h); var bufs = new IShaderView[] { gbuffers_[0], gbuffers_[1], gbuffers_[2], GraphicsCore.DefaultDepthBuffer, lightMgr_.LightBuffer, shadowMap_.Map }; csMgr_.SetResources(bufs); // GBuffer for (int i = 0; i < gbufferDesc_.Length; i++) { gbufferDesc_[i].width = w; gbufferDesc_[i].height = h; gbuffers_[i].Dispose(); gbuffers_[i].Initialize(gbufferDesc_[i]); } deferredBuffer_.depth_stencil_ = GraphicsCore.DefaultDepthBuffer; forwardBuffer_.depth_stencil_ = GraphicsCore.DefaultDepthBuffer; uav_.Dispose(); uavDesc_.width = w; uavDesc_.height = h; uav_.Initialize(uavDesc_); hdrResolveBuffer_.Dispose(); hdrResolveDesc_.width = w; hdrResolveDesc_.height = h; hdrResolveBuffer_.Initialize(hdrResolveDesc_); prim_.GetMaterial().SetShaderViewPS(0, debugViewList_[ViewModel.ViewIndex]); // カラーバッファ作り替え fxaaPrim_.GetMaterial().SetShaderViewPS(0, hdrResolveBuffer_); }
public void SetResources(int index, IShaderView resource) { resources_[index] = resource; }
public void SetShaderViewVS(int index, IShaderView texture) { vsShaderViews_[index] = texture; }
public void SetShaderResourceCS(int index, IShaderView view) { context_.ComputeShader.SetShaderResource(view.ShaderResourceView, index); }
public void SetShaderResourceVS(int index, IShaderView view) { context_.VertexShader.SetShaderResource(view.ShaderResourceView, index); }
/// <summary> /// シェーダリソースのセット /// </summary> public void SetShaderResourcePS(int index, IShaderView view) { context_.PixelShader.SetShaderResource(view.ShaderResourceView, index); }
/// <summary> /// レンダーターゲット初期化 /// </summary> void InitializeTarget() { // deferred用MRTバッファ gbufferDesc_ = new Texture.InitDesc[] { new Texture.InitDesc() { bindFlag = TextureBuffer.BindFlag.IsRenderTarget, width = GraphicsCore.TargetWidth, height = GraphicsCore.TargetHeight, format = SlimDX.DXGI.Format.R16G16B16A16_Float, }, new Texture.InitDesc() { bindFlag = TextureBuffer.BindFlag.IsRenderTarget, width = GraphicsCore.TargetWidth, height = GraphicsCore.TargetHeight, format = SlimDX.DXGI.Format.R8G8B8A8_UNorm, }, new Texture.InitDesc() { bindFlag = TextureBuffer.BindFlag.IsRenderTarget, width = GraphicsCore.TargetWidth, height = GraphicsCore.TargetHeight, format = SlimDX.DXGI.Format.R8G8B8A8_UNorm, }, }; gbuffers_ = new Texture[gbufferDesc_.Length]; for (int i = 0; i < gbuffers_.Length; i++) { gbuffers_[i] = new Texture(gbufferDesc_[i]); } deferredBuffer_ = new GraphicsCore.FrameBuffer(); deferredBuffer_.color_buffer_ = gbuffers_; deferredBuffer_.depth_stencil_ = GraphicsCore.DefaultDepthBuffer; uavDesc_ = new Texture.InitDesc { bindFlag = TextureBuffer.BindFlag.IsRenderTarget | TextureBuffer.BindFlag.IsUnorderedAccess, width = GraphicsCore.TargetWidth, height = GraphicsCore.TargetHeight, format = SlimDX.DXGI.Format.R16G16B16A16_Float, }; uav_ = new Texture(uavDesc_); csMgr_.SetUAVs(new Texture[] { uav_ }); var bufs = new IShaderView[] { gbuffers_[0], gbuffers_[1], gbuffers_[2], GraphicsCore.DefaultDepthBuffer, lightMgr_.LightBuffer, shadowMap_.Map }; csMgr_.SetResources(bufs); hdrResolveDesc_ = new Texture.InitDesc() { bindFlag = TextureBuffer.BindFlag.IsRenderTarget, width = GraphicsCore.TargetWidth, height = GraphicsCore.TargetHeight, format = SlimDX.DXGI.Format.R8G8B8A8_UNorm, }; hdrResolveBuffer_ = new Texture(hdrResolveDesc_); forwardBuffer_ = new GraphicsCore.FrameBuffer(); forwardBuffer_.color_buffer_ = new Texture[] { uav_ }; forwardBuffer_.depth_stencil_ = GraphicsCore.DefaultDepthBuffer; hdrResultBuffer_ = new GraphicsCore.FrameBuffer(); hdrResultBuffer_.color_buffer_ = new Texture[] { hdrResolveBuffer_ }; hdrResultBuffer_.depth_stencil_ = null; // キューブマップ int cubeSize = 128; globalCapture_ = new ReflectionCapture(cubeSize, new Vector3(0, 3, 0)); localCapture_ = new List <ReflectionCapture>(); giTextures_ = new Texture[3]; if (System.IO.File.Exists("asset/gitex_r.dds")) { giTextures_[0] = new Texture("asset/gitex_r.dds"); giTextures_[1] = new Texture("asset/gitex_g.dds"); giTextures_[2] = new Texture("asset/gitex_b.dds"); csMgr_.SetResources(6, giTextures_[0]); csMgr_.SetResources(7, giTextures_[1]); csMgr_.SetResources(8, giTextures_[2]); cubeMapRenderEnable_ = false; } // グリッド上で生成 if (cubeMapRenderEnable_) { Vector3 bounds = cubeMapInfo_.boundingMax - cubeMapInfo_.boundingMin; for (int z = 0; z < cubeMapInfo_.numZ; z++) { for (int y = 0; y < cubeMapInfo_.numY; y++) { for (int x = 0; x < cubeMapInfo_.numX; x++) { Vector3 add = new Vector3(bounds.X * ((float)x / (cubeMapInfo_.numX - 1)), bounds.Y * ((float)y / (cubeMapInfo_.numY - 1)), bounds.Z * ((float)z / (cubeMapInfo_.numZ - 1)) ); Vector3 pos = cubeMapInfo_.boundingMin + add; localCapture_.Add(new ReflectionCapture(cubeSize, pos)); } } } } // アンチなし用プリム Lib.Rect rect = new Lib.Rect(new Vector3(-1.0f, 1.0f, 0.0f), new Vector3(1.0f, -1.0f, 0.0f)); prim_ = new Prim("Direct", (uint)Shader.VertexAttr.TEXCOORD0); prim_.AddRect(ref rect); prim_.GetMaterial().SetShaderViewPS(0, gbuffers_[0]); prim_.GetMaterial().DepthState = RenderState.DepthState.None; // FXAA fxaaPrim_ = new Prim("FXAA", (uint)Shader.VertexAttr.TEXCOORD0); fxaaPrim_.AddRect(ref rect); fxaaPrim_.GetMaterial().SetShaderViewPS(0, hdrResolveBuffer_); fxaaPrim_.GetMaterial().DepthState = RenderState.DepthState.None; // デバッグ表示用 debugViewList_ = new Texture[] { hdrResolveBuffer_, gbuffers_[0], gbuffers_[1], gbuffers_[2], shadowMap_.Map, toneMap_.LuminanceAvgTexture, }; }