Skip to content

Instantly share code, notes, and snippets.

@LordTocs
Last active August 29, 2015 14:03
Show Gist options
  • Save LordTocs/9266d8c8f7e3eb9a498e to your computer and use it in GitHub Desktop.
Save LordTocs/9266d8c8f7e3eb9a498e to your computer and use it in GitHub Desktop.
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