Sign in to follow this  
Enerjak

a little help with tutorial 7 and SOIL

Recommended Posts

Enerjak    277
Hmm, im having a bit of a problem getting tutorial 7 since it uses gluax rather then SOIL and there's a few things that need the teture width/height and data like this line:

[CODE]
glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);

[/CODE]

now of course SOIL doesn't seem to have a way of getting the width/height of the texture so as to allow the creation of this type of texture. Maybe im missing something i don't know.

Share this post


Link to post
Share on other sites
swiftcoder    18432
Are you following the instructions given in the [url="http://nehe.gamedev.net/tutorial/lesson_06_texturing_update/47002/"]Lesson 6 Update[/url]? As long as you use SOIL_load_OGL_texture(), you shouldn't be calling at glTexImage2D() all - SOIL does it for you.

(you can instead call SOIL_load_image, to load the image data into a temporary buffer, and then manually glTexImage2D() it into OpenGL, but that's a lot of extra work, which you don't need to do here)

Share this post


Link to post
Share on other sites
Tweener    100
This is what I've come up with using MinGW:

First remove #include <gl\glaux.h> and add #include "SOIL.h".
#include <stdio.h> can also be removed.
Remove the bmp loading function as in Lesson 06 then change LoadGLTextures() in the following manner
(different code posted 1-14-12 for a more flexible framework)
[CODE]
int LoadGLTextures()
{
unsigned int SOIL_flags;
GLint mag_param;
GLint min_param;

for (int i=0; i<3; i++) {

switch(i) {
case 0:
/* SOIL.h uses enum instead of #define for named flag values; easiest just to look them up */
SOIL_flags = 16; // SOIL_FLAG_INVERT_Y value
mag_param = GL_NEAREST;
min_param = GL_NEAREST;
break;

case 1:
SOIL_flags = 16;
mag_param = GL_LINEAR;
min_param = GL_LINEAR;
break;

case 2:
SOIL_flags = 16 | 2; // SOIL_FLAG_INVERT_Y | SOIL_FLAG_MIPMAPS value
mag_param = GL_LINEAR;
min_param = GL_LINEAR_MIPMAP_NEAREST;
break;

default:
return false;
}

texture[i]=SOIL_load_OGL_texture (
"Data/Crate.bmp",
SOIL_LOAD_AUTO,
SOIL_CREATE_NEW_ID,
SOIL_flags);

if (texture[i] == 0)
return false;

// Define Texture Parameters
glBindTexture(GL_TEXTURE_2D, texture[i]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, mag_param);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, min_param);

}

return true;
}
[/CODE]
Also, I have been removing GLvoid from all function parameter lists leaving empty parenthesis as it is evidently not valid C++ to pass a void type as a parameter and MinGW complains.
Finally, the first parameter of CreateGLWindow should be changed from "char* title" to "const char* title".
With SOIL.h and libSOIL.a in the same directory as the lesson7.cpp file, MinGW compiles and links fine using:
g++ -mwindows lesson7.cpp -o lesson7.exe -L. -lSOIL -lopengl32 -lglu32

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