protected override void _Render(DXCamera camera) { EffectTechnique technique = _shader.DXEffect.GetTechniqueByIndex(0); for (int i = 0; i < 5; i++) { if (_vertexBuffer2[i] != null && Program.DXSceneOptions.LevelVisibility[i]) { DXContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(_vertexBuffer2[i], Marshal.SizeOf(typeof(DXMEV)), 0)); DXContext.InputAssembler.SetIndexBuffer(_indexBuffer2[i], Format.R32_UInt, 0); DXContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; DXContext.InputAssembler.InputLayout = _inputLayout; _shader.SetParameter("worldMatrix", Matrix.Identity); _shader.SetParameter("viewMatrix", camera.ViewMatrix); _shader.SetParameter("projectionMatrix", camera.ProjMatrix); _shader.SetParameter("wvp", Matrix.Identity * camera.ViewMatrix * camera.ProjMatrix); EffectPass usePass = technique.GetPassByIndex(0); usePass.Apply(DXContext); DXContext.DrawIndexed(IndexCount2[i], 0, 0); usePass.Dispose(); usePass = technique.GetPassByIndex(1); usePass.Apply(DXContext); DXContext.DrawIndexed(IndexCount2[i], 0, 0); usePass.Dispose(); } } technique.Dispose(); }
public void Blit(Effect effect, EffectTechnique technique, params RenderTargetView[] targets) { view.Device10.OutputMerger.SetTargets(targets); /*foreach(var target in targets) * view.Device10.ClearRenderTargetView(target, Color.Black);*/ view.Device10.Rasterizer.SetViewports(new SlimDX.Direct3D10.Viewport { Width = ((Texture2D)targets[0].Resource).Description.Width, Height = ((Texture2D)targets[0].Resource).Description.Height, MaxZ = 1 }); var sp = view.Content.Acquire <Content.Mesh10>(screenPlane); sp.Setup(view.Device10, view.Content.Acquire <InputLayout>(new Graphics.Content.VertexStreamLayoutFromEffect { Signature10 = technique.GetPassByIndex(0).Description.Signature, Layout = sp.VertexStreamLayout })); technique.GetPassByIndex(0).Apply(); sp.Draw(view.Device10); view.Device10.OutputMerger.SetTargets((RenderTargetView)null); }
public override void DrawScene() { base.DrawScene(); ImmediateContext.ClearRenderTargetView(RenderTargetView, Color.LightSteelBlue); ImmediateContext.ClearDepthStencilView(DepthStencilView, DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, 1.0f, 0); ImmediateContext.InputAssembler.InputLayout = _inputLayout; ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; for (int i = 0; i < _tech.Description.PassCount; i++) { ImmediateContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(_landVB, VertexPC.Stride, 0)); ImmediateContext.InputAssembler.SetIndexBuffer(_landIB, Format.R32_UInt, 0); _fxWVP.SetMatrix(_gridWorld * _view * _proj); var pass = _tech.GetPassByIndex(i); pass.Apply(ImmediateContext); ImmediateContext.DrawIndexed(_gridIndexCount, 0, 0); ImmediateContext.Rasterizer.State = _wireframeRS; ImmediateContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(_wavesVB, VertexPC.Stride, 0)); ImmediateContext.InputAssembler.SetIndexBuffer(_wavesIB, Format.R32_UInt, 0); _fxWVP.SetMatrix(_wavesWorld * _view * _proj); pass.Apply(ImmediateContext); ImmediateContext.DrawIndexed(3 * _waves.TriangleCount, 0, 0); ImmediateContext.Rasterizer.State = null; } SwapChain.Present(0, PresentFlags.None); }
public override void DrawScene() { ImmediateContext.ClearRenderTargetView(RenderTargetView, Color.SteelBlue); ImmediateContext.ClearDepthStencilView(DepthStencilView, DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, 1, 0); ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; ImmediateContext.InputAssembler.InputLayout = inputLayout; var array = Util.GetArray(dirLights); fxDirLights.SetRawValue(new DataStream(array, false, false), array.Length); fxEyePosW.Set(eyePosW); for (int i = 0; i < effectTechnique.Description.PassCount; i++) { for (int j = 0; j < shapes.Count; j++) { ImmediateContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(shapes[j].VertexBuffer, Basic32.Stride, 0)); ImmediateContext.InputAssembler.SetIndexBuffer(shapes[j].IndexBuffer, Format.R32_UInt, 0); fxW.SetMatrix(shapes[j].ShapeWorld); fxWIT.SetMatrix(MathF.InverseTranspose(shapes[j].ShapeWorld)); array = Util.GetArray(((ShapeWithTextureBase)shapes[j]).ShapeMaterial); fxMaterial.SetRawValue(new DataStream(array, false, false), array.Length); fxDiffuseMap.SetResource(((ShapeWithTextureBase)shapes[j]).ShapeTexture); fxWVP.SetMatrix(shapes[j].ShapeWorld * view * projection); fxTT.SetMatrix(Matrix.Identity); effectTechnique.GetPassByIndex(i).Apply(ImmediateContext); ImmediateContext.DrawIndexed(shapes[j].IndexCount, 0, 0); } } SwapChain.Present(0, PresentFlags.None); }
public override void DrawScene() { base.DrawScene(); ImmediateContext.ClearRenderTargetView(RenderTargetView, Color.LightSteelBlue); ImmediateContext.ClearDepthStencilView(DepthStencilView, DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, 1.0f, 0); ImmediateContext.InputAssembler.InputLayout = _inputLayout; ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; ImmediateContext.Rasterizer.State = _wireframeRS; ImmediateContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(_vb, VertexPC.Stride, 0)); ImmediateContext.InputAssembler.SetIndexBuffer(_ib, Format.R32_UInt, 0); var wvp = _skullWorld * _view * _proj; _fx.SetWorldViewProj(wvp); for (var i = 0; i < _tech.Description.PassCount; i++) { _tech.GetPassByIndex(i).Apply(ImmediateContext); ImmediateContext.DrawIndexed(_skullIndexCount, 0, 0); } SwapChain.Present(0, PresentFlags.None); }
void drawBackground() { _device.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(_surfaceVertexBuffer, Marshal.SizeOf(typeof(Vertex)), 0)); _device.InputAssembler.SetIndexBuffer(_surfaceIndexBuffer, SharpDX.DXGI.Format.R32_UInt, 0); _technique.GetPassByIndex(2).Apply(); _device.DrawIndexed(_surfaceIndexCount, 0, 0); }
public override void Draw(EngineTime time, ref SharpDX.Matrix world, ref SharpDX.Matrix view, ref SharpDX.Matrix projection) { if (Material == null) { return; } var transformedWorld = Transformation * world; var ia = Engine.Device.ImmediateContext.InputAssembler; EffectTechnique tech = Material.CurrentTechnique; Material.Effect.Apply(ref world, ref view, ref projection); Material.Apply(Model.Parameters); var skinnedEffect = Material.Effect as Effects.SkinnedEffect; if (skinnedEffect != null) { var boneList = Model.Definition.BoneLists[Primitive.BaseMesh.Header.BoneListIndex]; Matrix[] jointMatrix = new Matrix[boneList.ActualCount]; for (var i = 0; i < boneList.ActualCount; ++i) { jointMatrix[i] = Model.JointMatrixArray[boneList.Bones[i]]; } skinnedEffect.JointMatrixArray = jointMatrix; } ia.PrimitiveTopology = SharpDX.Direct3D.PrimitiveTopology.TriangleList; ia.SetVertexBuffers(0, Primitive.VertexBufferBinding); ia.SetIndexBuffer(Primitive.IndexBuffer, SharpDX.DXGI.Format.R16_UInt, 0); InputLayout inputLayout = Material.Effect.GetInputLayout(tech.GetPassByIndex(0)); ia.InputLayout = inputLayout; for (var i = 0; i < tech.Description.PassCount; ++i) { var pass = tech.GetPassByIndex(i); pass.Apply(Engine.Device.ImmediateContext); if (Parts.Length == 0) { Engine.Device.ImmediateContext.DrawIndexed(Primitive.BaseMesh.Header.IndexCount, 0, 0); } else { foreach (var part in Parts) { part.Draw(Engine.Device); } } } }
void RenderScene() { lock (syncObject) { if (device == null) { CreateDeviceResources(); } if (!pause) { if (lastSavedDelta != 0) { startTime = Environment.TickCount - lastSavedDelta; lastSavedDelta = 0; } currentTimeVariation = (Environment.TickCount - startTime) / 6000.0f; worldMatrix = MatrixMath.MatrixTranslate(0, 0, currentTimeVariation); textBrush.Transform = Matrix3x2F.Translation(0, (4096f / 16f) * currentTimeVariation); } device.ClearDepthStencilView( depthStencilView, ClearOptions.Depth, 1, 0 ); // Clear the back buffer device.ClearRenderTargetView(renderTargetView, backColor); diffuseVariable.Resource = null; technique.GetPassByIndex(0).Apply(); // Draw the D2D content into our D3D surface RenderD2DContentIntoSurface(); diffuseVariable.Resource = textureResourceView; // Update variables worldMatrixVariable.Matrix = worldMatrix; // Set index buffer device.IA.IndexBuffer = new IndexBuffer(facesIndexBuffer, Format.R16UInt, 0); // Draw the scene technique.GetPassByIndex(0).Apply(); device.DrawIndexed((uint)Marshal.SizeOf(VertexArray.VerticesInstance), 0, 0); swapChain.Present(0, Microsoft.WindowsAPICodePack.DirectX.Graphics.PresentOptions.None); } }
public override void DrawScene() { base.DrawScene(); ImmediateContext.ClearRenderTargetView(RenderTargetView, Color.LightSteelBlue); ImmediateContext.ClearDepthStencilView(DepthStencilView, DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, 1.0f, 0); ImmediateContext.InputAssembler.InputLayout = _inputLayout; ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; var viewProj = _view * _proj; var array = Util.GetArray(_dirLight); _fxDirLight.SetRawValue(new DataStream(array, false, false), array.Length); array = Util.GetArray(_pointLight); _fxPointLight.SetRawValue(new DataStream(array, false, false), array.Length); array = Util.GetArray(_spotLight); _fxSpotLight.SetRawValue(new DataStream(array, false, false), array.Length); _fxEyePosW.Set(_eyePosW); for (int i = 0; i < _tech.Description.PassCount; i++) { ImmediateContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(_landVB, VertexPN.Stride, 0)); ImmediateContext.InputAssembler.SetIndexBuffer(_landIB, Format.R32_UInt, 0); _fxWVP.SetMatrix(_landWorld * viewProj); var invTranspose = Matrix.Invert(Matrix.Transpose(_landWorld)); _fxWIT.SetMatrix(invTranspose); _fxWorld.SetMatrix(_landWorld); array = Util.GetArray(_landMaterial); _fxMaterial.SetRawValue(new DataStream(array, false, false), array.Length); var pass = _tech.GetPassByIndex(i); pass.Apply(ImmediateContext); ImmediateContext.DrawIndexed(_landIndexCount, 0, 0); ImmediateContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(_waveVB, VertexPN.Stride, 0)); ImmediateContext.InputAssembler.SetIndexBuffer(_waveIB, Format.R32_UInt, 0); _fxWVP.SetMatrix(_wavesWorld * viewProj); invTranspose = Matrix.Invert(Matrix.Transpose(_wavesWorld)); _fxWIT.SetMatrix(invTranspose); _fxWorld.SetMatrix(_wavesWorld); array = Util.GetArray(_wavesMaterial); _fxMaterial.SetRawValue(new DataStream(array, false, false), array.Length); pass.Apply(ImmediateContext); ImmediateContext.DrawIndexed(3 * _waves.TriangleCount, 0, 0); } SwapChain.Present(0, PresentFlags.None); }
public void Load() { try { string path = Path.Combine(ShaderManager.ShadaresFolder, "EffectShaded.fx"); using (ShaderBytecode effectByteCode = ShaderBytecode.CompileFromFile( path, "Render", "fx_5_0", ShaderFlags.EnableStrictness, EffectFlags.None)) { effect = new Effect(DeviceManager.Instance.device, effectByteCode); technique = effect.GetTechniqueByIndex(0); pass = technique.GetPassByIndex(0); inputSignature = pass.Description.Signature; } layout = new InputLayout(DeviceManager.Instance.device, inputSignature, elements); tmat = effect.GetVariableByName("gWVP").AsMatrix(); invW = effect.GetVariableByName("inv_world_matrix").AsMatrix(); lightPos = effect.GetVariableByName("LightPosition").AsVector(); color = effect.GetVariableByName("color").AsVector(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } }
public void Draw(DeviceContext dc, EffectTechnique waveTech, Matrix viewProj) { for (var p = 0; p < waveTech.Description.PassCount; p++) { var world = _grid.World; var wit = MathF.InverseTranspose(world); var wvp = world * viewProj; Effects.WavesFX.SetWorld(world); Effects.WavesFX.SetWorldInvTranspose(wit); Effects.WavesFX.SetViewProj(viewProj); Effects.WavesFX.SetWorldViewProj(wvp); Effects.WavesFX.SetTexTransform(_grid.TexTransform); Effects.WavesFX.SetWaveDispTexTransform0(_wavesDispTexTransform0); Effects.WavesFX.SetWaveDispTexTransform1(_wavesDispTexTransform1); Effects.WavesFX.SetWaveNormalTexTransform0(_wavesNormalTexTransform0); Effects.WavesFX.SetWaveNormalTexTransform1(_wavesNormalTexTransform1); Effects.WavesFX.SetMaterial(_grid.Model.Materials[0]); Effects.WavesFX.SetDiffuseMap(_grid.Model.DiffuseMapSRV[0]); Effects.WavesFX.SetNormalMap0(NormalMap0); Effects.WavesFX.SetNormalMap1(NormalMap1); waveTech.GetPassByIndex(p).Apply(dc); _grid.Model.ModelMesh.Draw(dc, 0); } }
public DxEffect(SlimDX.Direct3D10.Device device, string shaderFileName = "scene.fx") { // using (var bytecode = ShaderBytecode.CompileFromFile(shaderFileName, "VShader", vs)) _dxDevice = device; _effect = Effect.FromFile(_dxDevice, shaderFileName, "fx_4_0", ShaderFlags.None, EffectFlags.None, null, null); _technique = _effect.GetTechniqueByName("Render"); //C++ Comparaison// technique = effect->GetTechniqueByName( "Render" ); _effectPass = _technique.GetPassByIndex(0); _worldVariable = _effect.GetVariableByName("World").AsMatrix(); //C++ Comparaison// worldVariable = effect->GetVariableByName( "World" )->AsMatrix(); _viewVariable = _effect.GetVariableByName("View").AsMatrix(); _projectionVariable = _effect.GetVariableByName("Projection").AsMatrix(); ShaderSignature signature = _effectPass.Description.Signature; _inputLayout = new InputLayout(_dxDevice, signature, new[] { //C++...// { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D10_INPUT_PER_VERTEX_DATA, 0 }, new InputElement("POSITION", 0, SlimDX.DXGI.Format.R32G32B32A32_Float, 0, 0), // 8bits = 1 bytes, so 32bits = 4 bytes, then R32+G32+B32+A32 = 4+4+4+4 = 16 bytes new InputElement("COLOR", 0, SlimDX.DXGI.Format.R32G32B32A32_Float, 16, 0) // 16 = total bytes from the element before, here it's "POSITION" }); _effect.Optimize(); }
private void DrawRoom(EffectTechnique activeTech, Matrix viewProj) { // Draw floor and walls for (int p = 0; p < activeTech.Description.PassCount; p++) { var pass = activeTech.GetPassByIndex(p); ImmediateContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(_roomVB, Basic32.Stride, 0)); var world = _roomWorld; var wit = MathF.InverseTranspose(world); var wvp = world * viewProj; Effects.BasicFX.SetWorld(world); Effects.BasicFX.SetWorldInvTranspose(wit); Effects.BasicFX.SetWorldViewProj(wvp); Effects.BasicFX.SetTexTransform(Matrix.Identity); Effects.BasicFX.SetMaterial(_roomMat); Effects.BasicFX.SetDiffuseMap(_floorDiffuseMapSRV); pass.Apply(ImmediateContext); ImmediateContext.Draw(6, 0); Effects.BasicFX.SetDiffuseMap(_wallDiffuseMapSRV); pass.Apply(ImmediateContext); ImmediateContext.Draw(18, 6); } }
private void DrawMirror(EffectTechnique activeTech, Matrix viewProj, Color4 blendFactor) { // draw mirror with transparency for (int p = 0; p < activeTech.Description.PassCount; p++) { var pass = activeTech.GetPassByIndex(p); ImmediateContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(_roomVB, Basic32.Stride, 0)); var world = _roomWorld; var wit = MathF.InverseTranspose(world); var wvp = world * viewProj; Effects.BasicFX.SetWorld(world); Effects.BasicFX.SetWorldInvTranspose(wit); Effects.BasicFX.SetWorldViewProj(wvp); Effects.BasicFX.SetTexTransform(Matrix.Identity); Effects.BasicFX.SetMaterial(_mirrorMat); Effects.BasicFX.SetDiffuseMap(_mirrorDiffuseMapSRV); ImmediateContext.OutputMerger.BlendState = RenderStates.TransparentBS; ImmediateContext.OutputMerger.BlendFactor = blendFactor; ImmediateContext.OutputMerger.BlendSampleMask = -1; pass.Apply(ImmediateContext); ImmediateContext.Draw(6, 24); } }
public void Render() { if (_particleSystem == null) { return; } if (_playing == false) { return; } if (_particleSystem.MaxParticles > _bufferSize) { _bufferSize = _particleSystem.MaxParticles + 500; DebugLog.Log("Buffer too small. Increasing size...", "Particle Emitter"); CreateBuffer(); } _textureVar.SetResource(_textureResourceView); _viewInvVar.SetMatrix(_context.Camera.ViewInverseMatrix); _viewProjVar.SetMatrix(_context.Camera.ViewProjectionMatrix); _context.Device.InputAssembler.InputLayout = _inputLayout; _context.Device.InputAssembler.PrimitiveTopology = PrimitiveTopology.PointList; _context.Device.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(_vertexBuffer, _vertexStride, 0)); for (int i = 0; i < _technique.Description.PassCount; ++i) { _technique.GetPassByIndex(i).Apply(); _context.Device.OutputMerger.BlendState = _blendStates[(int)_particleSystem.BlendMode]; _context.Device.Draw(_particleCount, 0); } }
public void Load() { try { string path = Path.Combine(ShaderManager.ShadaresFolder, "transformEffectWireframe.fx"); using (ShaderBytecode effectByteCode = ShaderBytecode.CompileFromFile( path, "Render", "fx_5_0", ShaderFlags.EnableStrictness, EffectFlags.None)) { effect = new Effect(DeviceManager.Instance.device, effectByteCode); technique = effect.GetTechniqueByIndex(0); pass = technique.GetPassByIndex(0); inputSignature = pass.Description.Signature; } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } var elements = new[] { new InputElement("POSITION", 0, Format.R32G32B32_Float, 0), }; layout = new InputLayout(DeviceManager.Instance.device, inputSignature, elements); tmat = effect.GetVariableByName("gWVP").AsMatrix(); wfCol = effect.GetVariableByName("colorWireframe").AsVector(); mCol = effect.GetVariableByName("colorSolid").AsVector(); }
private void LoadEffect(string shaderFileName) { _effect = Effect.FromFile(_dxDevice, shaderFileName, "fx_4_0", ShaderFlags.None, EffectFlags.None, null, null); _renderTech = _effect.GetTechniqueByName("Render"); //C++ Comparaison// technique = effect->GetTechniqueByName( "Render" ); _eyePosWVar = _effect.GetVariableByName("gEyePosW").AsVector(); _viewProjVar = _effect.GetVariableByName("gViewProj").AsMatrix(); _worldVar = _effect.GetVariableByName("gWorld").AsMatrix(); _fillColorVar = _effect.GetVariableByName("gFillColor").AsVector(); _lightVariable = _effect.GetVariableByName("gLight"); _imageMapVar = _effect.GetVariableByName("gImageMap").AsResource(); _depthMapVar = _effect.GetVariableByName("gDepthMap").AsResource(); _resVar = _effect.GetVariableByName("gRes").AsVector(); _depthToRgbVar = _effect.GetVariableByName("gDepthToRgb").AsMatrix(); _focalLengthDepthVar = _effect.GetVariableByName("gFocalLengthDepth").AsScalar(); _focalLengthImageVar = _effect.GetVariableByName("gFocalLengthImage").AsScalar(); ShaderSignature signature = _renderTech.GetPassByIndex(0).Description.Signature; _inputLayout = new InputLayout(_dxDevice, signature, new[] { new InputElement("POSITION", 0, SlimDX.DXGI.Format.R16G16_SInt, 0, 0) }); }
public override void Initialize() { base.Initialize(); try { using (ShaderBytecode effectByteCode = ShaderBytecode.CompileFromFile( "Shaders/transformEffectWireframe.fx", "Render", "fx_5_0", ShaderFlags.EnableStrictness, EffectFlags.None)) { effect = new SlimDX.Direct3D11.Effect(DeviceManager.Instance.device, effectByteCode); technique = effect.GetTechniqueByIndex(0); pass = technique.GetPassByIndex(0); inputSignature = pass.Description.Signature; } var elements = new[] { new InputElement("POSITION", 0, Format.R32G32B32_Float, 0), }; layout = new InputLayout(DeviceManager.Instance.device, inputSignature, elements); tmat = effect.GetVariableByName("gWVP").AsMatrix(); wfCol = effect.GetVariableByName("colorWireframe").AsVector(); mCol = effect.GetVariableByName("colorSolid").AsVector(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } }
void IScene.Render() { Device device = this.Host.Device; if (device == null) { return; } device.InputAssembler.InputLayout = this.VertexLayout; device.InputAssembler.PrimitiveTopology = SharpDX.Direct3D.PrimitiveTopology.TriangleStrip; device.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(this.Vertices, 32, 0)); device.InputAssembler.SetIndexBuffer(Indices, Format.R32_UInt, 0); device.Rasterizer.SetViewports(viewport); EffectTechnique technique = this.SimpleEffect.GetTechniqueByIndex(0); EffectPass pass = technique.GetPassByIndex(0); //EffectVectorVariable overlayColor = this.SimpleEffect.GetVariableBySemantic("OverlayColor").AsVector(); //overlayColor.Set(this.OverlayColor); for (int i = 0; i < technique.Description.PassCount; ++i) { pass.Apply(); for (int j = 0; j < nrTextures; j++) { device.PixelShader.SetShaderResource(j, textureView[j]); } device.DrawIndexed(nrIndices, 0, 0); } }
void IScene.Render() { Device device = this.Host.Device; if (device == null) { return; } device.InputAssembler.InputLayout = this.VertexLayout; device.InputAssembler.PrimitiveTopology = SharpDX.Direct3D.PrimitiveTopology.TriangleList; device.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(this.Vertices, 32, 0)); EffectTechnique technique = this.SimpleEffect.GetTechniqueByIndex(0); EffectPass pass = technique.GetPassByIndex(0); EffectVectorVariable overlayColor = this.SimpleEffect.GetVariableBySemantic("OverlayColor").AsVector(); overlayColor.Set(this.OverlayColor); for (int i = 0; i < technique.Description.PassCount; ++i) { pass.Apply(); device.Draw(3, 0); } }
public void Render(int arg) { D3DDevice.OutputMerger.SetTargets(SampleDepthView, SampleRenderView); D3DDevice.Rasterizer.SetViewports(new Viewport(0, 0, WindowWidth, WindowHeight, 0.0f, 1.0f)); D3DDevice.ClearDepthStencilView(SampleDepthView, DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, 1.0f, 0); float c = ((float)(arg % 1000)) / 999.0f; D3DDevice.ClearRenderTargetView(SampleRenderView, new SlimDX.Color4(1.0f, c, c, c)); D3DDevice.InputAssembler.SetInputLayout(SampleLayout); D3DDevice.InputAssembler.SetPrimitiveTopology(PrimitiveTopology.TriangleList); D3DDevice.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(SampleVertices, 32, 0)); EffectTechnique technique = SampleEffect.GetTechniqueByIndex(0); EffectPass pass = technique.GetPassByIndex(0); for (int i = 0; i < technique.Description.PassCount; ++i) { pass.Apply(); D3DDevice.Draw(3, 0); } D3DDevice.Flush(); }
public static void RenderFullScreenQuad(ShaderResourceView srv) { Shader e = WorldData.GetObject("FullScreenQuad.fx") as Shader; if (e == null) { return; } ShaderHelper.UpdateCommonEffectVars(e, Matrix.Identity); EffectTechnique t = e.EffectObj.GetTechniqueByName("FullScreen"); Game.Device.InputAssembler.SetPrimitiveTopology(PrimitiveTopology.TriangleList); for (int p = 0; p < t.Description.PassCount; p++) { EffectPass pass = t.GetPassByIndex(p); InputLayout l = ShaderHelper.ConstructInputLayout(MeshInputElements10.FullScreenQuad, pass.Description.Signature); Game.Device.InputAssembler.SetInputLayout(l); EffectResourceVariable diffTex = e.GetVar(ShaderHelper.DiffTex).AsResource(); if (diffTex != null) { diffTex.SetResource(srv); } pass.Apply(); Game.Device.Draw(3, 0); } }
public void Render(DxCamera camera) { if (_vertexBuffer == null || _vertexCount == 0) { return; } _worldVar.SetMatrix(Matrix.Scaling(Scale, -Scale, Scale)); _eyePosWVar.Set(camera.Eye); _viewProjVar.SetMatrix(camera.View * camera.Projection); _fillColorVar.Set(_fillColor); _resVar.Set(new Vector2(_xRes, _yRes)); _focalLengthDepthVar.Set(_focalLengthDepth); _focalLengthImageVar.Set(_focalLengthImage); _depthToRgbVar.SetMatrix(_depthToRgb); _depthMapVar.SetResource(_depthMapBufferRV); _imageMapVar.SetResource(_imageTextureRV); _dxDevice.InputAssembler.SetInputLayout(_inputLayout); _dxDevice.InputAssembler.SetPrimitiveTopology(PrimitiveTopology.PointList); _dxDevice.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(_vertexBuffer, PointVertex.SizeOf, 0)); for (int p = 0; p < _renderTech.Description.PassCount; p++) { _renderTech.GetPassByIndex(p).Apply(); _dxDevice.Draw(_vertexCount, 0); } }
public void Load() { try { using (ShaderBytecode effectByteCode = ShaderBytecode.CompileFromFile( Path.Combine(ShaderManager.ShadaresFolder, "ColorEffectInstanced.fx"), "Render", "fx_5_0", ShaderFlags.EnableStrictness, EffectFlags.None)) { effect = new Effect(DeviceManager.Instance.device, effectByteCode); technique = effect.GetTechniqueByIndex(0); pass = technique.GetPassByIndex(0); inputSignature = pass.Description.Signature; } layout = new InputLayout(DeviceManager.Instance.device, inputSignature, elements); tmat = effect.GetVariableByName("gWVP").AsMatrix(); Vector4 col = new Vector4(0, 0, 0, 1); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } }
private void LoadEffect(string fileName) { _effect = Effect.FromFile(_dxDevice, fileName, "fx_4_0", ShaderFlags.None, EffectFlags.None, null, null); _streamOutTech = _effect.GetTechniqueByName("StreamOutTech"); _drawTech = _effect.GetTechniqueByName("DrawTech"); _viewProjVar = _effect.GetVariableByName("gViewProj").AsMatrix(); _gameTimeVar = _effect.GetVariableByName("gGameTime").AsScalar(); _timeStepVar = _effect.GetVariableByName("gTimeStep").AsScalar(); _eyePosVar = _effect.GetVariableByName("gEyePosW").AsVector(); _emitPosVar = _effect.GetVariableByName("gEmitPosW").AsVector(); _emitDirVar = _effect.GetVariableByName("gEmitDirW").AsVector(); _texArrayVar = _effect.GetVariableByName("gTexArray").AsResource(); _randomTexVar = _effect.GetVariableByName("gRandomTex").AsResource(); ShaderSignature signature = _streamOutTech.GetPassByIndex(0).Description.Signature; _vertexLayout = new InputLayout(_dxDevice, signature, new[] { new InputElement("POSITION", 0, Format.R32G32B32_Float, 0, 0), new InputElement("VELOCITY", 0, Format.R32G32B32_Float, 12, 0), new InputElement("SIZE", 0, Format.R32G32_Float, 24, 0), new InputElement("AGE", 0, Format.R32_Float, 32, 0), new InputElement("TYPE", 0, Format.R32_UInt, 36, 0) }); }
public void Initialize(Device device) { _b = EffectUtils.Load(ShadersResourceManager.Manager, "DeferredTransparent"); E = new Effect(device, _b); TechDebug = E.GetTechniqueByName("Debug"); TechDebugPost = E.GetTechniqueByName("DebugPost"); TechDebugLighting = E.GetTechniqueByName("DebugLighting"); TechDebugLocalReflections = E.GetTechniqueByName("DebugLocalReflections"); TechCombine0 = E.GetTechniqueByName("Combine0"); for (var i = 0; i < TechDebug.Description.PassCount && InputSignaturePT == null; i++) { InputSignaturePT = TechDebug.GetPassByIndex(i).Description.Signature; } if (InputSignaturePT == null) { throw new System.Exception("input signature (DeferredTransparent, PT, Debug) == null"); } LayoutPT = new InputLayout(device, InputSignaturePT, InputLayouts.VerticePT.InputElementsValue); FxWorldViewProjInv = new EffectOnlyMatrixVariable(E.GetVariableByName("gWorldViewProjInv").AsMatrix()); FxBaseMap = E.GetVariableByName("gBaseMap").AsResource(); FxNormalMap = E.GetVariableByName("gNormalMap").AsResource(); FxMapsMap = E.GetVariableByName("gMapsMap").AsResource(); FxDepthMap = E.GetVariableByName("gDepthMap").AsResource(); FxLightMap = E.GetVariableByName("gLightMap").AsResource(); FxLocalReflectionMap = E.GetVariableByName("gLocalReflectionMap").AsResource(); FxReflectionCubemap = E.GetVariableByName("gReflectionCubemap").AsResource(); FxAmbientDown = E.GetVariableByName("gAmbientDown").AsVector(); FxAmbientRange = E.GetVariableByName("gAmbientRange").AsVector(); FxEyePosW = E.GetVariableByName("gEyePosW").AsVector(); }
public void Initialize(Device device) { _b = EffectUtils.Load(ShadersResourceManager.Manager, "DeferredPpSslr"); E = new Effect(device, _b); TechHabrahabrVersion = E.GetTechniqueByName("HabrahabrVersion"); for (var i = 0; i < TechHabrahabrVersion.Description.PassCount && InputSignaturePT == null; i++) { InputSignaturePT = TechHabrahabrVersion.GetPassByIndex(i).Description.Signature; } if (InputSignaturePT == null) { throw new System.Exception("input signature (DeferredPpSslr, PT, HabrahabrVersion) == null"); } LayoutPT = new InputLayout(device, InputSignaturePT, InputLayouts.VerticePT.InputElementsValue); FxWorldViewProjInv = new EffectOnlyMatrixVariable(E.GetVariableByName("gWorldViewProjInv").AsMatrix()); FxWorldViewProj = new EffectOnlyMatrixVariable(E.GetVariableByName("gWorldViewProj").AsMatrix()); FxBaseMap = E.GetVariableByName("gBaseMap").AsResource(); FxLightMap = E.GetVariableByName("gLightMap").AsResource(); FxNormalMap = E.GetVariableByName("gNormalMap").AsResource(); FxMapsMap = E.GetVariableByName("gMapsMap").AsResource(); FxDepthMap = E.GetVariableByName("gDepthMap").AsResource(); FxEyePosW = E.GetVariableByName("gEyePosW").AsVector(); }
public Renderable(string effectFilename, string techniqueName, SlimDX.Direct3D11.Device device, Matrix world, string textureFilename, Scene scene, SamplerState sampler, Vector2 screenSize, bool isCameraRelative) { mesh_ = Mesh.MakeQuadMesh(device, 1.0f); var effect = scene.LoadEffect(effectFilename); technique_ = effect.GetTechniqueByName(techniqueName); layout_ = new InputLayout(device, technique_.GetPassByIndex(0).Description.Signature, new[] { new InputElement("POSITION", 0, Format.R32G32B32A32_Float, 0, 0), new InputElement("COLOR", 0, Format.R32G32B32A32_Float, 16, 0) }); world_ = world; effect_ = effect; boundSamplers_ = new Dictionary <EffectSamplerVariable, SamplerState>(); boundTextures_ = new Dictionary <EffectResourceVariable, ShaderResourceView>(); var texture = scene.LoadTexture(textureFilename); BindSampler("mainSampler", sampler); BindTexture("quadImage", texture); m_screenSize = screenSize; m_isCameraRelative = isCameraRelative; IsVisible = true; // Visible by default }
private void MarkMirrorOnStencil(EffectTechnique activeTech, Matrix viewProj, Color4 blendFactor) { // Draw mirror to stencil for (int p = 0; p < activeTech.Description.PassCount; p++) { var pass = activeTech.GetPassByIndex(p); ImmediateContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(_roomVB, Basic32.Stride, 0)); var world = _roomWorld; var wit = MathF.InverseTranspose(world); var wvp = world * viewProj; Effects.BasicFX.SetWorld(world); Effects.BasicFX.SetWorldInvTranspose(wit); Effects.BasicFX.SetWorldViewProj(wvp); Effects.BasicFX.SetTexTransform(Matrix.Identity); ImmediateContext.OutputMerger.BlendState = RenderStates.NoRenderTargetWritesBS; ImmediateContext.OutputMerger.BlendFactor = blendFactor; ImmediateContext.OutputMerger.BlendSampleMask = -1; ImmediateContext.OutputMerger.DepthStencilState = RenderStates.MarkMirrorDSS; ImmediateContext.OutputMerger.DepthStencilReference = 1; pass.Apply(ImmediateContext); ImmediateContext.Draw(6, 24); ImmediateContext.OutputMerger.DepthStencilState = null; ImmediateContext.OutputMerger.DepthStencilReference = 0; ImmediateContext.OutputMerger.BlendState = null; ImmediateContext.OutputMerger.BlendFactor = blendFactor; ImmediateContext.OutputMerger.BlendSampleMask = -1; } }
public void Load() { try { string path = Path.Combine(ShaderManager.ShadaresFolder, "texture3DEffect.fx"); using (ShaderBytecode effectByteCode = ShaderBytecode.CompileFromFile( path, "Render", "fx_5_0", ShaderFlags.EnableStrictness, EffectFlags.None)) { effect = new Effect(DeviceManager.Instance.device, effectByteCode); technique = effect.GetTechniqueByIndex(0); pass = technique.GetPassByIndex(0); inputSignature = pass.Description.Signature; } tmat = effect.GetVariableByName("gWVP").AsMatrix(); WVInvmat = effect.GetVariableByName("gWVInv").AsMatrix(); WVmat = effect.GetVariableByName("gWV").AsMatrix(); textureResourceVariable = effect.GetVariableByName("Texture").AsShaderResource(); layout = new InputLayout(DeviceManager.Instance.device, inputSignature, elements); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } }
public UserInterfaceRenderCommand(Renderer renderer, Hud hud, RenderableNode rNode) : base(renderer, new UIMaterial(), new RenderableCollection(UIMaterial.ItemsDescription, new [] {rNode})) { CommandType = CommandType.UserInterfaceRenderCommand; CommandAttributes |= Graphics.CommandAttributes.MonoRendering; this.hud = hud; textMaterial = new TextMaterial(); this.rNode = rNode; this.rNode.RenderableObject.Material = Material; tNode = (TransformNode)rNode.Parent; UpdateSprites(hud.SpriteControls); textTechnique = textMaterial.EffectDescription.Technique; textPass = textTechnique.GetPassByIndex(textMaterial.EffectDescription.Pass); textLayout = new InputLayout(Game.Context.Device, textPass.Description.Signature, TextItems.Description.InputElements); }
/// <summary> /// Create our test RenderEffect. /// </summary> /// <param name="Device"></param> public TestEffect(Device Device) { this.Device = Device; ImmediateContext = Device.ImmediateContext; // Compile our shader... string compileErrors; var compiledShader = SlimDX.D3DCompiler.ShaderBytecode.CompileFromFile ( "../../Effects/TestEffect/TestEffect.fx", null, "fx_5_0", SlimDX.D3DCompiler.ShaderFlags.None, SlimDX.D3DCompiler.EffectFlags.None, null, null, out compileErrors ); if (compileErrors != null && compileErrors != "") { throw new EffectBuildException(compileErrors); } Effect = new Effect(Device, compiledShader); EffectTechnique = Effect.GetTechniqueByName("TestTechnique"); var vertexDesc = new[] { new InputElement("POSITION", 0, SlimDX.DXGI.Format.R32G32B32_Float, 0, 0, InputClassification.PerVertexData, 0), new InputElement("COLOR", 0, SlimDX.DXGI.Format.R32G32B32A32_Float, 12, 0, InputClassification.PerVertexData, 0) }; WorldViewProj = SlimDX.Matrix.Identity; CPO_WorldViewProj = Effect.GetVariableByName("gWorldViewProj").AsMatrix(); InputLayout = new InputLayout(Device, EffectTechnique.GetPassByIndex(0).Description.Signature, vertexDesc); Util.ReleaseCom(ref compiledShader); }
public void Initialize(Device device) { _b = EffectUtils.Load("DeferredGObject"); E = new Effect(device, _b); TechStandardDeferred = E.GetTechniqueByName("StandardDeferred"); TechStandardForward = E.GetTechniqueByName("StandardForward"); TechAmbientShadowDeferred = E.GetTechniqueByName("AmbientShadowDeferred"); TechTransparentDeferred = E.GetTechniqueByName("TransparentDeferred"); TechTransparentForward = E.GetTechniqueByName("TransparentForward"); TechTransparentMask = E.GetTechniqueByName("TransparentMask"); for (var i = 0; i < TechStandardDeferred.Description.PassCount && InputSignaturePNTG == null; i++) { InputSignaturePNTG = TechStandardDeferred.GetPassByIndex(i).Description.Signature; } if (InputSignaturePNTG == null) throw new System.Exception("input signature (DeferredGObject, PNTG, StandardDeferred) == null"); LayoutPNTG = new InputLayout(device, InputSignaturePNTG, InputLayouts.VerticePNTG.InputElementsValue); for (var i = 0; i < TechAmbientShadowDeferred.Description.PassCount && InputSignaturePT == null; i++) { InputSignaturePT = TechAmbientShadowDeferred.GetPassByIndex(i).Description.Signature; } if (InputSignaturePT == null) throw new System.Exception("input signature (DeferredGObject, PT, AmbientShadowDeferred) == null"); LayoutPT = new InputLayout(device, InputSignaturePT, InputLayouts.VerticePT.InputElementsValue); FxWorld = E.GetVariableByName("gWorld").AsMatrix(); FxWorldInvTranspose = E.GetVariableByName("gWorldInvTranspose").AsMatrix(); FxWorldViewProj = E.GetVariableByName("gWorldViewProj").AsMatrix(); FxDiffuseMap = E.GetVariableByName("gDiffuseMap").AsResource(); FxNormalMap = E.GetVariableByName("gNormalMap").AsResource(); FxMapsMap = E.GetVariableByName("gMapsMap").AsResource(); FxDetailsMap = E.GetVariableByName("gDetailsMap").AsResource(); FxDetailsNormalMap = E.GetVariableByName("gDetailsNormalMap").AsResource(); FxReflectionCubemap = E.GetVariableByName("gReflectionCubemap").AsResource(); FxEyePosW = E.GetVariableByName("gEyePosW").AsVector(); FxAmbientDown = E.GetVariableByName("gAmbientDown").AsVector(); FxAmbientRange = E.GetVariableByName("gAmbientRange").AsVector(); FxLightColor = E.GetVariableByName("gLightColor").AsVector(); FxDirectionalLightDirection = E.GetVariableByName("gDirectionalLightDirection").AsVector(); FxMaterial = E.GetVariableByName("gMaterial"); }
private void CompileShader(Device device, string fullPath) { _File = fullPath; _CompiledEffect = ShaderBytecode.CompileFromFile(_File, "SpriteTech", "fx_5_0"); if (_CompiledEffect.HasErrors) { Log.Write("Shader compilation failed with status code: {0} - {1} | Path: {2}", _CompiledEffect.ResultCode.Code, _CompiledEffect.Message, _File); return; } _Effect = new Effect(device, _CompiledEffect); _EffectTechnique = _Effect.GetTechniqueByName("SpriteTech"); _SpriteMap = _Effect.GetVariableByName("SpriteTex").AsShaderResource(); var _EffectPass = _EffectTechnique.GetPassByIndex(0).Description.Signature; InputElement[] _LayoutDescription = { new InputElement("POSITION", 0, SharpDX.DXGI.Format.R32G32B32_Float, 0, 0, InputClassification.PerVertexData, 0), new InputElement("TEXCOORD", 0, SharpDX.DXGI.Format.R32G32_Float, 12, 0, InputClassification.PerVertexData, 0), new InputElement("COLOR", 0, SharpDX.DXGI.Format.R32G32B32A32_Float, 20, 0, InputClassification.PerVertexData, 0) }; _InputLayout = new InputLayout(device, _EffectPass, _LayoutDescription); }
/// <summary> /// Create Direct3D device and swap chain /// </summary> protected void InitDevice() { device = D3DDevice.CreateDeviceAndSwapChain(directControl.Handle, out swapChain); SetViews(); // Create the effect using (FileStream effectStream = File.OpenRead("Tutorial02.fxo")) { effect = device.CreateEffectFromCompiledBinary(new BinaryReader(effectStream)); } // Obtain the technique technique = effect.GetTechniqueByName("Render"); // Define the input layout InputElementDescription[] layout = { new InputElementDescription() { SemanticName = "POSITION", SemanticIndex = 0, Format = Format.R32G32B32_FLOAT, InputSlot = 0, AlignedByteOffset = 0, InputSlotClass = InputClassification.PerVertexData, InstanceDataStepRate = 0 } }; PassDescription passDesc = technique.GetPassByIndex(0).Description; vertexLayout = device.CreateInputLayout( layout, passDesc.InputAssemblerInputSignature, passDesc.InputAssemblerInputSignatureSize); device.IA.SetInputLayout(vertexLayout); SimpleVertexArray vertex = new SimpleVertexArray(); BufferDescription bd = new BufferDescription() { Usage = Usage.Default, ByteWidth = (uint)Marshal.SizeOf(vertex), BindFlags = BindFlag.VertexBuffer, CpuAccessFlags = 0, MiscFlags = 0 }; IntPtr vertexData = Marshal.AllocCoTaskMem(Marshal.SizeOf(vertex)); Marshal.StructureToPtr(vertex, vertexData, false); SubresourceData InitData = new SubresourceData() { SysMem = vertexData, SysMemPitch = 0, SysMemSlicePitch = 0 }; //D3DBuffer buffer = null; vertexBuffer = device.CreateBuffer(bd, InitData); // Set vertex buffer uint stride = (uint)Marshal.SizeOf(typeof(Vector3F)); uint offset = 0; device.IA.SetVertexBuffers(0, new Collection<D3DBuffer>() { vertexBuffer }, new uint[] { stride }, new uint[] { offset }); // Set primitive topology device.IA.SetPrimitiveTopology(PrimitiveTopology.TriangleList); Marshal.FreeCoTaskMem(vertexData); }
public void EffectsInitialization() { var effectByteCode = ShaderBytecode.CompileFromFile("C:\\Users\\Nat�lia\\Documents\\MPM\\5. ro�n�k\\Diplomovka\\grafika3D\\Grafika3D\\effect.fx", "fx_5_0", ShaderFlags.None, EffectFlags.None); effect = new Effect(device, effectByteCode); techniquePosition = effect.GetTechniqueByName("Position"); passPosition = techniquePosition.GetPassByIndex(0); techniqueTexture = effect.GetTechniqueByName("Texture"); passTextureXY = techniqueTexture.GetPassByIndex(0); passTextureYZ = techniqueTexture.GetPassByIndex(1); passTextureZX = techniqueTexture.GetPassByIndex(2); var signature = passPosition.Description.Signature; inputLayout = new InputLayout(device, signature, new[] { new InputElement("POSITION", 0, Format.R32G32B32_Float, 0, 0), new InputElement("COLOR", 0, Format.R32G32B32A32_Float, 12, 0) }); var signatureTex = passTextureXY.Description.Signature; inputLayoutTex = new InputLayout(device, signatureTex, new[] { new InputElement("POSITION", 0, Format.R32G32B32_Float, 0, 0), new InputElement("TEXCOORD", 0, Format.R32G32_Float, 12, 0) }); var samplerState = new SamplerState(device, new SamplerStateDescription() { AddressU = TextureAddressMode.Wrap, AddressV = TextureAddressMode.Wrap, AddressW = TextureAddressMode.Wrap, Filter = Filter.MinMagMipLinear, }); var effectSampler = effect.GetVariableByName("Sampler").AsSampler(); effectSampler.SetSampler(0, samplerState); }
public void Initialize(Device device) { _b = EffectUtils.Load("SpecialUv"); E = new Effect(device, _b); TechMain = E.GetTechniqueByName("Main"); for (var i = 0; i < TechMain.Description.PassCount && InputSignaturePNTG == null; i++) { InputSignaturePNTG = TechMain.GetPassByIndex(i).Description.Signature; } if (InputSignaturePNTG == null) throw new System.Exception("input signature (SpecialUv, PNTG, Main) == null"); LayoutPNTG = new InputLayout(device, InputSignaturePNTG, InputLayouts.VerticePNTG.InputElementsValue); FxOffset = E.GetVariableByName("gOffset").AsVector(); }
public TerrainSubrender(BTerrain terrain, RenderManager renderer, IRunManager manager) : base(manager) { Renderer = renderer; FrustumCheck = Manager.Opts.Get<bool>("rndr_terrain_frustumCheck"); NotifyHandlers.Add(Manager.Opts.RegisterChangeNotification("rndr_terrain_frustumCheck", delegate(string key, object value) { FrustumCheck = (bool)value; })); try { Lods = Manager.Opts.Get<int>("rndr_terrain_lods"); if (Lods > 1) { LodDistancesSquared = new float[Lods - 1]; LodFactors = new int[Lods -1]; var list = Manager.Opts.Get<List<float>>("rndr_terrain_lodDistances"); var list2 = Manager.Opts.Get<List<int>>("rndr_terrain_lodFactors"); for (int i = 0; i < Lods-1; i++) { LodDistancesSquared[i] = list[i] * list[i]; LodFactors[i] = list2[i]; } } } catch (Exception) { Console.WriteLine("[Error] Could not read terrain-LOD settings, LOD disabled!"); Lods = 1; LodDistancesSquared = null; } var shaderdeffile = Manager.Files.Get(@"Shaders\Terrain.hlsl", false); var bbuffer = new byte[shaderdeffile.Length]; shaderdeffile.Read(bbuffer, 0, bbuffer.Length); shaderdeffile.Dispose(); var bytecode = ShaderBytecode.Compile( Encoding.ASCII.GetBytes( Encoding.ASCII.GetString(bbuffer).Replace("%TEXTURECOUNT%", "2").Replace("%OVERLAYCOUNT%", "1")) , "fx_5_0"); bbuffer = null; Effect = new Effect(Renderer.D3DDevice, bytecode); bytecode.Dispose(); _technique = Effect.GetTechniqueByName("Terrain"); _pass = _technique.GetPassByIndex(0); _vertexLayout = new InputLayout(Renderer.D3DDevice, _pass.Description.Signature, new[] { new InputElement("POSITION", 0, Format.R32G32B32_Float, 0), new InputElement("NORMAL", 0, Format.R32G32B32_Float, 0), new InputElement("TEXCOORD",0,Format.R32G32_Float, 0) }); Effect.GetVariableByName("texRepeat").AsScalar().Set(new[] { 0.1f, 0.1f }); var sampleMode = SamplerState.FromDescription(Renderer.D3DDevice, new SamplerDescription() { AddressU = TextureAddressMode.Wrap, AddressV = TextureAddressMode.Wrap, AddressW = TextureAddressMode.Clamp, BorderColor = new Color4(0, 0, 0, 0), Filter = Filter.MinMagMipLinear, ComparisonFunction = Comparison.Always, MipLodBias = 0f, MaximumAnisotropy = 8, MinimumLod = 0f, MaximumLod = float.MaxValue }); Effect.GetVariableByName("textureSampler").AsSampler().SetSamplerState(0, sampleMode); Effect.GetVariableByName("alphaSampler").AsSampler().SetSamplerState(0, sampleMode); UpdateStaticVars(); CurrentTerrain = terrain; QuadEdgeLength = Manager.Opts.Get<int>("rndr_terrain_quadVerticesPerEdge"); var verticesX = terrain.PointsX; var verticesZ = terrain.PointsZ; var quadsX = (int)Math.Ceiling((double)(verticesX - 1) / (QuadEdgeLength - 1)); var quadsZ = (int)Math.Ceiling((double)(verticesZ - 1) / (QuadEdgeLength - 1)); #if DEBUG if ((verticesX - 1) % (QuadEdgeLength - 1) != 0) Console.WriteLine("[Info] The terrain X-Vertices are no multiple of the quad-length, filling to fit IndexBuffers"); if ((verticesZ - 1) % (QuadEdgeLength - 1) != 0) Console.WriteLine("[Info] The terrain Z-Vertices are no multiple of the quad-length, filling to fit IndexBuffers"); #endif Quads = new Quad[quadsX*quadsZ]; QuadCountZ = quadsZ; for (int i = 0; i < quadsX; i++) { for (int j = 0; j < quadsZ; j++) { Quads[i * quadsZ + j] = new Quad(i * (QuadEdgeLength - 1), (i + 1) * (QuadEdgeLength - 1), j * (QuadEdgeLength - 1), (j + 1) * (QuadEdgeLength - 1), CurrentTerrain, Renderer); } } FrustumTree = new QuadContainer(0,quadsX-1, 0, quadsZ-1, ref Quads, QuadCountZ); QuadLods = new int[Quads.Length]; Indexbuffers = new Dictionary<uint, KeyValuePair<Buffer, int>>(); }
public MenuEffect(Device device) { Device = device; ImmediateContext = Device.ImmediateContext; // Compile the shader... string compileErrors; var compiledShader = SlimDX.D3DCompiler.ShaderBytecode.CompileFromFile ( "../../Effects/MenuEffect/MenuEffect.fx", null, "fx_5_0", SlimDX.D3DCompiler.ShaderFlags.None, SlimDX.D3DCompiler.EffectFlags.None, null, null, out compileErrors ); if (compileErrors != null && compileErrors != "") { throw new EffectBuildException(compileErrors); } Effect = new Effect(Device, compiledShader); Technique = Effect.GetTechniqueByName("MenuTechnique"); var vertexDesc = new[] { new InputElement("POSITION", 0, SlimDX.DXGI.Format.R32G32_Float, 0, 0, InputClassification.PerVertexData, 0), new InputElement("TEXCOORD", 0, SlimDX.DXGI.Format.R32G32_Float, 8, 0, InputClassification.PerVertexData, 0) }; CPO_BlendColor = Effect.GetVariableByName("gBlendColor").AsVector(); SRV_DiffuseMap = Effect.GetVariableByName("gDiffuseMap").AsResource(); InputLayout = new InputLayout(Device, Technique.GetPassByIndex(0).Description.Signature, vertexDesc); Util.ReleaseCom(ref compiledShader); DepthStencilStateDescription dssd = new DepthStencilStateDescription() { IsDepthEnabled = false, DepthWriteMask = DepthWriteMask.All, DepthComparison = Comparison.Less, IsStencilEnabled = true, StencilReadMask = 0xFF, StencilWriteMask = 0xFF, FrontFace = new DepthStencilOperationDescription() { FailOperation = StencilOperation.Keep, PassOperation = StencilOperation.Keep, DepthFailOperation = StencilOperation.Increment, Comparison = Comparison.Always }, BackFace = new DepthStencilOperationDescription() { FailOperation = StencilOperation.Keep, PassOperation = StencilOperation.Keep, Comparison = Comparison.Always, DepthFailOperation = StencilOperation.Decrement } }; DepthDisabledState = DepthStencilState.FromDescription(Device, dssd); }
private void LoadEffect(string shaderFileName = @"Assets\light.fx") { _effect = Effect.FromFile(_dxDevice, shaderFileName, "fx_4_0", ShaderFlags.None, EffectFlags.None, null, null); _technique = _effect.GetTechniqueByName("Render"); //C++ Comparaison// technique = effect->GetTechniqueByName( "Render" ); _effectPass = _technique.GetPassByIndex(0); ShaderSignature signature = _effectPass.Description.Signature; _inputLayout = new InputLayout(_dxDevice, signature, new[] { new InputElement("POSITION", 0, SlimDX.DXGI.Format.R32G32B32A32_Float, 0, 0), new InputElement("NORMAL", 0, SlimDX.DXGI.Format.R32G32B32A32_Float, 16, 0), new InputElement("TEXCOORD", 0, SlimDX.DXGI.Format.R32G32_Float, 32, 0) }); }
private void DrawSkullShadowReflection(EffectTechnique activeSkullTech, Matrix viewProj, Color4 blendFactor) { // draw skull shadow for (int p = 0; p < activeSkullTech.Description.PassCount; p++) { var pass = activeSkullTech.GetPassByIndex(p); ImmediateContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(_skullVB, Basic32.Stride, 0)); ImmediateContext.InputAssembler.SetIndexBuffer(_skullIB, Format.R32_UInt, 0); var shadowPlane = new Plane(new Vector3(0, 1, 0), 0.0f); var toMainLight = -_dirLights[0].Direction; var s = Matrix.Shadow(new Vector4(toMainLight, 0), shadowPlane); var shadowOffsetY = Matrix.Translation(0, 0.001f, 0); var mirrorPlane = new Plane(new Vector3(0, 0, 1), 0); var r = Matrix.Reflection(mirrorPlane); var world = _skullWorld * s * shadowOffsetY * r; var wit = MathF.InverseTranspose(world); var wvp = world * viewProj; Effects.BasicFX.SetWorld(world); Effects.BasicFX.SetWorldInvTranspose(wit); Effects.BasicFX.SetWorldViewProj(wvp); Effects.BasicFX.SetMaterial(_shadowMat); ImmediateContext.OutputMerger.BlendState = RenderStates.TransparentBS; ImmediateContext.OutputMerger.BlendFactor = blendFactor; ImmediateContext.OutputMerger.BlendSampleMask = -1; var oldLightDirections = _dirLights.Select(l => l.Direction).ToArray(); for (int i = 0; i < _dirLights.Length; i++) { var l = _dirLights[i]; var lightDir = l.Direction; var reflectedLightDir = Vector3.Transform(lightDir, r); _dirLights[i].Direction = new Vector3(reflectedLightDir.X, reflectedLightDir.Y, reflectedLightDir.Z); } Effects.BasicFX.SetDirLights(_dirLights); ImmediateContext.Rasterizer.State = RenderStates.CullClockwiseRS; ImmediateContext.OutputMerger.DepthStencilState = RenderStates.NoDoubleBlendDSS; ImmediateContext.OutputMerger.DepthStencilReference = 1; pass.Apply(ImmediateContext); ImmediateContext.DrawIndexed(_skullIndexCount, 0, 0); ImmediateContext.Rasterizer.State = null; ImmediateContext.OutputMerger.DepthStencilState = null; ImmediateContext.OutputMerger.DepthStencilReference = 0; ImmediateContext.OutputMerger.BlendState = null; ImmediateContext.OutputMerger.BlendFactor = blendFactor; ImmediateContext.OutputMerger.BlendSampleMask = -1; for (int i = 0; i < oldLightDirections.Length; i++) { _dirLights[i].Direction = oldLightDirections[i]; } Effects.BasicFX.SetDirLights(_dirLights); } }
private void DrawSkullReflection(EffectTechnique activeSkullTech, Matrix viewProj) { // Draw skull reflection for (int p = 0; p < activeSkullTech.Description.PassCount; p++) { var pass = activeSkullTech.GetPassByIndex(p); ImmediateContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(_skullVB, Basic32.Stride, 0)); ImmediateContext.InputAssembler.SetIndexBuffer(_skullIB, Format.R32_UInt, 0); var mirrorPlane = new Plane(new Vector3(0, 0, 1), 0); var r = Matrix.Reflection(mirrorPlane); var world = _skullWorld * r; var wit = MathF.InverseTranspose(world); var wvp = world * viewProj; Effects.BasicFX.SetWorld(world); Effects.BasicFX.SetWorldInvTranspose(wit); Effects.BasicFX.SetWorldViewProj(wvp); Effects.BasicFX.SetMaterial(_skullMat); var oldLightDirections = _dirLights.Select(l => l.Direction).ToArray(); for (int i = 0; i < _dirLights.Length; i++) { var l = _dirLights[i]; var lightDir = l.Direction; var reflectedLightDir = Vector3.Transform(lightDir, r); _dirLights[i].Direction = new Vector3(reflectedLightDir.X, reflectedLightDir.Y, reflectedLightDir.Z); } Effects.BasicFX.SetDirLights(_dirLights); ImmediateContext.Rasterizer.State = RenderStates.CullClockwiseRS; ImmediateContext.OutputMerger.DepthStencilState = RenderStates.DrawReflectionDSS; ImmediateContext.OutputMerger.DepthStencilReference = 1; pass.Apply(ImmediateContext); ImmediateContext.DrawIndexed(_skullIndexCount, 0, 0); ImmediateContext.Rasterizer.State = null; ImmediateContext.OutputMerger.DepthStencilState = null; ImmediateContext.OutputMerger.DepthStencilReference = 0; for (int i = 0; i < oldLightDirections.Length; i++) { _dirLights[i].Direction = oldLightDirections[i]; } Effects.BasicFX.SetDirLights(_dirLights); } }
private void DrawSkull(EffectTechnique activeSkullTech, Matrix viewProj) { // Draw skull for (int p = 0; p < activeSkullTech.Description.PassCount; p ++) { var pass = activeSkullTech.GetPassByIndex(p); ImmediateContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(_skullVB, Basic32.Stride, 0)); ImmediateContext.InputAssembler.SetIndexBuffer(_skullIB, Format.R32_UInt, 0); var world = _skullWorld; var wit = MathF.InverseTranspose(world); var wvp = world * viewProj; Effects.BasicFX.SetWorld(world); Effects.BasicFX.SetWorldInvTranspose(wit); Effects.BasicFX.SetWorldViewProj(wvp); Effects.BasicFX.SetMaterial(_skullMat); pass.Apply(ImmediateContext); ImmediateContext.DrawIndexed(_skullIndexCount, 0, 0); } }
public void Initialize(Device device) { _b = EffectUtils.Load("SpecialTrackMap"); E = new Effect(device, _b); TechMain = E.GetTechniqueByName("Main"); TechPp = E.GetTechniqueByName("Pp"); TechFinal = E.GetTechniqueByName("Final"); TechFinalCheckers = E.GetTechniqueByName("FinalCheckers"); TechPpHorizontalBlur = E.GetTechniqueByName("PpHorizontalBlur"); TechPpVerticalBlur = E.GetTechniqueByName("PpVerticalBlur"); for (var i = 0; i < TechMain.Description.PassCount && InputSignaturePNTG == null; i++) { InputSignaturePNTG = TechMain.GetPassByIndex(i).Description.Signature; } if (InputSignaturePNTG == null) throw new System.Exception("input signature (SpecialTrackMap, PNTG, Main) == null"); LayoutPNTG = new InputLayout(device, InputSignaturePNTG, InputLayouts.VerticePNTG.InputElementsValue); for (var i = 0; i < TechPp.Description.PassCount && InputSignaturePT == null; i++) { InputSignaturePT = TechPp.GetPassByIndex(i).Description.Signature; } if (InputSignaturePT == null) throw new System.Exception("input signature (SpecialTrackMap, PT, Pp) == null"); LayoutPT = new InputLayout(device, InputSignaturePT, InputLayouts.VerticePT.InputElementsValue); FxWorldViewProj = E.GetVariableByName("gWorldViewProj").AsMatrix(); FxWorldInvTranspose = E.GetVariableByName("gWorldInvTranspose").AsMatrix(); FxInputMap = E.GetVariableByName("gInputMap").AsResource(); FxScreenSize = E.GetVariableByName("gScreenSize").AsVector(); }
void CreateDeviceResources() { uint width = (uint) host.ActualWidth; uint height = (uint) host.ActualHeight; // If we don't have a device, need to create one now and all // accompanying D3D resources. CreateDevice(); DXGIFactory dxgiFactory = DXGIFactory.CreateFactory(); SwapChainDescription swapDesc = new SwapChainDescription(); swapDesc.BufferDescription.Width = width; swapDesc.BufferDescription.Height = height; swapDesc.BufferDescription.Format = Format.R8G8B8A8_UNORM; swapDesc.BufferDescription.RefreshRate.Numerator = 60; swapDesc.BufferDescription.RefreshRate.Denominator = 1; swapDesc.SampleDescription.Count = 1; swapDesc.SampleDescription.Quality = 0; swapDesc.BufferUsage = UsageOption.RenderTargetOutput; swapDesc.BufferCount = 1; swapDesc.OutputWindowHandle = host.Handle; swapDesc.Windowed = true; swapChain = dxgiFactory.CreateSwapChain( device, swapDesc); // Create rasterizer state object RasterizerDescription rsDesc = new RasterizerDescription(); rsDesc.AntialiasedLineEnable = false; rsDesc.CullMode = CullMode.None; rsDesc.DepthBias = 0; rsDesc.DepthBiasClamp = 0; rsDesc.DepthClipEnable = true; rsDesc.FillMode = D3D10.FillMode.Solid; rsDesc.FrontCounterClockwise = false; // Must be FALSE for 10on9 rsDesc.MultisampleEnable = false; rsDesc.ScissorEnable = false; rsDesc.SlopeScaledDepthBias = 0; rasterizerState = device.CreateRasterizerState( rsDesc); device.RS.SetState( rasterizerState ); // If we don't have a D2D render target, need to create all of the resources // required to render to one here. // Ensure that nobody is holding onto one of the old resources device.OM.SetRenderTargets(new RenderTargetView[] {null}); InitializeDepthStencil(width, height); // Create views on the RT buffers and set them on the device RenderTargetViewDescription renderDesc = new RenderTargetViewDescription(); renderDesc.Format = Format.R8G8B8A8_UNORM; renderDesc.ViewDimension = RenderTargetViewDimension.Texture2D; renderDesc.Texture2D.MipSlice = 0; using (D3DResource spBackBufferResource = swapChain.GetBuffer<D3DResource>(0)) { renderTargetView = device.CreateRenderTargetView( spBackBufferResource, renderDesc); } device.OM.SetRenderTargets(new RenderTargetView[] {renderTargetView}, depthStencilView); SetViewport(width, height); // Create a D2D render target which can draw into the surface in the swap chain RenderTargetProperties props = new RenderTargetProperties( RenderTargetType.Default, new PixelFormat(Format.Unknown, AlphaMode.Premultiplied), 96, 96, RenderTargetUsage.None, FeatureLevel.Default); // Allocate a offscreen D3D surface for D2D to render our 2D content into Texture2DDescription tex2DDescription; tex2DDescription.ArraySize = 1; tex2DDescription.BindFlags = BindFlag.RenderTarget | BindFlag.ShaderResource; tex2DDescription.CpuAccessFlags = CpuAccessFlag.Unspecified; tex2DDescription.Format = Format.R8G8B8A8_UNORM; tex2DDescription.Height = 4096; tex2DDescription.Width = 512; tex2DDescription.MipLevels = 1; tex2DDescription.MiscFlags = 0; tex2DDescription.SampleDescription.Count = 1; tex2DDescription.SampleDescription.Quality = 0; tex2DDescription.Usage = Usage.Default; offscreenTexture = device.CreateTexture2D(tex2DDescription); using (Surface dxgiSurface = offscreenTexture.GetDXGISurface()) { // Create a D2D render target which can draw into our offscreen D3D surface renderTarget = d2DFactory.CreateDxgiSurfaceRenderTarget( dxgiSurface, props); } PixelFormat alphaOnlyFormat = new PixelFormat(Format.A8_UNORM, AlphaMode.Premultiplied); opacityRenderTarget = renderTarget.CreateCompatibleRenderTarget(CompatibleRenderTargetOptions.None, alphaOnlyFormat); // Load pixel shader // Open precompiled vertex shader // This file was compiled using DirectX's SDK Shader compilation tool: // fxc.exe /T fx_4_0 /Fo SciFiText.fxo SciFiText.fx shader = LoadResourceShader(device, "SciFiTextDemo.SciFiText.fxo"); // Obtain the technique technique = shader.GetTechniqueByName("Render"); // Obtain the variables worldMatrixVariable = shader.GetVariableByName("World").AsMatrix(); viewMatrixVariable = shader.GetVariableByName("View").AsMatrix(); projectionMarixVariable = shader.GetVariableByName("Projection").AsMatrix(); diffuseVariable = shader.GetVariableByName("txDiffuse").AsShaderResource(); // Create the input layout PassDescription passDesc = new PassDescription(); passDesc = technique.GetPassByIndex(0).Description; vertexLayout = device.CreateInputLayout( inputLayoutDescriptions, passDesc.InputAssemblerInputSignature, passDesc.InputAssemblerInputSignatureSize ); // Set the input layout device.IA.SetInputLayout( vertexLayout ); IntPtr verticesDataPtr = Marshal.AllocHGlobal(Marshal.SizeOf(VertexArray.VerticesInstance)); Marshal.StructureToPtr(VertexArray.VerticesInstance, verticesDataPtr, true); BufferDescription bd = new BufferDescription(); bd.Usage = Usage.Default; bd.ByteWidth = (uint) Marshal.SizeOf(VertexArray.VerticesInstance); bd.BindFlags = BindFlag.VertexBuffer; bd.CpuAccessFlags = CpuAccessFlag.Unspecified; bd.MiscFlags = ResourceMiscFlag.Undefined; SubresourceData InitData = new SubresourceData() { SysMem = verticesDataPtr }; vertexBuffer = device.CreateBuffer( bd, InitData ); Marshal.FreeHGlobal(verticesDataPtr); // Set vertex buffer uint stride = (uint) Marshal.SizeOf(typeof (SimpleVertex)); uint offset = 0; device.IA.SetVertexBuffers( 0, new D3DBuffer[] {vertexBuffer}, new uint[] {stride}, new uint[] {offset} ); IntPtr indicesDataPtr = Marshal.AllocHGlobal(Marshal.SizeOf(VertexArray.IndicesInstance)); Marshal.StructureToPtr(VertexArray.IndicesInstance, indicesDataPtr, true); bd.Usage = Usage.Default; bd.ByteWidth = (uint) Marshal.SizeOf(VertexArray.IndicesInstance); bd.BindFlags = BindFlag.IndexBuffer; bd.CpuAccessFlags = 0; bd.MiscFlags = 0; InitData.SysMem = indicesDataPtr; facesIndexBuffer = device.CreateBuffer( bd, InitData ); Marshal.FreeHGlobal(indicesDataPtr); // Set primitive topology device.IA.SetPrimitiveTopology(PrimitiveTopology.TriangleList); // Convert the D2D texture into a Shader Resource View textureResourceView = device.CreateShaderResourceView( offscreenTexture); // Initialize the world matrices worldMatrix = Matrix4x4F.Identity; // Initialize the view matrix Vector3F Eye = new Vector3F(0.0f, 0.0f, 13.0f); Vector3F At = new Vector3F(0.0f, -3.5f, 45.0f); Vector3F Up = new Vector3F(0.0f, 1.0f, 0.0f); viewMatrix = Camera.MatrixLookAtLH(Eye, At, Up); // Initialize the projection matrix projectionMatrix = Camera.MatrixPerspectiveFovLH( (float) Math.PI*0.1f, width/(float) height, 0.1f, 100.0f); // Update Variables that never change viewMatrixVariable.Matrix = viewMatrix; projectionMarixVariable.Matrix = projectionMatrix; GradientStop[] gradientStops = { new GradientStop(0.0f, new ColorF(Colors.Yellow)), new GradientStop(1.0f, new ColorF(Colors.Black)) }; GradientStopCollection spGradientStopCollection = renderTarget.CreateGradientStopCollection( gradientStops, Gamma.Gamma_22, ExtendMode.Clamp); // Create a linear gradient brush for text textBrush = renderTarget.CreateLinearGradientBrush( new LinearGradientBrushProperties(new Point2F(0, 0), new Point2F(0, -2048)), spGradientStopCollection ); }
private void DrawSkullShadow(EffectTechnique activeSkullTech, Matrix viewProj, Color4 blendFactor) { // draw skull shadow on floor for (int p = 0; p < activeSkullTech.Description.PassCount; p++) { var pass = activeSkullTech.GetPassByIndex(p); ImmediateContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(_skullVB, Basic32.Stride, 0)); ImmediateContext.InputAssembler.SetIndexBuffer(_skullIB, Format.R32_UInt, 0); var shadowPlane = new Plane(new Vector3(0, 1, 0), 0.0f); var toMainLight = -_dirLights[0].Direction; var s = Matrix.Shadow(new Vector4(toMainLight, 0), shadowPlane); var shadowOffsetY = Matrix.Translation(0, 0.001f, 0); var world = _skullWorld * s * shadowOffsetY; var wit = MathF.InverseTranspose(world); var wvp = world * viewProj; Effects.BasicFX.SetWorld(world); Effects.BasicFX.SetWorldInvTranspose(wit); Effects.BasicFX.SetWorldViewProj(wvp); Effects.BasicFX.SetMaterial(_shadowMat); ImmediateContext.OutputMerger.BlendState = RenderStates.TransparentBS; ImmediateContext.OutputMerger.BlendFactor = blendFactor; ImmediateContext.OutputMerger.BlendSampleMask = -1; ImmediateContext.OutputMerger.DepthStencilState = RenderStates.NoDoubleBlendDSS; ImmediateContext.OutputMerger.DepthStencilReference = 0; pass.Apply(ImmediateContext); ImmediateContext.DrawIndexed(_skullIndexCount, 0, 0); // draw skull shadow on wall shadowPlane = new Plane(new Vector3(0, 0, -1), 0.0f); toMainLight = -_dirLights[0].Direction; s = Matrix.Shadow(new Vector4(toMainLight, 0), shadowPlane); shadowOffsetY = Matrix.Translation(0, 0, -0.001f); world = _skullWorld * s * shadowOffsetY; wit = MathF.InverseTranspose(world); wvp = world * viewProj; Effects.BasicFX.SetWorld(world); Effects.BasicFX.SetWorldInvTranspose(wit); Effects.BasicFX.SetWorldViewProj(wvp); Effects.BasicFX.SetMaterial(_shadowMat); pass.Apply(ImmediateContext); ImmediateContext.DrawIndexed(_skullIndexCount, 0, 0); ImmediateContext.Rasterizer.State = null; ImmediateContext.OutputMerger.DepthStencilState = null; ImmediateContext.OutputMerger.DepthStencilReference = 0; ImmediateContext.OutputMerger.BlendState = null; ImmediateContext.OutputMerger.BlendFactor = blendFactor; ImmediateContext.OutputMerger.BlendSampleMask = -1; } }
protected void InitOnce() { var shaderdeffile = Manager.Files.Get(@"Shaders\DeferredRendering.hlsl", false); var bbuffer = new byte[shaderdeffile.Length]; shaderdeffile.Read(bbuffer,0, bbuffer.Length); shaderdeffile.Dispose(); var bytecode = ShaderBytecode.Compile(bbuffer, "fx_5_0"); bbuffer = null; _effect = new Effect(D3DDevice, bytecode); bytecode.Dispose(); _composeTechnique = _effect.GetTechniqueByName("Compose"); _composePass = _composeTechnique.GetPassByIndex(0); var vertices = new DataStream(20 * 4, true, true); vertices.Write(new Vector3(-1f, -1f, -1f)); vertices.Write(new Vector2(0f,1f)); vertices.Write(new Vector3(-1f, 1f, -1f)); vertices.Write(new Vector2(0f, 0f)); vertices.Write(new Vector3(1f, -1f, -1f)); vertices.Write(new Vector2(1f, 1f)); vertices.Write(new Vector3(1f, 1f, -1f)); vertices.Write(new Vector2(1f, 0f)); vertices.Position = 0; _composeVertices = new Buffer(D3DDevice, vertices, 20 * 4, ResourceUsage.Default, BindFlags.VertexBuffer, CpuAccessFlags.None, ResourceOptionFlags.None, 0); _composeVerticesBB = new VertexBufferBinding(_composeVertices, 20, 0); vertices.Dispose(); _composeLayout = new InputLayout(D3DDevice, _composePass.Description.Signature, new[] { new InputElement("POSITION", 0, Format.R32G32B32_Float, 0), new InputElement("TEXCOORD", 0, Format.R32G32_Float, 0) }); var sampleMode = SamplerState.FromDescription(D3DDevice, new SamplerDescription() { AddressU = TextureAddressMode.Clamp, AddressV = TextureAddressMode.Clamp, AddressW = TextureAddressMode.Clamp, BorderColor = new Color4(0, 0, 0, 0), Filter = Filter.MinLinearMagMipPoint, ComparisonFunction = Comparison.Always, MipLodBias = 0f, MaximumAnisotropy = 8, MinimumLod = 0f, MaximumLod = float.MaxValue }); _effect.GetVariableByName("composeSampler").AsSampler().SetSamplerState(0, sampleMode); sampleMode.Dispose(); _effect.GetVariableByName("composeFlags").AsScalar().Set( Manager.Opts.Get<bool>("rndr_rawGBufferView")?0x1:0 ); NotifyHandlers.Add(Manager.Opts.RegisterChangeNotification("rndr_rawGBufferView", delegate(string key, object value) { Output.BeginInvoke((Action)delegate { if ((bool)value) _effect.GetVariableByName("composeFlags").AsScalar().Set(_effect.GetVariableByName("composeFlags").AsScalar().GetInt() | 0x1); else _effect.GetVariableByName("composeFlags").AsScalar().Set(_effect.GetVariableByName("composeFlags").AsScalar().GetInt() & (int.MaxValue - 0x1)); }); })); NotifyHandlers.Add(Manager.Opts.RegisterChangeNotification("rndr_nearPlane", delegate { Output.BeginInvoke((Action)ResetDevice); })); NotifyHandlers.Add(Manager.Opts.RegisterChangeNotification("rndr_farPlane", delegate { Output.BeginInvoke((Action)ResetDevice); })); SceneRasterizer = RasterizerState.FromDescription(D3DDevice, new RasterizerStateDescription() { FillMode = (Manager.Opts.Get<bool>("rndr_wireframe") ? FillMode.Wireframe : FillMode.Solid), CullMode = (Manager.Opts.Get<bool>("rndr_cull") ? CullMode.Back : CullMode.None) }); _composeRasterizer = RasterizerState.FromDescription(D3DDevice, new RasterizerStateDescription() { FillMode = FillMode.Solid, CullMode = CullMode.Back }); var bsd = new BlendStateDescription(); bsd.RenderTargets[0].BlendEnable = true; bsd.RenderTargets[0].SourceBlend = BlendOption.SourceAlpha; bsd.RenderTargets[0].DestinationBlend = BlendOption.InverseSourceAlpha; bsd.RenderTargets[0].BlendOperation = BlendOperation.Add; bsd.RenderTargets[0].SourceBlendAlpha = BlendOption.One; bsd.RenderTargets[0].DestinationBlendAlpha = BlendOption.Zero; bsd.RenderTargets[0].BlendOperationAlpha = BlendOperation.Add; bsd.RenderTargets[0].RenderTargetWriteMask = ColorWriteMaskFlags.All; Context.OutputMerger.BlendState = BlendState.FromDescription(D3DDevice, bsd); NotifyHandlers.Add(Manager.Opts.RegisterChangeNotification("rndr_wireframe", delegate(string key, object value) { Output.BeginInvoke((Action)delegate { var oldcullmode = CullMode.Back; if (SceneRasterizer != null) { oldcullmode = SceneRasterizer.Description.CullMode; SceneRasterizer.Dispose(); } SceneRasterizer = RasterizerState.FromDescription(D3DDevice, new RasterizerStateDescription() { FillMode = (((bool)value) ? FillMode.Wireframe : FillMode.Solid), CullMode = oldcullmode }); }); })); NotifyHandlers.Add(Manager.Opts.RegisterChangeNotification("rndr_cull", delegate(string key, object value) { Output.BeginInvoke((Action)delegate { var oldfillmode = FillMode.Solid; if (SceneRasterizer != null) { oldfillmode = SceneRasterizer.Description.FillMode; SceneRasterizer.Dispose(); } SceneRasterizer = RasterizerState.FromDescription(D3DDevice, new RasterizerStateDescription() { FillMode = oldfillmode, CullMode = (((bool)value) ? CullMode.Back : CullMode.None) }); }); })); Context.OutputMerger.DepthStencilState = DepthStencilState.FromDescription(D3DDevice, new DepthStencilStateDescription() { IsDepthEnabled = true, DepthWriteMask = DepthWriteMask.All, DepthComparison = Comparison.Less, IsStencilEnabled = false, }); _camIncorporeal = Manager.Opts.Get<bool>("rndr_incorporeal"); NotifyHandlers.Add(Manager.Opts.RegisterChangeNotification("rndr_incorporeal", delegate(string key, object value) { _camIncorporeal = (bool)value; })); ViewerLocation = new Vector3(-1, 1, -1); ViewerLookAt = new Vector3(0, 0, 0); ViewerUpVector = Vector3.UnitY; _camLocationIncorporeal = new Vector3(-1, 1, -1); _camLookAtIncorporeal = new Vector3(0, 0, 0); _camUpVectorIncorporeal = Vector3.UnitY; ViewerFrustum = new Frustum(); _fpsTimer = new HTimer(); _fpsRingbuffer = new double[60]; _fpsRingbufferIndex = 0; }
public void Load() { byte[] effectBuffer = null; ShaderSignature inputSignature; try { using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("OpenSAGE.Shaders.Compiled.Simple.fxo")) { effectBuffer = new byte[stream.Length]; stream.Read(effectBuffer, 0, effectBuffer.Length); } using (DataStream stream = new DataStream(effectBuffer, true, true)) { using (ShaderBytecode byteCode = new ShaderBytecode(stream)) { _effect = new Effect(_device, byteCode); } } } catch { using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("OpenSAGE.Shaders.Simple.fx")) { effectBuffer = new byte[stream.Length]; stream.Read(effectBuffer, 0, effectBuffer.Length); } using (ShaderBytecode byteCode = ShaderBytecode.Compile(effectBuffer, "fx_5_0")) { _effect = new Effect(_device, byteCode); } } _defaultTechnique = _effect.GetTechniqueByName("Default"); EffectPass pass = _defaultTechnique.GetPassByIndex(0); inputSignature = pass.Description.Signature; byte[] vertices = new byte[0x70]; int position = 0; BufferWriter.WriteVector3(vertices, ref position, new Math.Vector3(0.0f, 0.5f, 0.5f)); BufferWriter.WriteLinearColorRGBA(vertices, ref position, new Math.LinearColor(1.0f, 0.0f, 0.0f)); BufferWriter.WriteVector3(vertices, ref position, new Math.Vector3(0.5f, -0.5f, 0.5f)); BufferWriter.WriteLinearColorRGBA(vertices, ref position, new Math.LinearColor(0.0f, 1.0f, 0.0f)); BufferWriter.WriteVector3(vertices, ref position, new Math.Vector3(-0.5f, -0.5f, 0.5f)); BufferWriter.WriteLinearColorRGBA(vertices, ref position, new Math.LinearColor(0.0f, 0.0f, 1.0f)); BufferWriter.WriteVector3(vertices, ref position, new Math.Vector3(-0.5f, 0.5f, 0.5f)); BufferWriter.WriteLinearColorRGBA(vertices, position, new Math.LinearColor(1.0f, 1.0f, 1.0f, 0.0f)); DataStream vertexStream = new DataStream(vertices, true, true); _vertexBuffer = new D3D11Buffer(_device, vertexStream, 0x70, ResourceUsage.Default, BindFlags.VertexBuffer, CpuAccessFlags.None, ResourceOptionFlags.None, 0); byte[] indices = new byte[12]; position = 0; BufferWriter.WriteUInt16(indices, ref position, 0); BufferWriter.WriteUInt16(indices, ref position, 1); BufferWriter.WriteUInt16(indices, ref position, 2); BufferWriter.WriteUInt16(indices, ref position, 3); BufferWriter.WriteUInt16(indices, ref position, 0); BufferWriter.WriteUInt16(indices, ref position, 2); DataStream indexStream = new DataStream(indices, true, true); _indexBuffer = new D3D11Buffer(_device, indexStream, 12, ResourceUsage.Default, BindFlags.IndexBuffer, CpuAccessFlags.None, ResourceOptionFlags.None, 0); InputElement[] inElements = new[] { new InputElement("POSITION", 0, Format.R32G32B32_Float, 0), new InputElement("COLOR", 0, Format.R32G32B32A32_Float, 12, 0) }; _inLayout = new InputLayout(_device, inputSignature, inElements); _deviceContext.InputAssembler.InputLayout = _inLayout; _deviceContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; _deviceContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(_vertexBuffer, 28, 0)); _deviceContext.InputAssembler.SetIndexBuffer(_indexBuffer, Format.R16_UInt, 0); _defaultTechnique.GetPassByIndex(0).Apply(_deviceContext); }
public void SetSourceCode(string extendedSourceCode) { string shaderCode = File.ReadAllText(renderer.Directory + "\\Resources\\Teapot.fx"); try { using (ShaderBytecode bytecode = ShaderBytecode.Compile(extendedSourceCode + shaderCode, null, "fx_5_0", ShaderFlags.None, EffectFlags.None)) { effect = new Effect(renderingDevice, bytecode); } } catch (CompilationException ex) { System.Diagnostics.Debug.Write(ex.Message); return; } effectViewProjection = effect.GetVariableByName("matViewProjection").AsMatrix(); effectCameraPositionWorld = effect.GetVariableByName("cameraPositionWorld").AsVector(); technique = effect.GetTechniqueByIndex(0); pass = technique.GetPassByIndex(0); ShaderSignature signature = pass.Description.Signature; inputLayout = new InputLayout(renderingDevice, signature, new[] { new InputElement("POSITION", 0, SlimDX.DXGI.Format.R32G32B32_Float, 0, 0), new InputElement("NORMAL", 0, SlimDX.DXGI.Format.R32G32B32_Float, 12, 0) }); }
public override void LoadResources() { if (m_Disposed == true) { #region Load Volume Effect m_Effect = m_Effect = new Effect(GameEnvironment.Device, Bytecode); // Effect.FromFile(GameEnvironment.Device, Helper.ResolvePath(m_ShaderLocation), "fx_4_0", ShaderFlags.None, EffectFlags.None, null, null); RayStartTechnique = m_Effect.GetTechniqueByName("RayStart"); RayStartOutsidePass = RayStartTechnique.GetPassByName("Outside"); RayStartInsidePass = RayStartTechnique.GetPassByName("Inside"); VolumeLayout = new InputLayout(GameEnvironment.Device, RayStartOutsidePass.Description.Signature, new[] { new InputElement("POSITION", 0, Format.R32G32B32_Float, 0, 0), new InputElement("COLOR", 0, Format.R32G32B32_Float, 12, 0) }); RayDirectionTechnique = m_Effect.GetTechniqueByName("RayDirection"); RayDirectionPass0 = RayDirectionTechnique.GetPassByIndex(0); //RayDirectionPass1 = RayDirectionTechnique.GetPassByIndex(1); BillboardTechnique = m_Effect.GetTechniqueByName("Final"); BillboardPass0 = BillboardTechnique.GetPassByIndex(0); ImposterTechnique = m_Effect.GetTechniqueByName("Imposter"); ImposterPass0 = ImposterTechnique.GetPassByIndex(0); BillboardLayout = new InputLayout(GameEnvironment.Device, BillboardPass0.Description.Signature, new[] { new InputElement("POSITION", 0, Format.R32G32_Float, 0, 0), new InputElement("TEXCOORD", 0, Format.R32G32_Float, 8, 0) }); rayStart_texture = m_Effect.GetVariableByName("rayStart_texture").AsResource(); rayDir_texture = m_Effect.GetVariableByName("rayDir_texture").AsResource(); imposter = m_Effect.GetVariableByName("imposter").AsResource(); volume_texture = m_Effect.GetVariableByName("volume_texture").AsResource(); LocationColor = m_Effect.GetVariableByName("locationColor").AsVector(); #endregion #region Billboard Verts float minX = -1f; float miny = -1f; float maxX = 1f; float maxY = 1f; using (DataStream stream = new DataStream(4 * Marshal.SizeOf(typeof(Vertex2D)), true, true)) { stream.WriteRange(new Vertex2D[] { new Vertex2D() { Position = new Vector2(maxX, miny), TextureCoords = new Vector2(1.0f, 1.0f) }, new Vertex2D() { Position = new Vector2(minX, miny), TextureCoords = new Vector2(0.0f, 1.0f) }, new Vertex2D() { Position = new Vector2(maxX, maxY), TextureCoords = new Vector2(1.0f, 0.0f) }, new Vertex2D() { Position = new Vector2(minX, maxY), TextureCoords = new Vector2(0.0f, 0.0f) } }); stream.Position = 0; BillboardVertices = new SlimDX.Direct3D11.Buffer(GameEnvironment.Device, stream, new BufferDescription() { BindFlags = BindFlags.VertexBuffer, CpuAccessFlags = CpuAccessFlags.None, OptionFlags = ResourceOptionFlags.None, SizeInBytes = 4 * Marshal.SizeOf(typeof(Vertex2D)), Usage = ResourceUsage.Default }); } BillboardVerticesBindings = new VertexBufferBinding(BillboardVertices, Marshal.SizeOf(typeof(UIVertex)), 0); #endregion m_Disposed = false; } }
public void Initialize(Device device) { _b = EffectUtils.Load("SpecialShadow"); E = new Effect(device, _b); TechHorizontalShadowBlur = E.GetTechniqueByName("HorizontalShadowBlur"); TechVerticalShadowBlur = E.GetTechniqueByName("VerticalShadowBlur"); TechAmbientShadow = E.GetTechniqueByName("AmbientShadow"); TechResult = E.GetTechniqueByName("Result"); for (var i = 0; i < TechHorizontalShadowBlur.Description.PassCount && InputSignaturePT == null; i++) { InputSignaturePT = TechHorizontalShadowBlur.GetPassByIndex(i).Description.Signature; } if (InputSignaturePT == null) throw new System.Exception("input signature (SpecialShadow, PT, HorizontalShadowBlur) == null"); LayoutPT = new InputLayout(device, InputSignaturePT, InputLayouts.VerticePT.InputElementsValue); FxShadowViewProj = E.GetVariableByName("gShadowViewProj").AsMatrix(); FxInputMap = E.GetVariableByName("gInputMap").AsResource(); FxDepthMap = E.GetVariableByName("gDepthMap").AsResource(); FxMultipler = E.GetVariableByName("gMultipler").AsScalar(); FxCount = E.GetVariableByName("gCount").AsScalar(); FxPadding = E.GetVariableByName("gPadding").AsScalar(); FxSize = E.GetVariableByName("gSize").AsVector(); FxShadowSize = E.GetVariableByName("gShadowSize").AsVector(); }
public void Render() { //BlendStateDescription desc = new BlendStateDescription(); //desc.RenderTarget[0].SourceBlend = BlendOption.SourceAlpha; //desc.RenderTarget[0].SourceAlphaBlend = BlendOption.One; //desc.RenderTarget[0].DestinationBlend = BlendOption.InverseSourceAlpha; //desc.RenderTarget[0].DestinationAlphaBlend = BlendOption.InverseSourceAlpha; //SharpDX.Direct3D11.BlendState bs = new BlendState(Global._G.device, desc); //Global._G.context.OutputMerger.SetBlendState(bs, null, -1); //bs.Dispose(); // Prepare All the stages Global._G.context.InputAssembler.InputLayout = layout; Global._G.context.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; //Global._G.dxState.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(vertices, Utilities.SizeOf<Vector3>() + Utilities.SizeOf<Vector3>() + Utilities.SizeOf<Vector2>(), 0)); int lamez = System.Runtime.InteropServices.Marshal.SizeOf(new VertexPNT()); Global._G.context.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(vertices, lamez, 0)); Global._G.context.InputAssembler.SetIndexBuffer(indexBuffer, Format.R32_UInt, 0); #if DEBUG technique = Global._G.effect.GetTechniqueByName(shaderName); // Realtime update shaders if file was changed #endif int numPasses = technique.Description.PassCount; for (int count = 0; count < numPasses; count++) { EffectPass pass = technique.GetPassByIndex(count); pass.Apply(Global._G.context); Global._G.context.VertexShader.SetConstantBuffer(0, Global._G.constantBuffer); Global._G.context.PixelShader.SetConstantBuffer(0, Global._G.constantBuffer); //Global._G.dxState.VertexShader.Set(Global._G.vertexShader); //Global._G.dxState.PixelShader.Set(Global._G.pixelShader); //Global._G.context.PixelShader.SetSampler(0, sampler); Global._G.context.PixelShader.SetShaderResources(0, textureView.Length, textureView); Global._G.context.DrawIndexed(numIndexes, 0, 0); } }
public D3D10Renderer(Device1 device3D) { Contract.Requires(device3D != null); _Device3D = device3D; string shader = GetShaderText(Properties.Resources.RenderingEffects); using(var byteCode = ShaderBytecode.Compile( shader, "fx_4_0", ShaderFlags.None, EffectFlags.None)) { _Effect = new Effect(_Device3D, byteCode); } _EffectTechnique = _Effect.GetTechniqueByName("WithTexture"); Contract.Assert(_EffectTechnique != null); _EffectPass = _EffectTechnique.GetPassByIndex(0); Contract.Assert(_EffectPass != null); _InputLayout = new InputLayout( _Device3D, _EffectPass.Description.Signature, _InputLayoutData); const int byteSize = _Stride * _VertexCount; using(DataStream stream = new DataStream(byteSize, true, true)) { for(int i = 0; i < _QuadPrimitiveData.Length; i += 2) { float fx = (2.0f * _QuadPrimitiveData[i + 0].X) - 1.0f; float fy = (2.0f * _QuadPrimitiveData[i + 0].Y) - 1.0f; stream.Write(new Vector3(fx, -fy, 0.5f)); stream.Write(_QuadPrimitiveData[i + 1]); } stream.Seek(0, SeekOrigin.Begin); BufferDescription description = new BufferDescription { BindFlags = BindFlags.VertexBuffer, CpuAccessFlags = CpuAccessFlags.None, OptionFlags = ResourceOptionFlags.None, Usage = ResourceUsage.Immutable, SizeInBytes = byteSize }; description.SizeInBytes = byteSize; _VertexBuffer = new Buffer(_Device3D, stream, description); _VertexBufferBinding = new VertexBufferBinding( _VertexBuffer, _Stride, _Offset); } }
private void DrawRoom(EffectTechnique activeTech, Matrix viewProj) { // Draw floor and walls for (int p = 0; p < activeTech.Description.PassCount; p ++) { var pass = activeTech.GetPassByIndex(p); ImmediateContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(_roomVB, Basic32.Stride, 0)); var world = _roomWorld; var wit = MathF.InverseTranspose(world); var wvp = world * viewProj; Effects.BasicFX.SetWorld(world); Effects.BasicFX.SetWorldInvTranspose(wit); Effects.BasicFX.SetWorldViewProj(wvp); Effects.BasicFX.SetTexTransform(Matrix.Identity); Effects.BasicFX.SetMaterial(_roomMat); Effects.BasicFX.SetDiffuseMap(_floorDiffuseMapSRV); pass.Apply(ImmediateContext); ImmediateContext.Draw(6, 0); Effects.BasicFX.SetDiffuseMap(_wallDiffuseMapSRV); pass.Apply(ImmediateContext); ImmediateContext.Draw(18, 6); } }
public bool Initialize() { Debug.Assert(!_initialized); #region Shaders string SpriteFX = @"Texture2D SpriteTex; SamplerState samLinear { Filter = MIN_MAG_MIP_LINEAR; AddressU = WRAP; AddressV = WRAP; }; struct VertexIn { float3 PosNdc : POSITION; float2 Tex : TEXCOORD; float4 Color : COLOR; }; struct VertexOut { float4 PosNdc : SV_POSITION; float2 Tex : TEXCOORD; float4 Color : COLOR; }; VertexOut VS(VertexIn vin) { VertexOut vout; vout.PosNdc = float4(vin.PosNdc, 1.0f); vout.Tex = vin.Tex; vout.Color = vin.Color; return vout; }; float4 PS(VertexOut pin) : SV_Target { return pin.Color*SpriteTex.Sample(samLinear, pin.Tex); }; technique11 SpriteTech { pass P0 { SetVertexShader( CompileShader( vs_5_0, VS() ) ); SetHullShader( NULL ); SetDomainShader( NULL ); SetGeometryShader( NULL ); SetPixelShader( CompileShader( ps_5_0, PS() ) ); } };"; #endregion _compiledFX = ShaderBytecode.Compile(SpriteFX, "SpriteTech", "fx_5_0"); { if (_compiledFX.HasErrors) return false; _effect = new Effect(_device, _compiledFX); { _spriteTech = _effect.GetTechniqueByName("SpriteTech"); _spriteMap = _effect.GetVariableByName("SpriteTex").AsShaderResource(); var pass = _spriteTech.GetPassByIndex(0).Description.Signature; InputElement[] layoutDesc = { new InputElement("POSITION", 0, SharpDX.DXGI.Format.R32G32B32_Float, 0, 0, InputClassification.PerVertexData, 0), new InputElement("TEXCOORD", 0, SharpDX.DXGI.Format.R32G32_Float, 12, 0, InputClassification.PerVertexData, 0), new InputElement("COLOR", 0, SharpDX.DXGI.Format.R32G32B32A32_Float, 20, 0, InputClassification.PerVertexData, 0) }; _inputLayout = new InputLayout(_device, pass, layoutDesc); // Create Vertex Buffer BufferDescription vbd = new BufferDescription { SizeInBytes = 2048 * Marshal.SizeOf(typeof(SpriteVertex)), Usage = ResourceUsage.Dynamic, BindFlags = BindFlags.VertexBuffer, CpuAccessFlags = CpuAccessFlags.Write, OptionFlags = ResourceOptionFlags.None, StructureByteStride = 0 }; _VB = new SharpDX.Direct3D11.Buffer(_device, vbd); // Create and initialise Index Buffer short[] indices = new short[3072]; for (ushort i = 0; i < 512; ++i) { indices[i * 6] = (short)(i * 4); indices[i * 6 + 1] = (short)(i * 4 + 1); indices[i * 6 + 2] = (short)(i * 4 + 2); indices[i * 6 + 3] = (short)(i * 4); indices[i * 6 + 4] = (short)(i * 4 + 2); indices[i * 6 + 5] = (short)(i * 4 + 3); } _indexBuffer = Marshal.AllocHGlobal(indices.Length * Marshal.SizeOf(indices[0])); Marshal.Copy(indices, 0, _indexBuffer, indices.Length); BufferDescription ibd = new BufferDescription { SizeInBytes = 3072 * Marshal.SizeOf(typeof(short)), Usage = ResourceUsage.Immutable, BindFlags = BindFlags.IndexBuffer, CpuAccessFlags = CpuAccessFlags.None, OptionFlags = ResourceOptionFlags.None, StructureByteStride = 0 }; _IB = new SharpDX.Direct3D11.Buffer(_device, _indexBuffer, ibd); BlendStateDescription transparentDesc = new BlendStateDescription() { AlphaToCoverageEnable = false, IndependentBlendEnable = false, }; transparentDesc.RenderTarget[0].IsBlendEnabled = true; transparentDesc.RenderTarget[0].SourceBlend = BlendOption.SourceAlpha; transparentDesc.RenderTarget[0].DestinationBlend = BlendOption.InverseSourceAlpha; transparentDesc.RenderTarget[0].BlendOperation = BlendOperation.Add; transparentDesc.RenderTarget[0].SourceAlphaBlend = BlendOption.One; transparentDesc.RenderTarget[0].DestinationAlphaBlend = BlendOption.Zero; transparentDesc.RenderTarget[0].AlphaBlendOperation = BlendOperation.Add; transparentDesc.RenderTarget[0].RenderTargetWriteMask = ColorWriteMaskFlags.All; _transparentBS = new BlendState(_device, transparentDesc); } } _initialized = true; return true; }
public void MakeLatLonSphere2(int latDivs, int lonDivs) { List<VertexPNT> verts = new List<VertexPNT>(); List<int> faceTemp = new List<int>(); int index = 0; for (int lat = -latDivs / 2; lat <= latDivs / 2; lat++) { for (int lon = 0; lon <= lonDivs; lon++) { float2 pos = new float2((float)lon / lonDivs, (float)lat / latDivs); float2 radScale = new float2((float)(2 * Math.PI), (float)(Math.PI)); if ((lon != lonDivs) && (lat != latDivs /2)) { int row = lonDivs + 1; faceTemp.Add(index); faceTemp.Add(index + row); faceTemp.Add(index + 1); faceTemp.Add(index + row); faceTemp.Add(index + row + 1); faceTemp.Add(index + 1); } float3 posXYZ = new float3(); VertexPNT v0 = new VertexPNT(); v0._pos = SphericalCoord(pos * radScale, out posXYZ); v0.normal = posXYZ.Normalize(); v0.uv0 = new float2(1.0f-pos.x, pos.y + 0.5f); verts.Add(v0); index++; } } int[] faceList = faceTemp.ToArray();// GenerateDefaultFaceList(verts); indexBuffer = Buffer.Create(Global._G.device, BindFlags.IndexBuffer, faceList); numIndexes = faceList.Length; //public EffectPass pass; //EffectTechnique technique = effect.GetTechniqueByIndex(0); shaderName = "EarthRender"; technique = Global._G.effect.GetTechniqueByName(shaderName); EffectPass pass = technique.GetPassByIndex(0); var passSignature = pass.Description.Signature; layout = new InputLayout(Global._G.device, passSignature, new[] //ShaderSignature sig = ShaderSignature.GetInputSignature(Global._G.vertexShaderByteCode); //layout = new InputLayout(Global._G.device, sig, new[] { new InputElement("POSITION", 0, Format.R32G32B32_Float, 0, 0), new InputElement("NORMAL", 0, Format.R32G32B32_Float, 12, 0), new InputElement("TEXCOORD", 0, Format.R32G32_Float, 12+12, 0) }); vertices = Buffer.Create(Global._G.device, BindFlags.VertexBuffer, verts.ToArray()); //SharpDX.Direct3D11.Resource tex = Texture2D.FromFile<Texture2D>(Global._G.device, @"Content\world.200401.3x540x270.jpg"); ////SharpDX.Direct3D11.Resource tex = Texture2D.FromFile<Texture2D>(Global._G.device, @"C:\dev\Globe\Content\Custom\world.200401.3x5400x2700.jpg"); //textureView = new ShaderResourceView(Global._G.device, tex); //tex.Dispose(); textureView = new ShaderResourceView[] { Global._G.texMan.texDict["world.200401.3x540x270"].textureView, //Global._G.texMan.texDict["world.200407.3x5400x2700"].textureView, //Global._G.texMan.texDict["world.200408.3x8192x8192"].textureView, Global._G.texMan.texDict["noiseRGBA"].textureView, Global._G.texMan.texDict["cloud_combined_1024"].textureView }; // This is handled the the shader effects file. Maybe someday we can make an override if needed. //sampler = new SamplerState(Global._G.device, new SamplerStateDescription() //{ // Filter = Filter.Anisotropic, // AddressU = TextureAddressMode.Wrap, // AddressV = TextureAddressMode.Wrap, // AddressW = TextureAddressMode.Wrap, // BorderColor = Color.Black, // ComparisonFunction = Comparison.Never, // MaximumAnisotropy = 16, // MipLodBias = 0, // MinimumLod = 0, // MaximumLod = 16, //}); // CreateVertexBuffer(faces); // m_shader = "simpleGlobeShade"; }