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

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

Issue 47743008: Add a basic test for GL_CHROMIUM_framebuffer_multisample (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address comments Created 7 years, 1 month 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #include <GLES2/gl2.h> 5 #include <GLES2/gl2.h>
6 #include <GLES2/gl2ext.h> 6 #include <GLES2/gl2ext.h>
7 #include <GLES2/gl2extchromium.h> 7 #include <GLES2/gl2extchromium.h>
8 8
9 #include "gpu/command_buffer/tests/gl_manager.h" 9 #include "gpu/command_buffer/tests/gl_manager.h"
10 #include "gpu/command_buffer/tests/gl_test_utils.h" 10 #include "gpu/command_buffer/tests/gl_test_utils.h"
(...skipping 29 matching lines...) Expand all
40 // If the caching is bad the second call to glBindFramebuffer will do nothing. 40 // If the caching is bad the second call to glBindFramebuffer will do nothing.
41 // which means the draw buffer is bad and will not return 41 // which means the draw buffer is bad and will not return
42 // GL_FRAMEBUFFER_COMPLETE and rendering will generate an error. 42 // GL_FRAMEBUFFER_COMPLETE and rendering will generate an error.
43 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), 43 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
44 glCheckFramebufferStatus(GL_FRAMEBUFFER)); 44 glCheckFramebufferStatus(GL_FRAMEBUFFER));
45 45
46 glClear(GL_COLOR_BUFFER_BIT); 46 glClear(GL_COLOR_BUFFER_BIT);
47 GLTestHelper::CheckGLError("no errors", __LINE__); 47 GLTestHelper::CheckGLError("no errors", __LINE__);
48 } 48 }
49 49
50 TEST_F(GLChromiumFramebufferMultisampleTest, DrawAndResolve) {
51 if (!GLTestHelper::HasExtension("GL_CHROMIUM_framebuffer_multisample")) {
52 return;
53 }
54
55 static const char* v_shader_str =
56 "attribute vec4 a_Position;\n"
57 "void main()\n"
58 "{\n"
59 " gl_Position = a_Position;\n"
60 "}\n";
61 static const char* f_shader_str =
62 "precision mediump float;\n"
63 "void main()\n"
64 "{\n"
65 " gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);\n"
66 "}\n";
67
68 GLuint program = GLTestHelper::LoadProgram(v_shader_str, f_shader_str);
69 glUseProgram(program);
70 GLuint position_loc = glGetAttribLocation(program, "a_Position");
71
72 GLTestHelper::SetupUnitQuad(position_loc);
73
74 const GLuint width = 100;
75 const GLuint height = 100;
76
77 // Create a sample buffer.
78 GLsizei num_samples = 4, max_samples = 0;
79 glGetIntegerv(GL_MAX_SAMPLES, &max_samples);
80 num_samples = std::min(num_samples, max_samples);
81
82 GLuint sample_fbo, sample_rb;
83 glGenRenderbuffers(1, &sample_rb);
84 glBindRenderbuffer(GL_RENDERBUFFER, sample_rb);
85 glRenderbufferStorageMultisampleEXT(
86 GL_RENDERBUFFER, num_samples, GL_RGBA8_OES, width, height);
87 GLint param = 0;
88 glGetRenderbufferParameteriv(
89 GL_RENDERBUFFER, GL_RENDERBUFFER_SAMPLES, &param);
90 EXPECT_GE(param, num_samples);
91
92 glGenFramebuffers(1, &sample_fbo);
93 glBindFramebuffer(GL_FRAMEBUFFER, sample_fbo);
94 glFramebufferRenderbuffer(GL_FRAMEBUFFER,
95 GL_COLOR_ATTACHMENT0,
96 GL_RENDERBUFFER,
97 sample_rb);
98 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
99 glCheckFramebufferStatus(GL_FRAMEBUFFER));
100
101 // Create another FBO to resolve the multisample buffer into.
102 GLuint resolve_fbo, resolve_tex;
103 glGenTextures(1, &resolve_tex);
104 glBindTexture(GL_TEXTURE_2D, resolve_tex);
105 glTexImage2D(GL_TEXTURE_2D,
106 0,
107 GL_RGBA,
108 width,
109 height,
110 0,
111 GL_RGBA,
112 GL_UNSIGNED_BYTE,
113 NULL);
114 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
115 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
116 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
117 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
118 glGenFramebuffers(1, &resolve_fbo);
119 glBindFramebuffer(GL_FRAMEBUFFER, resolve_fbo);
120 glFramebufferTexture2D(GL_FRAMEBUFFER,
121 GL_COLOR_ATTACHMENT0,
122 GL_TEXTURE_2D,
123 resolve_tex,
124 0);
125 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
126 glCheckFramebufferStatus(GL_FRAMEBUFFER));
127
128 // Draw one triangle (bottom left half).
129 glViewport(0, 0, width, height);
130 glBindFramebuffer(GL_FRAMEBUFFER, sample_fbo);
131 glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
132 glClear(GL_COLOR_BUFFER_BIT);
133 glDrawArrays(GL_TRIANGLES, 0, 3);
134
135 // Resolve.
136 glBindFramebuffer(GL_READ_FRAMEBUFFER, sample_fbo);
137 glBindFramebuffer(GL_DRAW_FRAMEBUFFER, resolve_fbo);
138 glClearColor(1.0f, 0.0f, 0.0f, 0.0f);
139 glClear(GL_COLOR_BUFFER_BIT);
140 glBlitFramebufferEXT(0,
141 0,
142 width,
143 height,
144 0,
145 0,
146 width,
147 height,
148 GL_COLOR_BUFFER_BIT,
149 GL_NEAREST);
150
151 // Verify.
152 const uint8 green[] = {0, 255, 0, 255};
153 const uint8 black[] = {0, 0, 0, 0};
154 glBindFramebuffer(GL_READ_FRAMEBUFFER, resolve_fbo);
155 EXPECT_TRUE(
156 GLTestHelper::CheckPixels(width / 4, (3 * height) / 4, 1, 1, 0, green));
157 EXPECT_TRUE(GLTestHelper::CheckPixels(width - 1, 0, 1, 1, 0, black));
158 }
159
50 } // namespace gpu 160 } // namespace gpu
51 161
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698