OpenGL simple texture rendering problem

Hi,

I am rendering a texture from a 100x100 image (jpg) after loading it using
SDL_Image. But I get an unwanted black patch surrounding the texture. Does
someone know the possible reason ?

Here is the screenshothttp://openanimator.googlepages.com/Screenshot-testresmanager.pngof
the window

The first box is a 50x50 box. The actual size of the image is 100x100.

Image is loaded using the following code from sdl_surface

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB,

GL_UNSIGNED_BYTE, NULL);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, texture_converted->w,
texture_converted->h, GL_RGB, GL_UNSIGNED_BYTE, texture_converted->pixels);

-Abhinav

Hi,

I am rendering a texture from a 100x100 image (jpg) after loading it using
SDL_Image. But I get an unwanted black patch surrounding the texture. Does
someone know the possible reason ?

Take a look at SDL_GL_LoadTexture() in test/testgl.c in the SDL source.

See ya!
-Sam Lantinga, Lead Software Engineer, Blizzard Entertainment

2008/8/23 Abhinav Lele <abhinav.lele at gmail.com>:

Hi,

I am rendering a texture from a 100x100 image (jpg) after loading it using
SDL_Image. But I get an unwanted black patch surrounding the texture. Does
someone know the possible reason ?

Here is the screenshot of the window

The first box is a 50x50 box. The actual size of the image is 100x100.

Image is loaded using the following code from sdl_surface

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB,

GL_UNSIGNED_BYTE, NULL);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, texture_converted->w,
texture_converted->h, GL_RGB, GL_UNSIGNED_BYTE, texture_converted->pixels);

Most OpenGL implementations only support textures with power of 2
sizes. Try converting your image to a power of 2 before loading it to
OpenGL…>

-Abhinav


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org

Hey Abhinav,

I’m writing this assuming you’re using the code I sent you.

The reason is that OpenGL only supports textures of size power of
two. The nearest power of two to 100 is 128, so you’ll have a 28
pixel border if you don’t compensate for this. The way to get around
it is to adjust the texture coordinates of the quad.

use this:

GLfloat maxu = (GLfloat) texture_converted->w / pot(texture_converted-

w);
GLfloat maxv = (GLfloat) texture_converted->h / pot(texture_converted-
h);

glBegin(GL_QUADS);

glTexCoord2f( 0, 0);
glVertex2i( 0, 0 );

glTexCoord2f( maxu, 0);
glVertex2i( texture_converted->w, 0 );

glTexCoord2f( maxu, maxv);
glVertex2i( texture_converted->w, texture_converted->h );

glTexCoord2f( 0, maxv);
glVertex2i( 0, texture_converted->h );

glEnd();

What this does is it uses fractional texture coordinates depending on
the ratio of the used image size to the total size of the image. The
code should roughly work, but may have an error here or there and may
make your image upside down. Code mostly there to show you what to do
basically.

  • HolmesOn Aug 23, 2008, at 10:09 AM, Abhinav Lele wrote:

Hi,

I am rendering a texture from a 100x100 image (jpg) after loading it
using SDL_Image. But I get an unwanted black patch surrounding the
texture. Does someone know the possible reason ?

Here is the screenshot of the window

The first box is a 50x50 box. The actual size of the image is 100x100.

Image is loaded using the following code from sdl_surface

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB,  

GL_UNSIGNED_BYTE, NULL);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, texture_converted->w,
texture_converted->h, GL_RGB, GL_UNSIGNED_BYTE, texture_converted-

pixels);

-Abhinav


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org

Thanks :)On Mon, Aug 25, 2008 at 5:37 AM, Holmes Futrell wrote:

Hey Abhinav,

I’m writing this assuming you’re using the code I sent you.

The reason is that OpenGL only supports textures of size power of two. The
nearest power of two to 100 is 128, so you’ll have a 28 pixel border if you
don’t compensate for this. The way to get around it is to adjust the
texture coordinates of the quad.

use this:

GLfloat maxu = (GLfloat) texture_converted->w / pot(texture_converted->w);
GLfloat maxv = (GLfloat) texture_converted->h / pot(texture_converted->h);

glBegin(GL_QUADS);
glTexCoord2f( 0, 0);
glVertex2i( 0, 0 );
glTexCoord2f( maxu, 0);
glVertex2i( texture_converted->w, 0 );
glTexCoord2f( maxu, maxv);
glVertex2i( texture_converted->w, texture_converted->h );

glTexCoord2f( 0, maxv);
glVertex2i( 0, texture_converted->h );
glEnd();

What this does is it uses fractional texture coordinates depending on the
ratio of the used image size to the total size of the image. The code
should roughly work, but may have an error here or there and may make your
image upside down. Code mostly there to show you what to do basically.

  • Holmes

On Aug 23, 2008, at 10:09 AM, Abhinav Lele wrote:

Hi,

I am rendering a texture from a 100x100 image (jpg) after loading it using
SDL_Image. But I get an unwanted black patch surrounding the texture. Does
someone know the possible reason ?

Here is the screenshothttp://openanimator.googlepages.com/Screenshot-testresmanager.pngof the window

The first box is a 50x50 box. The actual size of the image is 100x100.

Image is loaded using the following code from sdl_surface

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB,

GL_UNSIGNED_BYTE, NULL);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, texture_converted->w,
texture_converted->h, GL_RGB, GL_UNSIGNED_BYTE, texture_converted->pixels);

-Abhinav


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org