Last active
August 29, 2015 14:03
-
-
Save LordTocs/9266d8c8f7e3eb9a498e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
void DisplayWindowsError() | |
{ | |
LPVOID lpMsgBuf; | |
DWORD dw = GetLastError(); | |
FormatMessage( | |
FORMAT_MESSAGE_ALLOCATE_BUFFER | | |
FORMAT_MESSAGE_FROM_SYSTEM | | |
FORMAT_MESSAGE_IGNORE_INSERTS, | |
NULL, | |
dw, | |
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), | |
(LPTSTR)&lpMsgBuf, | |
0, NULL); | |
if (lpMsgBuf) | |
{ | |
std::cout << "Windows Error:" << dw << ": " << (char *)lpMsgBuf << std::endl; | |
LocalFree(lpMsgBuf); | |
} | |
else | |
{ | |
std::cout << "Windows Error:" << dw << ": unknown" << std::endl; | |
} | |
} | |
GraphicsContext::GraphicsContext(ContextTarget &target) | |
: Target (target) | |
{ | |
PIXELFORMATDESCRIPTOR pfd = // pfd Tells Windows How We Want Things To Be | |
{ | |
sizeof(PIXELFORMATDESCRIPTOR), // Size Of This Pixel Format Descriptor | |
1, // Version Number | |
PFD_DRAW_TO_WINDOW | // Format Must Support Window | |
PFD_SUPPORT_OPENGL | // Format Must Support OpenGL | |
PFD_DOUBLEBUFFER, // Must Support Double Buffering | |
PFD_TYPE_RGBA, // Request An RGBA Format | |
32, // Select Our Color Depth | |
0, 0, 0, 0, 0, 0, // Color Bits Ignored | |
0, // No Alpha Buffer | |
0, // Shift Bit Ignored | |
0, // No Accumulation Buffer | |
0, 0, 0, 0, // Accumulation Bits Ignored | |
24, // 32Bit Z-Buffer (Depth Buffer) | |
8, // No Stencil Buffer | |
0, // No Auxiliary Buffer | |
PFD_MAIN_PLANE, // Main Drawing Layer | |
0, // Reserved | |
0, 0, 0 // Layer Masks Ignored | |
}; | |
PixelFormat = 1; | |
if (!(PixelFormat = ChoosePixelFormat (target.GetHDC (), &pfd))) | |
{ | |
DisplayWindowsError(); | |
cout << "Failed to choose pixel format." << endl; | |
} | |
if (!SetPixelFormat(target.GetHDC(),PixelFormat, &pfd)) | |
{ | |
//DestroyGameWindow (); //Insert Error | |
DisplayWindowsError(); | |
cout << "Failed to set pixel format." << endl; | |
} | |
HGLRC temp; | |
temp = wglCreateContext(target.GetHDC()); | |
if (!temp) | |
{ | |
//DestroyGameWindow (); //Insert Error | |
cout << "Failed to create context" << endl; | |
} | |
DisplayWindowsError(); | |
if (!wglMakeCurrent(target.GetHDC (), temp)) | |
{ | |
//DestroyGameWindow (); | |
cout << "Failed to make current." << endl; | |
GLErrorCheck(); | |
} | |
DisplayWindowsError(); | |
GLenum err = glewInit(); | |
if (err != GLEW_OK) | |
{ | |
char *error = (char *)glewGetErrorString(err); | |
cout << "GLEW INIT FAIL: " << error << endl; | |
} | |
int contextattribs [] = | |
{ | |
WGL_CONTEXT_MAJOR_VERSION_ARB, 4, | |
WGL_CONTEXT_MINOR_VERSION_ARB, 2, | |
#ifdef _DEBUG | |
WGL_CONTEXT_FLAGS_ARB, WGL_CONTEXT_DEBUG_BIT_ARB, | |
#endif | |
0 | |
}; | |
int pfattribs[] = | |
{ | |
WGL_DRAW_TO_WINDOW_ARB, GL_TRUE, | |
WGL_SUPPORT_OPENGL_ARB, GL_TRUE, | |
WGL_DOUBLE_BUFFER_ARB, GL_TRUE, | |
WGL_PIXEL_TYPE_ARB, WGL_TYPE_RGBA_ARB, | |
WGL_COLOR_BITS_ARB, 32, | |
WGL_DEPTH_BITS_ARB, 24, | |
WGL_STENCIL_BITS_ARB, 8, | |
0 | |
}; | |
if (wglewIsSupported ("WGL_ARB_create_context") == 1) | |
{ | |
unsigned int formatcount; | |
if (!wglChoosePixelFormatARB(target.GetHDC(), pfattribs, nullptr, 1, (int *)&PixelFormat, &formatcount)) | |
{ | |
std::cout << "Failed to find a matching pixel format" << std::endl; | |
DisplayWindowsError(); | |
} | |
if (!SetPixelFormat(target.GetHDC(), PixelFormat, &pfd)) | |
{ | |
DisplayWindowsError(); | |
std::cout << "Failed to set pixelformat" << std::endl; | |
} | |
hRC = wglCreateContextAttribsARB(Target.GetHDC(), nullptr, contextattribs); | |
if (!hRC) | |
{ | |
DisplayWindowsError(); | |
std::cout << "Failed to create context." << std::endl; | |
} | |
wglMakeCurrent(nullptr, nullptr); | |
DisplayWindowsError(); | |
wglDeleteContext(temp); | |
DisplayWindowsError(); | |
GLErrorCheck(); | |
MakeCurrent (); | |
} | |
else | |
{ | |
cout << "Failed to create context again..." << endl; | |
} | |
#ifdef _DEBUG | |
glEnable(GL_DEBUG_OUTPUT); | |
glDebugMessageCallback(dbgcallback, nullptr); | |
#endif | |
char *shadeversion = (char *)glGetString (GL_SHADING_LANGUAGE_VERSION); | |
//GLErrorCheck; | |
char *version = (char *)glGetString(GL_VERSION); | |
//GLErrorCheck; | |
std::cout << "Version: " << version << std::endl << "Shading Version: " << shadeversion << std::endl; | |
glViewport (0,0,Target.GetWidth (), Target.GetHeight ()); | |
GLErrorCheck (); | |
SetClearColor (Color(0,0,0,0)); | |
SetClearDepth(1000.0f); | |
//EnableDepthBuffering (); | |
//DisableDepthTest (); | |
NormalBlending (); | |
glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST); //Doesn't get Abstracted | |
GLErrorCheck(); | |
//glLoadIdentity (); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment