diff options
author | Fernando S <fsahmkow27@gmail.com> | 2022-04-16 00:05:49 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-16 00:05:49 +0200 |
commit | 856a841c72ba7b6c7f63a3afafd1692c1cea8744 (patch) | |
tree | 709a3c1d2f99e5c4ae7e6386c4a2d42690a71f36 /src/video_core/renderer_opengl/gl_texture_cache.cpp | |
parent | Merge pull request #8172 from bunnei/kernel-mutex (diff) | |
parent | video_core: implement formats for N64 emulation (diff) | |
download | yuzu-856a841c72ba7b6c7f63a3afafd1692c1cea8744.tar yuzu-856a841c72ba7b6c7f63a3afafd1692c1cea8744.tar.gz yuzu-856a841c72ba7b6c7f63a3afafd1692c1cea8744.tar.bz2 yuzu-856a841c72ba7b6c7f63a3afafd1692c1cea8744.tar.lz yuzu-856a841c72ba7b6c7f63a3afafd1692c1cea8744.tar.xz yuzu-856a841c72ba7b6c7f63a3afafd1692c1cea8744.tar.zst yuzu-856a841c72ba7b6c7f63a3afafd1692c1cea8744.zip |
Diffstat (limited to '')
-rw-r--r-- | src/video_core/renderer_opengl/gl_texture_cache.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/video_core/renderer_opengl/gl_texture_cache.cpp b/src/video_core/renderer_opengl/gl_texture_cache.cpp index d12076358..f8c6e5c7e 100644 --- a/src/video_core/renderer_opengl/gl_texture_cache.cpp +++ b/src/video_core/renderer_opengl/gl_texture_cache.cpp @@ -182,6 +182,26 @@ GLenum AttachmentType(PixelFormat format) { } } +GLint ConvertA5B5G5R1_UNORM(SwizzleSource source) { + switch (source) { + case SwizzleSource::Zero: + return GL_ZERO; + case SwizzleSource::R: + return GL_ALPHA; + case SwizzleSource::G: + return GL_BLUE; + case SwizzleSource::B: + return GL_GREEN; + case SwizzleSource::A: + return GL_RED; + case SwizzleSource::OneInt: + case SwizzleSource::OneFloat: + return GL_ONE; + } + UNREACHABLE_MSG("Invalid swizzle source={}", source); + return GL_NONE; +} + void ApplySwizzle(GLuint handle, PixelFormat format, std::array<SwizzleSource, 4> swizzle) { switch (format) { case PixelFormat::D24_UNORM_S8_UINT: @@ -192,6 +212,12 @@ void ApplySwizzle(GLuint handle, PixelFormat format, std::array<SwizzleSource, 4 TextureMode(format, swizzle[0] == SwizzleSource::R)); std::ranges::transform(swizzle, swizzle.begin(), ConvertGreenRed); break; + case PixelFormat::A5B5G5R1_UNORM: { + std::array<GLint, 4> gl_swizzle; + std::ranges::transform(swizzle, gl_swizzle.begin(), ConvertA5B5G5R1_UNORM); + glTextureParameteriv(handle, GL_TEXTURE_SWIZZLE_RGBA, gl_swizzle.data()); + return; + } default: break; } |