Extension for Visual Studio Code that adds image preview for PVR (.pvr) texture files. All texture decompression is written in JavaScript, so any format will work on any graphics card.
- Large textures are scaled down to fit the window.
- Textures with premultiplied alpha are shown correctly.
- No zooming or other user control of the viewer.
- No support for viewing cubemaps, mipmaps, arrays, 3D textures.
- Floating point textures have no exposure control for display.
- Packed YUV formats are not supported.
Initial goal is to support all formats required by OpenGL ES 3.2, listed below:
| ❔ | Format | Enums |
|---|---|---|
| 🟢 | ETC1 | ETC1_RGB8 |
| 🟢 | ETC2 RGB | RGB8_ETC2, SRGB8_ETC2 |
| 🟢 | ETC2 RGBA | RGBA8_ETC2_EAC, SRGB8_ALPHA8_ETC2_EAC |
| 🟢 | ETC2 RGB A1 | RGB8_PUNCHTHROUGH_ALPHA1_ETC2, SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 |
| 🟢 | EAC R11 | R11_EAC, SIGNED_R11_EAC |
| 🟢 | EAC RG11 | RG11_EAC, SIGNED_RG11_EAC |
| 🟢 | PVRTC 2bpp RGB | RGB_PVRTC_2BPPV1 |
| 🟢 | PVRTC 2bpp RGBA | RGBA_PVRTC_2BPPV1 |
| 🟢 | PVRTC 4bpp RGB | RGB_PVRTC_4BPPV1 |
| 🟢 | PVRTC 4bpp RGBA | RGBA_PVRTC_4BPPV1 |
| 🟢 | PVRTC2 2bpp | RGBA_PVRTC_2BPPV2 |
| 🟢 | PVRTC2 4bpp | RGBA_PVRTC_4BPPV2 |
| ✖️ | BC1 | RGB_S3TC_DXT1, RGBA_S3TC_DXT1, SRGB_S3TC_DXT1, SRGB_ALPHA_S3TC_DXT1 |
| ✖️ | BC2 | RGBA_S3TC_DXT3, SRGB_ALPHA_S3TC_DXT3 |
| ✖️ | BC3 | RGBA_S3TC_DXT5, SRGB_ALPHA_S3TC_DXT5 |
| ❌ | BC4 | RED_BC4_ATI1_UNORM, RED_BC4_ATI1_SNORM |
| ❌ | BC5 | RG_BC5_ATI2_UNORM, RG_BC5_ATI2_SNORM |
| ✖️ | BC6H | RGB_BPTC_SIGNED_FLOAT, RGB_BPTC_UNSIGNED_FLOAT |
| ✖️ | BC7 | RGBA_BPTC_UNORM, SRGB_ALPHA_BPTC_UNORM |
| ❌ | ASTC 4x4 | RGBA_ASTC_4x4, SRGB8_ALPHA8_ASTC_4x4 |
| ❌ | ASTC 5x4 | RGBA_ASTC_5x4, SRGB8_ALPHA8_ASTC_5x4 |
| ❌ | ASTC 5x5 | RGBA_ASTC_5x5, SRGB8_ALPHA8_ASTC_5x5 |
| ❌ | ASTC 6x5 | RGBA_ASTC_6x5, SRGB8_ALPHA8_ASTC_6x5 |
| ❌ | ASTC 6x6 | RGBA_ASTC_6x6, SRGB8_ALPHA8_ASTC_6x6 |
| ❌ | ASTC 8x5 | RGBA_ASTC_8x5, SRGB8_ALPHA8_ASTC_8x5 |
| ❌ | ASTC 8x6 | RGBA_ASTC_8x6, SRGB8_ALPHA8_ASTC_8x6 |
| ❌ | ASTC 8x8 | RGBA_ASTC_8x8, SRGB8_ALPHA8_ASTC_8x8 |
| ❌ | ASTC 10x5 | RGBA_ASTC_10x5, SRGB8_ALPHA8_ASTC_10x5 |
| ❌ | ASTC 10x6 | RGBA_ASTC_10x6, SRGB8_ALPHA8_ASTC_10x6 |
| ❌ | ASTC 10x8 | RGBA_ASTC_10x8, SRGB8_ALPHA8_ASTC_10x8 |
| ❌ | ASTC 10x10 | RGBA_ASTC_10x10, SRGB8_ALPHA8_ASTC_10x10 |
| ❌ | ASTC 12x10 | RGBA_ASTC_12x10, SRGB8_ALPHA8_ASTC_12x10 |
| ❌ | ASTC 12x12 | RGBA_ASTC_12x12, SRGB8_ALPHA8_ASTC_12x12 |
| ✖️ | ASTC 3x3x3 | RGBA_ASTC_3x3x3, SRGB8_ALPHA8_ASTC_3x3x3 |
| ✖️ | ASTC 4x3x3 | RGBA_ASTC_4x3x3, SRGB8_ALPHA8_ASTC_4x3x3 |
| ✖️ | ASTC 4x4x3 | RGBA_ASTC_4x4x3, SRGB8_ALPHA8_ASTC_4x4x3 |
| ✖️ | ASTC 4x4x4 | RGBA_ASTC_4x4x4, SRGB8_ALPHA8_ASTC_4x4x4 |
| ✖️ | ASTC 5x4x4 | RGBA_ASTC_5x4x4, SRGB8_ALPHA8_ASTC_5x4x4 |
| ✖️ | ASTC 5x5x4 | RGBA_ASTC_5x5x4, SRGB8_ALPHA8_ASTC_5x5x4 |
| ✖️ | ASTC 5x5x5 | RGBA_ASTC_5x5x5, SRGB8_ALPHA8_ASTC_5x5x5 |
| ✖️ | ASTC 6x5x5 | RGBA_ASTC_6x5x5, SRGB8_ALPHA8_ASTC_6x5x5 |
| ✖️ | ASTC 6x6x5 | RGBA_ASTC_6x6x5, SRGB8_ALPHA8_ASTC_6x6x5 |
| ✖️ | ASTC 6x6x6 | RGBA_ASTC_6x6x6, SRGB8_ALPHA8_ASTC_6x6x6 |
| 🟢 | R8 G8 B8 A8 | RGBA8, RGBA8_SNORM, SRGB8_ALPHA8, RGBA8UI, RGBA8I, BGRA8 |
| 🟢 | R8 G8 B8 | RGB8, RGB8_SNORM, SRGB8, RGB8UI, RGB8I |
| 🟢 | R8 G8 | RG8, RG8_SNORM, RG8UI, RG8I |
| 🟢 | R8 | R8, R8_SNORM, R8UI, R8I |
| 🟢 | R10 G10 B10 A2 | RGB10_A2, RGB10_A2UI |
| 🟢 | R4 G4 B4 A4 | RGBA4 |
| 🟢 | R5 G5 B5 A1 | RGB5_A1 |
| 🟢 | R5 G6 B5 | RGB565 |
| 🟢 | L8 A8 | LUMINANCE8_ALPHA8 |
| 🟢 | L8 | LUMINANCE8 |
| 🟢 | A8 | ALPHA8 |
| 🟢 | R32 G32 B32 A32 | RGBA32F, RGBA32UI, RGBA16I |
| 🟢 | R32 G32 B32 | RGB32F, RGB32UI, RGB32I |
| 🟢 | R32 G32 | RG32F, RG32UI, RG32I |
| 🟢 | R32 | R32F, R32UI, R32I |
| 🟢 | R16 G16 B16 A16 | RGBA16F, RGBA16UI, RGBA16I |
| 🟢 | R16 G16 B16 | RGB16F, RGB16UI, RGB16I |
| 🟢 | R16 G16 | RG16F, RG16UI, RG16I |
| 🟢 | R16 | R16F, R16UI, R16I |
| 🟢 | R11 G11 B10 | R11F_G11F_B10F |
| 🟢 | RGB9 E5 | RGB9_E5 |
| 🟢 | RGBM | RGBA8* |
| 🟢 | RGBD | RGBA8* |
Not much supported yet, but could still be useful to people. Just wanted to get something out there.