Allow FrameBuffer clear color to be customized.
This commit is contained in:
@@ -60,6 +60,7 @@ namespace OpenRA
|
|||||||
IVertexBuffer<Vertex> CreateVertexBuffer(int size);
|
IVertexBuffer<Vertex> CreateVertexBuffer(int size);
|
||||||
ITexture CreateTexture();
|
ITexture CreateTexture();
|
||||||
IFrameBuffer CreateFrameBuffer(Size s);
|
IFrameBuffer CreateFrameBuffer(Size s);
|
||||||
|
IFrameBuffer CreateFrameBuffer(Size s, Color clearColor);
|
||||||
IShader CreateShader(string name);
|
IShader CreateShader(string name);
|
||||||
void EnableScissor(int left, int top, int width, int height);
|
void EnableScissor(int left, int top, int width, int height);
|
||||||
void DisableScissor();
|
void DisableScissor();
|
||||||
|
|||||||
@@ -20,12 +20,14 @@ namespace OpenRA.Platforms.Default
|
|||||||
{
|
{
|
||||||
readonly ITexture texture;
|
readonly ITexture texture;
|
||||||
readonly Size size;
|
readonly Size size;
|
||||||
|
readonly Color clearColor;
|
||||||
uint framebuffer, depth;
|
uint framebuffer, depth;
|
||||||
bool disposed;
|
bool disposed;
|
||||||
|
|
||||||
public FrameBuffer(Size size, ITextureInternal texture)
|
public FrameBuffer(Size size, ITextureInternal texture, Color clearColor)
|
||||||
{
|
{
|
||||||
this.size = size;
|
this.size = size;
|
||||||
|
this.clearColor = clearColor;
|
||||||
if (!Exts.IsPowerOf2(size.Width) || !Exts.IsPowerOf2(size.Height))
|
if (!Exts.IsPowerOf2(size.Width) || !Exts.IsPowerOf2(size.Height))
|
||||||
throw new InvalidDataException("Frame buffer size ({0}x{1}) must be a power of two".F(size.Width, size.Height));
|
throw new InvalidDataException("Frame buffer size ({0}x{1}) must be a power of two".F(size.Width, size.Height));
|
||||||
|
|
||||||
@@ -94,7 +96,7 @@ namespace OpenRA.Platforms.Default
|
|||||||
OpenGL.CheckGLError();
|
OpenGL.CheckGLError();
|
||||||
OpenGL.glViewport(0, 0, size.Width, size.Height);
|
OpenGL.glViewport(0, 0, size.Width, size.Height);
|
||||||
OpenGL.CheckGLError();
|
OpenGL.CheckGLError();
|
||||||
OpenGL.glClearColor(0, 0, 0, 0);
|
OpenGL.glClearColor(clearColor.R, clearColor.G, clearColor.B, clearColor.A);
|
||||||
OpenGL.CheckGLError();
|
OpenGL.CheckGLError();
|
||||||
OpenGL.glClear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
|
OpenGL.glClear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
|
||||||
OpenGL.CheckGLError();
|
OpenGL.CheckGLError();
|
||||||
|
|||||||
@@ -62,13 +62,19 @@ namespace OpenRA.Platforms.Default
|
|||||||
public IFrameBuffer CreateFrameBuffer(Size s)
|
public IFrameBuffer CreateFrameBuffer(Size s)
|
||||||
{
|
{
|
||||||
VerifyThreadAffinity();
|
VerifyThreadAffinity();
|
||||||
return new FrameBuffer(s, new Texture());
|
return new FrameBuffer(s, new Texture(), Color.FromArgb(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
public IFrameBuffer CreateFrameBuffer(Size s, ITextureInternal texture)
|
public IFrameBuffer CreateFrameBuffer(Size s, Color clearColor)
|
||||||
{
|
{
|
||||||
VerifyThreadAffinity();
|
VerifyThreadAffinity();
|
||||||
return new FrameBuffer(s, texture);
|
return new FrameBuffer(s, new Texture(), clearColor);
|
||||||
|
}
|
||||||
|
|
||||||
|
public IFrameBuffer CreateFrameBuffer(Size s, ITextureInternal texture, Color clearColor)
|
||||||
|
{
|
||||||
|
VerifyThreadAffinity();
|
||||||
|
return new FrameBuffer(s, texture, clearColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IShader CreateShader(string name)
|
public IShader CreateShader(string name)
|
||||||
|
|||||||
@@ -86,7 +86,13 @@ namespace OpenRA.Platforms.Default
|
|||||||
doPresent = () => context.Present();
|
doPresent = () => context.Present();
|
||||||
getGLVersion = () => context.GLVersion;
|
getGLVersion = () => context.GLVersion;
|
||||||
getCreateTexture = () => new ThreadedTexture(this, (ITextureInternal)context.CreateTexture());
|
getCreateTexture = () => new ThreadedTexture(this, (ITextureInternal)context.CreateTexture());
|
||||||
getCreateFrameBuffer = s => new ThreadedFrameBuffer(this, context.CreateFrameBuffer((Size)s, (ITextureInternal)CreateTexture()));
|
getCreateFrameBuffer =
|
||||||
|
tuple =>
|
||||||
|
{
|
||||||
|
var t = (Tuple<Size, Color>)tuple;
|
||||||
|
return new ThreadedFrameBuffer(this,
|
||||||
|
context.CreateFrameBuffer(t.Item1, (ITextureInternal)CreateTexture(), t.Item2));
|
||||||
|
};
|
||||||
getCreateShader = name => new ThreadedShader(this, context.CreateShader((string)name));
|
getCreateShader = name => new ThreadedShader(this, context.CreateShader((string)name));
|
||||||
getCreateVertexBuffer = length => new ThreadedVertexBuffer(this, context.CreateVertexBuffer((int)length));
|
getCreateVertexBuffer = length => new ThreadedVertexBuffer(this, context.CreateVertexBuffer((int)length));
|
||||||
doDrawPrimitives =
|
doDrawPrimitives =
|
||||||
@@ -384,7 +390,12 @@ namespace OpenRA.Platforms.Default
|
|||||||
|
|
||||||
public IFrameBuffer CreateFrameBuffer(Size s)
|
public IFrameBuffer CreateFrameBuffer(Size s)
|
||||||
{
|
{
|
||||||
return Send(getCreateFrameBuffer, s);
|
return Send(getCreateFrameBuffer, Tuple.Create(s, Color.FromArgb(0)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public IFrameBuffer CreateFrameBuffer(Size s, Color clearColor)
|
||||||
|
{
|
||||||
|
return Send(getCreateFrameBuffer, Tuple.Create(s, clearColor));
|
||||||
}
|
}
|
||||||
|
|
||||||
public IShader CreateShader(string name)
|
public IShader CreateShader(string name)
|
||||||
|
|||||||
Reference in New Issue
Block a user