Jump to content
  • Advertisement
Sign in to follow this  
Enerjak

a little help with tutorial 7 and SOIL

This topic is 2528 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
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!