Generate a GL Error if framebuffer creation fails.

This commit is contained in:
Paul Chote
2013-09-02 19:00:44 +12:00
parent 345bdda120
commit 575a87adc8
2 changed files with 14 additions and 2 deletions

View File

@@ -26,6 +26,13 @@ namespace OpenRA.Renderer.SdlCommon
GL_OUT_OF_MEMORY = Gl.GL_OUT_OF_MEMORY, GL_OUT_OF_MEMORY = Gl.GL_OUT_OF_MEMORY,
GL_TABLE_TOO_LARGE = Gl.GL_TABLE_TOO_LARGE, GL_TABLE_TOO_LARGE = Gl.GL_TABLE_TOO_LARGE,
GL_INVALID_OPERATION = Gl.GL_INVALID_OPERATION, 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() public static void CheckGlError()

View File

@@ -9,6 +9,7 @@
#endregion #endregion
using System; using System;
using System.Diagnostics;
using System.Drawing; using System.Drawing;
using System.Drawing.Imaging; using System.Drawing.Imaging;
using System.IO; using System.IO;
@@ -28,7 +29,7 @@ namespace OpenRA.Renderer.SdlCommon
{ {
this.size = size; this.size = size;
if (!Exts.IsPowerOf2(size.Width) || !Exts.IsPowerOf2(size.Height)) 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); Gl.glGenFramebuffersEXT(1, out framebuffer);
ErrorHandler.CheckGlError(); ErrorHandler.CheckGlError();
@@ -57,7 +58,11 @@ namespace OpenRA.Renderer.SdlCommon
// Test for completeness // Test for completeness
var status = Gl.glCheckFramebufferStatusEXT(Gl.GL_FRAMEBUFFER_EXT); var status = Gl.glCheckFramebufferStatusEXT(Gl.GL_FRAMEBUFFER_EXT);
if (status != Gl.GL_FRAMEBUFFER_COMPLETE_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 // Restore default buffer
Gl.glBindFramebufferEXT(Gl.GL_FRAMEBUFFER_EXT, 0); Gl.glBindFramebufferEXT(Gl.GL_FRAMEBUFFER_EXT, 0);