move RenderTexture out of Video
parent
491eafac76
commit
b648d1b1c3
|
@ -45,7 +45,6 @@ namespace MoonWorks.Video
|
||||||
private int currentFrame;
|
private int currentFrame;
|
||||||
|
|
||||||
private GraphicsDevice GraphicsDevice;
|
private GraphicsDevice GraphicsDevice;
|
||||||
private Texture RenderTexture = null;
|
|
||||||
private Texture yTexture = null;
|
private Texture yTexture = null;
|
||||||
private Texture uTexture = null;
|
private Texture uTexture = null;
|
||||||
private Texture vTexture = null;
|
private Texture vTexture = null;
|
||||||
|
@ -115,16 +114,9 @@ namespace MoonWorks.Video
|
||||||
|
|
||||||
InitializeTheoraStream();
|
InitializeTheoraStream();
|
||||||
|
|
||||||
|
// FIXME: maybe we should store textures on a VideoPlayer to save memory
|
||||||
if (Theorafile.tf_hasvideo(Handle) == 1)
|
if (Theorafile.tf_hasvideo(Handle) == 1)
|
||||||
{
|
{
|
||||||
RenderTexture = Texture.CreateTexture2D(
|
|
||||||
GraphicsDevice,
|
|
||||||
(uint) yWidth,
|
|
||||||
(uint) yHeight,
|
|
||||||
TextureFormat.R8G8B8A8,
|
|
||||||
TextureUsageFlags.ColorTarget | TextureUsageFlags.Sampler
|
|
||||||
);
|
|
||||||
|
|
||||||
yTexture = Texture.CreateTexture2D(
|
yTexture = Texture.CreateTexture2D(
|
||||||
GraphicsDevice,
|
GraphicsDevice,
|
||||||
(uint) yWidth,
|
(uint) yWidth,
|
||||||
|
@ -214,16 +206,23 @@ namespace MoonWorks.Video
|
||||||
State = VideoState.Stopped;
|
State = VideoState.Stopped;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Texture GetTexture()
|
public void Render(Texture renderTexture)
|
||||||
{
|
{
|
||||||
if (RenderTexture == null)
|
if (renderTexture == null)
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException();
|
throw new InvalidOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
|
if (renderTexture.Height != yHeight || renderTexture.Width != yWidth)
|
||||||
|
{
|
||||||
|
throw new ArgumentException("Render texture does not match video size!");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (State == VideoState.Stopped)
|
if (State == VideoState.Stopped)
|
||||||
{
|
{
|
||||||
return RenderTexture;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
timeElapsed += (timer.Elapsed.TotalMilliseconds - lastTimestamp) * PlaybackSpeed;
|
timeElapsed += (timer.Elapsed.TotalMilliseconds - lastTimestamp) * PlaybackSpeed;
|
||||||
|
@ -237,7 +236,7 @@ namespace MoonWorks.Video
|
||||||
(IntPtr) yuvData,
|
(IntPtr) yuvData,
|
||||||
thisFrame - currentFrame
|
thisFrame - currentFrame
|
||||||
) == 1 || currentFrame == -1) {
|
) == 1 || currentFrame == -1) {
|
||||||
UpdateTexture();
|
UpdateTexture(renderTexture);
|
||||||
}
|
}
|
||||||
|
|
||||||
currentFrame = thisFrame;
|
currentFrame = thisFrame;
|
||||||
|
@ -270,11 +269,9 @@ namespace MoonWorks.Video
|
||||||
State = VideoState.Stopped;
|
State = VideoState.Stopped;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return RenderTexture;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateTexture()
|
private void UpdateTexture(Texture renderTexture)
|
||||||
{
|
{
|
||||||
var commandBuffer = GraphicsDevice.AcquireCommandBuffer();
|
var commandBuffer = GraphicsDevice.AcquireCommandBuffer();
|
||||||
|
|
||||||
|
@ -287,7 +284,7 @@ namespace MoonWorks.Video
|
||||||
);
|
);
|
||||||
|
|
||||||
commandBuffer.BeginRenderPass(
|
commandBuffer.BeginRenderPass(
|
||||||
new ColorAttachmentInfo(RenderTexture, Color.Black)
|
new ColorAttachmentInfo(renderTexture, Color.Black)
|
||||||
);
|
);
|
||||||
|
|
||||||
commandBuffer.BindGraphicsPipeline(GraphicsDevice.VideoPipeline);
|
commandBuffer.BindGraphicsPipeline(GraphicsDevice.VideoPipeline);
|
||||||
|
@ -327,7 +324,6 @@ namespace MoonWorks.Video
|
||||||
if (disposing)
|
if (disposing)
|
||||||
{
|
{
|
||||||
// dispose managed state (managed objects)
|
// dispose managed state (managed objects)
|
||||||
RenderTexture.Dispose();
|
|
||||||
yTexture.Dispose();
|
yTexture.Dispose();
|
||||||
uTexture.Dispose();
|
uTexture.Dispose();
|
||||||
vTexture.Dispose();
|
vTexture.Dispose();
|
||||||
|
|
Loading…
Reference in New Issue