mirror of
https://github.com/ZDoom/qzdoom-gpl.git
synced 2025-02-08 05:51:45 +00:00
Merge branch 'master' of https://github.com/coelckers/gzdoom
This commit is contained in:
commit
d47d5c609a
5 changed files with 14 additions and 66 deletions
|
@ -148,6 +148,7 @@ FFlatVertexBuffer::FFlatVertexBuffer(int width, int height)
|
|||
glBindBuffer(GL_ARRAY_BUFFER, vbo_id);
|
||||
glBufferStorage(GL_ARRAY_BUFFER, bytesize, NULL, GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT | GL_MAP_COHERENT_BIT);
|
||||
map = (FFlatVertex*)glMapBufferRange(GL_ARRAY_BUFFER, 0, bytesize, GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT | GL_MAP_COHERENT_BIT);
|
||||
DPrintf(DMSG_NOTIFY, "Using persistent buffer\n");
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -157,13 +158,14 @@ FFlatVertexBuffer::FFlatVertexBuffer(int width, int height)
|
|||
glBindBuffer(GL_ARRAY_BUFFER, vbo_id);
|
||||
glBufferData(GL_ARRAY_BUFFER, bytesize, NULL, GL_STREAM_DRAW);
|
||||
map = nullptr;
|
||||
DPrintf(DMSG_NOTIFY, "Using deferred buffer\n");
|
||||
break;
|
||||
}
|
||||
|
||||
case BM_CLIENTARRAY:
|
||||
{
|
||||
// The fallback path uses immediate mode rendering and does not set up an actual vertex buffer
|
||||
map = new FFlatVertex[BUFFER_SIZE];
|
||||
DPrintf(DMSG_NOTIFY, "Using client array buffer\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -130,7 +130,7 @@ void FGLRenderer::Initialize(int width, int height)
|
|||
m2DDrawer = new F2DDrawer;
|
||||
|
||||
// Only needed for the core profile, because someone decided it was a good idea to remove the default VAO.
|
||||
if (gl.version >= 4.0)
|
||||
if (gl.buffermethod != BM_CLIENTARRAY)
|
||||
{
|
||||
glGenVertexArrays(1, &mVAOID);
|
||||
glBindVertexArray(mVAOID);
|
||||
|
|
|
@ -156,14 +156,6 @@ void gl_LoadExtensions()
|
|||
|
||||
gl.version = strtod(version, NULL) + 0.01f;
|
||||
|
||||
bool iscore = false;
|
||||
if (gl.version >= 3.2)
|
||||
{
|
||||
int v;
|
||||
glGetIntegerv(GL_CONTEXT_PROFILE_MASK, &v);
|
||||
iscore = !!(v & GL_CONTEXT_CORE_PROFILE_BIT);
|
||||
}
|
||||
|
||||
// Don't even start if it's lower than 2.0 or no framebuffers are available
|
||||
if ((gl.version < 2.0 || !CheckExtension("GL_EXT_framebuffer_object")) && gl.version < 3.0)
|
||||
{
|
||||
|
@ -186,10 +178,7 @@ void gl_LoadExtensions()
|
|||
if (gl.version > 3.0f && (gl.version >= 3.3f || CheckExtension("GL_ARB_uniform_buffer_object")))
|
||||
{
|
||||
gl.lightmethod = LM_DEFERRED;
|
||||
if (iscore)
|
||||
{
|
||||
gl.buffermethod = BM_DEFERRED;
|
||||
}
|
||||
gl.buffermethod = BM_DEFERRED;
|
||||
}
|
||||
|
||||
if (CheckExtension("GL_ARB_texture_compression")) gl.flags |= RFL_TEXTURE_COMPRESSION;
|
||||
|
|
|
@ -737,42 +737,6 @@ bool Win32GLVideo::SetupPixelFormat(int multisample)
|
|||
//
|
||||
//==========================================================================
|
||||
|
||||
// since we cannot use the extension loader here, before it gets initialized,
|
||||
// we have to define the extended GL stuff we need, ourselves here.
|
||||
// The headers generated by GLLoadGen only work if the loader gets initialized.
|
||||
typedef const GLubyte * (APIENTRY *PFNGLGETSTRINGIPROC)(GLenum, GLuint);
|
||||
#define GL_NUM_EXTENSIONS 0x821D
|
||||
|
||||
bool Win32GLVideo::checkCoreUsability()
|
||||
{
|
||||
const char *version = Args->CheckValue("-glversion");
|
||||
if (version != NULL)
|
||||
{
|
||||
if (strtod(version, NULL) < 4.0) return false;
|
||||
}
|
||||
if (Args->CheckParm("-noshader")) return false;
|
||||
|
||||
// GL 4.4 implies GL_ARB_buffer_storage
|
||||
if (strcmp((char*)glGetString(GL_VERSION), "4.4") >= 0) return true;
|
||||
|
||||
// at this point the extension loader has not been initialized so we have to retrieve glGetStringi ourselves.
|
||||
PFNGLGETSTRINGIPROC myglGetStringi = (PFNGLGETSTRINGIPROC)wglGetProcAddress("glGetStringi");
|
||||
if (!myglGetStringi) return false; // this should not happen.
|
||||
|
||||
const char *extension;
|
||||
|
||||
int max = 0;
|
||||
glGetIntegerv(GL_NUM_EXTENSIONS, &max);
|
||||
|
||||
// step through all reported extensions and see if we got what we need...
|
||||
for (int i = 0; i < max; i++)
|
||||
{
|
||||
extension = (const char*)myglGetStringi(GL_EXTENSIONS, i);
|
||||
if (!strcmp(extension, "GL_ARB_buffer_storage")) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Win32GLVideo::InitHardware (HWND Window, int multisample)
|
||||
{
|
||||
m_Window=Window;
|
||||
|
@ -783,7 +747,14 @@ bool Win32GLVideo::InitHardware (HWND Window, int multisample)
|
|||
return false;
|
||||
}
|
||||
|
||||
for (int prof = WGL_CONTEXT_CORE_PROFILE_BIT_ARB; prof <= WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB; prof++)
|
||||
int prof = WGL_CONTEXT_CORE_PROFILE_BIT_ARB;
|
||||
const char *lm = Args->CheckValue("-buffermethod");
|
||||
if (lm != NULL)
|
||||
{
|
||||
if (!stricmp(lm, "clientarray")) prof = WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB;
|
||||
}
|
||||
|
||||
for (; prof <= WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB; prof++)
|
||||
{
|
||||
m_hRC = NULL;
|
||||
if (myWglCreateContextAttribsARB != NULL)
|
||||
|
@ -802,8 +773,6 @@ bool Win32GLVideo::InitHardware (HWND Window, int multisample)
|
|||
0
|
||||
};
|
||||
|
||||
//Printf("Trying to create an OpenGL %d.%d %s profile context\n", versions[i] / 10, versions[i] % 10, prof == WGL_CONTEXT_CORE_PROFILE_BIT_ARB ? "Core" : "Compatibility");
|
||||
|
||||
m_hRC = myWglCreateContextAttribsARB(m_hDC, 0, ctxAttribs);
|
||||
if (m_hRC != NULL) break;
|
||||
}
|
||||
|
@ -811,7 +780,6 @@ bool Win32GLVideo::InitHardware (HWND Window, int multisample)
|
|||
|
||||
if (m_hRC == NULL && prof == WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB)
|
||||
{
|
||||
|
||||
m_hRC = wglCreateContext(m_hDC);
|
||||
if (m_hRC == NULL)
|
||||
{
|
||||
|
@ -823,17 +791,7 @@ bool Win32GLVideo::InitHardware (HWND Window, int multisample)
|
|||
if (m_hRC != NULL)
|
||||
{
|
||||
wglMakeCurrent(m_hDC, m_hRC);
|
||||
|
||||
// we can only use core profile contexts if GL_ARB_buffer_storage is supported or GL version is >= 4.4
|
||||
if (prof == WGL_CONTEXT_CORE_PROFILE_BIT_ARB && !checkCoreUsability())
|
||||
{
|
||||
wglMakeCurrent(0, 0);
|
||||
wglDeleteContext(m_hRC);
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
// We get here if the driver doesn't support the modern context creation API which always means an old driver.
|
||||
|
|
|
@ -86,7 +86,6 @@ protected:
|
|||
void MakeModesList();
|
||||
void AddMode(int x, int y, int bits, int baseHeight, int refreshHz);
|
||||
void FreeModes();
|
||||
bool checkCoreUsability();
|
||||
public:
|
||||
int GetTrueHeight() { return m_trueHeight; }
|
||||
|
||||
|
|
Loading…
Reference in a new issue