I've run into a bit of a runtime issue. There's no errors or anything, I just get a nice empty window.
main.cpp
#define WIN32_LEAN_AND_MEAN
#include "Windows_Main.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
HWND hwnd;
MSG msg;
bool done;
MainWin = HVSTWIN::SetupWin(CS_HREDRAW | CS_VREDRAW,
0, 0,
(HBRUSH)GetStockObject(WHITE_BRUSH),
(LPCWSTR)"Harvest SDK 1.0",
(LPCWSTR) "HVSTWIN",
hInstance);
HVSTMATH::CCoordinate Coords[4];
Coords[0].X = 1;
Coords[0].Y = 1;
Coords[0].Z = 0;
Coords[1].X = 1;
Coords[1].Y = -1;
Coords[1].Z = 0;
Coords[2].X = -1;
Coords[2].Y = -1;
Coords[2].Z = 0;
Coords[3].X = -1;
Coords[3].Y = 1;
Coords[3].Z = 0;
if (!RegisterClassEx(&MainWin))
return 0;
hwnd = CreateWindowEx(NULL,
(LPCWSTR)"HVSTWIN",
(LPCWSTR)"Harvest SDK 1.0",
WS_OVERLAPPEDWINDOW |
WS_VISIBLE |
WS_SYSMENU,
100, 100,
400, 400,
NULL,
NULL,
hInstance,
NULL);
if (!hwnd){
return 0;
}
if (!hrc){
MessageBox(hwnd,(LPCWSTR)"Error with hrc!", NULL, MB_OK);
return 0;
}
done = false;
//main loop
while (!done)
{
PeekMessage(&msg, hwnd, NULL, NULL, PM_REMOVE);
if (msg.message == WM_QUIT)
{
done = true;
}
else
{
HVSTGL::RenderQuad(Coords[0], Coords[1], Coords[2], Coords[3]);
SwapBuffers(g_HDC);
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}
windowsmain.h
#ifndef _H_WINDOWS_MAIN_
#define _H_WINDOWS_MAIN_
#include "command.h"
//list of windows we want to use
static WNDCLASSEX MainWin;
static WNDCLASSEX ConsoleWin;
static HDC hdc;
static HGLRC hrc;
static HDC g_HDC;
static int width, height;
static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
hdc = GetDC(hwnd);
g_HDC = hdc;
HVSTGL::createPixelFormat(hdc);
hrc = wglCreateContext(hdc);
GetLastError();
wglMakeCurrent(hdc, hrc);
glClear(GL_COLOR_BUFFER_BIT);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glEnable(GL_TEXTURE_2D);
return 0;
break;
case WM_CLOSE:
glDisable(GL_TEXTURE_2D);
wglMakeCurrent(hdc, NULL);
wglDeleteContext(hrc);
PostQuitMessage(0);
return 0;
break;
case WM_SIZE:
height = HIWORD(lParam);
width = LOWORD(lParam);
if (height==0)
height = 1;
glClear(GL_COLOR_BUFFER_BIT);
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f, (GLfloat)width/(GLfloat)height, 1.0f, 1000.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
return 0;
break;
default:
break;
}
return (DefWindowProc(hwnd, message, wParam, lParam));
}
namespace HVSTWIN
{
WNDCLASSEX SetupWin( UINT style,
int classInfo,
int winInfo,
HBRUSH BG,
LPCTSTR winName,
LPCTSTR className,
HINSTANCE hInstance);
};
#endif
windowsmain.cpp
#include "Windows_Main.h"
WNDCLASSEX HVSTWIN::SetupWin(UINT style, int classInfo, int winInfo, HBRUSH BG, LPCTSTR winName, LPCTSTR className, HINSTANCE hInstance)
{
WNDCLASSEX tempWin;
tempWin.cbSize = sizeof(WNDCLASSEX);
tempWin.style = style;
tempWin.lpfnWndProc = WndProc;
tempWin.cbClsExtra = classInfo;
tempWin.cbWndExtra = winInfo;
tempWin.hInstance = hInstance;
tempWin.hIcon = NULL;
tempWin.hCursor = LoadCursor(NULL, IDC_ARROW);
tempWin.hbrBackground = BG;
tempWin.lpszMenuName = winName;
tempWin.lpszClassName = className;
tempWin.hIconSm = NULL;
return tempWin;
}
glmain.h
#ifndef _H_GLMAIN_
#define _H_GLMAIN_
#include <windows.h>
#include <gl/GL.h>
#include <gl/GLU.h>
#include "TGAExt.h"
#include "Math_Main.h"
#include "HarvestIO.h"
namespace HVSTGL
{
void createPixelFormat(HDC& hDC);
static void RenderQuad(HVSTMATH::CCoordinate Coord1, HVSTMATH::CCoordinate Coord2,
HVSTMATH::CCoordinate Coord3, HVSTMATH::CCoordinate Coord4)
{
glBegin(GL_QUADS);
glVertex3d(Coord1.X, Coord1.Y, Coord1.Z);
glVertex3d(Coord2.X, Coord2.Y, Coord2.Z);
glVertex3d(Coord3.X, Coord3.Y, Coord3.Z);
glVertex3d(Coord4.X, Coord4.Y, Coord4.Z);
glEnd();
glFlush();
}
void RenderQuad (double coord1x, double coord1y, double coord1z,
double coord2x, double coord2y, double coord2z,
double coord3x, double coord3y, double coord3z,
double coord4x, double coord4y, double coord4z);
static void RenderTexQuad(HVSTMATH::CCoordinate Coord1, HVSTMATH::CCoordinate Coord2,
HVSTMATH::CCoordinate Coord3, HVSTMATH::CCoordinate Coord4)
{
glBegin(GL_QUADS);
glTexCoord2d(0.0, 0.0); glVertex3d(Coord1.X, Coord1.Y, Coord1.Z);
glTexCoord2d(1.0, 0.0); glVertex3d(Coord2.X, Coord2.Y, Coord2.Z);
glTexCoord2d(1.0, 1.0);glVertex3d(Coord3.X, Coord3.Y, Coord3.Z);
glTexCoord2d(0.0, 1.0);glVertex3d(Coord4.X, Coord4.Y, Coord4.Z);
glEnd();
glFlush();
}
char* LoadBMP(char* fileName, BITMAPINFOHEADER * bitmapinfoheader);
int LoadTGA(char* fileName, TGAFILE* tgaFile);
void PrepareTexture(char* texels);
};
#endif
glmain.cpp
#include "GLMain.h"
void HVSTGL::createPixelFormat(HDC& hDC)
{
int pxlfmt;
static PIXELFORMATDESCRIPTOR pfd = {
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW |
PFD_SUPPORT_OPENGL |
PFD_DOUBLEBUFFER,
PFD_TYPE_RGBA,
32,
0, 0, 0, 0, 0, 0,
0,
0,
0,
0,0,0,0,
16,
0,
0,
PFD_MAIN_PLANE,
0,
0,0,0 };
pxlfmt = ChoosePixelFormat(hDC, &pfd);
SetPixelFormat(hDC, pxlfmt, &pfd);
}
void HVSTGL::RenderQuad (double coord1x, double coord1y, double coord1z,
double coord2x, double coord2y, double coord2z,
double coord3x, double coord3y, double coord3z,
double coord4x, double coord4y, double coord4z)
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_QUADS);
glVertex3d(coord1x, coord1y, coord1z);
glVertex3d(coord2x, coord2y, coord2z);
glVertex3d(coord3x, coord3y, coord3z);
glVertex3d(coord4x, coord4y, coord4z);
glEnd();
glFlush();
}
char* HVSTGL::LoadBMP(char* fileName, BITMAPINFOHEADER* bitmapinfoheader)
{
std::ifstream file;
BITMAPFILEHEADER* bitmapfileheader;
char* BMPimage;
int ImageIDx = 0;
unsigned char tempRGB;
//open file
HVSTIO::fileOpen(file, fileName);
//start reading that data!
file.read((char*)&bitmapfileheader,sizeof(BITMAPFILEHEADER));
if (bitmapfileheader->bfType != 0x4D42)
return NULL;
file.read((char*)&bitmapfileheader, sizeof(BITMAPFILEHEADER));
BMPimage = new char[bitmapinfoheader->biSizeImage];
if (!BMPimage)
{
delete BMPimage;
return NULL;
}
file.read((char*)&BMPimage, bitmapinfoheader->biSizeImage);
if (BMPimage == NULL)
{
HVSTIO::fileClose(file);
return NULL;
}
//switch R and G values so that they're you know..not in a retarded order
for (ImageIDx = 0; ImageIDx < bitmapinfoheader->biSizeImage; ImageIDx += 3)
{
tempRGB = BMPimage[ImageIDx];
BMPimage[ImageIDx] = BMPimage[ImageIDx + 2];
BMPimage[ImageIDx + 2] = tempRGB;
}
HVSTIO::fileClose(file);
return BMPimage;
}
int HVSTGL::LoadTGA(char* fileName, TGAFILE* tgaFile)
{
std::ifstream file;
unsigned char garbagechar;
short int garbageint;
long imagesize;
int colormode;
long ImageIDx;
unsigned char colorswap;
HVSTIO::fileOpen(file, fileName);
file.read((char*)&garbagechar, sizeof(unsigned char));
file.read((char*)&garbagechar, sizeof(unsigned char));
file.read((char*)&tgaFile->imageTypeCode, sizeof (unsigned char));
if ((tgaFile->imageTypeCode !=2) && (tgaFile->imageTypeCode != 3))
{
HVSTIO::fileClose(file);
return 0;
}
file.read((char*)&garbageint, sizeof (short int));
file.read((char*)&garbageint, sizeof (short int));
file.read((char*)&garbagechar, sizeof (unsigned char));
file.read((char*)&garbageint, sizeof (short int));
file.read((char*)&tgaFile->imageWidth, sizeof (short int));
file.read((char*)&tgaFile->imageHeight, sizeof (short int));
file.read((char*)&tgaFile->bitCount, sizeof (unsigned char));
file.read((char*)&garbagechar, sizeof (unsigned char));
colormode = tgaFile->bitCount / 8;
imagesize = tgaFile->imageWidth * tgaFile->imageHeight * colormode;
tgaFile->imageData = new unsigned char[sizeof(unsigned char)*imagesize];
file.read((char*)&tgaFile->imageData, sizeof(tgaFile->imageData));
for (ImageIDx = 0; ImageIDx < imagesize; ImageIDx += colormode)
{
colorswap = tgaFile->imageData[ImageIDx];
tgaFile->imageData[ImageIDx] = tgaFile->imageData[ImageIDx + 2];
tgaFile->imageData[ImageIDx + 2] = colorswap;
}
HVSTIO::fileClose(file);
return 1;
}
I know it's hrc that isn't working right with wglCreateContext because of the error flag I have in winmain. So um...yea, why isn't it creating the render context properly? >_>