From 575a87adc8bdada69cf0097a849928177e5b45c6 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Mon, 2 Sep 2013 19:00:44 +1200 Subject: [PATCH] Generate a GL Error if framebuffer creation fails. --- OpenRA.Renderer.SdlCommon/ErrorHandler.cs | 7 +++++++ OpenRA.Renderer.SdlCommon/FrameBuffer.cs | 9 +++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/OpenRA.Renderer.SdlCommon/ErrorHandler.cs b/OpenRA.Renderer.SdlCommon/ErrorHandler.cs index 8282bbb3de..912b96e891 100644 --- a/OpenRA.Renderer.SdlCommon/ErrorHandler.cs +++ b/OpenRA.Renderer.SdlCommon/ErrorHandler.cs @@ -26,6 +26,13 @@ namespace OpenRA.Renderer.SdlCommon GL_OUT_OF_MEMORY = Gl.GL_OUT_OF_MEMORY, GL_TABLE_TOO_LARGE = Gl.GL_TABLE_TOO_LARGE, GL_INVALID_OPERATION = Gl.GL_INVALID_OPERATION, + + // Framebuffer errors + GL_FRAMEBUFFER_COMPLETE_EXT = Gl.GL_FRAMEBUFFER_COMPLETE_EXT, + GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT = Gl.GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT, + GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT = Gl.GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT, + GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT = Gl.GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT, + GL_FRAMEBUFFER_UNSUPPORTED_EXT = Gl.GL_FRAMEBUFFER_UNSUPPORTED_EXT, } public static void CheckGlError() diff --git a/OpenRA.Renderer.SdlCommon/FrameBuffer.cs b/OpenRA.Renderer.SdlCommon/FrameBuffer.cs index 4c3c2f175f..de031c207d 100644 --- a/OpenRA.Renderer.SdlCommon/FrameBuffer.cs +++ b/OpenRA.Renderer.SdlCommon/FrameBuffer.cs @@ -9,6 +9,7 @@ #endregion using System; +using System.Diagnostics; using System.Drawing; using System.Drawing.Imaging; using System.IO; @@ -28,7 +29,7 @@ namespace OpenRA.Renderer.SdlCommon { this.size = size; if (!Exts.IsPowerOf2(size.Width) || !Exts.IsPowerOf2(size.Height)) - throw new InvalidDataException("Non-power-of-two array {0}x{1}".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)); Gl.glGenFramebuffersEXT(1, out framebuffer); ErrorHandler.CheckGlError(); @@ -57,7 +58,11 @@ namespace OpenRA.Renderer.SdlCommon // Test for completeness var status = Gl.glCheckFramebufferStatusEXT(Gl.GL_FRAMEBUFFER_EXT); if (status != Gl.GL_FRAMEBUFFER_COMPLETE_EXT) - throw new InvalidOperationException("Error creating framebuffer"); + { + var error = "Error creating framebuffer: {0}\n{1}".F((ErrorHandler.GlError)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);