• Create Account

## Gluax Replacement Code

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

19 replies to this topic

### #1Mooncabbage  Members

Posted 09 October 2004 - 03:19 AM

Please bear with me here, my computer is doing some funky cookie crap and I keep logging out, so I can't be bothered writing a long explanation of why I am asking this, only to have it all disappear again. Can someone please tell me how to use the Gluax Replacement Code?

### #2Mooncabbage  Members

Posted 09 October 2004 - 03:41 AM

Someone reply, please? I can't be bothered looking for gluax.dll after all the effort it took to find the other depreciated libraries, and once you get to tutorial no. 6 that becomes a real problem.

### #3_DarkWIng_  Members

Posted 09 October 2004 - 04:28 AM

a) you might wat to wait a bit longer than half an hour before posting again.. this is forum.. it takes time..
b) look at later tutorials that use TGA loading code. It's far from perfect, but it willget you started. Of you could use one of many image loading libs.
You should never let your fears become the boundaries of your dreams.

### #4lc_overlord  Members

Posted 09 October 2004 - 06:53 AM

I really wish nehe would rewrite that tuturial, all those "the tururial doesn't work?", "where can i get the glaux thingy?" and "could somebody send me the glaux replacementcode?" posts are really starting to bug me.

NeHe, if i write a bmp loader for you, will you include it in your Tuturials.

either way, i think these are the files.
bmp.cpp
//--------------------------------------------------------------
#include <windows.h>		// Header File For Windows - has structures for BMP format
#include <stdio.h>    		// Header File For Standard Input/Output
#include <stdlib.h>
#include "BMP.h"

/*------------------------------------------------------------------
BMP Loader - a quick and dirty substitute for GLaux
if you only use GLaux to load BMP files will load any format of a
windows DIB BMP format graphics file Only works on a windows box
Caution! memory for the data is allocated using 'new'.
In the NeHe tutorials the memory is reclaimed using 'free'.
For the small tutorials its not a big deal but not a good practice in
larger projects (heap trashing not good). J.M. Doyle : 12 Jan 2003
------------------------------------------------------------------*/

{
return new AUX_RGBImageRec(FileName);
}

void AUX_RGBImageRec::convertBGRtoRGB()
{
const DWORD BitmapLength = sizeX * sizeY * 3;
byte Temp;  // not quick but it works
for(DWORD i=0; i< BitmapLength; i += 3)
{
Temp = data[i];
data[i] = data[i+2];
data[i+2] = Temp;
}
}

AUX_RGBImageRec::AUX_RGBImageRec(const char *FileName): data(NULL), NoErrors(false)
{
}

AUX_RGBImageRec::~AUX_RGBImageRec()
{
if (data != NULL) delete data;
data = NULL;
}

{
BITMAPINFO BMInfo;								// need the current OpenGL device contexts in order to make use of windows DIB utilities
const HDC gldc = wglGetCurrentDC();   			// a handle for the current OpenGL Device Contexts
// assume there are errors until file is loaded successfully into memory
NoErrors = false;  								// release old data since this object could be used to load multiple Textures
if(data != NULL) delete data;					// windows needs this info to determine what header info we are looking for
BMInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);  // Get windows to determine color bit depth in the file for us
BMInfo.bmiHeader.biBitCount = 0;				// Get windows to open and load the BMP file and handle the messy decompression if the file is compressed
// assume perfect world and no errors in reading file, Ha Ha
HANDLE DIBHandle = LoadImage(0,Filename, IMAGE_BITMAP, 0, 0,LR_DEFAULTCOLOR | LR_CREATEDIBSECTION | LR_LOADFROMFILE);  // use windows to get header info of bitmap - assume no errors in header format

GetDIBits(gldc, (HBITMAP)DIBHandle, 0,0, NULL, &BMInfo, DIB_RGB_COLORS);
sizeY = BMInfo.bmiHeader.biHeight;				// change color depth to 24 bits (3 bytes (BGR) / pixel)
BMInfo.bmiHeader.biBitCount = 24;				// don't want the data compressed
const DWORD BitmapLength = sizeX * sizeY * 3;	// 3 bytes (BGR) per pixel (24bp)
// allocate enough memory to hold the pixel data in client memory
data = new byte[BitmapLength];					// Get windows to do the dirty work of converting the BMP into the format needed by OpenGL
// if file is already 24 bit color then this is a waste of time but makes for short code
// Get the actual Texel data from the BMP object

if (GetDIBits(gldc, (HBITMAP)DIBHandle, 0, sizeY, data, &BMInfo, DIB_RGB_COLORS))
{
NoErrors = true;
convertBGRtoRGB();							// NOTE: BMP is in BGR format but OpenGL needs RGB unless you use GL_BGR_EXT
}

DeleteObject(DIBHandle);						// don't need the BMP Object anymore
return NoErrors;
}


bmp.h
class AUX_RGBImageRec {
void convertBGRtoRGB();
public:
byte *data;
DWORD sizeX;
DWORD sizeY;
bool NoErrors;
AUX_RGBImageRec(): NoErrors(false), data(NULL) {};
AUX_RGBImageRec(const char *FileName);
~AUX_RGBImageRec();
};


### #5Mooncabbage  Members

Posted 10 October 2004 - 02:04 PM

Thanks for the help. The impatience was due to the time i posted... waaaaaaaaaaaay too early in the morning (or late at night). Neways, it's not finding the replacement code that is a problem, it is using it. Perhaps the original/early tutorials just need a facelift or something? Someone to go thru and get rid of gluax and update it a bit.

### #6Anonymous Poster_Anonymous Poster_*  Guests

Posted 14 October 2004 - 08:13 AM

I'm sorry. I probably seem like an idiot, but...

How do I use this code?

I've saved the two files as bmp.h and bmp.cpp.

I replaced the glaux include line in lesson 6 with #include "bmp.cpp"

But that doesn't compile either.

Am I supposed to do something with glAux Replacement.cpp?

### #7lc_overlord  Members

Posted 14 October 2004 - 11:17 AM

1. you have to include the bmp.cpp file in your project so it will be compiled and linked into your exe.
2. it's #include "bmp.h" not #include "bmp.cpp"

there are no guaranties that this code will work, but i think it will.

Regarding "glAux Replacement.cpp", i think not,
this code replaces AUX_RGBImageRec class(witch is the only real reason to use glAux), it works for me most of the times (allthough only if the imagefile is in the same dir as the .exe, odd).

### #8Anonymous Poster_Anonymous Poster_*  Guests

Posted 14 October 2004 - 11:25 AM

Ah. I see. So including a file in your porject is like merging the source files.
It works. And the file's not in the same folder. Oh well.

Thanks!

### #9Anonymous Poster_Anonymous Poster_*  Guests

Posted 15 October 2004 - 12:32 PM

Just use load RAW Bitmaps. There are no includes to worry about. Just need an image converter to convert your textures from .bmp or .jpeg or..... whateva to RAW extension. It´s as easy as... "save as" RAW into your exe folder-

Irfan View
DIMIN http://www.dimin.net/

The following code will show you how to load them and textrue planets:

http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=8101&lngWId=3

### #10Mooncabbage  Members

Posted 17 October 2004 - 08:05 PM

OK, I finally got around to trying to use the code. I copied the bmp.h file into a bmp.h file, and included it in lesson 7, but upon compiling i get an error. Duh, i think, the two classes have different names. So first i try to change the class name in bmp.h to auxDIBImageLoad and compile, and get the same error. So i change it back, and replace all the auxDIBImageLoad words with the one in bmp.h and get:

...\OpenGL7.cpp In function AUX_RGBImageRec* LoadBMP(char*)':
58 ...\OpenGL7.cpp cannot convert AUX_RGBImageRec' to AUX_RGBImageRec*' in return

What is my problem?

### #11lc_overlord  Members

Posted 17 October 2004 - 11:34 PM

Strange, when i did it it worked fine, no bugs no warnings, no nothing.

maybe you need step by step instructions.

1. take the bmp.cpp and bmp.h files and copy them to the same directory as lesson7.cpp(in your case it's probobly OpenGL7.cpp instead of lesson7.cpp).

2. open up the project in vc++ 6.0 (other versions should work to)

3. under file view find the "source files" folder, right click on it an select add files to folder, choose "bmp.cpp".

4. do the same for the "header files" folder but choose "bmp.h".

5. in "lesson7.cpp" change the folowing line
#include <gl/glaux.h> // Header File For The Glaux Library
to
#include "bmp.h" // Header File For The Glaux replacement Library

6. compile, run and be happy.

### #12Mooncabbage  Members

Posted 18 October 2004 - 03:09 PM

I use dev cpp, but that shouldn't be a problem, i probably forgot to tell the compiler to link it properly or something... However i didn't even touch the .cpp... figured it was an example file, doh ><. Thanks for the help, i'll try and figure out the source file bit in dev cpp, i think i've seen it somewhere before, however, i'm fairly new to actual c++, so things like source files and having to link included things as well as include them are new and strange to me.

Posted 18 October 2004 - 04:03 PM

personally i just use nehe's ipicture code. it works great for me.

probably off topic but o well

### #14Mooncabbage  Members

Posted 18 October 2004 - 04:26 PM

What ipicture code? where? tell meeeeeeeeeeeeeeeeeeeeeeeeee!

NB: Yes i just looked for it, so don't yell at me.

### #15Mooncabbage  Members

Posted 18 October 2004 - 04:35 PM

nm, i found it. I don't really understand it, but i found it. that r so far down the track it r not funny.

### #16ulair  Members

Posted 06 August 2011 - 10:14 AM

There is a little error in the bmp.h of yours. You need to add the line AUX_RGBImageRec *auxDIBImageLoad(const char *FileName); The function is only defined in the .cpp. That's probably why it didn't work for Mooncabbage Well it works for me now. Thank you! Now on to limit that hyperfast framerate a bit O_o ...

### #17CLOUGHAX  Members

Posted 01 January 2012 - 06:37 PM

@lc_overlord Run-time error when deallocating the data pointer

I have tested your AUX_RGBImage class and for the most part it works until when the program reaches the point of deallocating the byte data variable through either the destructor or when data!=NULL. I have been trying to solve the problem ever since but it keeps crashing when i reach that point and the only conclusion is can come to is that i overlooked something concerning classes and dynamic allocation or the microsoft visual 2010 compiler is not working cause i even realize that from the code you allocated an byte array so to actually deallocate it wold be delete[] data, but thats not working either. I may be wrong in hypothesis and thats the reason for me making this request for your help.

### #18lc_overlord  Members

Posted 02 January 2012 - 05:12 AM

This pice of code is pretty ancient and im unsure if it even works with the latest Visual studio or how easy it is to fix it as i havn't run this code in a few years, i know it works for MSVC++ 6.0 but that version didn't even have namespace implemented.

It would probably be better today to just go for the TGA tutorials and drop this whole glAUX nonsence.

### #19CLOUGHAX  Members

Posted 04 January 2012 - 04:30 AM

Well thanks for the advice ill try and give it another shot although the last tutorial i did on bitmap was a total garbage and it seemed as if the writer got fed up at the end and just pasted the rest of the code which was in fact incomplete and had me stuck for a couple hours trying to figure out his gibberish. But i got fed up and just download an incredible library named free freeImage that works but i dont feel satisfied knowing that it wasnt me who wrote the code. So ill give it a next shot

### #20Caste  Members

Posted 28 January 2012 - 08:47 AM

I added an explanation on how to load textures with SOIL a while ago. I strongly recommend using this easy and reliable method to load your textures instead of GLAUX or any replacement code...

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.