Fix leak with binding Framebuffers directly.
Using BindFramebuffer(1) then GenFramebuffers would return 1.
This leads to a memory leak and was something that was obscuring
debugging a bug in my ReadPixels fix for ES3.
This also fixes a bug where running the texture tests along produces
some random failures.
BUG=angleproject:1290
BUG=angleproject:1299
Change-Id: If11e8c743d2ddde725b12749ac012f670cd290e1
Reviewed-on: https://chromium-review.googlesource.com/324820
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/tests/gl_tests/ObjectAllocationTest.cpp b/src/tests/gl_tests/ObjectAllocationTest.cpp
new file mode 100644
index 0000000..b0e59f7
--- /dev/null
+++ b/src/tests/gl_tests/ObjectAllocationTest.cpp
@@ -0,0 +1,54 @@
+//
+// Copyright 2015 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// ObjectAllocationTest
+// Tests for object allocations and lifetimes.
+//
+
+#include "test_utils/ANGLETest.h"
+
+using namespace angle;
+
+namespace
+{
+
+class ObjectAllocationTest : public ANGLETest
+{
+ protected:
+ ObjectAllocationTest() {}
+};
+
+// Test that we don't re-allocate a bound framebuffer ID.
+TEST_P(ObjectAllocationTest, BindFramebufferBeforeGen)
+{
+ glBindFramebuffer(GL_FRAMEBUFFER, 1);
+ GLuint fbo = 0;
+ glGenFramebuffers(1, &fbo);
+ EXPECT_NE(1u, fbo);
+ glDeleteFramebuffers(1, &fbo);
+ EXPECT_GL_NO_ERROR();
+}
+
+// Test that we don't re-allocate a bound framebuffer ID, other pattern.
+TEST_P(ObjectAllocationTest, BindFramebufferAfterGen)
+{
+ GLuint firstFBO = 0;
+ glGenFramebuffers(1, &firstFBO);
+ glBindFramebuffer(GL_FRAMEBUFFER, 1);
+ glDeleteFramebuffers(1, &firstFBO);
+
+ glBindFramebuffer(GL_FRAMEBUFFER, 2);
+ GLuint secondFBOs[2] = {0};
+ glGenFramebuffers(2, secondFBOs);
+ EXPECT_NE(2u, secondFBOs[0]);
+ EXPECT_NE(2u, secondFBOs[1]);
+ glDeleteFramebuffers(2, secondFBOs);
+
+ EXPECT_GL_NO_ERROR();
+}
+
+} // anonymous namespace
+
+ANGLE_INSTANTIATE_TEST(ObjectAllocationTest, ES3_OPENGL(), ES3_D3D11());
\ No newline at end of file