Example #1
0
        public override void Issue(DeviceManager manager)
        {
            manager.Device.SetRenderTarget(RenderTarget);

            base.Issue(manager);
        }
Example #2
0
        private IEnumerator <object> PreloadShadersAsyncImpl(RenderCoordinator coordinator, DeviceManager dm, IndexBuffer tempIb, List <Material> materials, Action <float> onProgress, int speed)
        {
            var sw   = Stopwatch.StartNew();
            var wfns = new Task.WaitForNextStep();

            for (int i = 0; i < materials.Count; i++)
            {
                var m = materials[i];
                if (onProgress != null)
                {
                    onProgress(i / (float)materials.Count);
                }
                coordinator.BeforeIssue(() => m.Preload(coordinator, dm, tempIb));
                if ((i % speed) == 0)
                {
                    yield return(wfns);
                }
            }

            onProgress(1f);

            coordinator.DisposeResource(tempIb);

            var elapsed = sw.Elapsed.TotalMilliseconds;

            Debug.WriteLine($"Async shader preload took {elapsed:000.00}ms");
        }
Example #3
0
 // This is where you send commands to the video card to render your batch.
 public virtual void Issue(DeviceManager manager)
 {
     Container = null;
 }
Example #4
0
        public override void Issue(DeviceManager manager)
        {
            if (IsCombined)
            {
                throw new InvalidOperationException("Batch was combined into another batch");
            }

            if (_DrawCalls.Count == 0)
            {
                return;
            }

            if (_Prepared == false)
            {
                throw new InvalidOperationException("Not prepared");
            }

            if (_BufferGenerator == null)
            {
                throw new InvalidOperationException("Already issued");
            }

            var device = manager.Device;

            IHardwareBuffer previousHardwareBuffer = null;

            // if (RenderTrace.EnableTracing)
            //    RenderTrace.ImmediateMarker("BitmapBatch.Issue(layer={0}, count={1})", Layer, _DrawCalls.Count);

            using (manager.ApplyMaterial(Material)) {
                TextureSet currentTexture = new TextureSet();
                var        paramSize      = manager.CurrentParameters.BitmapTextureSize;
                var        paramHalfTexel = manager.CurrentParameters.HalfTexel;

                foreach (var nb in _NativeBatches)
                {
                    if (nb.TextureSet != currentTexture)
                    {
                        currentTexture = nb.TextureSet;
                        var tex1 = currentTexture.Texture1;

                        device.Textures[0]      = tex1;
                        device.Textures[1]      = currentTexture.Texture2;
                        device.SamplerStates[0] = SamplerState;
                        device.SamplerStates[1] = SamplerState2;

                        var vSize = new Vector2(tex1.Width, tex1.Height);
                        paramSize.SetValue(vSize);
#if !SDL2
                        // This is only ever used by Blur, which is never used -flibit
                        paramHalfTexel.SetValue(new Vector2(1.0f / vSize.X, 1.0f / vSize.Y) * 0.5f);
#endif

                        manager.CurrentMaterial.Flush();
                    }

                    if (UseZBuffer)
                    {
                        var dss = device.DepthStencilState;
                        if (dss.DepthBufferEnable == false)
                        {
                            throw new InvalidOperationException("UseZBuffer set to true but depth buffer is disabled");
                        }
                    }

                    var swb = nb.SoftwareBuffer;
                    var hwb = swb.HardwareBuffer;
                    if (previousHardwareBuffer != hwb)
                    {
                        if (previousHardwareBuffer != null)
                        {
                            previousHardwareBuffer.SetInactive(device);
                        }

                        hwb.SetActive(device);
                        previousHardwareBuffer = hwb;
                    }

#if PSM
                    // MonoGame and PSM are both retarded.
                    device.ApplyState(false);
                    device.Textures.SetTextures(device);
                    device.SamplerStates.SetSamplers(device);

                    device._graphics.DrawArrays(
                        Sce.PlayStation.Core.Graphics.DrawMode.Triangles,
                        nb.IndexOffset, (nb.VertexCount / 4) * 6
                        );
#else
                    device.DrawIndexedPrimitives(
                        PrimitiveType.TriangleList, 0,
                        swb.HardwareVertexOffset + nb.LocalVertexOffset,
                        nb.VertexCount,
                        swb.HardwareIndexOffset + nb.LocalIndexOffset,
                        nb.VertexCount / 2
                        );
#endif
                }

                if (previousHardwareBuffer != null)
                {
                    previousHardwareBuffer.SetInactive(device);
                }
            }

            _BufferGenerator = null;

            base.Issue(manager);
        }
Example #5
0
 public virtual void End(DeviceManager deviceManager)
 {
 }
Example #6
0
 public virtual void Begin(DeviceManager deviceManager)
 {
 }
Example #7
0
 public override void End(DeviceManager deviceManager)
 {
 }
Example #8
0
 public override void Begin(DeviceManager deviceManager)
 {
 }