Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(165)

Side by Side Diff: gpu/command_buffer/tests/gl_unittests.cc

Issue 10106015: Allow textures to be moved from one GL context group to another. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #define GL_GLEXT_PROTOTYPES
6
5 #include <GLES2/gl2.h> 7 #include <GLES2/gl2.h>
8 #include <GLES2/gl2ext.h>
6 9
10 #include "gpu/command_buffer/service/mailbox_manager.h"
7 #include "gpu/command_buffer/tests/gl_manager.h" 11 #include "gpu/command_buffer/tests/gl_manager.h"
8 #include "testing/gmock/include/gmock/gmock.h" 12 #include "testing/gmock/include/gmock/gmock.h"
9 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
14 #include "ui/gfx/gl/gl_share_group.h"
10 15
11 namespace gpu { 16 namespace gpu {
12 17
18 namespace {
19 uint32 ReadTexel(GLuint id, GLint x, GLint y) {
20 GLint old_fbo = 0;
21 glGetIntegerv(GL_FRAMEBUFFER_BINDING, &old_fbo);
22
23 GLuint fbo;
24 glGenFramebuffers(1, &fbo);
25 glBindFramebuffer(GL_FRAMEBUFFER, fbo);
26 glFramebufferTexture2D(GL_FRAMEBUFFER,
27 GL_COLOR_ATTACHMENT0,
28 GL_TEXTURE_2D,
29 id,
30 0);
31 EXPECT_EQ(GL_FRAMEBUFFER_COMPLETE, glCheckFramebufferStatus(GL_FRAMEBUFFER));
32
33 uint32 texel;
34 glReadPixels(x, y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, &texel);
35
36 glBindFramebuffer(GL_FRAMEBUFFER, old_fbo);
37
38 glDeleteFramebuffers(1, &fbo);
39
40 return texel;
41 }
42 }
43
13 class GLTest : public testing::Test { 44 class GLTest : public testing::Test {
14 protected: 45 protected:
46 GLTest() : gl_(new gles2::MailboxManager, new gfx::GLShareGroup) {
47 }
48
15 virtual void SetUp() { 49 virtual void SetUp() {
16 gl_.Initialize(gfx::Size(4, 4)); 50 gl_.Initialize(gfx::Size(4, 4));
17 } 51 }
18 52
19 virtual void TearDown() { 53 virtual void TearDown() {
20 gl_.Destroy(); 54 gl_.Destroy();
21 } 55 }
22 56
23 GLManager gl_; 57 GLManager gl_;
24 }; 58 };
25 59
26 // Test that GL is at least minimally working. 60 // Test that GL is at least minimally working.
27 TEST_F(GLTest, Basic) { 61 TEST_F(GLTest, Basic) {
28 glClearColor(0.0f, 1.0f, 0.0f, 1.0f); 62 glClearColor(0.0f, 1.0f, 0.0f, 1.0f);
29 glClear(GL_COLOR_BUFFER_BIT); 63 glClear(GL_COLOR_BUFFER_BIT);
30 uint8 pixels[4] = { 0, }; 64 uint8 pixels[4] = { 0, };
31 glReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, pixels); 65 glReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
32 EXPECT_EQ(0u, pixels[0]); 66 EXPECT_EQ(0u, pixels[0]);
33 EXPECT_EQ(255u, pixels[1]); 67 EXPECT_EQ(255u, pixels[1]);
34 EXPECT_EQ(0u, pixels[2]); 68 EXPECT_EQ(0u, pixels[2]);
35 EXPECT_EQ(255u, pixels[3]); 69 EXPECT_EQ(255u, pixels[3]);
36 } 70 }
37 71
72 TEST_F(GLTest, ProduceAndConsumeTexture) {
Ken Russell (switch to Gerrit) 2012/04/26 01:10:53 Nice test!
73 GLManager gl2(gl_.mailbox_manager(), gl_.share_group());
74 gl2.Initialize(gfx::Size(1, 1));
75
76 char mailbox[32];
Ken Russell (switch to Gerrit) 2012/04/26 01:10:53 Really wish the "32" could be part of the type.
77 glGenMailboxCHROMIUM(mailbox);
78
79 gl_.MakeCurrent();
80
81 GLuint tex1;
82 glGenTextures(1, &tex1);
83
84 glBindTexture(GL_TEXTURE_2D, tex1);
85 uint32 source_pixel = 0xFF0000FF;
86 glTexImage2D(GL_TEXTURE_2D,
87 0,
88 GL_RGBA,
89 1, 1,
90 0,
91 GL_RGBA,
92 GL_UNSIGNED_BYTE,
93 &source_pixel);
94
95 glProduceTextureCHROMIUM(GL_TEXTURE_2D, mailbox);
96 glFlush();
97
98 gl2.MakeCurrent();
99
100 GLuint tex2;
101 glGenTextures(1, &tex2);
102
103 glBindTexture(GL_TEXTURE_2D, tex2);
104 glConsumeTextureCHROMIUM(GL_TEXTURE_2D, mailbox);
105 EXPECT_EQ(source_pixel, ReadTexel(tex2, 0, 0));
106 glProduceTextureCHROMIUM(GL_TEXTURE_2D, mailbox);
107 glFlush();
108
109 gl_.MakeCurrent();
110
111 glBindTexture(GL_TEXTURE_2D, tex1);
112 glConsumeTextureCHROMIUM(GL_TEXTURE_2D, mailbox);
113 EXPECT_EQ(source_pixel, ReadTexel(tex1, 0, 0));
114
115 gl2.Destroy();
116 }
117
38 } // namespace gpu 118 } // namespace gpu
39 119
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698