diff options
Diffstat (limited to 'src/video_core/renderer_opengl/gl_texture_cache.cpp')
-rw-r--r-- | src/video_core/renderer_opengl/gl_texture_cache.cpp | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/src/video_core/renderer_opengl/gl_texture_cache.cpp b/src/video_core/renderer_opengl/gl_texture_cache.cpp index 00f9ab92f..ba6d3af4b 100644 --- a/src/video_core/renderer_opengl/gl_texture_cache.cpp +++ b/src/video_core/renderer_opengl/gl_texture_cache.cpp @@ -428,13 +428,28 @@ CachedSurfaceView::CachedSurfaceView(CachedSurface& surface, ViewKey key) CachedSurfaceView::~CachedSurfaceView() = default; -GLuint CachedSurfaceView::GetTexture() { - // TODO(Rodrigo): Remove this entry and attach the super texture to the framebuffer through - // legacy API (also dropping Intel driver issues). - if (texture_view_2d.texture.handle == 0) { - texture_view_2d = CreateTextureView(GL_TEXTURE_2D); +void CachedSurfaceView::Attach(GLenum attachment) const { + ASSERT(key.num_layers == 1 && key.num_levels == 1); + + switch (params.GetTarget()) { + case SurfaceTarget::Texture1D: + glFramebufferTexture1D(GL_DRAW_FRAMEBUFFER, attachment, surface.GetTarget(), + surface.GetTexture(), key.base_level); + break; + case SurfaceTarget::Texture2D: + glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, attachment, surface.GetTarget(), + surface.GetTexture(), key.base_level); + break; + case SurfaceTarget::Texture1DArray: + case SurfaceTarget::Texture2DArray: + case SurfaceTarget::TextureCubemap: + case SurfaceTarget::TextureCubeArray: + glFramebufferTextureLayer(GL_DRAW_FRAMEBUFFER, attachment, surface.GetTexture(), + key.base_level, key.base_layer); + break; + default: + UNIMPLEMENTED(); } - return texture_view_2d.texture.handle; } GLuint CachedSurfaceView::GetTexture(Tegra::Shader::TextureType texture_type, bool is_array, |