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

Side by Side Diff: core/cross/command_buffer/sampler_cb.cc

Issue 212018: Change command buffer client code to use structures.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/o3d/
Patch Set: '' Created 11 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
« no previous file with comments | « core/cross/command_buffer/renderer_cb.cc ('k') | core/cross/command_buffer/states_cb.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 } 79 }
80 } 80 }
81 81
82 } // anonymous namespace 82 } // anonymous namespace
83 83
84 SamplerCB::SamplerCB(ServiceLocator* service_locator, RendererCB* renderer) 84 SamplerCB::SamplerCB(ServiceLocator* service_locator, RendererCB* renderer)
85 : Sampler(service_locator), 85 : Sampler(service_locator),
86 renderer_(renderer) { 86 renderer_(renderer) {
87 DCHECK(renderer_); 87 DCHECK(renderer_);
88 resource_id_ = renderer_->sampler_ids().AllocateID(); 88 resource_id_ = renderer_->sampler_ids().AllocateID();
89 CommandBufferEntry args[1]; 89 renderer_->helper()->CreateSampler(resource_id_);
90 args[0].value_uint32 = resource_id_;
91 renderer_->helper()->AddCommand(command_buffer::CREATE_SAMPLER, 1, args);
92 } 90 }
93 91
94 SamplerCB::~SamplerCB() { 92 SamplerCB::~SamplerCB() {
95 CommandBufferEntry args[1]; 93 renderer_->helper()->DestroySampler(resource_id_);
96 args[0].value_uint32 = resource_id_;
97 renderer_->helper()->AddCommand(command_buffer::DESTROY_SAMPLER, 1, args);
98 renderer_->sampler_ids().FreeID(resource_id_); 94 renderer_->sampler_ids().FreeID(resource_id_);
99 } 95 }
100 96
101 void SamplerCB::SetTextureAndStates() { 97 void SamplerCB::SetTextureAndStates() {
102 CommandBufferHelper *helper = renderer_->helper(); 98 CommandBufferHelper *helper = renderer_->helper();
103 sampler::AddressingMode address_mode_u_cb = AddressModeToCB(address_mode_u()); 99 sampler::AddressingMode address_mode_u_cb = AddressModeToCB(address_mode_u());
104 sampler::AddressingMode address_mode_v_cb = AddressModeToCB(address_mode_v()); 100 sampler::AddressingMode address_mode_v_cb = AddressModeToCB(address_mode_v());
101 sampler::AddressingMode address_mode_w_cb = AddressModeToCB(address_mode_w());
105 sampler::FilteringMode mag_filter_cb = FilterTypeToCB(mag_filter()); 102 sampler::FilteringMode mag_filter_cb = FilterTypeToCB(mag_filter());
106 sampler::FilteringMode min_filter_cb = FilterTypeToCB(min_filter()); 103 sampler::FilteringMode min_filter_cb = FilterTypeToCB(min_filter());
107 sampler::FilteringMode mip_filter_cb = FilterTypeToCB(mip_filter()); 104 sampler::FilteringMode mip_filter_cb = FilterTypeToCB(mip_filter());
108 if (mag_filter_cb == sampler::NONE) mag_filter_cb = sampler::POINT; 105 if (mag_filter_cb == sampler::NONE) mag_filter_cb = sampler::POINT;
109 if (min_filter_cb == sampler::NONE) min_filter_cb = sampler::POINT; 106 if (min_filter_cb == sampler::NONE) min_filter_cb = sampler::POINT;
110 int max_max_anisotropy = set_sampler_states::MaxAnisotropy::kMask; 107 int max_max_anisotropy = set_sampler_states::MaxAnisotropy::kMask;
111 unsigned int max_anisotropy_cb = 108 unsigned int max_anisotropy_cb =
112 std::max(1, std::min(max_max_anisotropy, max_anisotropy())); 109 std::max(1, std::min(max_max_anisotropy, max_anisotropy()));
113 if (min_filter() != Sampler::ANISOTROPIC) { 110 if (min_filter() != Sampler::ANISOTROPIC) {
114 max_anisotropy_cb = 1; 111 max_anisotropy_cb = 1;
115 } 112 }
116 CommandBufferEntry args[5]; 113 helper->SetSamplerStates(
117 args[0].value_uint32 = resource_id_; 114 resource_id_,
118 args[1].value_uint32 = 115 address_mode_u_cb,
119 set_sampler_states::AddressingU::MakeValue(address_mode_u_cb) | 116 address_mode_v_cb,
120 set_sampler_states::AddressingV::MakeValue(address_mode_v_cb) | 117 address_mode_w_cb,
121 set_sampler_states::AddressingW::MakeValue(sampler::WRAP) | 118 mag_filter_cb,
122 set_sampler_states::MagFilter::MakeValue(mag_filter_cb) | 119 min_filter_cb,
123 set_sampler_states::MinFilter::MakeValue(min_filter_cb) | 120 mip_filter_cb,
124 set_sampler_states::MipFilter::MakeValue(mip_filter_cb) | 121 max_anisotropy_cb);
125 set_sampler_states::MaxAnisotropy::MakeValue(max_anisotropy_cb);
126 helper->AddCommand(command_buffer::SET_SAMPLER_STATES, 2, args);
127 122
128 Float4 color = border_color(); 123 Float4 color = border_color();
129 args[1].value_float = color[0]; 124 helper->SetSamplerBorderColor(resource_id_,
130 args[2].value_float = color[1]; 125 color[0], color[1], color[2], color[3]);
131 args[3].value_float = color[2];
132 args[4].value_float = color[3];
133 helper->AddCommand(command_buffer::SET_SAMPLER_BORDER_COLOR, 5, args);
134 126
135 Texture *texture_object = texture(); 127 Texture *texture_object = texture();
136 if (!texture_object) { 128 if (!texture_object) {
137 texture_object = renderer_->error_texture(); 129 texture_object = renderer_->error_texture();
138 if (!texture_object) { 130 if (!texture_object) {
139 O3D_ERROR(service_locator()) 131 O3D_ERROR(service_locator())
140 << "Missing texture for sampler " << name(); 132 << "Missing texture for sampler " << name();
141 texture_object = renderer_->fallback_error_texture(); 133 texture_object = renderer_->fallback_error_texture();
142 } 134 }
143 } 135 }
144 136
145 if (texture_object) { 137 if (texture_object) {
146 args[1].value_uint32 = 138 helper->SetSamplerTexture(
147 reinterpret_cast<ResourceID>(texture_object->GetTextureHandle()); 139 resource_id_,
148 helper->AddCommand(command_buffer::SET_SAMPLER_TEXTURE, 2, args); 140 reinterpret_cast<uint32>(texture_object->GetTextureHandle()));
149 } 141 }
150 } 142 }
151 143
152 } // namespace o3d 144 } // namespace o3d
OLDNEW
« no previous file with comments | « core/cross/command_buffer/renderer_cb.cc ('k') | core/cross/command_buffer/states_cb.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698