OLD | NEW |
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 16 matching lines...) Expand all Loading... |
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 contains the implementation of the state-related GAPID3D9 | 33 // This file contains the implementation of the state-related GAPID3D9 |
34 // functions. | 34 // functions. |
35 | 35 |
36 #include <algorithm> | 36 #include <algorithm> |
37 #include "command_buffer/common/cross/cmd_buffer_format.h" | 37 #include "command_buffer/common/cross/o3d_cmd_format.h" |
38 #include "command_buffer/service/win/d3d9/gapi_d3d9.h" | 38 #include "command_buffer/service/win/d3d9/gapi_d3d9.h" |
39 | 39 |
40 namespace o3d { | 40 namespace o3d { |
41 namespace command_buffer { | 41 namespace command_buffer { |
| 42 namespace o3d { |
42 | 43 |
43 namespace { | 44 namespace { |
44 | 45 |
45 // Checks that a command_buffer enum matches a D3D enum so that it can be | 46 // Checks that a command_buffer enum matches a D3D enum so that it can be |
46 // converted quickly. | 47 // converted quickly. |
47 #define CHECK_CB_ENUM_MATCHES_D3D(CB_ENUM, D3D_ENUM) \ | 48 #define CHECK_CB_ENUM_MATCHES_D3D(CB_ENUM, D3D_ENUM) \ |
48 COMPILE_ASSERT(command_buffer::CB_ENUM + 1 == D3D_ENUM, \ | 49 COMPILE_ASSERT(CB_ENUM + 1 == D3D_ENUM, \ |
49 CB_ENUM ## _plus_1_not_ ## D3D_ENUM) | 50 CB_ENUM ## _plus_1_not_ ## D3D_ENUM) |
50 | 51 |
51 // Converts values from the PolygonMode enum to corresponding D3D values | 52 // Converts values from the PolygonMode enum to corresponding D3D values |
52 inline D3DFILLMODE PolygonModeToD3D(command_buffer::PolygonMode fill_mode) { | 53 inline D3DFILLMODE PolygonModeToD3D(PolygonMode fill_mode) { |
53 DCHECK_LT(fill_mode, command_buffer::kNumPolygonMode); | 54 DCHECK_LT(fill_mode, kNumPolygonMode); |
54 | 55 |
55 // Check that all acceptable values translate to D3D values by adding 1. | 56 // Check that all acceptable values translate to D3D values by adding 1. |
56 | 57 |
57 CHECK_CB_ENUM_MATCHES_D3D(kPolygonModePoints, D3DFILL_POINT); | 58 CHECK_CB_ENUM_MATCHES_D3D(kPolygonModePoints, D3DFILL_POINT); |
58 CHECK_CB_ENUM_MATCHES_D3D(kPolygonModeLines, D3DFILL_WIREFRAME); | 59 CHECK_CB_ENUM_MATCHES_D3D(kPolygonModeLines, D3DFILL_WIREFRAME); |
59 CHECK_CB_ENUM_MATCHES_D3D(kPolygonModeFill, D3DFILL_SOLID); | 60 CHECK_CB_ENUM_MATCHES_D3D(kPolygonModeFill, D3DFILL_SOLID); |
60 return static_cast<D3DFILLMODE>(fill_mode + 1); | 61 return static_cast<D3DFILLMODE>(fill_mode + 1); |
61 } | 62 } |
62 | 63 |
63 // Converts values from the FaceCullMode enum to corresponding D3D values | 64 // Converts values from the FaceCullMode enum to corresponding D3D values |
64 inline D3DCULL FaceCullModeToD3D(command_buffer::FaceCullMode cull_mode) { | 65 inline D3DCULL FaceCullModeToD3D(FaceCullMode cull_mode) { |
65 DCHECK_LT(cull_mode, command_buffer::kNumFaceCullMode); | 66 DCHECK_LT(cull_mode, kNumFaceCullMode); |
66 | 67 |
67 // Check that all acceptable values translate to D3D values by adding 1. | 68 // Check that all acceptable values translate to D3D values by adding 1. |
68 CHECK_CB_ENUM_MATCHES_D3D(kCullNone, D3DCULL_NONE); | 69 CHECK_CB_ENUM_MATCHES_D3D(kCullNone, D3DCULL_NONE); |
69 CHECK_CB_ENUM_MATCHES_D3D(kCullCW, D3DCULL_CW); | 70 CHECK_CB_ENUM_MATCHES_D3D(kCullCW, D3DCULL_CW); |
70 CHECK_CB_ENUM_MATCHES_D3D(kCullCCW, D3DCULL_CCW); | 71 CHECK_CB_ENUM_MATCHES_D3D(kCullCCW, D3DCULL_CCW); |
71 return static_cast<D3DCULL>(cull_mode + 1); | 72 return static_cast<D3DCULL>(cull_mode + 1); |
72 } | 73 } |
73 | 74 |
74 // Converts values from the Comparison enum to corresponding D3D values | 75 // Converts values from the Comparison enum to corresponding D3D values |
75 inline D3DCMPFUNC ComparisonToD3D(command_buffer::Comparison comp) { | 76 inline D3DCMPFUNC ComparisonToD3D(Comparison comp) { |
76 DCHECK_LT(comp, command_buffer::kNumComparison); | 77 DCHECK_LT(comp, kNumComparison); |
77 | 78 |
78 // Check that all acceptable values translate to D3D values by adding 1. | 79 // Check that all acceptable values translate to D3D values by adding 1. |
79 CHECK_CB_ENUM_MATCHES_D3D(kNever, D3DCMP_NEVER); | 80 CHECK_CB_ENUM_MATCHES_D3D(kNever, D3DCMP_NEVER); |
80 CHECK_CB_ENUM_MATCHES_D3D(kLess, D3DCMP_LESS); | 81 CHECK_CB_ENUM_MATCHES_D3D(kLess, D3DCMP_LESS); |
81 CHECK_CB_ENUM_MATCHES_D3D(kEqual, D3DCMP_EQUAL); | 82 CHECK_CB_ENUM_MATCHES_D3D(kEqual, D3DCMP_EQUAL); |
82 CHECK_CB_ENUM_MATCHES_D3D(kLEqual, D3DCMP_LESSEQUAL); | 83 CHECK_CB_ENUM_MATCHES_D3D(kLEqual, D3DCMP_LESSEQUAL); |
83 CHECK_CB_ENUM_MATCHES_D3D(kGreater, D3DCMP_GREATER); | 84 CHECK_CB_ENUM_MATCHES_D3D(kGreater, D3DCMP_GREATER); |
84 CHECK_CB_ENUM_MATCHES_D3D(kNotEqual, D3DCMP_NOTEQUAL); | 85 CHECK_CB_ENUM_MATCHES_D3D(kNotEqual, D3DCMP_NOTEQUAL); |
85 CHECK_CB_ENUM_MATCHES_D3D(kGEqual, D3DCMP_GREATEREQUAL); | 86 CHECK_CB_ENUM_MATCHES_D3D(kGEqual, D3DCMP_GREATEREQUAL); |
86 CHECK_CB_ENUM_MATCHES_D3D(kAlways, D3DCMP_ALWAYS); | 87 CHECK_CB_ENUM_MATCHES_D3D(kAlways, D3DCMP_ALWAYS); |
87 return static_cast<D3DCMPFUNC>(comp + 1); | 88 return static_cast<D3DCMPFUNC>(comp + 1); |
88 } | 89 } |
89 | 90 |
90 // Converts values from the StencilOp enum to corresponding D3D values | 91 // Converts values from the StencilOp enum to corresponding D3D values |
91 inline D3DSTENCILOP StencilOpToD3D(command_buffer::StencilOp stencil_op) { | 92 inline D3DSTENCILOP StencilOpToD3D(StencilOp stencil_op) { |
92 DCHECK_LT(stencil_op, command_buffer::kNumStencilOp); | 93 DCHECK_LT(stencil_op, kNumStencilOp); |
93 | 94 |
94 // Check that all acceptable values translate to D3D values by adding 1. | 95 // Check that all acceptable values translate to D3D values by adding 1. |
95 CHECK_CB_ENUM_MATCHES_D3D(kKeep, D3DSTENCILOP_KEEP); | 96 CHECK_CB_ENUM_MATCHES_D3D(kKeep, D3DSTENCILOP_KEEP); |
96 CHECK_CB_ENUM_MATCHES_D3D(kZero, D3DSTENCILOP_ZERO); | 97 CHECK_CB_ENUM_MATCHES_D3D(kZero, D3DSTENCILOP_ZERO); |
97 CHECK_CB_ENUM_MATCHES_D3D(kReplace, D3DSTENCILOP_REPLACE); | 98 CHECK_CB_ENUM_MATCHES_D3D(kReplace, D3DSTENCILOP_REPLACE); |
98 CHECK_CB_ENUM_MATCHES_D3D(kIncNoWrap, D3DSTENCILOP_INCRSAT); | 99 CHECK_CB_ENUM_MATCHES_D3D(kIncNoWrap, D3DSTENCILOP_INCRSAT); |
99 CHECK_CB_ENUM_MATCHES_D3D(kDecNoWrap, D3DSTENCILOP_DECRSAT); | 100 CHECK_CB_ENUM_MATCHES_D3D(kDecNoWrap, D3DSTENCILOP_DECRSAT); |
100 CHECK_CB_ENUM_MATCHES_D3D(kInvert, D3DSTENCILOP_INVERT); | 101 CHECK_CB_ENUM_MATCHES_D3D(kInvert, D3DSTENCILOP_INVERT); |
101 CHECK_CB_ENUM_MATCHES_D3D(kIncWrap, D3DSTENCILOP_INCR); | 102 CHECK_CB_ENUM_MATCHES_D3D(kIncWrap, D3DSTENCILOP_INCR); |
102 CHECK_CB_ENUM_MATCHES_D3D(kDecWrap, D3DSTENCILOP_DECR); | 103 CHECK_CB_ENUM_MATCHES_D3D(kDecWrap, D3DSTENCILOP_DECR); |
103 return static_cast<D3DSTENCILOP>(stencil_op + 1); | 104 return static_cast<D3DSTENCILOP>(stencil_op + 1); |
104 } | 105 } |
105 | 106 |
106 // Converts values from the BlendEq enum to corresponding D3D values | 107 // Converts values from the BlendEq enum to corresponding D3D values |
107 inline D3DBLENDOP BlendEqToD3D(command_buffer::BlendEq blend_eq) { | 108 inline D3DBLENDOP BlendEqToD3D(BlendEq blend_eq) { |
108 DCHECK_LT(blend_eq, command_buffer::kNumBlendEq); | 109 DCHECK_LT(blend_eq, kNumBlendEq); |
109 // Check that all acceptable values translate to D3D values by adding 1. | 110 // Check that all acceptable values translate to D3D values by adding 1. |
110 CHECK_CB_ENUM_MATCHES_D3D(kBlendEqAdd, D3DBLENDOP_ADD); | 111 CHECK_CB_ENUM_MATCHES_D3D(kBlendEqAdd, D3DBLENDOP_ADD); |
111 CHECK_CB_ENUM_MATCHES_D3D(kBlendEqSub, D3DBLENDOP_SUBTRACT); | 112 CHECK_CB_ENUM_MATCHES_D3D(kBlendEqSub, D3DBLENDOP_SUBTRACT); |
112 CHECK_CB_ENUM_MATCHES_D3D(kBlendEqRevSub, D3DBLENDOP_REVSUBTRACT); | 113 CHECK_CB_ENUM_MATCHES_D3D(kBlendEqRevSub, D3DBLENDOP_REVSUBTRACT); |
113 CHECK_CB_ENUM_MATCHES_D3D(kBlendEqMin, D3DBLENDOP_MIN); | 114 CHECK_CB_ENUM_MATCHES_D3D(kBlendEqMin, D3DBLENDOP_MIN); |
114 CHECK_CB_ENUM_MATCHES_D3D(kBlendEqMax, D3DBLENDOP_MAX); | 115 CHECK_CB_ENUM_MATCHES_D3D(kBlendEqMax, D3DBLENDOP_MAX); |
115 return static_cast<D3DBLENDOP>(blend_eq + 1); | 116 return static_cast<D3DBLENDOP>(blend_eq + 1); |
116 } | 117 } |
117 | 118 |
118 // Converts values from the BlendFunc enum to corresponding D3D values | 119 // Converts values from the BlendFunc enum to corresponding D3D values |
119 D3DBLEND BlendFuncToD3D(command_buffer::BlendFunc blend_func) { | 120 D3DBLEND BlendFuncToD3D(BlendFunc blend_func) { |
120 // The D3DBLEND enum values don't map 1-to-1 to BlendFunc, so we use a switch | 121 // The D3DBLEND enum values don't map 1-to-1 to BlendFunc, so we use a switch |
121 // here. | 122 // here. |
122 switch (blend_func) { | 123 switch (blend_func) { |
123 case command_buffer::kBlendFuncZero: | 124 case kBlendFuncZero: |
124 return D3DBLEND_ZERO; | 125 return D3DBLEND_ZERO; |
125 case command_buffer::kBlendFuncOne: | 126 case kBlendFuncOne: |
126 return D3DBLEND_ONE; | 127 return D3DBLEND_ONE; |
127 case command_buffer::kBlendFuncSrcColor: | 128 case kBlendFuncSrcColor: |
128 return D3DBLEND_SRCCOLOR; | 129 return D3DBLEND_SRCCOLOR; |
129 case command_buffer::kBlendFuncInvSrcColor: | 130 case kBlendFuncInvSrcColor: |
130 return D3DBLEND_INVSRCCOLOR; | 131 return D3DBLEND_INVSRCCOLOR; |
131 case command_buffer::kBlendFuncSrcAlpha: | 132 case kBlendFuncSrcAlpha: |
132 return D3DBLEND_SRCALPHA; | 133 return D3DBLEND_SRCALPHA; |
133 case command_buffer::kBlendFuncInvSrcAlpha: | 134 case kBlendFuncInvSrcAlpha: |
134 return D3DBLEND_INVSRCALPHA; | 135 return D3DBLEND_INVSRCALPHA; |
135 case command_buffer::kBlendFuncDstAlpha: | 136 case kBlendFuncDstAlpha: |
136 return D3DBLEND_DESTALPHA; | 137 return D3DBLEND_DESTALPHA; |
137 case command_buffer::kBlendFuncInvDstAlpha: | 138 case kBlendFuncInvDstAlpha: |
138 return D3DBLEND_INVDESTALPHA; | 139 return D3DBLEND_INVDESTALPHA; |
139 case command_buffer::kBlendFuncDstColor: | 140 case kBlendFuncDstColor: |
140 return D3DBLEND_DESTCOLOR; | 141 return D3DBLEND_DESTCOLOR; |
141 case command_buffer::kBlendFuncInvDstColor: | 142 case kBlendFuncInvDstColor: |
142 return D3DBLEND_INVDESTCOLOR; | 143 return D3DBLEND_INVDESTCOLOR; |
143 case command_buffer::kBlendFuncSrcAlphaSaturate: | 144 case kBlendFuncSrcAlphaSaturate: |
144 return D3DBLEND_SRCALPHASAT; | 145 return D3DBLEND_SRCALPHASAT; |
145 case command_buffer::kBlendFuncBlendColor: | 146 case kBlendFuncBlendColor: |
146 return D3DBLEND_BLENDFACTOR; | 147 return D3DBLEND_BLENDFACTOR; |
147 case command_buffer::kBlendFuncInvBlendColor: | 148 case kBlendFuncInvBlendColor: |
148 return D3DBLEND_INVBLENDFACTOR; | 149 return D3DBLEND_INVBLENDFACTOR; |
149 default: | 150 default: |
150 DLOG(FATAL) << "Invalid BlendFunc"; | 151 DLOG(FATAL) << "Invalid BlendFunc"; |
151 return D3DBLEND_ZERO; | 152 return D3DBLEND_ZERO; |
152 } | 153 } |
153 } | 154 } |
154 | 155 |
155 // Decodes stencil test function and operations from the bitfield. | 156 // Decodes stencil test function and operations from the bitfield. |
156 void DecodeStencilFuncOps(Uint32 params, | 157 void DecodeStencilFuncOps(Uint32 params, |
157 command_buffer::Comparison *func, | 158 Comparison *func, |
158 command_buffer::StencilOp *pass, | 159 StencilOp *pass, |
159 command_buffer::StencilOp *fail, | 160 StencilOp *fail, |
160 command_buffer::StencilOp *zfail) { | 161 StencilOp *zfail) { |
161 // Sanity check. The value has already been tested in | 162 // Sanity check. The value has already been tested in |
162 // GAPIDecoder::DecodeSetStencilTest in gapi_decoder.cc. | 163 // GAPIDecoder::DecodeSetStencilTest in gapi_decoder.cc. |
163 DCHECK_EQ(cmd::SetStencilTest::Unused1::Get(params), 0); | 164 DCHECK_EQ(SetStencilTest::Unused1::Get(params), 0); |
164 // Check that the bitmask get cannot generate values outside of the allowed | 165 // Check that the bitmask get cannot generate values outside of the allowed |
165 // range. | 166 // range. |
166 COMPILE_ASSERT(cmd::SetStencilTest::CWFunc::kMask < | 167 COMPILE_ASSERT(SetStencilTest::CWFunc::kMask < |
167 command_buffer::kNumComparison, | 168 kNumComparison, |
168 set_stencil_test_CWFunc_may_produce_invalid_values); | 169 set_stencil_test_CWFunc_may_produce_invalid_values); |
169 *func = static_cast<command_buffer::Comparison>( | 170 *func = static_cast<Comparison>(SetStencilTest::CWFunc::Get(params)); |
170 cmd::SetStencilTest::CWFunc::Get(params)); | |
171 | 171 |
172 COMPILE_ASSERT(cmd::SetStencilTest::CWPassOp::kMask < | 172 COMPILE_ASSERT(SetStencilTest::CWPassOp::kMask < |
173 command_buffer::kNumStencilOp, | 173 kNumStencilOp, |
174 set_stencil_test_CWPassOp_may_produce_invalid_values); | 174 set_stencil_test_CWPassOp_may_produce_invalid_values); |
175 *pass = static_cast<command_buffer::StencilOp>( | 175 *pass = static_cast<StencilOp>(SetStencilTest::CWPassOp::Get(params)); |
176 cmd::SetStencilTest::CWPassOp::Get(params)); | |
177 | 176 |
178 COMPILE_ASSERT(cmd::SetStencilTest::CWFailOp::kMask < | 177 COMPILE_ASSERT(SetStencilTest::CWFailOp::kMask < |
179 command_buffer::kNumStencilOp, | 178 kNumStencilOp, |
180 set_stencil_test_CWFailOp_may_produce_invalid_values); | 179 set_stencil_test_CWFailOp_may_produce_invalid_values); |
181 *fail = static_cast<command_buffer::StencilOp>( | 180 *fail = static_cast<StencilOp>(SetStencilTest::CWFailOp::Get(params)); |
182 cmd::SetStencilTest::CWFailOp::Get(params)); | |
183 | 181 |
184 COMPILE_ASSERT(cmd::SetStencilTest::CWZFailOp::kMask < | 182 COMPILE_ASSERT(SetStencilTest::CWZFailOp::kMask < |
185 command_buffer::kNumStencilOp, | 183 kNumStencilOp, |
186 set_stencil_test_CWZFailOp_may_produce_invalid_values); | 184 set_stencil_test_CWZFailOp_may_produce_invalid_values); |
187 *zfail = static_cast<command_buffer::StencilOp>( | 185 *zfail = static_cast<StencilOp>(SetStencilTest::CWZFailOp::Get(params)); |
188 cmd::SetStencilTest::CWZFailOp::Get(params)); | |
189 } | 186 } |
190 | 187 |
191 } // anonymous namespace | 188 } // anonymous namespace |
192 | 189 |
193 void GAPID3D9::SetScissor(bool enable, | 190 void GAPID3D9::SetScissor(bool enable, |
194 unsigned int x, | 191 unsigned int x, |
195 unsigned int y, | 192 unsigned int y, |
196 unsigned int width, | 193 unsigned int width, |
197 unsigned int height) { | 194 unsigned int height) { |
198 HR(d3d_device_->SetRenderState(D3DRS_SCISSORTESTENABLE, | 195 HR(d3d_device_->SetRenderState(D3DRS_SCISSORTESTENABLE, |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
273 StencilOpToD3D(fail))); | 270 StencilOpToD3D(fail))); |
274 HR(d3d_device_->SetRenderState(D3DRS_STENCILZFAIL, | 271 HR(d3d_device_->SetRenderState(D3DRS_STENCILZFAIL, |
275 StencilOpToD3D(zfail))); | 272 StencilOpToD3D(zfail))); |
276 | 273 |
277 if (separate_ccw) { | 274 if (separate_ccw) { |
278 HR(d3d_device_->SetRenderState(D3DRS_TWOSIDEDSTENCILMODE, TRUE)); | 275 HR(d3d_device_->SetRenderState(D3DRS_TWOSIDEDSTENCILMODE, TRUE)); |
279 // Check that the definition of the counter-clockwise func/ops match the | 276 // Check that the definition of the counter-clockwise func/ops match the |
280 // clockwise ones, just shifted by 16 bits, so that we can use | 277 // clockwise ones, just shifted by 16 bits, so that we can use |
281 // DecodeStencilFuncOps on both of them. | 278 // DecodeStencilFuncOps on both of them. |
282 #define CHECK_CCW_MATCHES_CW(FIELD) \ | 279 #define CHECK_CCW_MATCHES_CW(FIELD) \ |
283 COMPILE_ASSERT(cmd::SetStencilTest::CW ## FIELD::kLength == \ | 280 COMPILE_ASSERT(SetStencilTest::CW ## FIELD::kLength == \ |
284 cmd::SetStencilTest::CCW ## FIELD::kLength, \ | 281 SetStencilTest::CCW ## FIELD::kLength, \ |
285 CCW ## FIELD ## _length_does_not_match_ ## CW ## FIELD); \ | 282 CCW ## FIELD ## _length_does_not_match_ ## CW ## FIELD); \ |
286 COMPILE_ASSERT(cmd::SetStencilTest::CW ## FIELD::kShift + 16 == \ | 283 COMPILE_ASSERT(SetStencilTest::CW ## FIELD::kShift + 16 == \ |
287 cmd::SetStencilTest::CCW ## FIELD::kShift, \ | 284 SetStencilTest::CCW ## FIELD::kShift, \ |
288 CCW ## FIELD ## _shift_does_not_match_ ## CW ## FIELD) | 285 CCW ## FIELD ## _shift_does_not_match_ ## CW ## FIELD) |
289 CHECK_CCW_MATCHES_CW(Func); | 286 CHECK_CCW_MATCHES_CW(Func); |
290 CHECK_CCW_MATCHES_CW(PassOp); | 287 CHECK_CCW_MATCHES_CW(PassOp); |
291 CHECK_CCW_MATCHES_CW(FailOp); | 288 CHECK_CCW_MATCHES_CW(FailOp); |
292 CHECK_CCW_MATCHES_CW(ZFailOp); | 289 CHECK_CCW_MATCHES_CW(ZFailOp); |
293 #undef CHECK_CCW_MATCHES_CW | 290 #undef CHECK_CCW_MATCHES_CW |
294 // Extract upper 16 bits. | 291 // Extract upper 16 bits. |
295 Uint32 ccw_func_ops = BitField<16, 16>::Get(func_ops); | 292 Uint32 ccw_func_ops = BitField<16, 16>::Get(func_ops); |
296 | 293 |
297 DecodeStencilFuncOps(ccw_func_ops, &func, &pass, &fail, &zfail); | 294 DecodeStencilFuncOps(ccw_func_ops, &func, &pass, &fail, &zfail); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
345 BlendFuncToD3D(alpha_dst_func))); | 342 BlendFuncToD3D(alpha_dst_func))); |
346 } else { | 343 } else { |
347 HR(d3d_device_->SetRenderState(D3DRS_SEPARATEALPHABLENDENABLE, FALSE)); | 344 HR(d3d_device_->SetRenderState(D3DRS_SEPARATEALPHABLENDENABLE, FALSE)); |
348 } | 345 } |
349 } | 346 } |
350 | 347 |
351 void GAPID3D9::SetBlendingColor(const RGBA &color) { | 348 void GAPID3D9::SetBlendingColor(const RGBA &color) { |
352 HR(d3d_device_->SetRenderState(D3DRS_BLENDFACTOR, RGBAToD3DCOLOR(color))); | 349 HR(d3d_device_->SetRenderState(D3DRS_BLENDFACTOR, RGBAToD3DCOLOR(color))); |
353 } | 350 } |
354 | 351 |
| 352 } // namespace o3d |
355 } // namespace command_buffer | 353 } // namespace command_buffer |
356 } // namespace o3d | 354 } // namespace o3d |
OLD | NEW |