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

Side by Side Diff: ppapi/native_client/tests/ppapi_browser/ppb_graphics3d/ppapi_ppb_graphics3d.cc

Issue 7737013: Move PPAPI graphics3d and opengles interfaces out of Dev. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 3 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 // Test cases for PPB_Graphics3D functions. 5 // Test cases for PPB_Graphics3D functions.
6 // TODO(nfullagar): More comprehensive testing of the PPAPI interface. 6 // TODO(nfullagar): More comprehensive testing of the PPAPI interface.
7 7
8 #include <GLES2/gl2.h> 8 #include <GLES2/gl2.h>
9 #include <string.h> 9 #include <string.h>
10 #include <sys/time.h> 10 #include <sys/time.h>
11 11
12 #include "native_client/src/include/nacl_macros.h" 12 #include "native_client/src/include/nacl_macros.h"
13 #include "native_client/src/shared/platform/nacl_check.h" 13 #include "native_client/src/shared/platform/nacl_check.h"
14 #include "native_client/tests/ppapi_test_lib/get_browser_interface.h" 14 #include "native_client/tests/ppapi_test_lib/get_browser_interface.h"
15 #include "native_client/tests/ppapi_test_lib/internal_utils.h" 15 #include "native_client/tests/ppapi_test_lib/internal_utils.h"
16 #include "native_client/tests/ppapi_test_lib/test_interface.h" 16 #include "native_client/tests/ppapi_test_lib/test_interface.h"
17 #include "ppapi/c/dev/pp_graphics_3d_dev.h"
18 #include "ppapi/c/dev/ppb_graphics_3d_dev.h"
19 #include "ppapi/c/dev/ppb_opengles_dev.h"
20 #include "ppapi/c/dev/ppb_testing_dev.h" 17 #include "ppapi/c/dev/ppb_testing_dev.h"
21 #include "ppapi/c/pp_bool.h" 18 #include "ppapi/c/pp_bool.h"
22 #include "ppapi/c/pp_completion_callback.h" 19 #include "ppapi/c/pp_completion_callback.h"
23 #include "ppapi/c/pp_errors.h" 20 #include "ppapi/c/pp_errors.h"
21 #include "ppapi/c/pp_graphics_3d.h"
24 #include "ppapi/c/pp_point.h" 22 #include "ppapi/c/pp_point.h"
25 #include "ppapi/c/pp_rect.h" 23 #include "ppapi/c/pp_rect.h"
26 #include "ppapi/c/pp_size.h" 24 #include "ppapi/c/pp_size.h"
27 #include "ppapi/c/ppb_core.h" 25 #include "ppapi/c/ppb_core.h"
26 #include "ppapi/c/ppb_graphics_3d.h"
28 #include "ppapi/c/ppb_image_data.h" 27 #include "ppapi/c/ppb_image_data.h"
29 #include "ppapi/c/ppb_instance.h" 28 #include "ppapi/c/ppb_instance.h"
29 #include "ppapi/c/ppb_opengles.h"
30 #include "ppapi/c/ppb_url_loader.h" 30 #include "ppapi/c/ppb_url_loader.h"
31 #include "ppapi/lib/gl/gles2/gl2ext_ppapi.h" 31 #include "ppapi/lib/gl/gles2/gl2ext_ppapi.h"
32 32
33 namespace { 33 namespace {
34 34
35 const int kWidth = 320; 35 const int kWidth = 320;
36 const int kHeight = 200; 36 const int kHeight = 200;
37 //////////////////////////////////////////////////////////////////////////////// 37 ////////////////////////////////////////////////////////////////////////////////
38 // Test Cases 38 // Test Cases
39 //////////////////////////////////////////////////////////////////////////////// 39 ////////////////////////////////////////////////////////////////////////////////
40 40
41 // Tests the Graphics3D interface is available. 41 // Tests the Graphics3D interface is available.
42 void TestGraphics3DInterface() { 42 void TestGraphics3DInterface() {
43 EXPECT(PPBGraphics3DDev() != NULL); 43 EXPECT(PPBGraphics3D() != NULL);
44 TEST_PASSED; 44 TEST_PASSED;
45 } 45 }
46 46
47 // Tests the OpenGLES interface is available. 47 // Tests the OpenGLES interface is available.
48 void TestOpenGLES2Interface() { 48 void TestOpenGLES2Interface() {
49 EXPECT(PPBOpenGLES2Dev() != NULL); 49 EXPECT(PPBOpenGLES2() != NULL);
50 TEST_PASSED; 50 TEST_PASSED;
51 } 51 }
52 52
53 // Tests PPB_Graphics3D::Create(). 53 // Tests PPB_Graphics3D::Create().
54 void TestCreate() { 54 void TestCreate() {
55 int32_t attribs[] = { 55 int32_t attribs[] = {
56 PP_GRAPHICS3DATTRIB_WIDTH, kWidth, 56 PP_GRAPHICS3DATTRIB_WIDTH, kWidth,
57 PP_GRAPHICS3DATTRIB_HEIGHT, kHeight, 57 PP_GRAPHICS3DATTRIB_HEIGHT, kHeight,
58 PP_GRAPHICS3DATTRIB_NONE}; 58 PP_GRAPHICS3DATTRIB_NONE};
59 PP_Resource graphics3d_id = PPBGraphics3DDev()-> 59 PP_Resource graphics3d_id = PPBGraphics3D()->
60 Create(pp_instance(), kInvalidResource, attribs); 60 Create(pp_instance(), kInvalidResource, attribs);
61 EXPECT(graphics3d_id != kInvalidResource); 61 EXPECT(graphics3d_id != kInvalidResource);
62 PPBCore()->ReleaseResource(graphics3d_id); 62 PPBCore()->ReleaseResource(graphics3d_id);
63 PP_Resource invalid_graphics3d_id = PPBGraphics3DDev()-> 63 PP_Resource invalid_graphics3d_id = PPBGraphics3D()->
64 Create(0, kInvalidResource, attribs); 64 Create(0, kInvalidResource, attribs);
65 EXPECT(invalid_graphics3d_id == kInvalidResource); 65 EXPECT(invalid_graphics3d_id == kInvalidResource);
66 int32_t empty_attribs[] = { 66 int32_t empty_attribs[] = {
67 PP_GRAPHICS3DATTRIB_NONE}; 67 PP_GRAPHICS3DATTRIB_NONE};
68 PP_Resource graphics3d_empty_attrib_id = PPBGraphics3DDev()-> 68 PP_Resource graphics3d_empty_attrib_id = PPBGraphics3D()->
69 Create(pp_instance(), kInvalidResource, empty_attribs); 69 Create(pp_instance(), kInvalidResource, empty_attribs);
70 EXPECT(graphics3d_empty_attrib_id != kInvalidResource); 70 EXPECT(graphics3d_empty_attrib_id != kInvalidResource);
71 PPBCore()->ReleaseResource(graphics3d_empty_attrib_id); 71 PPBCore()->ReleaseResource(graphics3d_empty_attrib_id);
72 PP_Resource graphics3d_null_attrib_id = PPBGraphics3DDev()-> 72 PP_Resource graphics3d_null_attrib_id = PPBGraphics3D()->
73 Create(pp_instance(), kInvalidResource, NULL); 73 Create(pp_instance(), kInvalidResource, NULL);
74 EXPECT(graphics3d_null_attrib_id != kInvalidResource); 74 EXPECT(graphics3d_null_attrib_id != kInvalidResource);
75 PPBCore()->ReleaseResource(graphics3d_null_attrib_id); 75 PPBCore()->ReleaseResource(graphics3d_null_attrib_id);
76 TEST_PASSED; 76 TEST_PASSED;
77 } 77 }
78 78
79 // Tests PPB_Graphics3D::IsGraphics3D(). 79 // Tests PPB_Graphics3D::IsGraphics3D().
80 void TestIsGraphics3D() { 80 void TestIsGraphics3D() {
81 int32_t attribs[] = { 81 int32_t attribs[] = {
82 PP_GRAPHICS3DATTRIB_WIDTH, kWidth, 82 PP_GRAPHICS3DATTRIB_WIDTH, kWidth,
83 PP_GRAPHICS3DATTRIB_HEIGHT, kHeight, 83 PP_GRAPHICS3DATTRIB_HEIGHT, kHeight,
84 PP_GRAPHICS3DATTRIB_NONE}; 84 PP_GRAPHICS3DATTRIB_NONE};
85 PP_Resource graphics3d_id = PPBGraphics3DDev()-> 85 PP_Resource graphics3d_id = PPBGraphics3D()->
86 Create(pp_instance(), kInvalidResource, attribs); 86 Create(pp_instance(), kInvalidResource, attribs);
87 EXPECT(graphics3d_id != kInvalidResource); 87 EXPECT(graphics3d_id != kInvalidResource);
88 EXPECT(PPBGraphics3DDev()->IsGraphics3D(graphics3d_id) == PP_TRUE); 88 EXPECT(PPBGraphics3D()->IsGraphics3D(graphics3d_id) == PP_TRUE);
89 PPBCore()->ReleaseResource(graphics3d_id); 89 PPBCore()->ReleaseResource(graphics3d_id);
90 TEST_PASSED; 90 TEST_PASSED;
91 } 91 }
92 92
93 // Tests glInitializePPAPI. 93 // Tests glInitializePPAPI.
94 void Test_glInitializePPAPI() { 94 void Test_glInitializePPAPI() {
95 GLboolean init_ppapi = glInitializePPAPI(ppb_get_interface()); 95 GLboolean init_ppapi = glInitializePPAPI(ppb_get_interface());
96 EXPECT(init_ppapi == true); 96 EXPECT(init_ppapi == true);
97 TEST_PASSED; 97 TEST_PASSED;
98 } 98 }
(...skipping 12 matching lines...) Expand all
111 // instead of going through the PPAPI PPBOpenGLES2 interface. 111 // instead of going through the PPAPI PPBOpenGLES2 interface.
112 glSetCurrentContextPPAPI(info->graphics3d_id); 112 glSetCurrentContextPPAPI(info->graphics3d_id);
113 glViewport(0, 0, kWidth, kHeight); 113 glViewport(0, 0, kWidth, kHeight);
114 float blue = float(info->frame_counter) / float(info->frame_end); 114 float blue = float(info->frame_counter) / float(info->frame_end);
115 glClearColor(0.0f, 0.0f, blue, 1.0f); 115 glClearColor(0.0f, 0.0f, blue, 1.0f);
116 glClear(GL_COLOR_BUFFER_BIT); 116 glClear(GL_COLOR_BUFFER_BIT);
117 info->frame_counter += info->frame_increment; 117 info->frame_counter += info->frame_increment;
118 if (info->frame_counter < info->frame_end) { 118 if (info->frame_counter < info->frame_end) {
119 PP_CompletionCallback cc = 119 PP_CompletionCallback cc =
120 PP_MakeCompletionCallback(TestSwapCallback, info); 120 PP_MakeCompletionCallback(TestSwapCallback, info);
121 int32_t result = PPBGraphics3DDev()->SwapBuffers(info->graphics3d_id, cc); 121 int32_t result = PPBGraphics3D()->SwapBuffers(info->graphics3d_id, cc);
122 CHECK(PP_OK_COMPLETIONPENDING == result); 122 CHECK(PP_OK_COMPLETIONPENDING == result);
123 } else { 123 } else {
124 PPBCore()->ReleaseResource(info->graphics3d_id); 124 PPBCore()->ReleaseResource(info->graphics3d_id);
125 delete info; 125 delete info;
126 TEST_PASSED; 126 TEST_PASSED;
127 } 127 }
128 glSetCurrentContextPPAPI(0); 128 glSetCurrentContextPPAPI(0);
129 } 129 }
130 130
131 // Tests PPB_Graphics3D::SwapBuffers(). This test will render a visible 131 // Tests PPB_Graphics3D::SwapBuffers(). This test will render a visible
132 // result to the screen -- fading in a solid blue rectangle. 132 // result to the screen -- fading in a solid blue rectangle.
133 void TestSwapBuffers() { 133 void TestSwapBuffers() {
134 int32_t attribs[] = { 134 int32_t attribs[] = {
135 PP_GRAPHICS3DATTRIB_WIDTH, kWidth, 135 PP_GRAPHICS3DATTRIB_WIDTH, kWidth,
136 PP_GRAPHICS3DATTRIB_HEIGHT, kHeight, 136 PP_GRAPHICS3DATTRIB_HEIGHT, kHeight,
137 PP_GRAPHICS3DATTRIB_NONE}; 137 PP_GRAPHICS3DATTRIB_NONE};
138 PP_Resource graphics3d_id = PPBGraphics3DDev()-> 138 PP_Resource graphics3d_id = PPBGraphics3D()->
139 Create(pp_instance(), kInvalidResource, attribs); 139 Create(pp_instance(), kInvalidResource, attribs);
140 EXPECT(graphics3d_id != kInvalidResource); 140 EXPECT(graphics3d_id != kInvalidResource);
141 int32_t success = PPBInstance()->BindGraphics(pp_instance(), graphics3d_id); 141 int32_t success = PPBInstance()->BindGraphics(pp_instance(), graphics3d_id);
142 EXPECT(success == PP_TRUE); 142 EXPECT(success == PP_TRUE);
143 RenderInfo* render_info = new RenderInfo; 143 RenderInfo* render_info = new RenderInfo;
144 render_info->graphics3d_id = graphics3d_id; 144 render_info->graphics3d_id = graphics3d_id;
145 render_info->frame_counter = 0; 145 render_info->frame_counter = 0;
146 render_info->frame_end = 256; 146 render_info->frame_end = 256;
147 render_info->frame_increment = 2; 147 render_info->frame_increment = 2;
148 PP_CompletionCallback cc = PP_MakeCompletionCallback( 148 PP_CompletionCallback cc = PP_MakeCompletionCallback(
149 TestSwapCallback, render_info); 149 TestSwapCallback, render_info);
150 PPBCore()->CallOnMainThread(0, cc, PP_OK); 150 PPBCore()->CallOnMainThread(0, cc, PP_OK);
151 } 151 }
152 152
153 void TestResizeAndSwapCallback(void* user_data, int32_t result) {
154 EXPECT(result == PP_OK);
155 RenderInfo* info = static_cast<RenderInfo *>(user_data);
156 int32_t new_width = kWidth - info->frame_counter * 2;
157 int32_t new_height = kHeight - info->frame_counter * 2;
158 if (new_width < 0) new_width = 0;
159 if (new_height < 0) new_height = 0;
160 int32_t resize_result = PPBGraphics3D()->ResizeBuffers(info->graphics3d_id,
161 new_width, new_height);
162 EXPECT(resize_result == PP_OK);
163 // Set graphics3d_id to the main context, so we can use normal gl style calls
164 // instead of going through the PPAPI PPBOpenGLES2 interface.
165 glSetCurrentContextPPAPI(info->graphics3d_id);
166 // Note: still use original width & height in glViewport; visual inspection
167 // should show a clipped window that shrinks to new_width, new_height size.
168 glViewport(0, 0, new_width, new_height);
169 float green = float(info->frame_counter) / float(info->frame_end);
170 glClearColor(0.0f, green, 0.0f, 1.0f);
171 glClear(GL_COLOR_BUFFER_BIT);
172 info->frame_counter += info->frame_increment;
173 if (info->frame_counter < info->frame_end) {
174 PP_CompletionCallback cc =
175 PP_MakeCompletionCallback(TestResizeAndSwapCallback, info);
176 int32_t result = PPBGraphics3D()->SwapBuffers(info->graphics3d_id, cc);
177 CHECK(PP_OK_COMPLETIONPENDING == result);
178 } else {
179 PPBCore()->ReleaseResource(info->graphics3d_id);
180 delete info;
181 TEST_PASSED;
182 }
183 glSetCurrentContextPPAPI(0);
184 }
185
186 // Tests PPB_Graphics3D::ResizeBuffers().
187 void TestResizeBuffers(int32_t* attribs) {
188 PP_Resource graphics3d_id = PPBGraphics3D()->
189 Create(pp_instance(), kInvalidResource, attribs);
190 EXPECT(graphics3d_id != kInvalidResource);
191 int32_t success = PPBInstance()->BindGraphics(pp_instance(), graphics3d_id);
192 EXPECT(success == PP_TRUE);
193 int32_t result;
194 // Attempt negative width & heights
195 result = PPBGraphics3D()->ResizeBuffers(graphics3d_id, -1000, 0);
196 EXPECT(result == PP_ERROR_BADARGUMENT);
197 result = PPBGraphics3D()->ResizeBuffers(graphics3d_id, 100, -1);
198 EXPECT(result == PP_ERROR_BADARGUMENT);
199 result = PPBGraphics3D()->ResizeBuffers(graphics3d_id, -1, -1);
200 EXPECT(result == PP_ERROR_BADARGUMENT);
201 RenderInfo* render_info = new RenderInfo;
202 render_info->graphics3d_id = graphics3d_id;
203 render_info->frame_counter = 0;
204 render_info->frame_end = 256;
205 render_info->frame_increment = 8;
206 PP_CompletionCallback cc = PP_MakeCompletionCallback(
207 TestResizeAndSwapCallback, render_info);
208 PPBCore()->CallOnMainThread(0, cc, PP_OK);
209 }
210
211
212 // Tests PPB_Graphics3D::ResizeBuffers() w/o depth buffer attached.
213 void TestResizeBuffersWithoutDepthBuffer() {
214 int32_t attribs[] = {
215 PP_GRAPHICS3DATTRIB_WIDTH, kWidth,
216 PP_GRAPHICS3DATTRIB_HEIGHT, kHeight,
217 PP_GRAPHICS3DATTRIB_NONE};
218 TestResizeBuffers(attribs);
219 }
220
221
222 // Tests PPB_Graphics3D::ResizeBuffers() w/ depth buffer attached.
223 void TestResizeBuffersWithDepthBuffer() {
224 int32_t attribs[] = {
225 PP_GRAPHICS3DATTRIB_WIDTH, kWidth,
226 PP_GRAPHICS3DATTRIB_HEIGHT, kHeight,
227 PP_GRAPHICS3DATTRIB_DEPTH_SIZE, 32,
228 PP_GRAPHICS3DATTRIB_NONE};
229 TestResizeBuffers(attribs);
230 }
231
232
153 // Tests glTerminatePPAPI. 233 // Tests glTerminatePPAPI.
154 void Test_glTerminatePPAPI() { 234 void Test_glTerminatePPAPI() {
155 GLboolean terminate = glTerminatePPAPI(); 235 GLboolean terminate = glTerminatePPAPI();
156 EXPECT(terminate == true); 236 EXPECT(terminate == true);
157 TEST_PASSED; 237 TEST_PASSED;
158 } 238 }
159 239
160 } // namespace 240 } // namespace
161 241
162 void SetupTests() { 242 void SetupTests() {
163 RegisterTest("TestGraphics3DInterface", TestGraphics3DInterface); 243 RegisterTest("TestGraphics3DInterface", TestGraphics3DInterface);
164 RegisterTest("TestOpenGLES2Interface", TestOpenGLES2Interface); 244 RegisterTest("TestOpenGLES2Interface", TestOpenGLES2Interface);
165 RegisterTest("TestCreate", TestCreate); 245 RegisterTest("TestCreate", TestCreate);
166 RegisterTest("TestIsGraphics3D", TestIsGraphics3D); 246 RegisterTest("TestIsGraphics3D", TestIsGraphics3D);
167 RegisterTest("Test_glInitializePPAPI", Test_glInitializePPAPI); 247 RegisterTest("Test_glInitializePPAPI", Test_glInitializePPAPI);
168 RegisterTest("TestSwapBuffers", TestSwapBuffers); 248 RegisterTest("TestSwapBuffers", TestSwapBuffers);
249 RegisterTest("TestResizeBuffersWithoutDepthBuffer",
250 TestResizeBuffersWithoutDepthBuffer);
251 RegisterTest("TestResizeBuffersWithDepthBuffer",
252 TestResizeBuffersWithDepthBuffer);
169 RegisterTest("Test_glTerminatePPAPI", Test_glTerminatePPAPI); 253 RegisterTest("Test_glTerminatePPAPI", Test_glTerminatePPAPI);
170 } 254 }
171 255
172 void SetupPluginInterfaces() { 256 void SetupPluginInterfaces() {
173 // none 257 // none
174 } 258 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698