Allow FrameBuffer clear color to be customized.
This commit is contained in:
@@ -20,12 +20,14 @@ namespace OpenRA.Platforms.Default
|
||||
{
|
||||
readonly ITexture texture;
|
||||
readonly Size size;
|
||||
readonly Color clearColor;
|
||||
uint framebuffer, depth;
|
||||
bool disposed;
|
||||
|
||||
public FrameBuffer(Size size, ITextureInternal texture)
|
||||
public FrameBuffer(Size size, ITextureInternal texture, Color clearColor)
|
||||
{
|
||||
this.size = size;
|
||||
this.clearColor = clearColor;
|
||||
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));
|
||||
|
||||
@@ -94,7 +96,7 @@ namespace OpenRA.Platforms.Default
|
||||
OpenGL.CheckGLError();
|
||||
OpenGL.glViewport(0, 0, size.Width, size.Height);
|
||||
OpenGL.CheckGLError();
|
||||
OpenGL.glClearColor(0, 0, 0, 0);
|
||||
OpenGL.glClearColor(clearColor.R, clearColor.G, clearColor.B, clearColor.A);
|
||||
OpenGL.CheckGLError();
|
||||
OpenGL.glClear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
|
||||
OpenGL.CheckGLError();
|
||||
|
||||
@@ -62,13 +62,19 @@ namespace OpenRA.Platforms.Default
|
||||
public IFrameBuffer CreateFrameBuffer(Size s)
|
||||
{
|
||||
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();
|
||||
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)
|
||||
|
||||
@@ -86,7 +86,13 @@ namespace OpenRA.Platforms.Default
|
||||
doPresent = () => context.Present();
|
||||
getGLVersion = () => context.GLVersion;
|
||||
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));
|
||||
getCreateVertexBuffer = length => new ThreadedVertexBuffer(this, context.CreateVertexBuffer((int)length));
|
||||
doDrawPrimitives =
|
||||
@@ -384,7 +390,12 @@ namespace OpenRA.Platforms.Default
|
||||
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user