-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 SpliFF wrote:
On 03/29/10 17:06, Ian Romanick wrote:
SpliFF wrote:
So to clarify, you're saying a partial implementation (decoder only) isn't an option at all? If you expose an extension it must be complete? See the documentation for glGetCompressedTexImage.
That does not appear to imply a run-time encoder. It seems to imply the data is already compressed - which could (and really should) be done prior to distribution (via the nvidia tools for example). The documentation does quite clearly state that the application should verify the texture really was compressed so you're only going to run into issues when the programmer made assumptions about the supported hardware. Not saying that's impossible, just that that's the programmers' responsibility, not the drivers.
Runtime compression is actually performed by glTexImage2D with its internalFormat set to a supported *_S3TC_* value, however the 2.1 spec says:
"If no corresponding internal format is available, or the GL can not compress that image for any reason, the internal format is instead replaced with a corresponding base internal format."
I hate to admit it, but I think you are correct. Issue 10 in the GL_ARB_texture_compression, the first two bullets in particular, seems to support this. (10) Should functionality be provided to allow applications to save compressed images to disk and reuse them in subsequent runs without programming to specific formats? If so, how? RESOLVED: Yes. This can be done without knowledge of specific compression formats in the following manner: * Call TexImage with an uncompressed image and a generic compressed internal format. The texture image will be compressed by the GL, if possible. * Call GetTexLevelParameteriv with a <value> of TEXTURE_COMPRESSED_ARB to determine if the GL was able to store the image in compressed form. * Call GetTexLevelParameteriv with a <value> of TEXTURE_INTERNAL_FORMAT to determine the specific compressed image format in which the image is stored. * Call GetTexLevelParameteriv with a <value> of TEXTURE_COMPRESSED_IMAGE_SIZE_ARB to determine the size (in ubytes) of the compressed image that will be returned by the GL. Allocate a buffer of at least this size. * Call GetCompressedTexImageARB. The GL will write the compressed texture image into the allocated buffer. * Save the returned compressed image to disk, along with the associated width, height, depth, border parameters and the returned values of TEXTURE_COMPRESSED_IMAGE_SIZE_ARB and TEXTURE_INTERNAL_FORMAT. * Load the compressed image and its parameters, and call CompressedTexImage_[123]DARB to use the compressed image. The value of TEXTURE_INTERNAL_FORMAT should be used as <internalFormat> and the value of TEXTURE_COMPRESSED_IMAGE_SIZE_ARB should be used as <imageSize>. The saved images will be valid as long as they are used on a device supporting the returned <internalFormat> parameter. If the saved images are used on a device that does not support the compressed internal format, an INVALID_ENUM error would be generated by the call to CompressedTexImage_[123]D because of the unknown format. Note also that to reliably determine if the GL will compress an image without actually compressing it, an application need only define a proxy texture image and query TEXTURE_COMPRESSED_ARB as above. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAkuw6/wACgkQX1gOwKyEAw9cWQCfViC2igK2W7DvhtcDj8pXVd0F wJsAoJ0q1Pgp1sy6HVy9H9ihg/ms9oVR =OgUh -----END PGP SIGNATURE----- -- To unsubscribe, e-mail: radeonhd+unsubscribe@opensuse.org For additional commands, e-mail: radeonhd+help@opensuse.org