OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "app/surface/accelerated_surface_mac.h" | 5 #include "app/surface/accelerated_surface_mac.h" |
6 | 6 |
7 #include "app/gfx/gl/gl_bindings.h" | 7 #include "app/gfx/gl/gl_bindings.h" |
8 #include "app/gfx/gl/gl_implementation.h" | 8 #include "app/gfx/gl/gl_implementation.h" |
9 #include "app/surface/io_surface_support_mac.h" | 9 #include "app/surface/io_surface_support_mac.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
117 } | 117 } |
118 | 118 |
119 void AcceleratedSurface::AllocateRenderBuffers(GLenum target, | 119 void AcceleratedSurface::AllocateRenderBuffers(GLenum target, |
120 const gfx::Size& size) { | 120 const gfx::Size& size) { |
121 if (!texture_) { | 121 if (!texture_) { |
122 // Generate the texture object. | 122 // Generate the texture object. |
123 glGenTextures(1, &texture_); | 123 glGenTextures(1, &texture_); |
124 glBindTexture(target, texture_); | 124 glBindTexture(target, texture_); |
125 glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST); | 125 glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST); |
126 glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST); | 126 glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST); |
| 127 glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); |
| 128 glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); |
127 // Generate and bind the framebuffer object. | 129 // Generate and bind the framebuffer object. |
128 glGenFramebuffersEXT(1, &fbo_); | 130 glGenFramebuffersEXT(1, &fbo_); |
129 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo_); | 131 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo_); |
130 // Generate (but don't bind) the depth buffer -- we don't need | 132 // Generate (but don't bind) the depth buffer -- we don't need |
131 // this bound in order to do offscreen rendering. | 133 // this bound in order to do offscreen rendering. |
132 glGenRenderbuffersEXT(1, &depth_stencil_renderbuffer_); | 134 glGenRenderbuffersEXT(1, &depth_stencil_renderbuffer_); |
133 } | 135 } |
134 | 136 |
135 // Reallocate the depth buffer. | 137 // Reallocate the depth buffer. |
136 glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depth_stencil_renderbuffer_); | 138 glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depth_stencil_renderbuffer_); |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
213 // Mac OS X and is required for IOSurface interoperability. | 215 // Mac OS X and is required for IOSurface interoperability. |
214 GLenum target = GL_TEXTURE_RECTANGLE_ARB; | 216 GLenum target = GL_TEXTURE_RECTANGLE_ARB; |
215 if (allocate_fbo_) { | 217 if (allocate_fbo_) { |
216 AllocateRenderBuffers(target, size); | 218 AllocateRenderBuffers(target, size); |
217 } else if (!texture_) { | 219 } else if (!texture_) { |
218 // Generate the texture object. | 220 // Generate the texture object. |
219 glGenTextures(1, &texture_); | 221 glGenTextures(1, &texture_); |
220 glBindTexture(target, texture_); | 222 glBindTexture(target, texture_); |
221 glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST); | 223 glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST); |
222 glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST); | 224 glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST); |
| 225 glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); |
| 226 glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); |
223 } | 227 } |
224 | 228 |
225 // Allocate a new IOSurface, which is the GPU resource that can be | 229 // Allocate a new IOSurface, which is the GPU resource that can be |
226 // shared across processes. | 230 // shared across processes. |
227 base::mac::ScopedCFTypeRef<CFMutableDictionaryRef> properties; | 231 base::mac::ScopedCFTypeRef<CFMutableDictionaryRef> properties; |
228 properties.reset(CFDictionaryCreateMutable(kCFAllocatorDefault, | 232 properties.reset(CFDictionaryCreateMutable(kCFAllocatorDefault, |
229 0, | 233 0, |
230 &kCFTypeDictionaryKeyCallBacks, | 234 &kCFTypeDictionaryKeyCallBacks, |
231 &kCFTypeDictionaryValueCallBacks)); | 235 &kCFTypeDictionaryValueCallBacks)); |
232 AddIntegerValue(properties, | 236 AddIntegerValue(properties, |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 } | 331 } |
328 return transport_dib_->handle(); | 332 return transport_dib_->handle(); |
329 } | 333 } |
330 | 334 |
331 void AcceleratedSurface::SetTransportDIBAllocAndFree( | 335 void AcceleratedSurface::SetTransportDIBAllocAndFree( |
332 Callback2<size_t, TransportDIB::Handle*>::Type* allocator, | 336 Callback2<size_t, TransportDIB::Handle*>::Type* allocator, |
333 Callback1<TransportDIB::Id>::Type* deallocator) { | 337 Callback1<TransportDIB::Id>::Type* deallocator) { |
334 dib_alloc_callback_.reset(allocator); | 338 dib_alloc_callback_.reset(allocator); |
335 dib_free_callback_.reset(deallocator); | 339 dib_free_callback_.reset(deallocator); |
336 } | 340 } |
OLD | NEW |