Jump to content
  • Advertisement
Sign in to follow this  
GavRobbs

OpenGL Bitmap Question

This topic is 4160 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

Here's my problem.I have a class called Texture(sorta misleading as this my program is only a bitmap example). Anyway I have the bmp loading code as follows: class Texture { public: unsigned char * data; int width,height,bits; GLuint colortype; Texture(); ~Texture(); Texture(string fp); }; Texture::Texture(string fp) { BITMAPINFOHEADER info; BITMAPFILEHEADER header; int imageIdx; RGBQUAD tempRGB; FILE * datafile = fopen(fp.c_str(),"rb"); fread(&header,sizeof(BITMAPFILEHEADER),1,datafile); if(header.bfType != 19778) { fclose(datafile); datafile = NULL; } else { DWORD size = header.bfSize - header.bfOffBits; fread(&info,sizeof(BITMAPINFOHEADER),1,datafile); fseek(datafile,header.bfOffBits,SEEK_SET); data = new unsigned char[size]; fread(data,1,size,datafile); if(!data) { MessageBox(NULL,"Bitmap loading error.","Error!",MB_OK); }; for(imageIdx = 0;imageIdx < info.biSizeImage;imageIdx += 3) { tempRGB.rgbBlue = data[imageIdx]; data[imageIdx] = data[imageIdx + 2]; data[imageIdx + 2] = tempRGB.rgbBlue; }; fclose(datafile); datafile = NULL; width = info.biWidth; height = info.biHeight; bits = info.biBitCount; colortype = GL_RGB; }; }; The following are all declared globally: HDC hDC; HGLRC hRC; HWND hWnd; Texture texture("il.bmp"); My Window Procedure is defined as follows: LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) { switch(msg) { case WM_CREATE: { SetupOpenGL(800,600,hwnd,hDC,hRC); break; }; case WM_PAINT: { DrawTexture(); SwapBuffers(hDC); break; }; case WM_CLOSE: { wglMakeCurrent(hDC,NULL); if(!wglDeleteContext(hRC)) { MessageBox(NULL,"HRC deletion error.","Error!",MB_OK); }; wglMakeCurrent(NULL,NULL); ReleaseDC(hwnd,hDC); DestroyWindow(hwnd); break; }; case WM_DESTROY: { PostQuitMessage(0); break; }; default: return DefWindowProc(hwnd,msg,wParam,lParam); }; return 0; }; For those of you who love torture, this is the SetupOpenGL function: void SetupOpenGL(int width,int height,HWND &hwnd,HDC &hdc,HGLRC &hrc) { hdc = GetDC(hwnd); if(!hdc) { MessageBox(NULL,"HDC get error.","Error!",MB_OK); }; PIXELFORMATDESCRIPTOR pfd; memset(&pfd,0,sizeof(PIXELFORMATDESCRIPTOR)); pfd.iLayerType = PFD_MAIN_PLANE; pfd.nVersion = 1; pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; pfd.iLayerType = PFD_MAIN_PLANE; pfd.iPixelType = PFD_TYPE_RGBA; pfd.cColorBits = 32; pfd.cDepthBits = 32; pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); int pf = ChoosePixelFormat(hdc,&pfd); if(!SetPixelFormat(hdc,pf,&pfd)) { MessageBox(NULL,"PFD creation error.","Error!",MB_OK); }; hrc = wglCreateContext(hdc); if(!hrc) { MessageBox(NULL,"HRC creation error.","Error!",MB_OK); }; wglMakeCurrent(hdc,hrc); glViewport(0,0,width,height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-2.0,2.0,-2.0,2.0,1.0,1000.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClearColor(0.0,0.0,0.0,0.0); SwapBuffers(hdc); }; Not very neat sorry...anyway WinMain is up next: int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) { char * cn = "My Window Class"; MSG Msg; WNDCLASSEX wc; memset(&wc,0,sizeof(WNDCLASSEX)); wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wc.hCursor = LoadCursor(NULL,IDC_ARROW); wc.hIcon = LoadIcon(NULL,IDI_APPLICATION); wc.hIconSm = LoadIcon(NULL,IDI_APPLICATION); wc.hInstance = hInstance; wc.lpfnWndProc = WndProc; wc.lpszClassName = cn; wc.lpszMenuName = NULL; RegisterClassEx(&wc); hWnd = CreateWindowEx(WS_EX_CLIENTEDGE,cn,"My Window",WS_OVERLAPPEDWINDOW,0,0,800,600,NULL,NULL,hInstance,NULL); ShowWindow(hWnd,nCmdShow); UpdateWindow(hWnd); while(GetMessage(&Msg, NULL, 0, 0) > 0) { TranslateMessage(&Msg); DispatchMessage(&Msg); } return Msg.wParam; }; Now when I compile I get no errors. I run the program and I get a black window but no texture.I'm sure the texture is in the project folder.I'm sure the texture is a bitmap.I'm sure I spelt the darn thing correctly! Nothing is showing. Can someone please help me? Thanks in advance.

Share this post


Link to post
Share on other sites
Advertisement
I forgot one thing, I use the following in DrawTexture().

void DrawTexture()
{
glRasterPos2i(150,200); glDrawPixels(texture.width,texture.height,texture.colortype,GL_UNSIGNED_BYTE,texture.data);
};

Sorry if all this seems like a code dump, but this was probably the best way to explain it. I've tried changing glClearColor from black(not working), I've tried changing the HBRUSH color(works).Dunno what to do now.

Share this post


Link to post
Share on other sites
Hi, if you edit your posts, then copy and paste your code again between [source] ... [/source] tags, it will retain the formatting and tabs, and will be colour-coded for C++. This makes it a lot easier to read, and a lot easier to diagnose your problem.

EDIT: had a quick look over your code; have you tried forcing your window to repaint itself? Moved it, resized it, minimized or maximized it? Sounds silly, but it could be that no WM_PAINT message is sent, so your DrawTexture function is never called. Also, try commenting out that call to glRasterPos2i, and see if that has any effect. Finally, have you stepped through with the debugger? Put breakpoints on important steps in your bitmap loading code, make sure it's actually doing what you think it's doing...

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.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!