Sign in to follow this  
Darkbouncer4689

Loading different texture formats

Recommended Posts

Hey all,

I'm trying to load a .tga texture file and I'm getting an all black model. When I load other texture files such as .gif or .bmp the model is textured properly, so it's not the texture coordinates or shader.
The .tga file is also in powers of 2 (512 x 512) so that's not the problem either.

I dont really know much about the different image formats a texture can be saved as.

If anyone has any tips or pointers as to why this may be happening I would really appreciate it.

Thanks!

Share this post


Link to post
Share on other sites
zacaj    667
Youll need to post your code if you want anyone to help you with it. Heres my TGA loader, for reference.

(for some reason your NOT ALLOWED TO ATTACH CODE IN A PROGRAMMING FORUM)
[url="http://zacaj.com/targa.h"]http://zacaj.com/targa.h[/url]
http://zacaj.com/targa.cpp

Share this post


Link to post
Share on other sites
Here is my texture loader, its in javascript/webgl

function handleLoadedTexture(textureData)
{
gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
gl.bindTexture(gl.TEXTURE_2D, textureData);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, textureData.image);
if(jsonTexture.minfilter == "LINEAR_MIPMAP_LINEAR")
{
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);
}
else if(jsonTexture.minfilter == "NONE")
{
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
}
if(jsonTexture.magfilter == "LINEAR")
{
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
}
else if(jsonTexture.magfilter == "NONE")
{
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
}
gl.generateMipmap(gl.TEXTURE_2D);

gl.bindTexture(gl.TEXTURE_2D, null);
}
return texture;

Share this post


Link to post
Share on other sites
Also I should add that it treats all texture formats the same, it assumes RGBA, and a byte for each color. It also sets the minfilter and magfilter. The minfilter and magfilter are set by my custom collada parser. Is it necessary to have special code for some formats when using opengl?

Thanks.

Share this post


Link to post
Share on other sites
Just wanted to update that I converted the .tga texture to .png and it loads properly. I believe png is a less detailed format.

Are some formats simply not supported by opengl/webgl? The webgl spec fails to comment on what texture formats it supports.

Share this post


Link to post
Share on other sites
_the_phantom_    11250
[quote name='Darkbouncer4689' timestamp='1311481643' post='4839479']
Just wanted to update that I converted the .tga texture to .png and it loads properly. I believe png is a less detailed format.
[/quote]

No, it isn't.

PNG is a lossless compressed image which uses zlib to compress the image data; TGA is also lossless but the only compression is RLE or Run Length Encoding which, depending on the image, can give worse compression ratios.

PNG also supports considerably more in the format in general.

TGA probably doesn't work as it's not a commonly used 'web format', unlike GIF, PNG, JPG and BMP formats which would all be supported by the browser natively.

Share this post


Link to post
Share on other sites
wolfscaptain    200
TGA is not supported in any browser.
Had to convert thousands of pictures to PNGs because of it :| (yey for batch operations with ImageMagick using a 5-liner Ruby script)

The browser probably told you that in its console, so you better open up the console when you test your code.
Chrome's console (and JS implementation) is a whole lot better then Firefox's in my experience, so you might want to develop on it.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this