| 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 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 180 // Adds the CLEAR command to the command buffer. | 180 // Adds the CLEAR command to the command buffer. |
| 181 void RendererCB::PlatformSpecificClear(const Float4 &color, | 181 void RendererCB::PlatformSpecificClear(const Float4 &color, |
| 182 bool color_flag, | 182 bool color_flag, |
| 183 float depth, | 183 float depth, |
| 184 bool depth_flag, | 184 bool depth_flag, |
| 185 int stencil, | 185 int stencil, |
| 186 bool stencil_flag) { | 186 bool stencil_flag) { |
| 187 uint32 buffers = (color_flag ? GAPIInterface::COLOR : 0) | | 187 uint32 buffers = (color_flag ? GAPIInterface::COLOR : 0) | |
| 188 (depth_flag ? GAPIInterface::DEPTH : 0) | | 188 (depth_flag ? GAPIInterface::DEPTH : 0) | |
| 189 (stencil_flag ? GAPIInterface::STENCIL : 0); | 189 (stencil_flag ? GAPIInterface::STENCIL : 0); |
| 190 command_buffer::CommandBufferEntry args[7]; | 190 helper_->Clear(buffers, color[0], color[1], color[2], color[3], |
| 191 args[0].value_uint32 = buffers; | 191 depth, stencil); |
| 192 args[1].value_float = color[0]; | |
| 193 args[2].value_float = color[1]; | |
| 194 args[3].value_float = color[2]; | |
| 195 args[4].value_float = color[3]; | |
| 196 args[5].value_float = depth; | |
| 197 args[6].value_uint32 = stencil; | |
| 198 helper_->AddCommand(command_buffer::CLEAR, 7, args); | |
| 199 } | 192 } |
| 200 | 193 |
| 201 void RendererCB::PlatformSpecificEndDraw() { | 194 void RendererCB::PlatformSpecificEndDraw() { |
| 202 } | 195 } |
| 203 | 196 |
| 204 // Adds the BEGIN_FRAME command to the command buffer. | 197 // Adds the BeginFrame command to the command buffer. |
| 205 bool RendererCB::PlatformSpecificStartRendering() { | 198 bool RendererCB::PlatformSpecificStartRendering() { |
| 206 // Any device issues are handled in the command buffer backend | 199 // Any device issues are handled in the command buffer backend |
| 207 DCHECK(helper_); | 200 DCHECK(helper_); |
| 208 helper_->AddCommand(command_buffer::BEGIN_FRAME, 0 , NULL); | 201 helper_->BeginFrame(); |
| 209 return true; | 202 return true; |
| 210 } | 203 } |
| 211 | 204 |
| 212 // Adds the END_FRAME command to the command buffer, and flushes the commands. | 205 // Adds the EndFrame command to the command buffer, and flushes the commands. |
| 213 void RendererCB::PlatformSpecificFinishRendering() { | 206 void RendererCB::PlatformSpecificFinishRendering() { |
| 214 // Any device issues are handled in the command buffer backend | 207 // Any device issues are handled in the command buffer backend |
| 215 helper_->AddCommand(command_buffer::END_FRAME, 0 , NULL); | 208 helper_->EndFrame(); |
| 216 helper_->WaitForToken(frame_token_); | 209 helper_->WaitForToken(frame_token_); |
| 217 frame_token_ = helper_->InsertToken(); | 210 frame_token_ = helper_->InsertToken(); |
| 218 } | 211 } |
| 219 | 212 |
| 220 void RendererCB::PlatformSpecificPresent() { | 213 void RendererCB::PlatformSpecificPresent() { |
| 221 // TODO(gman): The END_FRAME command needs to be split into END_FRAME | 214 // TODO(gman): The EndFrame command needs to be split into EndFrame |
| 222 // and PRESENT. | 215 // and PRESENT. |
| 223 } | 216 } |
| 224 | 217 |
| 225 // Assign the surface arguments to the renderer, and update the stack | 218 // Assign the surface arguments to the renderer, and update the stack |
| 226 // of pushed surfaces. | 219 // of pushed surfaces. |
| 227 void RendererCB::SetRenderSurfacesPlatformSpecific( | 220 void RendererCB::SetRenderSurfacesPlatformSpecific( |
| 228 const RenderSurface* surface, | 221 const RenderSurface* surface, |
| 229 const RenderDepthStencilSurface* surface_depth) { | 222 const RenderDepthStencilSurface* surface_depth) { |
| 230 const RenderSurfaceCB* surface_cb = | 223 const RenderSurfaceCB* surface_cb = |
| 231 down_cast<const RenderSurfaceCB*>(surface); | 224 down_cast<const RenderSurfaceCB*>(surface); |
| 232 const RenderDepthStencilSurfaceCB* surface_depth_cb = | 225 const RenderDepthStencilSurfaceCB* surface_depth_cb = |
| 233 down_cast<const RenderDepthStencilSurfaceCB*>(surface_depth); | 226 down_cast<const RenderDepthStencilSurfaceCB*>(surface_depth); |
| 234 command_buffer::CommandBufferEntry args[2]; | 227 helper_->SetRenderSurface( |
| 235 args[0].value_uint32 = surface_cb->resource_id(); | 228 surface_cb->resource_id(), |
| 236 args[1].value_uint32 = surface_depth_cb->resource_id(); | 229 surface_depth_cb->resource_id()); |
| 237 helper_->AddCommand(command_buffer::SET_RENDER_SURFACE, 2, args); | |
| 238 } | 230 } |
| 239 | 231 |
| 240 void RendererCB::SetBackBufferPlatformSpecific() { | 232 void RendererCB::SetBackBufferPlatformSpecific() { |
| 241 helper_->AddCommand(command_buffer::SET_BACK_SURFACES, 0, NULL); | 233 helper_->SetBackSurfaces(); |
| 242 } | 234 } |
| 243 | 235 |
| 244 // Creates a StreamBank, returning a platform specific implementation class. | 236 // Creates a StreamBank, returning a platform specific implementation class. |
| 245 StreamBank::Ref RendererCB::CreateStreamBank() { | 237 StreamBank::Ref RendererCB::CreateStreamBank() { |
| 246 return StreamBank::Ref(new StreamBankCB(service_locator(), this)); | 238 return StreamBank::Ref(new StreamBankCB(service_locator(), this)); |
| 247 } | 239 } |
| 248 | 240 |
| 249 // Creates a Primitive, returning a platform specific implementation class. | 241 // Creates a Primitive, returning a platform specific implementation class. |
| 250 Primitive::Ref RendererCB::CreatePrimitive() { | 242 Primitive::Ref RendererCB::CreatePrimitive() { |
| 251 return Primitive::Ref(new PrimitiveCB(service_locator(), this)); | 243 return Primitive::Ref(new PrimitiveCB(service_locator(), this)); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 307 ParamCache* RendererCB::CreatePlatformSpecificParamCache() { | 299 ParamCache* RendererCB::CreatePlatformSpecificParamCache() { |
| 308 return new ParamCacheCB(); | 300 return new ParamCacheCB(); |
| 309 } | 301 } |
| 310 | 302 |
| 311 void RendererCB::SetViewportInPixels(int left, | 303 void RendererCB::SetViewportInPixels(int left, |
| 312 int top, | 304 int top, |
| 313 int width, | 305 int width, |
| 314 int height, | 306 int height, |
| 315 float min_z, | 307 float min_z, |
| 316 float max_z) { | 308 float max_z) { |
| 317 command_buffer::CommandBufferEntry args[6]; | 309 helper_->SetViewport(left, top, width, height, min_z, max_z); |
| 318 args[0].value_uint32 = left; | |
| 319 args[1].value_uint32 = top; | |
| 320 args[2].value_uint32 = width; | |
| 321 args[3].value_uint32 = height; | |
| 322 args[4].value_float = min_z; | |
| 323 args[5].value_float = max_z; | |
| 324 helper_->AddCommand(command_buffer::SET_VIEWPORT, 6, args); | |
| 325 } | 310 } |
| 326 | 311 |
| 327 const int* RendererCB::GetRGBAUByteNSwizzleTable() { | 312 const int* RendererCB::GetRGBAUByteNSwizzleTable() { |
| 328 static int swizzle_table[] = { 0, 1, 2, 3, }; | 313 static int swizzle_table[] = { 0, 1, 2, 3, }; |
| 329 return swizzle_table; | 314 return swizzle_table; |
| 330 } | 315 } |
| 331 | 316 |
| 332 // This is a factory function for creating Renderer objects. Since | 317 // This is a factory function for creating Renderer objects. Since |
| 333 // we're implementing command buffers, we only ever return a CB renderer. | 318 // we're implementing command buffers, we only ever return a CB renderer. |
| 334 Renderer* Renderer::CreateDefaultRenderer(ServiceLocator* service_locator) { | 319 Renderer* Renderer::CreateDefaultRenderer(ServiceLocator* service_locator) { |
| 335 return RendererCB::CreateDefault(service_locator); | 320 return RendererCB::CreateDefault(service_locator); |
| 336 } | 321 } |
| 337 | 322 |
| 338 // Creates and returns a platform specific RenderDepthStencilSurface object. | 323 // Creates and returns a platform specific RenderDepthStencilSurface object. |
| 339 RenderDepthStencilSurface::Ref RendererCB::CreateDepthStencilSurface( | 324 RenderDepthStencilSurface::Ref RendererCB::CreateDepthStencilSurface( |
| 340 int width, | 325 int width, |
| 341 int height) { | 326 int height) { |
| 342 return RenderDepthStencilSurface::Ref( | 327 return RenderDepthStencilSurface::Ref( |
| 343 new RenderDepthStencilSurfaceCB(service_locator(), | 328 new RenderDepthStencilSurfaceCB(service_locator(), |
| 344 width, | 329 width, |
| 345 height, | 330 height, |
| 346 this)); | 331 this)); |
| 347 } | 332 } |
| 348 } // namespace o3d | 333 } // namespace o3d |
| OLD | NEW |