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

Side by Side Diff: command_buffer/service/cross/gl/states_gl.cc

Issue 332036: move all O3D specific command buffer stuff to command_buffer::o3d... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/o3d/
Patch Set: Created 11 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
OLDNEW
1 /* 1 /*
2 * Copyright 2009, Google Inc. 2 * Copyright 2009, Google Inc.
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are 6 * modification, are permitted provided that the following conditions are
7 * met: 7 * met:
8 * 8 *
9 * * Redistributions of source code must retain the above copyright 9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 14 matching lines...) Expand all
25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */ 30 */
31 31
32 32
33 // This file implements the render state-related GAPI functions on GL. 33 // This file implements the render state-related GAPI functions on GL.
34 34
35 #include "command_buffer/common/cross/cmd_buffer_format.h" 35 #include "command_buffer/common/cross/o3d_cmd_format.h"
36 #include "command_buffer/service/cross/gl/gapi_gl.h" 36 #include "command_buffer/service/cross/gl/gapi_gl.h"
37 37
38 namespace o3d { 38 namespace o3d {
39 namespace command_buffer { 39 namespace command_buffer {
40 namespace o3d {
40 41
41 namespace { 42 namespace {
42 43
43 GLenum kGLPolygonModes[] = { 44 GLenum kGLPolygonModes[] = {
44 GL_POINT, 45 GL_POINT,
45 GL_LINE, 46 GL_LINE,
46 GL_FILL, 47 GL_FILL,
47 }; 48 };
48 COMPILE_ASSERT(command_buffer::kNumPolygonMode == arraysize(kGLPolygonModes), 49 COMPILE_ASSERT(o3d::kNumPolygonMode == arraysize(kGLPolygonModes),
49 kGLPolygonModes_does_not_match_command_buffer_PolygonMode); 50 kGLPolygonModes_does_not_match_command_buffer_PolygonMode);
50 51
51 GLenum kGLComparison[] = { 52 GLenum kGLComparison[] = {
52 GL_NEVER, 53 GL_NEVER,
53 GL_LESS, 54 GL_LESS,
54 GL_EQUAL, 55 GL_EQUAL,
55 GL_LEQUAL, 56 GL_LEQUAL,
56 GL_GREATER, 57 GL_GREATER,
57 GL_NOTEQUAL, 58 GL_NOTEQUAL,
58 GL_GEQUAL, 59 GL_GEQUAL,
59 GL_ALWAYS, 60 GL_ALWAYS,
60 }; 61 };
61 COMPILE_ASSERT(command_buffer::kNumComparison == arraysize(kGLComparison), 62 COMPILE_ASSERT(o3d::kNumComparison == arraysize(kGLComparison),
62 kGLComparison_does_not_match_command_buffer_Comparison); 63 kGLComparison_does_not_match_command_buffer_Comparison);
63 64
64 GLenum kGLBlendFunc[] = { 65 GLenum kGLBlendFunc[] = {
65 GL_ZERO, 66 GL_ZERO,
66 GL_ONE, 67 GL_ONE,
67 GL_SRC_COLOR, 68 GL_SRC_COLOR,
68 GL_ONE_MINUS_SRC_COLOR, 69 GL_ONE_MINUS_SRC_COLOR,
69 GL_SRC_ALPHA, 70 GL_SRC_ALPHA,
70 GL_ONE_MINUS_SRC_ALPHA, 71 GL_ONE_MINUS_SRC_ALPHA,
71 GL_DST_ALPHA, 72 GL_DST_ALPHA,
72 GL_ONE_MINUS_DST_ALPHA, 73 GL_ONE_MINUS_DST_ALPHA,
73 GL_DST_COLOR, 74 GL_DST_COLOR,
74 GL_ONE_MINUS_DST_COLOR, 75 GL_ONE_MINUS_DST_COLOR,
75 GL_SRC_ALPHA_SATURATE, 76 GL_SRC_ALPHA_SATURATE,
76 GL_CONSTANT_COLOR, 77 GL_CONSTANT_COLOR,
77 GL_ONE_MINUS_CONSTANT_COLOR, 78 GL_ONE_MINUS_CONSTANT_COLOR,
78 }; 79 };
79 COMPILE_ASSERT(command_buffer::kNumBlendFunc == arraysize(kGLBlendFunc), 80 COMPILE_ASSERT(o3d::kNumBlendFunc == arraysize(kGLBlendFunc),
80 kGLBlendFunc_does_not_match_command_buffer_BlendFunc); 81 kGLBlendFunc_does_not_match_command_buffer_BlendFunc);
81 82
82 GLenum kGLBlendEq[] = { 83 GLenum kGLBlendEq[] = {
83 GL_FUNC_ADD, 84 GL_FUNC_ADD,
84 GL_FUNC_SUBTRACT, 85 GL_FUNC_SUBTRACT,
85 GL_FUNC_REVERSE_SUBTRACT, 86 GL_FUNC_REVERSE_SUBTRACT,
86 GL_MIN, 87 GL_MIN,
87 GL_MAX, 88 GL_MAX,
88 }; 89 };
89 COMPILE_ASSERT(command_buffer::kNumBlendEq == arraysize(kGLBlendEq), 90 COMPILE_ASSERT(o3d::kNumBlendEq == arraysize(kGLBlendEq),
90 kGLBlendEq_does_not_match_command_buffer_BlendEq); 91 kGLBlendEq_does_not_match_command_buffer_BlendEq);
91 92
92 GLenum kGLStencilOp[] = { 93 GLenum kGLStencilOp[] = {
93 GL_KEEP, 94 GL_KEEP,
94 GL_ZERO, 95 GL_ZERO,
95 GL_REPLACE, 96 GL_REPLACE,
96 GL_INCR, 97 GL_INCR,
97 GL_DECR, 98 GL_DECR,
98 GL_INVERT, 99 GL_INVERT,
99 GL_INCR_WRAP, 100 GL_INCR_WRAP,
100 GL_DECR_WRAP, 101 GL_DECR_WRAP,
101 }; 102 };
102 COMPILE_ASSERT(command_buffer::kNumStencilOp == arraysize(kGLStencilOp), 103 COMPILE_ASSERT(o3d::kNumStencilOp == arraysize(kGLStencilOp),
103 kGLStencilOp_does_not_match_command_buffer_StencilOp); 104 kGLStencilOp_does_not_match_command_buffer_StencilOp);
104 105
105 // Check that the definition of the counter-clockwise func/ops match the 106 // Check that the definition of the counter-clockwise func/ops match the
106 // clockwise ones, just shifted by 16 bits, so that we can use 107 // clockwise ones, just shifted by 16 bits, so that we can use
107 // DecodeStencilFuncOps on both of them. 108 // DecodeStencilFuncOps on both of them.
108 #define CHECK_CCW_MATCHES_CW(FIELD) \ 109 #define CHECK_CCW_MATCHES_CW(FIELD) \
109 COMPILE_ASSERT(cmd::SetStencilTest::CW ## FIELD::kLength == \ 110 COMPILE_ASSERT(o3d::SetStencilTest::CW ## FIELD::kLength == \
110 cmd::SetStencilTest::CCW ## FIELD::kLength, \ 111 o3d::SetStencilTest::CCW ## FIELD::kLength, \
111 CCW ## FIELD ## _length_does_not_match_ ## CW ## FIELD); \ 112 CCW ## FIELD ## _length_does_not_match_ ## CW ## FIELD); \
112 COMPILE_ASSERT(cmd::SetStencilTest::CW ## FIELD::kShift + 16 == \ 113 COMPILE_ASSERT(o3d::SetStencilTest::CW ## FIELD::kShift + 16 == \
113 cmd::SetStencilTest::CCW ## FIELD::kShift, \ 114 o3d::SetStencilTest::CCW ## FIELD::kShift, \
114 CCW ## FIELD ## _shift_does_not_match_ ## CW ## FIELD) 115 CCW ## FIELD ## _shift_does_not_match_ ## CW ## FIELD)
115 116
116 CHECK_CCW_MATCHES_CW(Func); 117 CHECK_CCW_MATCHES_CW(Func);
117 CHECK_CCW_MATCHES_CW(PassOp); 118 CHECK_CCW_MATCHES_CW(PassOp);
118 CHECK_CCW_MATCHES_CW(FailOp); 119 CHECK_CCW_MATCHES_CW(FailOp);
119 CHECK_CCW_MATCHES_CW(ZFailOp); 120 CHECK_CCW_MATCHES_CW(ZFailOp);
120 121
121 #undef CHECK_CCW_MATCHES_CW 122 #undef CHECK_CCW_MATCHES_CW
122 123
123 // Decodes stencil test function and operations from the bitfield. 124 // Decodes stencil test function and operations from the bitfield.
124 void DecodeStencilFuncOps(Uint32 params, 125 void DecodeStencilFuncOps(Uint32 params,
125 GLenum *func, 126 GLenum *func,
126 GLenum *pass, 127 GLenum *pass,
127 GLenum *fail, 128 GLenum *fail,
128 GLenum *zfail) { 129 GLenum *zfail) {
129 // Sanity check. The value has already been tested in 130 // Sanity check. The value has already been tested in
130 // GAPIDecoder::DecodeSetStencilTest in gapi_decoder.cc. 131 // GAPIDecoder::DecodeSetStencilTest in gapi_decoder.cc.
131 DCHECK_EQ(cmd::SetStencilTest::Unused1::Get(params), 0); 132 DCHECK_EQ(o3d::SetStencilTest::Unused1::Get(params), 0);
132 // Check that the bitmask get cannot generate values outside of the allowed 133 // Check that the bitmask get cannot generate values outside of the allowed
133 // range. 134 // range.
134 COMPILE_ASSERT(cmd::SetStencilTest::CWFunc::kMask < 135 COMPILE_ASSERT(o3d::SetStencilTest::CWFunc::kMask <
135 command_buffer::kNumComparison, 136 o3d::kNumComparison,
136 set_stencil_test_CWFunc_may_produce_invalid_values); 137 set_stencil_test_CWFunc_may_produce_invalid_values);
137 *func = kGLComparison[cmd::SetStencilTest::CWFunc::Get(params)]; 138 *func = kGLComparison[o3d::SetStencilTest::CWFunc::Get(params)];
138 139
139 COMPILE_ASSERT(cmd::SetStencilTest::CWPassOp::kMask < 140 COMPILE_ASSERT(o3d::SetStencilTest::CWPassOp::kMask <
140 command_buffer::kNumStencilOp, 141 o3d::kNumStencilOp,
141 set_stencil_test_CWPassOp_may_produce_invalid_values); 142 set_stencil_test_CWPassOp_may_produce_invalid_values);
142 *pass = kGLStencilOp[cmd::SetStencilTest::CWPassOp::Get(params)]; 143 *pass = kGLStencilOp[o3d::SetStencilTest::CWPassOp::Get(params)];
143 144
144 COMPILE_ASSERT(cmd::SetStencilTest::CWFailOp::kMask < 145 COMPILE_ASSERT(o3d::SetStencilTest::CWFailOp::kMask <
145 command_buffer::kNumStencilOp, 146 o3d::kNumStencilOp,
146 set_stencil_test_CWFailOp_may_produce_invalid_values); 147 set_stencil_test_CWFailOp_may_produce_invalid_values);
147 *fail = kGLStencilOp[cmd::SetStencilTest::CWFailOp::Get(params)]; 148 *fail = kGLStencilOp[o3d::SetStencilTest::CWFailOp::Get(params)];
148 149
149 COMPILE_ASSERT(cmd::SetStencilTest::CWZFailOp::kMask < 150 COMPILE_ASSERT(o3d::SetStencilTest::CWZFailOp::kMask <
150 command_buffer::kNumStencilOp, 151 o3d::kNumStencilOp,
151 set_stencil_test_CWZFailOp_may_produce_invalid_values); 152 set_stencil_test_CWZFailOp_may_produce_invalid_values);
152 *zfail = kGLStencilOp[cmd::SetStencilTest::CWZFailOp::Get(params)]; 153 *zfail = kGLStencilOp[o3d::SetStencilTest::CWZFailOp::Get(params)];
153 } 154 }
154 155
155 } // anonymous namespace 156 } // anonymous namespace
156 157
157 void GAPIGL::SetViewport(unsigned int x, 158 void GAPIGL::SetViewport(unsigned int x,
158 unsigned int y, 159 unsigned int y,
159 unsigned int width, 160 unsigned int width,
160 unsigned int height, 161 unsigned int height,
161 float z_min, 162 float z_min,
162 float z_max) { 163 float z_max) {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 glTexEnvi(GL_POINT_SPRITE, GL_COORD_REPLACE, GL_FALSE); 201 glTexEnvi(GL_POINT_SPRITE, GL_COORD_REPLACE, GL_FALSE);
201 glDisable(GL_POINT_SPRITE); 202 glDisable(GL_POINT_SPRITE);
202 } 203 }
203 glPointSize(point_size); 204 glPointSize(point_size);
204 } 205 }
205 206
206 void GAPIGL::SetPolygonOffset(float slope_factor, float units) { 207 void GAPIGL::SetPolygonOffset(float slope_factor, float units) {
207 glPolygonOffset(slope_factor, units); 208 glPolygonOffset(slope_factor, units);
208 } 209 }
209 210
210 void GAPIGL::SetPolygonRaster(PolygonMode fill_mode, 211 void GAPIGL::SetPolygonRaster(o3d::PolygonMode fill_mode,
211 FaceCullMode cull_mode) { 212 o3d::FaceCullMode cull_mode) {
212 DCHECK_LT(fill_mode, kNumPolygonMode); 213 DCHECK_LT(fill_mode, kNumPolygonMode);
213 glPolygonMode(GL_FRONT_AND_BACK, kGLPolygonModes[fill_mode]); 214 glPolygonMode(GL_FRONT_AND_BACK, kGLPolygonModes[fill_mode]);
214 DCHECK_LT(cull_mode, kNumFaceCullMode); 215 DCHECK_LT(cull_mode, kNumFaceCullMode);
215 switch (cull_mode) { 216 switch (cull_mode) {
216 case kCullCW: 217 case kCullCW:
217 glEnable(GL_CULL_FACE); 218 glEnable(GL_CULL_FACE);
218 glCullFace(GL_BACK); 219 glCullFace(GL_BACK);
219 break; 220 break;
220 case kCullCCW: 221 case kCullCCW:
221 glEnable(GL_CULL_FACE); 222 glEnable(GL_CULL_FACE);
222 glCullFace(GL_FRONT); 223 glCullFace(GL_FRONT);
223 break; 224 break;
224 default: 225 default:
225 glDisable(GL_CULL_FACE); 226 glDisable(GL_CULL_FACE);
226 break; 227 break;
227 } 228 }
228 } 229 }
229 230
230 void GAPIGL::SetAlphaTest(bool enable, 231 void GAPIGL::SetAlphaTest(bool enable,
231 float reference, 232 float reference,
232 Comparison comp) { 233 o3d::Comparison comp) {
233 DCHECK_LT(comp, kNumComparison); 234 DCHECK_LT(comp, kNumComparison);
234 if (enable) { 235 if (enable) {
235 glEnable(GL_ALPHA_TEST); 236 glEnable(GL_ALPHA_TEST);
236 glAlphaFunc(kGLComparison[comp], reference); 237 glAlphaFunc(kGLComparison[comp], reference);
237 } else { 238 } else {
238 glDisable(GL_ALPHA_TEST); 239 glDisable(GL_ALPHA_TEST);
239 } 240 }
240 } 241 }
241 242
242 void GAPIGL::SetDepthTest(bool enable, 243 void GAPIGL::SetDepthTest(bool enable,
243 bool write_enable, 244 bool write_enable,
244 Comparison comp) { 245 o3d::Comparison comp) {
245 DCHECK_LT(comp, kNumComparison); 246 DCHECK_LT(comp, kNumComparison);
246 if (enable) { 247 if (enable) {
247 glEnable(GL_DEPTH_TEST); 248 glEnable(GL_DEPTH_TEST);
248 glDepthFunc(kGLComparison[comp]); 249 glDepthFunc(kGLComparison[comp]);
249 } else { 250 } else {
250 glDisable(GL_DEPTH_TEST); 251 glDisable(GL_DEPTH_TEST);
251 } 252 }
252 glDepthMask(write_enable); 253 glDepthMask(write_enable);
253 } 254 }
254 255
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 } 335 }
335 } else { 336 } else {
336 glDisable(GL_BLEND); 337 glDisable(GL_BLEND);
337 } 338 }
338 } 339 }
339 340
340 void GAPIGL::SetBlendingColor(const RGBA &color) { 341 void GAPIGL::SetBlendingColor(const RGBA &color) {
341 glBlendColor(color.red, color.green, color.blue, color.alpha); 342 glBlendColor(color.red, color.green, color.blue, color.alpha);
342 } 343 }
343 344
345 } // namespace o3d
344 } // namespace command_buffer 346 } // namespace command_buffer
345 } // namespace o3d 347 } // namespace o3d
OLDNEW
« no previous file with comments | « command_buffer/service/cross/gl/sampler_gl.cc ('k') | command_buffer/service/cross/gl/texture_gl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698