// Read framebuffer to 'pixelsOut' via glCopyTexImage2D and GL_TEXTURE_2D. void TestCopyTexImage2D(int x, int y, int, PixelRect *pixelsOut) { // Init texture with given pixels. GLTexture destTexture; pixelsOut->toTexture2D(GL_TEXTURE_2D, destTexture.get()); // Read framebuffer -> texture -> 'pixelsOut' glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, x, y, kReadWidth, kReadHeight, 0); readTexture2D(GL_TEXTURE_2D, destTexture.get(), kReadWidth, kReadHeight, pixelsOut); }
// Read framebuffer to 'pixelsOut' via glCopyTexSubImage2D and cube map. void TestCopyTexSubImageCube(int x, int y, int, PixelRect *pixelsOut) { // Init texture with given pixels. GLTexture destTexture; pixelsOut->toTexture2D(GL_TEXTURE_CUBE_MAP, destTexture.get()); // Read framebuffer -> texture -> 'pixelsOut' glCopyTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, 0, 0, x, y, kReadWidth, kReadHeight); readTexture2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, destTexture.get(), kReadWidth, kReadHeight, pixelsOut); }
// Read framebuffer to 'pixelsOut' via glCopyTexSubImage3D. void TestCopyTexSubImage3D(int x, int y, int z, PixelRect *pixelsOut) { // Init texture with given pixels. GLTexture destTexture; pixelsOut->toTexture3D(destTexture.get(), kTextureDepth); // Read framebuffer -> texture -> 'pixelsOut' glCopyTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, z, x, y, kReadWidth, kReadHeight); readTexture3D(destTexture, kReadWidth, kReadHeight, z, pixelsOut); }
EXPECT_GL_NO_ERROR(); glDeleteProgram(program); } class DrawBuffersTestES3 : public DrawBuffersTest {}; // Test that binding multiple layers of a 3D texture works correctly TEST_P(DrawBuffersTestES3, 3DTextures) { ANGLE_SKIP_TEST_IF(!setupTest()); GLTexture texture; glBindTexture(GL_TEXTURE_3D, texture.get()); glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, getWindowWidth(), getWindowHeight(), getWindowWidth(), 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr); glFramebufferTextureLayer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, texture.get(), 0, 0); glFramebufferTextureLayer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, texture.get(), 0, 1); glFramebufferTextureLayer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT2, texture.get(), 0, 2); glFramebufferTextureLayer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT3, texture.get(), 0, 3); bool flags[8] = {true, true, true, true, false}; GLuint program; setupMRTProgram(flags, &program); const GLenum bufs[] = { GL_COLOR_ATTACHMENT0,