public void TestDepthFromOtherFrameBuffer() { Runner.ExecuteAsLoop(_ => { FrameBuffer testBuffer = new FrameBuffer(Engine.Renderer.DrawBuffer.Size).WithColor().WithDepth(true); var shader = Engine.AssetLoader.Get <ShaderAsset>("Shaders/DepthTest.xml"); RenderComposer composer = Engine.Renderer.StartFrame(); composer.RenderTo(testBuffer); composer.ClearFrameBuffer(); composer.RenderSprite(new Vector3(0, 0, 10), new Vector2(100, 100), Color.Green); composer.RenderTo(null); composer.SetUseViewMatrix(false); composer.SetShader(shader.Shader); shader.Shader.SetUniformInt("depthTexture", 1); Texture.EnsureBound(testBuffer.DepthTexture.Pointer, 1); composer.RenderSprite(new Vector3(0, 0, 0), testBuffer.Texture.Size, Color.White, testBuffer.Texture); composer.SetShader(); composer.SetUseViewMatrix(true); composer.RenderSprite(new Vector3(20, 20, 15), new Vector2(100, 100), Color.Blue); composer.RenderSprite(new Vector3(10, 10, 0), new Vector2(100, 100), Color.Red); Engine.Renderer.EndFrame(); Runner.VerifyScreenshot(ResultDb.TestDepthFromOtherFrameBuffer); testBuffer.Dispose(); }).WaitOne(); }
public void ShaderBrokenLoad() { var shader = Engine.AssetLoader.Get <ShaderAsset>("Shaders/BrokenShader.xml"); ; Runner.ExecuteAsLoop(_ => { RenderComposer composer = Engine.Renderer.StartFrame(); // Set shader. composer.SetShader(shader.Shader); // Render a blank square. composer.RenderSprite(new Vector3(10, 10, 0), new Vector2(10, 10), Color.White); // Reset to default shader. composer.SetShader(); Engine.Renderer.EndFrame(); Runner.VerifyScreenshot(ResultDb.BrokenShader); }).WaitOne(); // Even though the shader is broken, and it doesn't specify a fallback, it should load the compat shader. Assert.True(shader.Shader != null); Assert.True(shader.IsFallback); Engine.AssetLoader.Destroy(shader.Name); }
public void ShaderFallback() { var shader = Engine.AssetLoader.Get <ShaderAsset>("Shaders/BrokenShaderWithFallback.xml"); ; Runner.ExecuteAsLoop(_ => { RenderComposer composer = Engine.Renderer.StartFrame(); // Set shader. composer.SetShader(shader.Shader); // Render a blank square. composer.RenderSprite(new Vector3(10, 10, 0), new Vector2(10, 10), Color.White); // Reset to default shader. composer.SetShader(); Engine.Renderer.EndFrame(); Runner.VerifyScreenshot(ResultDb.ShaderFallback); }).WaitOne(); // The shader should've loaded its fallback. Assert.True(shader.Shader != null); Assert.True(shader.IsFallback); Engine.AssetLoader.Destroy(shader.Name); }
public override void Render(RenderComposer composer) { if (TextureAsset == null) { return; } if (BlurIntensity > 0) { // Apply Blur effect if such is set composer.SetShader(BlurShader.Shader); BlurShader.Shader.SetUniformFloat("sigma", BlurIntensity); } Color color = Color.White; if (ShadowReverseIntensity < 255) { // Apply Shadow effect if such is set color = new Color(ShadowReverseIntensity, ShadowReverseIntensity, ShadowReverseIntensity); // 180 for a shadowy look } if (Rotation != 0f) { // Apply rotation if such is set // Tiled rotates images around the bottom left corner composer.PushModelMatrix( Matrix4x4.CreateRotationZ(Rotation, new Vector3(X, Y + DisplaySize.Y, 0)) ); } // Render composer.RenderSprite( Position, DisplaySize, color, TextureAsset.Texture, TextureArea, FlipX ); if (Rotation != 0f) { // Remove the rotation matrix composer.PopModelMatrix(); } if (BlurIntensity > 0) { // Remove the blur shader composer.SetShader(null); } }
protected override bool RenderInternal(RenderComposer c) { base.RenderInternal(c); RenderState oldState = c.CurrentState.Clone(); c.SetState(RenderState.Default); c.SetUseViewMatrix(false); c.RenderSprite(new Vector3(0, 0, 0), Engine.Renderer.CurrentTarget.Size, Color.CornflowerBlue); c.SetUseViewMatrix(true); c.ClearDepth(); //c.RenderLine(new Vector3(short.MinValue, 0, 0), new Vector3(short.MaxValue, 0, 0), Color.Red, snapToPixel: false); //c.RenderLine(new Vector3(0, short.MinValue, 0), new Vector3(0, short.MaxValue, 0), Color.Green, snapToPixel: false); //c.RenderLine(new Vector3(0, 0, short.MinValue), new Vector3(0, 0, short.MaxValue), Color.Blue, snapToPixel: false); c.RenderLine(new Vector3(0, 0, 0), new Vector3(short.MaxValue, 0, 0), Color.Red, snapToPixel: false); c.RenderLine(new Vector3(0, 0, 0), new Vector3(0, short.MaxValue, 0), Color.Green, snapToPixel: false); c.RenderLine(new Vector3(0, 0, 0), new Vector3(0, 0, short.MaxValue), Color.Blue, snapToPixel: false); if (_showTerrain) { _terrain.Render(c); } if (DisplayObject.Entity?.AnimationRig != null) { c.SetShader(_skeletalShader.Shader); DisplayObject.RenderAnimated(c, _boneVerticesStream); c.SetShader(); } else { DisplayObject.Render(c); } c.SetState(oldState); _boneVerticesStream?.DoTasks(c); return(true); }
public void ShaderLoadAndDraw() { var shaders = new List <ShaderAsset>(); // Which phase of the test is happening. Done to split the draw function. var shaderTest = 0; shaders.Add(Engine.AssetLoader.Get <ShaderAsset>("Shaders/TestShader.xml")); shaders.Add(Engine.AssetLoader.Get <ShaderAsset>("Shaders/TestShaderFragOnly.xml")); shaders.Add(Engine.AssetLoader.Get <ShaderAsset>("Shaders/TestShaderVertOnly.xml")); void Draw(string resultId) { Runner.ExecuteAsLoop(_ => { RenderComposer composer = Engine.Renderer.StartFrame(); // Set shader. if (shaderTest != 0) { composer.SetShader(shaders[shaderTest - 1].Shader); } // Render a blank square. composer.RenderSprite(new Vector3(10, 10, 0), new Vector2(10, 10), Color.White); // Reset to default shader. composer.SetShader(); Engine.Renderer.EndFrame(); Runner.VerifyScreenshot(resultId); }).WaitOne(); } // Ensure all shaders are loaded. foreach (ShaderAsset s in shaders) { Assert.True(s.Shader != null); Assert.False(s.IsFallback); } // Change to phase 1. This is drawing with the test shader. Draw(ResultDb.ShaderTest0); shaderTest = 1; Draw(ResultDb.ShaderTest1); // Change to phase 2. This is drawing with the vert missing shader. shaderTest = 2; Draw(ResultDb.ShaderTest2); // Change to phase 3. This is drawing with the frag missing shader. shaderTest = 3; Draw(ResultDb.ShaderTest3); // Cleanup foreach (ShaderAsset s in shaders) { Engine.AssetLoader.Destroy(s.Name); } // Ensure the shaders are unloaded. Assert.Equal(shaders.Count, shaders.Select(x => x.Name).Except(Engine.AssetLoader.LoadedAssets.Select(x => x.Name)).Count()); }