Gluax Replacement Code

Started by
18 comments, last by Caste 12 years, 2 months ago
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?
Advertisement
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.
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.
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
------------------------------------------------------------------*/

AUX_RGBImageRec *auxDIBImageLoad(const char *FileName)
{
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;
data = data[i+2];
data[i+2] = Temp;
}
}

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

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

bool AUX_RGBImageRec::loadFile(const char* Filename)
{
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);
sizeX = BMInfo.bmiHeader.biWidth;
sizeY = BMInfo.bmiHeader.biHeight; // change color depth to 24 bits (3 bytes (BGR) / pixel)
BMInfo.bmiHeader.biBitCount = 24; // don't want the data compressed
BMInfo.bmiHeader.biCompression = BI_RGB;
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();
bool loadFile(const char *FileName);
friend AUX_RGBImageRec *auxDIBImageLoad(const char *FileName);
};
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.
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?
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).
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!
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-

(Google for these image converters)

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

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
Linker error] undefined reference to `auxDIBImageLoad(char const*)'

What is my problem?

This topic is closed to new replies.

Advertisement