Split IGraphicsContext from IPlatformWindow.

This commit is contained in:
Paul Chote
2018-06-06 20:27:32 +00:00
parent ab14a86d39
commit 9ff177359b
12 changed files with 326 additions and 276 deletions

View File

@@ -27,7 +27,7 @@ namespace OpenRA.Graphics
public HardwarePalette()
{
Texture = Game.Renderer.Window.CreateTexture();
Texture = Game.Renderer.Context.CreateTexture();
readOnlyModifiablePalettes = modifiablePalettes.AsReadOnly();
}

View File

@@ -300,14 +300,14 @@ namespace OpenRA.Graphics
Game.Renderer.Flush();
fbo.Bind();
Game.Renderer.Window.EnableDepthBuffer();
Game.Renderer.Context.EnableDepthBuffer();
return fbo;
}
void DisableFrameBuffer(IFrameBuffer fbo)
{
Game.Renderer.Flush();
Game.Renderer.Window.DisableDepthBuffer();
Game.Renderer.Context.DisableDepthBuffer();
fbo.Unbind();
}
@@ -356,7 +356,7 @@ namespace OpenRA.Graphics
}
var size = new Size(renderer.SheetSize, renderer.SheetSize);
var framebuffer = renderer.Window.CreateFrameBuffer(size);
var framebuffer = renderer.Context.CreateFrameBuffer(size);
var sheet = new Sheet(SheetType.BGRA, framebuffer.Texture);
mappedBuffers.Add(sheet, framebuffer);

View File

@@ -36,39 +36,40 @@ namespace OpenRA
public interface IPlatformWindow : IDisposable
{
IVertexBuffer<Vertex> CreateVertexBuffer(int length);
ITexture CreateTexture(Bitmap bitmap);
ITexture CreateTexture();
IFrameBuffer CreateFrameBuffer(Size s);
IShader CreateShader(string name);
IGraphicsContext Context { get; }
Size WindowSize { get; }
float WindowScale { get; }
event Action<float, float> OnWindowScaleChanged;
void Clear();
void Present();
Bitmap TakeScreenshot();
void PumpInput(IInputHandler inputHandler);
string GetClipboardText();
bool SetClipboardText(string text);
void DrawPrimitives(PrimitiveType type, int firstVertex, int numVertices);
void EnableScissor(int left, int top, int width, int height);
void DisableScissor();
void EnableDepthBuffer();
void DisableDepthBuffer();
void ClearDepthBuffer();
void SetBlendMode(BlendMode mode);
void GrabWindowMouseFocus();
void ReleaseWindowMouseFocus();
IHardwareCursor CreateHardwareCursor(string name, Size size, byte[] data, int2 hotspot);
void SetHardwareCursor(IHardwareCursor cursor);
}
public interface IGraphicsContext : IDisposable
{
IVertexBuffer<Vertex> CreateVertexBuffer(int size);
ITexture CreateTexture();
ITexture CreateTexture(Bitmap bitmap);
IFrameBuffer CreateFrameBuffer(Size s);
IShader CreateShader(string name);
void EnableScissor(int left, int top, int width, int height);
void DisableScissor();
Bitmap TakeScreenshot();
void Present();
void DrawPrimitives(PrimitiveType pt, int firstVertex, int numVertices);
void Clear();
void EnableDepthBuffer();
void DisableDepthBuffer();
void ClearDepthBuffer();
void SetBlendMode(BlendMode mode);
string GLVersion { get; }
}

View File

@@ -66,7 +66,7 @@ namespace OpenRA.Graphics
{
if (texture == null)
{
texture = Game.Renderer.Window.CreateTexture();
texture = Game.Renderer.Context.CreateTexture();
dirty = true;
}

View File

@@ -43,10 +43,10 @@ namespace OpenRA.Graphics
sheets[i] = null;
}
renderer.Window.SetBlendMode(currentBlend);
renderer.Context.SetBlendMode(currentBlend);
shader.PrepareRender();
renderer.DrawBatch(vertices, nv, PrimitiveType.TriangleList);
renderer.Window.SetBlendMode(BlendMode.None);
renderer.Context.SetBlendMode(BlendMode.None);
nv = 0;
ns = 0;
@@ -131,10 +131,10 @@ namespace OpenRA.Graphics
public void DrawVertexBuffer(IVertexBuffer<Vertex> buffer, int start, int length, PrimitiveType type, Sheet sheet, BlendMode blendMode)
{
shader.SetTexture("Texture0", sheet.GetTexture());
renderer.Window.SetBlendMode(blendMode);
renderer.Context.SetBlendMode(blendMode);
shader.PrepareRender();
renderer.DrawBatch(buffer, start, length, type);
renderer.Window.SetBlendMode(BlendMode.None);
renderer.Context.SetBlendMode(BlendMode.None);
}
// For RGBAColorRenderer

View File

@@ -46,7 +46,7 @@ namespace OpenRA.Graphics
rowStride = 6 * map.MapSize.X;
vertices = new Vertex[rowStride * map.MapSize.Y];
vertexBuffer = Game.Renderer.Window.CreateVertexBuffer(vertices.Length);
vertexBuffer = Game.Renderer.Context.CreateVertexBuffer(vertices.Length);
emptySprite = new Sprite(sheet, Rectangle.Empty, TextureChannel.Alpha);
wr.PaletteInvalidated += UpdatePaletteIndices;

View File

@@ -179,7 +179,7 @@ namespace OpenRA.Graphics
Game.Renderer.EnableScissor(bounds);
if (enableDepthBuffer)
Game.Renderer.Window.EnableDepthBuffer();
Game.Renderer.Context.EnableDepthBuffer();
terrainRenderer.Draw(this, Viewport);
Game.Renderer.Flush();
@@ -203,7 +203,7 @@ namespace OpenRA.Graphics
a.Trait.RenderShroud(renderShroud, this);
if (enableDepthBuffer)
Game.Renderer.Window.DisableDepthBuffer();
Game.Renderer.Context.DisableDepthBuffer();
Game.Renderer.DisableScissor();