@@ -37,31 +37,37 @@ class GetImageTestNoExtensions : public ANGLETest
3737 GetImageTestNoExtensions () { setExtensionsEnabled (false ); }
3838};
3939
40- GLTexture InitSimpleTexture ( )
40+ GLTexture InitTextureWithSize ( uint32_t size, void *pixelData )
4141{
42- std::vector<GLColor> pixelData (kSize * kSize , GLColor::red);
43-
4442 // Create a simple texture.
4543 GLTexture tex;
4644 glBindTexture (GL_TEXTURE_2D, tex);
47- glTexImage2D (GL_TEXTURE_2D, 0 , GL_RGBA, kSize , kSize , 0 , GL_RGBA, GL_UNSIGNED_BYTE,
48- pixelData.data ());
45+ glTexImage2D (GL_TEXTURE_2D, 0 , GL_RGBA, size, size, 0 , GL_RGBA, GL_UNSIGNED_BYTE, pixelData);
4946 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
5047 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
51-
5248 return tex;
5349}
5450
55- GLRenderbuffer InitSimpleRenderbuffer ()
51+ GLTexture InitSimpleTexture ()
52+ {
53+ std::vector<GLColor> pixelData (kSize * kSize , GLColor::red);
54+ return InitTextureWithSize (kSize , pixelData.data ());
55+ }
56+
57+ GLRenderbuffer InitRenderbufferWithSize (uint32_t size)
5658{
5759 // Create a simple renderbuffer.
5860 GLRenderbuffer renderbuf;
5961 glBindRenderbuffer (GL_RENDERBUFFER, renderbuf);
60- glRenderbufferStorage (GL_RENDERBUFFER, GL_RGBA4, kSize , kSize );
61-
62+ glRenderbufferStorage (GL_RENDERBUFFER, GL_RGBA4, size, size);
6263 return renderbuf;
6364}
6465
66+ GLRenderbuffer InitSimpleRenderbuffer ()
67+ {
68+ return InitRenderbufferWithSize (kSize );
69+ }
70+
6571// Test validation for the extension functions.
6672TEST_P (GetImageTest, NegativeAPI)
6773{
@@ -139,6 +145,71 @@ TEST_P(GetImageTest, NegativeAPI)
139145 }
140146}
141147
148+ // Simple test for GetTexImage
149+ TEST_P (GetImageTest, GetTexImage)
150+ {
151+ // Verify the extension is enabled.
152+ ASSERT_TRUE (IsGLExtensionEnabled (kExtensionName ));
153+
154+ constexpr uint32_t kSmallSize = 2 ;
155+ std::vector<GLColor> expectedData = {GLColor::red, GLColor::blue, GLColor::green,
156+ GLColor::yellow};
157+
158+ glViewport (0 , 0 , kSmallSize , kSmallSize );
159+
160+ // Draw once with simple texture.
161+ GLTexture tex = InitTextureWithSize (kSmallSize , expectedData.data ());
162+ ANGLE_GL_PROGRAM (program, essl1_shaders::vs::Texture2D (), essl1_shaders::fs::Texture2D ());
163+ drawQuad (program, essl1_shaders::PositionAttrib (), 0.5 , 1 .0f , true );
164+ EXPECT_PIXEL_COLOR_EQ (0 , 0 , GLColor::red);
165+ ASSERT_GL_NO_ERROR ();
166+
167+ // Pack pixels tightly.
168+ glPixelStorei (GL_PACK_ALIGNMENT, 1 );
169+
170+ // Verify GetImage.
171+ std::vector<GLColor> actualData (kSmallSize * kSmallSize );
172+ glGetTexImageANGLE (GL_TEXTURE_2D, 0 , GL_RGBA, GL_UNSIGNED_BYTE, actualData.data ());
173+ EXPECT_GL_NO_ERROR ();
174+ EXPECT_EQ (expectedData, actualData);
175+ }
176+
177+ // Simple test for GetRenderbufferImage
178+ TEST_P (GetImageTest, GetRenderbufferImage)
179+ {
180+ // Verify the extension is enabled.
181+ ASSERT_TRUE (IsGLExtensionEnabled (kExtensionName ));
182+
183+ constexpr uint32_t kSmallSize = 2 ;
184+ std::vector<GLColor> expectedData = {GLColor::red, GLColor::blue, GLColor::green,
185+ GLColor::yellow};
186+
187+ glViewport (0 , 0 , kSmallSize , kSmallSize );
188+
189+ // Set up a simple Framebuffer with a Renderbuffer.
190+ GLRenderbuffer renderbuffer = InitRenderbufferWithSize (kSmallSize );
191+ GLFramebuffer framebuffer;
192+ glBindFramebuffer (GL_FRAMEBUFFER, framebuffer);
193+ glFramebufferRenderbuffer (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, renderbuffer);
194+ ASSERT_GL_FRAMEBUFFER_COMPLETE (GL_FRAMEBUFFER);
195+
196+ // Draw once with simple texture.
197+ GLTexture tex = InitTextureWithSize (kSmallSize , expectedData.data ());
198+ ANGLE_GL_PROGRAM (program, essl1_shaders::vs::Texture2D (), essl1_shaders::fs::Texture2D ());
199+ drawQuad (program, essl1_shaders::PositionAttrib (), 0.5 , 1 .0f , true );
200+ EXPECT_PIXEL_COLOR_EQ (0 , 0 , GLColor::red);
201+ ASSERT_GL_NO_ERROR ();
202+
203+ // Pack pixels tightly.
204+ glPixelStorei (GL_PACK_ALIGNMENT, 1 );
205+
206+ // Verify GetImage.
207+ std::vector<GLColor> actualData (kSmallSize * kSmallSize );
208+ glGetRenderbufferImageANGLE (GL_RENDERBUFFER, GL_RGBA, GL_UNSIGNED_BYTE, actualData.data ());
209+ EXPECT_GL_NO_ERROR ();
210+ EXPECT_EQ (expectedData, actualData);
211+ }
212+
142213// Verifies that the extension enums and entry points are invalid when the extension is disabled.
143214TEST_P (GetImageTestNoExtensions, EntryPointsInactive)
144215{
0 commit comments