فهرست منبع

added out of memory tests

ncannasse 8 سال پیش
والد
کامیت
80b4e51cfa
1فایلهای تغییر یافته به همراه27 افزوده شده و 2 حذف شده
  1. 27 2
      h3d/impl/GlDriver.hx

+ 27 - 2
h3d/impl/GlDriver.hx

@@ -558,12 +558,27 @@ class GlDriver extends Driver {
 		t.flags.unset(WasCleared);
 		var bind = t.flags.has(Cubic) ? GL.TEXTURE_CUBE_MAP : GL.TEXTURE_2D;
 		gl.bindTexture(bind, tt.t);
+		var outOfMem = false;
 		if( t.flags.has(Cubic) ) {
-			for( i in 0...6 )
+			for( i in 0...6 ) {
 				gl.texImage2D(CUBE_FACES[i], 0, tt.internalFmt, tt.width, tt.height, 0, getChannels(tt), tt.pixelFmt, null);
-		} else
+				if( gl.getError() == GL.OUT_OF_MEMORY ) {
+					outOfMem = true;
+					break;
+				}
+			}
+		} else {
 			gl.texImage2D(bind, 0, tt.internalFmt, tt.width, tt.height, 0, getChannels(tt), tt.pixelFmt, null);
+			if( gl.getError() == GL.OUT_OF_MEMORY )
+				outOfMem = true;
+		}
 		gl.bindTexture(bind, null);
+
+		if( outOfMem ) {
+			gl.deleteTexture(tt.t);
+			return null;
+		}
+
 		return tt;
 	}
 
@@ -603,7 +618,12 @@ class GlDriver extends Driver {
 		var tmp = new Uint8Array(m.size * m.stride * 4);
 		gl.bufferData(GL.ARRAY_BUFFER, tmp, m.flags.has(Dynamic) ? GL.DYNAMIC_DRAW : GL.STATIC_DRAW);
 		#end
+		var outOfMem = gl.getError() == GL.OUT_OF_MEMORY;
 		gl.bindBuffer(GL.ARRAY_BUFFER, null);
+		if( outOfMem ) {
+			gl.deleteBuffer(b);
+			return null;
+		}
 		return { b : b, stride : m.stride };
 	}
 
@@ -618,7 +638,12 @@ class GlDriver extends Driver {
 		var tmp = new Uint16Array(count);
 		gl.bufferData(GL.ELEMENT_ARRAY_BUFFER, tmp, GL.STATIC_DRAW);
 		#end
+		var outOfMem = gl.getError() == GL.OUT_OF_MEMORY;
 		gl.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, null);
+		if( outOfMem ) {
+			gl.deleteBuffer(b);
+			return null;
+		}
 		return b;
 	}