- GZDoom now runs on an OpenGL core profile. :)

It's probably still necessary to replace GLEW with another loader library. GLEW is pretty much broken on core OpenGL without some hacky workarounds...
This commit is contained in:
Christoph Oelckers 2014-07-15 02:26:23 +02:00
parent 6046b11b4f
commit fc0cf4f998
6 changed files with 45 additions and 51 deletions

View file

@ -121,6 +121,7 @@ void OpenGLFrameBuffer::InitializeState()
if (first)
{
glewExperimental=TRUE;
glewInit();
}
@ -140,7 +141,6 @@ void OpenGLFrameBuffer::InitializeState()
glDepthFunc(GL_LESS);
glEnable(GL_DITHER);
glEnable(GL_ALPHA_TEST);
glDisable(GL_CULL_FACE);
glDisable(GL_POLYGON_OFFSET_FILL);
glEnable(GL_POLYGON_OFFSET_LINE);

View file

@ -61,24 +61,15 @@ int occlusion_type=0;
static void CollectExtensions()
{
const char *supported = NULL;
char *extensions, *extension;
const char *extension;
supported = (char *)glGetString(GL_EXTENSIONS);
int max = 0;
glGetIntegerv(GL_NUM_EXTENSIONS, &max);
if (supported)
for(int i = 0; i < max; i++)
{
extensions = new char[strlen(supported) + 1];
strcpy(extensions, supported);
extension = strtok(extensions, " ");
while(extension)
{
m_Extensions.Push(FString(extension));
extension = strtok(NULL, " ");
}
delete [] extensions;
extension = (const char*)glGetStringi(GL_EXTENSIONS, i);
m_Extensions.Push(FString(extension));
}
}
@ -132,14 +123,16 @@ void gl_LoadExtensions()
{
I_FatalError("Unsupported OpenGL version.\nAt least GL 3.0 is required to run " GAMENAME ".\n");
}
gl.version = strtod(version, NULL);
gl.glslversion = strtod((char*)glGetString(GL_SHADING_LANGUAGE_VERSION), NULL);
// add 0.01 to account for roundoff errors making the number a tad smaller than the actual version
gl.version = strtod(version, NULL) + 0.01f;
gl.glslversion = strtod((char*)glGetString(GL_SHADING_LANGUAGE_VERSION), NULL) + 0.01f;
gl.vendorstring=(char*)glGetString(GL_VENDOR);
if (CheckExtension("GL_ARB_texture_compression")) gl.flags|=RFL_TEXTURE_COMPRESSION;
if (CheckExtension("GL_EXT_texture_compression_s3tc")) gl.flags|=RFL_TEXTURE_COMPRESSION_S3TC;
if (gl.version >= 4.f && CheckExtension("GL_ARB_buffer_storage")) gl.flags |= RFL_BUFFER_STORAGE;
if (CheckExtension("GL_ARB_buffer_storage")) gl.flags |= RFL_BUFFER_STORAGE;
glGetIntegerv(GL_MAX_TEXTURE_SIZE,&gl.max_texturesize);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
@ -157,11 +150,15 @@ void gl_PrintStartupLog()
Printf ("GL_RENDERER: %s\n", glGetString(GL_RENDERER));
Printf ("GL_VERSION: %s\n", glGetString(GL_VERSION));
Printf ("GL_SHADING_LANGUAGE_VERSION: %s\n", glGetString(GL_SHADING_LANGUAGE_VERSION));
Printf ("GL_EXTENSIONS: %s\n", glGetString(GL_EXTENSIONS));
Printf ("GL_EXTENSIONS:");
for (unsigned i = 0; i < m_Extensions.Size(); i++)
{
Printf(" %s", m_Extensions[i].GetChars());
}
int v;
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &v);
Printf("Max. texture size: %d\n", v);
Printf("\nMax. texture size: %d\n", v);
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &v);
Printf ("Max. texture units: %d\n", v);
glGetIntegerv(GL_MAX_FRAGMENT_UNIFORM_COMPONENTS, &v);

View file

@ -68,7 +68,6 @@
//GL headers
#include <GL/glew.h>
//#include "gl_load.h"
#if defined(__APPLE__)
#include <OpenGL/OpenGL.h>

View file

@ -610,7 +610,7 @@ bool Win32GLVideo::SetPixelFormat()
//
//==========================================================================
bool Win32GLVideo::SetupPixelFormat(bool allowsoftware, int multisample)
bool Win32GLVideo::SetupPixelFormat(int multisample)
{
int colorDepth;
HDC deskDC;
@ -646,14 +646,7 @@ bool Win32GLVideo::SetupPixelFormat(bool allowsoftware, int multisample)
attributes[17] = true;
attributes[18] = WGL_ACCELERATION_ARB; //required to be FULL_ACCELERATION_ARB
if (allowsoftware)
{
attributes[19] = WGL_NO_ACCELERATION_ARB;
}
else
{
attributes[19] = WGL_FULL_ACCELERATION_ARB;
}
attributes[19] = WGL_FULL_ACCELERATION_ARB;
if (multisample > 0)
{
@ -713,11 +706,8 @@ bool Win32GLVideo::SetupPixelFormat(bool allowsoftware, int multisample)
if (pfd.dwFlags & PFD_GENERIC_FORMAT)
{
if (!allowsoftware)
{
Printf("R_OPENGL: OpenGL driver not accelerated! Falling back to software renderer.\n");
return false;
}
Printf("R_OPENGL: OpenGL driver not accelerated! Falling back to software renderer.\n");
return false;
}
}
@ -735,32 +725,40 @@ bool Win32GLVideo::SetupPixelFormat(bool allowsoftware, int multisample)
//
//==========================================================================
bool Win32GLVideo::InitHardware (HWND Window, bool allowsoftware, int multisample)
bool Win32GLVideo::InitHardware (HWND Window, int multisample)
{
m_Window=Window;
m_hDC = GetDC(Window);
if (!SetupPixelFormat(allowsoftware, multisample))
if (!SetupPixelFormat(multisample))
{
Printf ("R_OPENGL: Reverting to software mode...\n");
return false;
}
m_hRC = 0;
m_hRC = NULL;
if (myWglCreateContextAttribsARB != NULL)
{
int ctxAttribs[] = {
WGL_CONTEXT_MAJOR_VERSION_ARB, 3,
WGL_CONTEXT_MINOR_VERSION_ARB, 3,
WGL_CONTEXT_FLAGS_ARB, gl_debug? WGL_CONTEXT_DEBUG_BIT_ARB : 0,
WGL_CONTEXT_PROFILE_MASK_ARB, WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB,
0
};
// let's try to get the best version possible.
static int versions[] = { 44, 43, 42, 41, 40, 33, 32, -1 };
m_hRC = myWglCreateContextAttribsARB(m_hDC, 0, ctxAttribs);
for (int i = 0; versions[i] > 0; i++)
{
int ctxAttribs[] = {
WGL_CONTEXT_MAJOR_VERSION_ARB, versions[i] / 10,
WGL_CONTEXT_MINOR_VERSION_ARB, versions[i] % 10,
WGL_CONTEXT_FLAGS_ARB, gl_debug ? WGL_CONTEXT_DEBUG_BIT_ARB : 0,
WGL_CONTEXT_PROFILE_MASK_ARB, WGL_CONTEXT_CORE_PROFILE_BIT_ARB,
0
};
m_hRC = myWglCreateContextAttribsARB(m_hDC, 0, ctxAttribs);
if (m_hRC != NULL) break;
}
}
if (m_hRC == 0)
{
// If we are unable to get a core context, let's try whatever the system gives us.
m_hRC = wglCreateContext(m_hDC);
}
@ -903,7 +901,7 @@ Win32GLFrameBuffer::Win32GLFrameBuffer(void *hMonitor, int width, int height, in
I_RestoreWindowedPos();
}
if (!static_cast<Win32GLVideo *>(Video)->InitHardware(Window, false, localmultisample))
if (!static_cast<Win32GLVideo *>(Video)->InitHardware(Window, localmultisample))
{
vid_renderer = 0;
return;

View file

@ -42,7 +42,7 @@ public:
DFrameBuffer *CreateFrameBuffer (int width, int height, bool fs, DFrameBuffer *old);
virtual bool SetResolution (int width, int height, int bits);
void DumpAdapters();
bool InitHardware (HWND Window, bool allowsoftware, int multisample);
bool InitHardware (HWND Window, int multisample);
void Shutdown();
bool SetFullscreen(const char *devicename, int w, int h, int bits, int hz);
@ -81,7 +81,7 @@ protected:
HWND InitDummy();
void ShutdownDummy(HWND dummy);
bool SetPixelFormat();
bool SetupPixelFormat(bool allowsoftware, int multisample);
bool SetupPixelFormat(int multisample);
void GetDisplayDeviceName();
void MakeModesList();

View file

@ -22,7 +22,7 @@ void main()
#ifdef UNIFORM_VB
if (gl_MultiTexCoord0.x >= 100000.0)
if (aTexCoord.x >= 100000.0)
{
int fakeVI = int(aTexCoord.y)*5;
vert = aPosition + vec4(fakeVB[fakeVI], fakeVB[fakeVI+1], fakeVB[fakeVI+2], 0.0);