Index: core/cross/command_buffer/states_cb.cc |
=================================================================== |
--- core/cross/command_buffer/states_cb.cc (revision 26638) |
+++ core/cross/command_buffer/states_cb.cc (working copy) |
@@ -441,31 +441,6 @@ |
bool *dirty_; |
}; |
-// A handler that sets the blending color. |
-// Parameters: |
-// args: a pointer to the arguments. |
-// dirty: a pointer to the dirty bit. |
-class BlendColorStateHandler : public TypedStateHandler<ParamFloat4> { |
- public: |
- BlendColorStateHandler(CommandBufferEntry *args, bool *dirty) |
- : args_(args), |
- dirty_(dirty) { |
- } |
- |
- virtual void SetStateFromTypedParam(RendererCB* renderer, |
- ParamFloat4* param) const { |
- Float4 value = param->value(); |
- args_[0].value_float = value[0]; |
- args_[1].value_float = value[1]; |
- args_[2].value_float = value[2]; |
- args_[3].value_float = value[3]; |
- *dirty_ = true; |
- } |
- private: |
- CommandBufferEntry *args_; |
- bool *dirty_; |
-}; |
- |
// Adds all the state handlers for all the states. The list of handlers must |
// match in names and types the list in Renderer::AddDefaultStates() |
// (in renderer.cc). |
@@ -475,52 +450,58 @@ |
using command_buffer::set_point_line_raster::LineSmoothEnable; |
using command_buffer::set_point_line_raster::PointSpriteEnable; |
bool *dirty = point_line_helper_.dirty_ptr(); |
- uint32 *arg0 = &(point_line_helper_.args()[0].value_uint32); |
- float *arg1 = &(point_line_helper_.args()[1].value_float); |
+ command_buffer::cmd::SetPointLineRaster& cmd = |
+ point_line_helper_.command(); |
renderer->AddStateHandler( |
State::kLineSmoothEnableParamName, |
- new EnableStateHandler<LineSmoothEnable>(arg0, dirty)); |
+ new EnableStateHandler<LineSmoothEnable>(&cmd.fixme0, dirty)); |
renderer->AddStateHandler( |
State::kPointSpriteEnableParamName, |
- new EnableStateHandler<PointSpriteEnable>(arg0, dirty)); |
+ new EnableStateHandler<PointSpriteEnable>(&cmd.fixme0, dirty)); |
renderer->AddStateHandler(State::kPointSizeParamName, |
- new ValueStateHandler<ParamFloat>(arg1, dirty)); |
+ new ValueStateHandler<ParamFloat>( |
+ &cmd.point_size, dirty)); |
} |
// Polygon Raster |
{ |
bool *dirty = poly_raster_helper_.dirty_ptr(); |
- uint32 *arg = &(poly_raster_helper_.args()[0].value_uint32); |
+ command_buffer::cmd::SetPolygonRaster& cmd = |
+ poly_raster_helper_.command(); |
renderer->AddStateHandler(State::kCullModeParamName, |
- new CullModeStateHandler(arg, dirty)); |
+ new CullModeStateHandler(&cmd.fixme0, dirty)); |
renderer->AddStateHandler(State::kFillModeParamName, |
- new FillModeStateHandler(arg, dirty)); |
+ new FillModeStateHandler(&cmd.fixme0, dirty)); |
} |
// Polygon Offset |
{ |
bool *dirty = poly_offset_helper_.dirty_ptr(); |
- float *arg0 = &(poly_offset_helper_.args()[0].value_float); |
- float *arg1 = &(poly_offset_helper_.args()[1].value_float); |
- renderer->AddStateHandler(State::kPolygonOffset1ParamName, |
- new ValueStateHandler<ParamFloat>(arg0, dirty)); |
- renderer->AddStateHandler(State::kPolygonOffset2ParamName, |
- new ValueStateHandler<ParamFloat>(arg1, dirty)); |
+ command_buffer::cmd::SetPolygonOffset& cmd = |
+ poly_offset_helper_.command(); |
+ renderer->AddStateHandler( |
+ State::kPolygonOffset1ParamName, |
+ new ValueStateHandler<ParamFloat>(&cmd.slope_factor, dirty)); |
+ renderer->AddStateHandler( |
+ State::kPolygonOffset2ParamName, |
+ new ValueStateHandler<ParamFloat>(&cmd.units, dirty)); |
} |
// Alpha test |
{ |
using command_buffer::set_alpha_test::Enable; |
using command_buffer::set_alpha_test::Func; |
+ command_buffer::cmd::SetAlphaTest& cmd = alpha_test_helper_.command(); |
bool *dirty = alpha_test_helper_.dirty_ptr(); |
- uint32 *arg0 = &(alpha_test_helper_.args()[0].value_uint32); |
- float *arg1 = &(alpha_test_helper_.args()[1].value_float); |
- renderer->AddStateHandler(State::kAlphaTestEnableParamName, |
- new EnableStateHandler<Enable>(arg0, dirty)); |
- renderer->AddStateHandler(State::kAlphaComparisonFunctionParamName, |
- new ComparisonStateHandler<Func>(arg0, dirty)); |
- renderer->AddStateHandler(State::kAlphaReferenceParamName, |
- new ValueStateHandler<ParamFloat>(arg1, dirty)); |
+ renderer->AddStateHandler( |
+ State::kAlphaTestEnableParamName, |
+ new EnableStateHandler<Enable>(&cmd.fixme0, dirty)); |
+ renderer->AddStateHandler( |
+ State::kAlphaComparisonFunctionParamName, |
+ new ComparisonStateHandler<Func>(&cmd.fixme0, dirty)); |
+ renderer->AddStateHandler( |
+ State::kAlphaReferenceParamName, |
+ new ValueStateHandler<ParamFloat>(&cmd.value, dirty)); |
} |
// Depth Test |
@@ -529,13 +510,16 @@ |
using command_buffer::set_depth_test::WriteEnable; |
using command_buffer::set_depth_test::Func; |
bool *dirty = depth_test_helper_.dirty_ptr(); |
- uint32 *arg = &(depth_test_helper_.args()[0].value_uint32); |
- renderer->AddStateHandler(State::kZWriteEnableParamName, |
- new EnableStateHandler<WriteEnable>(arg, dirty)); |
- renderer->AddStateHandler(State::kZEnableParamName, |
- new EnableStateHandler<Enable>(arg, dirty)); |
- renderer->AddStateHandler(State::kZComparisonFunctionParamName, |
- new ComparisonStateHandler<Func>(arg, dirty)); |
+ command_buffer::cmd::SetDepthTest& cmd = depth_test_helper_.command(); |
+ renderer->AddStateHandler( |
+ State::kZWriteEnableParamName, |
+ new EnableStateHandler<WriteEnable>(&cmd.fixme0, dirty)); |
+ renderer->AddStateHandler( |
+ State::kZEnableParamName, |
+ new EnableStateHandler<Enable>(&cmd.fixme0, dirty)); |
+ renderer->AddStateHandler( |
+ State::kZComparisonFunctionParamName, |
+ new ComparisonStateHandler<Func>(&cmd.fixme0, dirty)); |
} |
// Stencil Test |
@@ -554,42 +538,49 @@ |
using command_buffer::set_stencil_test::CCWFailOp; |
using command_buffer::set_stencil_test::CCWZFailOp; |
bool *dirty = stencil_test_helper_.dirty_ptr(); |
- uint32 *arg0 = &(stencil_test_helper_.args()[0].value_uint32); |
- uint32 *arg1 = &(stencil_test_helper_.args()[1].value_uint32); |
- renderer->AddStateHandler(State::kStencilEnableParamName, |
- new EnableStateHandler<Enable>(arg0, dirty)); |
- renderer->AddStateHandler(State::kTwoSidedStencilEnableParamName, |
- new EnableStateHandler<SeparateCCW>(arg0, dirty)); |
+ command_buffer::cmd::SetStencilTest& cmd = stencil_test_helper_.command(); |
renderer->AddStateHandler( |
+ State::kStencilEnableParamName, |
+ new EnableStateHandler<Enable>(&cmd.fixme0, dirty)); |
+ renderer->AddStateHandler( |
+ State::kTwoSidedStencilEnableParamName, |
+ new EnableStateHandler<SeparateCCW>(&cmd.fixme0, dirty)); |
+ renderer->AddStateHandler( |
State::kStencilReferenceParamName, |
- new BitFieldStateHandler<ReferenceValue>(arg0, dirty)); |
+ new BitFieldStateHandler<ReferenceValue>(&cmd.fixme0, dirty)); |
renderer->AddStateHandler( |
State::kStencilMaskParamName, |
- new BitFieldStateHandler<CompareMask>(arg0, dirty)); |
- renderer->AddStateHandler(State::kStencilWriteMaskParamName, |
- new BitFieldStateHandler<WriteMask>(arg0, dirty)); |
+ new BitFieldStateHandler<CompareMask>(&cmd.fixme0, dirty)); |
+ renderer->AddStateHandler( |
+ State::kStencilWriteMaskParamName, |
+ new BitFieldStateHandler<WriteMask>(&cmd.fixme0, dirty)); |
- renderer->AddStateHandler(State::kStencilComparisonFunctionParamName, |
- new ComparisonStateHandler<CWFunc>(arg1, dirty)); |
- renderer->AddStateHandler(State::kStencilPassOperationParamName, |
- new StencilOpStateHandler<CWPassOp>(arg1, dirty)); |
- renderer->AddStateHandler(State::kStencilFailOperationParamName, |
- new StencilOpStateHandler<CWFailOp>(arg1, dirty)); |
renderer->AddStateHandler( |
+ State::kStencilComparisonFunctionParamName, |
+ new ComparisonStateHandler<CWFunc>(&cmd.fixme1, dirty)); |
+ renderer->AddStateHandler( |
+ State::kStencilPassOperationParamName, |
+ new StencilOpStateHandler<CWPassOp>(&cmd.fixme1, dirty)); |
+ renderer->AddStateHandler( |
+ State::kStencilFailOperationParamName, |
+ new StencilOpStateHandler<CWFailOp>(&cmd.fixme1, dirty)); |
+ renderer->AddStateHandler( |
State::kStencilZFailOperationParamName, |
- new StencilOpStateHandler<CWZFailOp>(arg1, dirty)); |
+ new StencilOpStateHandler<CWZFailOp>(&cmd.fixme1, dirty)); |
- renderer->AddStateHandler(State::kCCWStencilComparisonFunctionParamName, |
- new ComparisonStateHandler<CCWFunc>(arg1, dirty)); |
renderer->AddStateHandler( |
+ State::kCCWStencilComparisonFunctionParamName, |
+ new ComparisonStateHandler<CCWFunc>(&cmd.fixme1, dirty)); |
+ |
+ renderer->AddStateHandler( |
State::kCCWStencilPassOperationParamName, |
- new StencilOpStateHandler<CCWPassOp>(arg1, dirty)); |
+ new StencilOpStateHandler<CCWPassOp>(&cmd.fixme1, dirty)); |
renderer->AddStateHandler( |
State::kCCWStencilFailOperationParamName, |
- new StencilOpStateHandler<CCWFailOp>(arg1, dirty)); |
+ new StencilOpStateHandler<CCWFailOp>(&cmd.fixme1, dirty)); |
renderer->AddStateHandler( |
State::kCCWStencilZFailOperationParamName, |
- new StencilOpStateHandler<CCWZFailOp>(arg1, dirty)); |
+ new StencilOpStateHandler<CCWZFailOp>(&cmd.fixme1, dirty)); |
} |
// Blending |
@@ -603,29 +594,32 @@ |
using command_buffer::set_blending::AlphaSrcFunc; |
using command_buffer::set_blending::AlphaDstFunc; |
bool *dirty = blending_helper_.dirty_ptr(); |
- uint32 *arg = &(blending_helper_.args()[0].value_uint32); |
- renderer->AddStateHandler(State::kAlphaBlendEnableParamName, |
- new EnableStateHandler<Enable>(arg, dirty)); |
+ command_buffer::cmd::SetBlending& cmd = blending_helper_.command(); |
renderer->AddStateHandler( |
+ State::kAlphaBlendEnableParamName, |
+ new EnableStateHandler<Enable>(&cmd.fixme0, dirty)); |
+ renderer->AddStateHandler( |
State::kSeparateAlphaBlendEnableParamName, |
- new EnableStateHandler<SeparateAlpha>(arg, dirty)); |
+ new EnableStateHandler<SeparateAlpha>(&cmd.fixme0, dirty)); |
renderer->AddStateHandler( |
State::kSourceBlendFunctionParamName, |
- new BlendFuncStateHandler<ColorSrcFunc>(arg, dirty)); |
+ new BlendFuncStateHandler<ColorSrcFunc>(&cmd.fixme0, dirty)); |
renderer->AddStateHandler( |
State::kDestinationBlendFunctionParamName, |
- new BlendFuncStateHandler<ColorDstFunc>(arg, dirty)); |
- renderer->AddStateHandler(State::kBlendEquationParamName, |
- new BlendEqStateHandler<ColorEq>(arg, dirty)); |
+ new BlendFuncStateHandler<ColorDstFunc>(&cmd.fixme0, dirty)); |
renderer->AddStateHandler( |
+ State::kBlendEquationParamName, |
+ new BlendEqStateHandler<ColorEq>(&cmd.fixme0, dirty)); |
+ renderer->AddStateHandler( |
State::kSourceBlendAlphaFunctionParamName, |
- new BlendFuncStateHandler<AlphaSrcFunc>(arg, dirty)); |
+ new BlendFuncStateHandler<AlphaSrcFunc>(&cmd.fixme0, dirty)); |
renderer->AddStateHandler( |
State::kDestinationBlendAlphaFunctionParamName, |
- new BlendFuncStateHandler<AlphaDstFunc>(arg, dirty)); |
- renderer->AddStateHandler(State::kBlendAlphaEquationParamName, |
- new BlendEqStateHandler<AlphaEq>(arg, dirty)); |
+ new BlendFuncStateHandler<AlphaDstFunc>(&cmd.fixme0, dirty)); |
+ renderer->AddStateHandler( |
+ State::kBlendAlphaEquationParamName, |
+ new BlendEqStateHandler<AlphaEq>(&cmd.fixme0, dirty)); |
} |
// Color Write |
@@ -633,12 +627,13 @@ |
using command_buffer::set_color_write::DitherEnable; |
using command_buffer::set_color_write::AllColorsMask; |
bool *dirty = color_write_helper_.dirty_ptr(); |
- uint32 *arg = &(color_write_helper_.args()[0].value_uint32); |
- renderer->AddStateHandler(State::kDitherEnableParamName, |
- new EnableStateHandler<DitherEnable>(arg, dirty)); |
+ command_buffer::cmd::SetColorWrite& cmd = color_write_helper_.command(); |
renderer->AddStateHandler( |
+ State::kDitherEnableParamName, |
+ new EnableStateHandler<DitherEnable>(&cmd.flags, dirty)); |
+ renderer->AddStateHandler( |
State::kColorWriteEnableParamName, |
- new ColorWriteStateHandler(arg, dirty)); |
+ new ColorWriteStateHandler(&cmd.flags, dirty)); |
} |
} |
@@ -651,7 +646,6 @@ |
stencil_test_helper_.Validate(helper); |
color_write_helper_.Validate(helper); |
blending_helper_.Validate(helper); |
- blending_color_helper_.Validate(helper); |
} |
} // namespace o3d |