@@ -1,6 +1,6 @@
|
||||
#region Copyright & License Information
|
||||
/*
|
||||
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
|
||||
* Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
|
||||
* This file is part of OpenRA, which is free software. It is made
|
||||
* available to you under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation. For more information,
|
||||
@@ -13,7 +13,7 @@ using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using OpenRA.Graphics;
|
||||
using Tao.OpenGl;
|
||||
using OpenTK.Graphics.OpenGL;
|
||||
|
||||
namespace OpenRA.Renderer.Sdl2
|
||||
{
|
||||
@@ -29,41 +29,41 @@ namespace OpenRA.Renderer.Sdl2
|
||||
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));
|
||||
|
||||
Gl.glGenFramebuffersEXT(1, out framebuffer);
|
||||
GL.Ext.GenFramebuffers(1, out framebuffer);
|
||||
ErrorHandler.CheckGlError();
|
||||
Gl.glBindFramebufferEXT(Gl.GL_FRAMEBUFFER_EXT, framebuffer);
|
||||
GL.Ext.BindFramebuffer(FramebufferTarget.FramebufferExt, framebuffer);
|
||||
ErrorHandler.CheckGlError();
|
||||
|
||||
// Color
|
||||
texture = new Texture();
|
||||
texture.SetEmpty(size.Width, size.Height);
|
||||
Gl.glFramebufferTexture2DEXT(Gl.GL_FRAMEBUFFER_EXT, Gl.GL_COLOR_ATTACHMENT0_EXT, Gl.GL_TEXTURE_2D, texture.ID, 0);
|
||||
GL.Ext.FramebufferTexture2D(FramebufferTarget.FramebufferExt, FramebufferAttachment.ColorAttachment0Ext, TextureTarget.Texture2D, texture.ID, 0);
|
||||
ErrorHandler.CheckGlError();
|
||||
|
||||
// Depth
|
||||
Gl.glGenRenderbuffersEXT(1, out depth);
|
||||
GL.Ext.GenRenderbuffers(1, out depth);
|
||||
ErrorHandler.CheckGlError();
|
||||
|
||||
Gl.glBindRenderbufferEXT(Gl.GL_RENDERBUFFER_EXT, depth);
|
||||
GL.Ext.BindRenderbuffer(RenderbufferTarget.RenderbufferExt, depth);
|
||||
ErrorHandler.CheckGlError();
|
||||
|
||||
Gl.glRenderbufferStorageEXT(Gl.GL_RENDERBUFFER_EXT, Gl.GL_DEPTH_COMPONENT, size.Width, size.Height);
|
||||
GL.Ext.RenderbufferStorage(RenderbufferTarget.RenderbufferExt, (RenderbufferStorage)All.DepthComponent, size.Width, size.Height);
|
||||
ErrorHandler.CheckGlError();
|
||||
|
||||
Gl.glFramebufferRenderbufferEXT(Gl.GL_FRAMEBUFFER_EXT, Gl.GL_DEPTH_ATTACHMENT_EXT, Gl.GL_RENDERBUFFER_EXT, depth);
|
||||
GL.Ext.FramebufferRenderbuffer(FramebufferTarget.FramebufferExt, FramebufferAttachment.DepthAttachmentExt, RenderbufferTarget.RenderbufferExt, depth);
|
||||
ErrorHandler.CheckGlError();
|
||||
|
||||
// Test for completeness
|
||||
var status = Gl.glCheckFramebufferStatusEXT(Gl.GL_FRAMEBUFFER_EXT);
|
||||
if (status != Gl.GL_FRAMEBUFFER_COMPLETE_EXT)
|
||||
var status = GL.Ext.CheckFramebufferStatus(FramebufferTarget.FramebufferExt);
|
||||
if (status != FramebufferErrorCode.FramebufferCompleteExt)
|
||||
{
|
||||
var error = "Error creating framebuffer: {0}\n{1}".F((ErrorHandler.GlError)status, new StackTrace());
|
||||
var error = "Error creating framebuffer: {0}\n{1}".F(status, new StackTrace());
|
||||
ErrorHandler.WriteGraphicsLog(error);
|
||||
throw new InvalidOperationException("OpenGL Error: See graphics.log for details.");
|
||||
}
|
||||
|
||||
// Restore default buffer
|
||||
Gl.glBindFramebufferEXT(Gl.GL_FRAMEBUFFER_EXT, 0);
|
||||
GL.Ext.BindFramebuffer(FramebufferTarget.FramebufferExt, 0);
|
||||
ErrorHandler.CheckGlError();
|
||||
}
|
||||
|
||||
@@ -74,8 +74,7 @@ namespace OpenRA.Renderer.Sdl2
|
||||
{
|
||||
fixed (int* ptr = &v[0])
|
||||
{
|
||||
IntPtr intPtr = new IntPtr((void*)ptr);
|
||||
Gl.glGetIntegerv(Gl.GL_VIEWPORT, intPtr);
|
||||
GL.GetInteger(GetPName.Viewport, ptr);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -85,9 +84,9 @@ namespace OpenRA.Renderer.Sdl2
|
||||
|
||||
void FinalizeInner()
|
||||
{
|
||||
Gl.glDeleteFramebuffersEXT(1, ref framebuffer);
|
||||
GL.Ext.DeleteFramebuffers(1, ref framebuffer);
|
||||
ErrorHandler.CheckGlError();
|
||||
Gl.glDeleteRenderbuffersEXT(1, ref depth);
|
||||
GL.Ext.DeleteRenderbuffers(1, ref depth);
|
||||
ErrorHandler.CheckGlError();
|
||||
}
|
||||
|
||||
@@ -99,25 +98,25 @@ namespace OpenRA.Renderer.Sdl2
|
||||
// Cache viewport rect to restore when unbinding
|
||||
cv = ViewportRectangle();
|
||||
|
||||
Gl.glFlush();
|
||||
GL.Flush();
|
||||
ErrorHandler.CheckGlError();
|
||||
Gl.glBindFramebufferEXT(Gl.GL_FRAMEBUFFER_EXT, framebuffer);
|
||||
GL.Ext.BindFramebuffer(FramebufferTarget.FramebufferExt, framebuffer);
|
||||
ErrorHandler.CheckGlError();
|
||||
Gl.glViewport(0, 0, size.Width, size.Height);
|
||||
GL.Viewport(0, 0, size.Width, size.Height);
|
||||
ErrorHandler.CheckGlError();
|
||||
Gl.glClearColor(0, 0, 0, 0);
|
||||
GL.ClearColor(0, 0, 0, 0);
|
||||
ErrorHandler.CheckGlError();
|
||||
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
|
||||
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
|
||||
ErrorHandler.CheckGlError();
|
||||
}
|
||||
|
||||
public void Unbind()
|
||||
{
|
||||
Gl.glFlush();
|
||||
GL.Flush();
|
||||
ErrorHandler.CheckGlError();
|
||||
Gl.glBindFramebufferEXT(Gl.GL_FRAMEBUFFER_EXT, 0);
|
||||
GL.Ext.BindFramebuffer(FramebufferTarget.FramebufferExt, 0);
|
||||
ErrorHandler.CheckGlError();
|
||||
Gl.glViewport(cv[0], cv[1], cv[2], cv[3]);
|
||||
GL.Viewport(cv[0], cv[1], cv[2], cv[3]);
|
||||
ErrorHandler.CheckGlError();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user