Texture problem...
I''ve just started learning OpenGL (and C++) and i''ve been using the tutorials on this site. I''m stuck with the Texturing tutorial though - I''m using the Borland C++ free command line compiler and when i try to compile my code i get this:
Error: Unresolved external ''auxDIBImageLoadA'' referenced from C:\OPENGL\MYGL\LESSON06.OBJ
The same happens with the Borland Builder source I downloaded, when I try to compile that(though the precompiled version is fine)The only thing I changed in that was the #include <vcl.h> line, as I don''t have vcl.h on my pc.
Well, that problem can occur if you don''t have glaux.lib linked or rather does it exist on your comp.
From what i have heard glaux is no longer supported.
Even the great NeHe said that himself, that he didn''t have time to convert his tuturials to non glaux.
Check the if you have that file linked, if not the your screwed. J/K
From what i have heard glaux is no longer supported.
Even the great NeHe said that himself, that he didn''t have time to convert his tuturials to non glaux.
Check the if you have that file linked, if not the your screwed. J/K
www.flashbang.se | www.thegeekstate.com | nehe.gamedev.net | glAux fix for lesson 6 | [twitter]thegeekstate[/twitter]
I have written a simple BMP loader that replaces the BMP loader func in GLaux. I can post the source code(it is very short) if you are interested. Its in C++ and compiles under VC++ or BCB 3.0+. It can be used the same way as auxDIBImageLoad so you don''t have to change the tutorial source code.
You asked for it, here it is. There are two files: BMP.h and BMP.cpp. I am new to this forum so I don't know if you can post files somewhere for down loading so I included the source here. The source looks mangled but if you cut and paste into your editor then it should turn out okay. If not then I can email them to you.
use BMP like you would GLaux but include "BMP.h" instead of "glaux.h". Of course you will have to add BMP.cpp to your project file.
first file: BMP.h
Second File: BMP.cpp
[edited by - nfz on January 13, 2003 5:30:02 PM]
use BMP like you would GLaux but include "BMP.h" instead of "glaux.h". Of course you will have to add BMP.cpp to your project file.
first file: 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);};
Second File: 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[i]; data[i] = 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, 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, 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;}
[edited by - nfz on January 13, 2003 5:30:02 PM]
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement
Recommended Tutorials
Advertisement