• Advertisement
Sign in to follow this  

a little help with tutorial 7 and SOIL

This topic is 2203 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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:


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



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
Advertisement
Are you following the instructions given in the Lesson 6 Update? 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
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)

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=SOIL_load_OGL_texture (
"Data/Crate.bmp",
SOIL_LOAD_AUTO,
SOIL_CREATE_NEW_ID,
SOIL_flags);

if (texture == 0)
return false;

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

}

return true;
}

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
Sign in to follow this  

  • Advertisement