Advertisement

Texture problem...

Started by January 10, 2003 09:24 AM
4 comments, last by GreyRavin 22 years, 1 month ago
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
Advertisement
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.
Yeah, if you could post that, I would much appreciate it.
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

          //--------------------------------------------------------------------------- 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]
Mate, The BMP.CPP has disappeared. Can you post it again (or email it - click on my username to get my address)?

Cheers,
Jeroen
Cheers,Jeroen

This topic is closed to new replies.

Advertisement