diff --git a/src/gl/system/gl_framebuffer.cpp b/src/gl/system/gl_framebuffer.cpp index d3783fd42..fa5370b2d 100644 --- a/src/gl/system/gl_framebuffer.cpp +++ b/src/gl/system/gl_framebuffer.cpp @@ -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); diff --git a/src/gl/system/gl_interface.cpp b/src/gl/system/gl_interface.cpp index 5b99bd562..e1c70b14a 100644 --- a/src/gl/system/gl_interface.cpp +++ b/src/gl/system/gl_interface.cpp @@ -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); diff --git a/src/gl/system/gl_system.h b/src/gl/system/gl_system.h index 8273960f9..2130c9cbb 100644 --- a/src/gl/system/gl_system.h +++ b/src/gl/system/gl_system.h @@ -68,7 +68,6 @@ //GL headers #include -//#include "gl_load.h" #if defined(__APPLE__) #include diff --git a/src/win32/win32gliface.cpp b/src/win32/win32gliface.cpp index 7b70e9172..db414bae6 100644 --- a/src/win32/win32gliface.cpp +++ b/src/win32/win32gliface.cpp @@ -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(Video)->InitHardware(Window, false, localmultisample)) + if (!static_cast(Video)->InitHardware(Window, localmultisample)) { vid_renderer = 0; return; diff --git a/src/win32/win32gliface.h b/src/win32/win32gliface.h index f39a9f70b..f61c31857 100644 --- a/src/win32/win32gliface.h +++ b/src/win32/win32gliface.h @@ -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(); diff --git a/wadsrc/static/shaders/glsl/main.vp b/wadsrc/static/shaders/glsl/main.vp index eab0e1ab2..c40426829 100644 --- a/wadsrc/static/shaders/glsl/main.vp +++ b/wadsrc/static/shaders/glsl/main.vp @@ -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);