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 1542 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1553 | 1553 |
1554 RenderDepthStencilSurface::Ref RendererGL::CreateDepthStencilSurface( | 1554 RenderDepthStencilSurface::Ref RendererGL::CreateDepthStencilSurface( |
1555 int width, | 1555 int width, |
1556 int height) { | 1556 int height) { |
1557 return RenderDepthStencilSurface::Ref( | 1557 return RenderDepthStencilSurface::Ref( |
1558 new RenderDepthStencilSurfaceGL(service_locator(), | 1558 new RenderDepthStencilSurfaceGL(service_locator(), |
1559 width, | 1559 width, |
1560 height)); | 1560 height)); |
1561 } | 1561 } |
1562 | 1562 |
1563 // Saves a png screenshot 'file_name.png'. | 1563 Bitmap::Ref RendererGL::TakeScreenshot() {; |
1564 // Returns true on success and false on failure. | |
1565 bool RendererGL::SaveScreen(const String& file_name) { | |
1566 #ifdef TESTING | |
1567 MakeCurrentLazy(); | 1564 MakeCurrentLazy(); |
1568 Bitmap::Ref bitmap = Bitmap::Ref(new Bitmap(service_locator())); | 1565 Bitmap::Ref bitmap = Bitmap::Ref(new Bitmap(service_locator())); |
1569 bitmap->Allocate(Texture::ARGB8, width(), height(), 1, false); | 1566 bitmap->Allocate(Texture::ARGB8, width(), height(), 1, false); |
1570 | 1567 |
1571 // Note: glReadPixels captures the alpha component of the frame buffer as well | 1568 // Note: glReadPixels captures the alpha component of the frame buffer as well |
1572 // as the color components, the browser usually ignores the alpha channel when | 1569 // as the color components, the browser usually ignores the alpha channel when |
1573 // drawing to the screen, so unless the alpha is 1, the png image generated | 1570 // drawing to the screen, so unless the alpha is 1, the png image generated |
1574 // might exhibit suprise translucency. | 1571 // might exhibit suprise translucency. |
1575 ::glReadPixels(0, 0, width(), height(), GL_BGRA, GL_UNSIGNED_BYTE, | 1572 ::glReadPixels(0, 0, width(), height(), GL_BGRA, GL_UNSIGNED_BYTE, |
1576 bitmap->image_data()); | 1573 bitmap->image_data()); |
1577 bool result = bitmap->SaveToPNGFile((file_name + ".png").c_str()); | 1574 return bitmap; |
1578 if (!result) { | |
1579 O3D_ERROR(service_locator()) | |
1580 << "Failed to save screen into " << file_name; | |
1581 } | |
1582 return result; | |
1583 #else | |
1584 // Not a test build, always return false. | |
1585 return false; | |
1586 #endif | |
1587 } | 1575 } |
1588 | 1576 |
1589 const int* RendererGL::GetRGBAUByteNSwizzleTable() { | 1577 const int* RendererGL::GetRGBAUByteNSwizzleTable() { |
1590 static int swizzle_table[] = { 0, 1, 2, 3, }; | 1578 static int swizzle_table[] = { 0, 1, 2, 3, }; |
1591 return swizzle_table; | 1579 return swizzle_table; |
1592 } | 1580 } |
1593 | 1581 |
1594 // This is a factory function for creating Renderer objects. Since | 1582 // This is a factory function for creating Renderer objects. Since |
1595 // we're implementing GL, we only ever return a GL renderer. | 1583 // we're implementing GL, we only ever return a GL renderer. |
1596 Renderer* Renderer::CreateDefaultRenderer(ServiceLocator* service_locator) { | 1584 Renderer* Renderer::CreateDefaultRenderer(ServiceLocator* service_locator) { |
1597 return RendererGL::CreateDefault(service_locator); | 1585 return RendererGL::CreateDefault(service_locator); |
1598 } | 1586 } |
1599 | 1587 |
1600 } // namespace o3d | 1588 } // namespace o3d |
OLD | NEW |