public override void Render(ID3D11Device device, ID3D11DeviceContext deviceContext, Camera camera) { if (!DoRender) { return; } //if (!camera.CheckBBoxFrustum(Transform.TranslationVector, BoundingBox)) // return; VertexBufferView VertexBufferView = new VertexBufferView(vertexBuffer, Unsafe.SizeOf <VertexLayouts.NormalLayout.Vertex>(), 0); deviceContext.IASetVertexBuffers(0, VertexBufferView); deviceContext.IASetIndexBuffer(indexBuffer, Vortice.DXGI.Format.R32_UInt, 0); deviceContext.IASetPrimitiveTopology(PrimitiveTopology.TriangleList); deviceContext.PSSetShaderResource(2, AOTexture); for (int i = 0; i != LODs[0].ModelParts.Length; i++) { ModelPart Segment = LODs[0].ModelParts[i]; Segment.Shader.SetShaderParameters(device, deviceContext, new MaterialParameters(Segment.Material, SelectionColour.Normalize())); Segment.Shader.SetSceneVariables(deviceContext, Transform, camera); Segment.Shader.Render(deviceContext, PrimitiveTopology.TriangleList, (int)(Segment.NumFaces * 3), Segment.StartIndex); } }
public override void SetShaderParameters(ID3D11Device device, ID3D11DeviceContext deviceContext, MaterialParameters matParams) { base.SetShaderParameters(device, deviceContext, matParams); Shader_50760736Params parameters = new Shader_50760736Params(); var material = matParams.MaterialData; var param = material.GetParameterByKey("C005"); if (param != null) { parameters.C005_EmissiveFacadeColorAndIntensity = new Vector4(param.Paramaters[0], param.Paramaters[1], param.Paramaters[2], param.Paramaters[3]); } if (material == null) { ID3D11ShaderResourceView texture = RenderStorageSingleton.Instance.TextureCache[0]; deviceContext.PSSetShaderResource(0, texture); ShaderParams = parameters; } else { ID3D11ShaderResourceView[] textures = new ID3D11ShaderResourceView[2]; HashName TextureFile = material.GetTextureByID("S000"); if (TextureFile != null) { textures[0] = RenderStorageSingleton.Instance.TextureCache[TextureFile.Hash]; } else { textures[0] = RenderStorageSingleton.Instance.TextureCache[0]; } TextureFile = material.GetTextureByID("S011"); if (TextureFile != null) { textures[1] = RenderStorageSingleton.Instance.TextureCache[TextureFile.Hash]; } else { textures[1] = RenderStorageSingleton.Instance.TextureCache[0]; } deviceContext.PSSetShaderResources(0, textures); } ShaderParams = parameters; }
public override void SetShaderParameters(ID3D11Device device, ID3D11DeviceContext context, MaterialParameters matParams) { base.SetShaderParameters(device, context, matParams); int previousHasTangentSpace = extraParams.hasTangentSpace; var material = matParams.MaterialData; if (material == null) { ID3D11ShaderResourceView texture = RenderStorageSingleton.Instance.TextureCache[0]; context.PSSetShaderResource(0, texture); } else { HashName TextureFile = material.GetTextureByID("S000"); ID3D11ShaderResourceView[] ShaderTextures = new ID3D11ShaderResourceView[2]; if (TextureFile != null) { ShaderTextures[0] = RenderStorageSingleton.Instance.TextureCache[TextureFile.Hash]; } else { ShaderTextures[0] = RenderStorageSingleton.Instance.TextureCache[0]; } TextureFile = material.GetTextureByID("S001"); if (TextureFile != null) { ShaderTextures[1] = RenderStorageSingleton.Instance.TextureCache[TextureFile.Hash]; extraParams.hasTangentSpace = 1; } else { ShaderTextures[1] = RenderStorageSingleton.Instance.TextureCache[1]; extraParams.hasTangentSpace = 0; } context.PSSetShaderResources(0, ShaderTextures); } if (previousRenderType != extraParams.hasTangentSpace) { ConstantBufferFactory.UpdatePixelBuffer(context, ConstantExtraParameterBuffer, 2, extraParams); } }