1c6a6cc191813e8343a17b028146a34f193a6ce44Roland ScheideggerName 2c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 3c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger MESA_texture_signed_rgba 4c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 5c6a6cc191813e8343a17b028146a34f193a6ce44Roland ScheideggerName Strings 6c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 7c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger GL_MESA_texture_signed_rgba 8c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 9c6a6cc191813e8343a17b028146a34f193a6ce44Roland ScheideggerContact 10c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 11c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 12c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 13c6a6cc191813e8343a17b028146a34f193a6ce44Roland ScheideggerNotice 14c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 15c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 16c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 17c6a6cc191813e8343a17b028146a34f193a6ce44Roland ScheideggerIP Status 18c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 19c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger No known IP issues 20c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 21c6a6cc191813e8343a17b028146a34f193a6ce44Roland ScheideggerStatus 22c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 23c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 24c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 25c6a6cc191813e8343a17b028146a34f193a6ce44Roland ScheideggerVersion 26c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 27c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 0.3, 2009-03-24 28c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 29c6a6cc191813e8343a17b028146a34f193a6ce44Roland ScheideggerNumber 30c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 31c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger Not assigned ? 32c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 33c6a6cc191813e8343a17b028146a34f193a6ce44Roland ScheideggerDependencies 34c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 35c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger Written based on the wording of the OpenGL 2.0 specification. 36c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 37c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger This extension trivially interacts with ARB_texture_float. 38c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger This extension shares some language with ARB_texture_compression_rgtc 39c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger but does not depend on it. 40c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 41c6a6cc191813e8343a17b028146a34f193a6ce44Roland ScheideggerOverview 42c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 43c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger OpenGL prior to 3.1 does not support any signed texture formats. 44c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger ARB_texture_compression_rgtc introduces some compressed red and 45c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger red_green signed formats but no uncompressed ones, which might 46c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger still be useful. NV_texture_shader adds signed texture formats, 47ae5776c41f12515bb73c07ee2a0aed56cdd1a1efNicolas Kaiser but also a lot of functionality which has been superseded by fragment 48c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger shaders. 49c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger It is usually possible to get the same functionality 50c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger using a unsigned format by doing scale and bias in a shader, but this 51c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger is undesirable since modern hardware has direct support for this. 52c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger This extension adds a signed 4-channel texture format by backporting 53c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger the relevant features from OpenGL 3.1, as a means to support this in 54c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger OpenGL implementations only supporting older versions. 55c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 56c6a6cc191813e8343a17b028146a34f193a6ce44Roland ScheideggerIssues 57c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 58c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 1) What should this extension be called? 59c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 60c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger RESOLVED: MESA_texture_signed_rgba seems reasonable. 61c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger The rgba part is there because only 4 channel format is supported. 62c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 63c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 64c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 2) Should the full set of signed formats (alpha, luminance, rgb, etc.) 65c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger be supported? 66c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 67c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger RESOLVED: NO. To keep this extension simple, only add the most 68c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger universal format, rgba. alpha/luminance can't be trivially supported 69c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger since OpenGL 3.1 does not support them any longer, and there is some 70c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger implied dependency on ARB_texture_rg for red/red_green formats so 71c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger avoid all this. Likewise, only 8 bits per channel is supported. 72c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 73c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 74c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 3) Should this extension use new enums for the texture formats? 75c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 76c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger RESOLVED: NO. Same enums as those used in OpenGL 3.1. 77c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 78c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 79c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 4) How are signed integer values mapped to floating-point values? 80c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 81c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger RESOLVED: Same as described in issue 5) of 82c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger ARB_texture_compression_rgtc (quote): 83c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger A signed 8-bit two's complement value X is computed to 84c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger a floating-point value Xf with the formula: 85c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 86c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger { X / 127.0, X > -128 87c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger Xf = { 88c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger { -1.0, X == -128 89c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 90c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger This conversion means -1, 0, and +1 are all exactly representable, 91c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger however -128 and -127 both map to -1.0. Mapping -128 to -1.0 92c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger avoids the numerical awkwardness of have a representable value 93c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger slightly more negative than -1.0. 94c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 95c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger This conversion is intentionally NOT the "byte" conversion listed 96c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger in Table 2.9 for component conversions. That conversion says: 97c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 98c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger Xf = (2*X + 1) / 255.0 99c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 100c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger The Table 2.9 conversion is incapable of exactly representing 101c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger zero. 102c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 103c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger (Difference to ARB_texture_compression_rgtc): 104c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger This is the same mapping as OpenGL 3.1 uses. 105c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger This is also different to what NV_texture_shader used. 106c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger The above mapping should be considered the reference, but there 107c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger is some leeway so other mappings are allowed for implementations which 108ae5776c41f12515bb73c07ee2a0aed56cdd1a1efNicolas Kaiser cannot do this. Particularly the mapping given in NV_texture_shader or 109c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger the standard OpenGL byte/float mapping is considered acceptable too, as 110c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger might be a mapping which represents -1.0 by -128, 0.0 by 0 and 1.0 by 111c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 127 (that is, uses different scale factors for negative and positive 112c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger numbers). 113c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger Also, it is ok to store incoming GL_BYTE user data as-is, without 114c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger converting to GL_FLOAT (using the standard OpenGL float/byte mapping) 115c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger and converting back (using the mapping described here). 116c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger Other than those subtle issues there are no other non-standard 117c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger conversions used, so when using for instance CopyTexImage2D with 118c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger a framebuffer clamped to [0,1] all converted numbers will be in the range 119c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger [0, 127] (and not scaled and biased). 120c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 121c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 122c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 5) How will signed components resulting from RGBA8_SNORM texture 123c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger fetches interact with fragment coloring? 124c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 125c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger RESOLVED: Same as described in issue 6) of 126c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger ARB_texture_compression_rgtc (quote): 127c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger The specification language for this extension is silent 128c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger about clamping behavior leaving this to the core specification 129c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger and other extensions. The clamping or lack of clamping is left 130c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger to the core specification and other extensions. 131c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 132c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger For assembly program extensions supporting texture fetches 133c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger (ARB_fragment_program, NV_fragment_program, NV_vertex_program3, 134c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger etc.) or the OpenGL Shading Language, these signed formats will 135c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger appear as expected with unclamped signed components as a result 136c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger of a texture fetch instruction. 137c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 138c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger If ARB_color_buffer_float is supported, its clamping controls 139c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger will apply. 140c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 141c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger NV_texture_shader extension, if supported, adds support for 142c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger fixed-point textures with signed components and relaxed the 143c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger fixed-function texture environment clamping appropriately. If the 144c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger NV_texture_shader extension is supported, its specified behavior 145c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger for the texture environment applies where intermediate values 146c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger are clamped to [-1,1] unless stated otherwise as in the case 147c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger of explicitly clamped to [0,1] for GL_COMBINE. or clamping the 148c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger linear interpolation weight to [0,1] for GL_DECAL and GL_BLEND. 149c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 150c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger Otherwise, the conventional core texture environment clamps 151c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger incoming, intermediate, and output color components to [0,1]. 152c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 153c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger This implies that the conventional texture environment 154c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger functionality of unextended OpenGL 1.5 or OpenGL 2.0 without 155c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger using GLSL (and with none of the extensions referred to above) 156c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger is unable to make proper use of the signed texture formats added 157c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger by this extension because the conventional texture environment 158c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger requires texture source colors to be clamped to [0,1]. Texture 159c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger filtering of these signed formats would be still signed, but 160c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger negative values generated post-filtering would be clamped to 161c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger zero by the core texture environment functionality. The 162c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger expectation is clearly that this extension would be co-implemented 163c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger with one of the previously referred to extensions or used with 164c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger GLSL for the new signed formats to be useful. 165c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 166c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 167c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 6) Should the RGBA_SNORM tokens also be accepted by CopyTexImage 168c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger functions? 169c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 170c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger RESOLVED: YES. 171c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 172c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 173c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 7) What to do with GetTexParameter if ARB_texture_float is supported, 174c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger in particular what datatype should this return for TEXTURE_RED_TYPE_ARB, 175c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger TEXTURE_GREEN_TYPE_ARB, TEXTURE_BLUE_TYPE_ARB, TEXTURE_ALPHA_TYPE_ARB? 176c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 177c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger RESOLVED: ARB_texture_float states type is either NONE, 178c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger UNSIGNED_NORMALIZED_ARB, or FLOAT. This extension adds a new enum, 179c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger SIGNED_NORMALIZED, which will be returned accordingly. This is the 180c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger same behaviour as in OpenGL 3.1. 181c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 182c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 183c6a6cc191813e8343a17b028146a34f193a6ce44Roland ScheideggerNew Tokens 184c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 185c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 186c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger Accepted by the <internalformat> parameter of 187c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger TexImage1D, TexImage2D, TexImage3D, CopyTexImage1D, and CopyTexImage2D: 188c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 189c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger RGBA_SNORM 0x8F93 190c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger RGBA8_SNORM 0x8F97 191c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 192c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger Returned by the <params> parameter of GetTexLevelParameter: 193c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 194c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger SIGNED_NORMALIZED 0x8F9C 195c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 196c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 197c6a6cc191813e8343a17b028146a34f193a6ce44Roland ScheideggerAdditions to Chapter 3 of the OpenGL 2.0 Specification (Rasterization): 198c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 199c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger -- Section 3.8.1, Texture Image Specification 200c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 201c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger Add to Table 3.16 (page 154): Sized internal formats 202c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 203c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger Sized Base R G B A L I D 204c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger Internal Format Internal Format bits bits bits bits bits bits bits 205c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger --------------- --------------- ---- ---- ---- ---- ---- ---- ---- 206c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger RGBA8_SNORM RGBA 8 8 8 8 0 0 0 207c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 208c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 209c6a6cc191813e8343a17b028146a34f193a6ce44Roland ScheideggerDependencies on ARB_texture_float extension: 210c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger 211c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger If ARB_texture_float is supported, GetTexParameter queries with <value> 212c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger of TEXTURE_RED_TYPE_ARB, TEXTURE_GREEN_TYPE_ARB, TEXTURE_BLUE_TYPE_ARB or 213c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger TEXTURE_ALPHA_TYPE_ARB return SIGNED_NORMALIZED if 214c6a6cc191813e8343a17b028146a34f193a6ce44Roland Scheidegger the base internal format is RGBA_SNORM. 215