|
@@ -130,7 +130,6 @@ OpenGL::OpenGL()
|
|
: stats()
|
|
: stats()
|
|
, bugs()
|
|
, bugs()
|
|
, contextInitialized(false)
|
|
, contextInitialized(false)
|
|
- , pixelShaderHighpSupported(false)
|
|
|
|
, baseVertexSupported(false)
|
|
, baseVertexSupported(false)
|
|
, maxAnisotropy(1.0f)
|
|
, maxAnisotropy(1.0f)
|
|
, maxLODBias(0.0f)
|
|
, maxLODBias(0.0f)
|
|
@@ -166,16 +165,6 @@ bool OpenGL::initContext()
|
|
|
|
|
|
bugs = {};
|
|
bugs = {};
|
|
|
|
|
|
- if (GLAD_ES_VERSION_3_0 && !GLAD_ES_VERSION_3_1)
|
|
|
|
- {
|
|
|
|
- const char *device = (const char *) glGetString(GL_RENDERER);
|
|
|
|
- if (getVendor() == VENDOR_VIVANTE && strstr(device, "Vivante GC7000UL"))
|
|
|
|
- bugs.brokenGLES3 = true;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (bugs.brokenGLES3)
|
|
|
|
- GLAD_ES_VERSION_3_0 = false;
|
|
|
|
-
|
|
|
|
if (GLAD_VERSION_3_2)
|
|
if (GLAD_VERSION_3_2)
|
|
{
|
|
{
|
|
GLint profileMask = 0;
|
|
GLint profileMask = 0;
|
|
@@ -274,11 +263,8 @@ void OpenGL::setupContext()
|
|
setEnableState(ENABLE_SCISSOR_TEST, state.enableState[ENABLE_SCISSOR_TEST]);
|
|
setEnableState(ENABLE_SCISSOR_TEST, state.enableState[ENABLE_SCISSOR_TEST]);
|
|
setEnableState(ENABLE_FACE_CULL, state.enableState[ENABLE_FACE_CULL]);
|
|
setEnableState(ENABLE_FACE_CULL, state.enableState[ENABLE_FACE_CULL]);
|
|
|
|
|
|
- if (!bugs.brokenSRGB && (GLAD_VERSION_3_0 || GLAD_ARB_framebuffer_sRGB
|
|
|
|
- || GLAD_EXT_framebuffer_sRGB || GLAD_EXT_sRGB_write_control))
|
|
|
|
- {
|
|
|
|
|
|
+ if (!bugs.brokenSRGB)
|
|
setEnableState(ENABLE_FRAMEBUFFER_SRGB, state.enableState[ENABLE_FRAMEBUFFER_SRGB]);
|
|
setEnableState(ENABLE_FRAMEBUFFER_SRGB, state.enableState[ENABLE_FRAMEBUFFER_SRGB]);
|
|
- }
|
|
|
|
else
|
|
else
|
|
state.enableState[ENABLE_FRAMEBUFFER_SRGB] = false;
|
|
state.enableState[ENABLE_FRAMEBUFFER_SRGB] = false;
|
|
|
|
|
|
@@ -310,9 +296,7 @@ void OpenGL::setupContext()
|
|
for (int j = 0; j < TEXTURE_MAX_ENUM; j++)
|
|
for (int j = 0; j < TEXTURE_MAX_ENUM; j++)
|
|
{
|
|
{
|
|
TextureType textype = (TextureType) j;
|
|
TextureType textype = (TextureType) j;
|
|
-
|
|
|
|
- if (isTextureTypeSupported(textype))
|
|
|
|
- glBindTexture(getGLTextureType(textype), 0);
|
|
|
|
|
|
+ glBindTexture(getGLTextureType(textype), 0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -374,89 +358,6 @@ void OpenGL::initVendor()
|
|
|
|
|
|
void OpenGL::initOpenGLFunctions()
|
|
void OpenGL::initOpenGLFunctions()
|
|
{
|
|
{
|
|
- // Alias extension-suffixed framebuffer functions to core versions since
|
|
|
|
- // there are so many different-named extensions that do the same things...
|
|
|
|
- if (!(GLAD_ES_VERSION_3_0 || GLAD_VERSION_3_0 || GLAD_ARB_framebuffer_object))
|
|
|
|
- {
|
|
|
|
- if (GLAD_VERSION_1_0 && GLAD_EXT_framebuffer_object)
|
|
|
|
- {
|
|
|
|
- fp_glBindRenderbuffer = fp_glBindRenderbufferEXT;
|
|
|
|
- fp_glDeleteRenderbuffers = fp_glDeleteRenderbuffersEXT;
|
|
|
|
- fp_glGenRenderbuffers = fp_glGenRenderbuffersEXT;
|
|
|
|
- fp_glRenderbufferStorage = fp_glRenderbufferStorageEXT;
|
|
|
|
- fp_glGetRenderbufferParameteriv = fp_glGetRenderbufferParameterivEXT;
|
|
|
|
- fp_glBindFramebuffer = fp_glBindFramebufferEXT;
|
|
|
|
- fp_glDeleteFramebuffers = fp_glDeleteFramebuffersEXT;
|
|
|
|
- fp_glGenFramebuffers = fp_glGenFramebuffersEXT;
|
|
|
|
- fp_glCheckFramebufferStatus = fp_glCheckFramebufferStatusEXT;
|
|
|
|
- fp_glFramebufferTexture2D = fp_glFramebufferTexture2DEXT;
|
|
|
|
- fp_glFramebufferTexture3D = fp_glFramebufferTexture3DEXT;
|
|
|
|
- fp_glFramebufferRenderbuffer = fp_glFramebufferRenderbufferEXT;
|
|
|
|
- fp_glGetFramebufferAttachmentParameteriv = fp_glGetFramebufferAttachmentParameterivEXT;
|
|
|
|
- fp_glGenerateMipmap = fp_glGenerateMipmapEXT;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (GLAD_VERSION_1_0 && GLAD_EXT_texture_array)
|
|
|
|
- fp_glFramebufferTextureLayer = fp_glFramebufferTextureLayerEXT;
|
|
|
|
-
|
|
|
|
- if (GLAD_EXT_framebuffer_blit)
|
|
|
|
- fp_glBlitFramebuffer = fp_glBlitFramebufferEXT;
|
|
|
|
- else if (GLAD_ANGLE_framebuffer_blit)
|
|
|
|
- fp_glBlitFramebuffer = fp_glBlitFramebufferANGLE;
|
|
|
|
- else if (GLAD_NV_framebuffer_blit)
|
|
|
|
- fp_glBlitFramebuffer = fp_glBlitFramebufferNV;
|
|
|
|
-
|
|
|
|
- if (GLAD_EXT_framebuffer_multisample)
|
|
|
|
- fp_glRenderbufferStorageMultisample = fp_glRenderbufferStorageMultisampleEXT;
|
|
|
|
- else if (GLAD_APPLE_framebuffer_multisample)
|
|
|
|
- fp_glRenderbufferStorageMultisample = fp_glRenderbufferStorageMultisampleAPPLE;
|
|
|
|
- else if (GLAD_ANGLE_framebuffer_multisample)
|
|
|
|
- fp_glRenderbufferStorageMultisample = fp_glRenderbufferStorageMultisampleANGLE;
|
|
|
|
- else if (GLAD_NV_framebuffer_multisample)
|
|
|
|
- fp_glRenderbufferStorageMultisample = fp_glRenderbufferStorageMultisampleNV;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (isInstancingSupported() && !(GLAD_VERSION_3_3 || GLAD_ES_VERSION_3_0))
|
|
|
|
- {
|
|
|
|
- if (GLAD_ARB_instanced_arrays)
|
|
|
|
- {
|
|
|
|
- fp_glDrawArraysInstanced = fp_glDrawArraysInstancedARB;
|
|
|
|
- fp_glDrawElementsInstanced = fp_glDrawElementsInstancedARB;
|
|
|
|
- fp_glVertexAttribDivisor = fp_glVertexAttribDivisorARB;
|
|
|
|
- }
|
|
|
|
- else if (GLAD_EXT_instanced_arrays)
|
|
|
|
- {
|
|
|
|
- fp_glDrawArraysInstanced = fp_glDrawArraysInstancedEXT;
|
|
|
|
- fp_glDrawElementsInstanced = fp_glDrawElementsInstancedEXT;
|
|
|
|
- fp_glVertexAttribDivisor = fp_glVertexAttribDivisorEXT;
|
|
|
|
- }
|
|
|
|
- else if (GLAD_ANGLE_instanced_arrays)
|
|
|
|
- {
|
|
|
|
- fp_glDrawArraysInstanced = fp_glDrawArraysInstancedANGLE;
|
|
|
|
- fp_glDrawElementsInstanced = fp_glDrawElementsInstancedANGLE;
|
|
|
|
- fp_glVertexAttribDivisor = fp_glVertexAttribDivisorANGLE;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (GLAD_ES_VERSION_2_0 && !GLAD_ES_VERSION_3_0)
|
|
|
|
- {
|
|
|
|
- // The Nvidia Tegra 3 driver (used by Ouya) claims to support GL_EXT_texture_array but
|
|
|
|
- // segfaults if you actually try to use it. OpenGL ES 2.0 devices should use OES_texture_3D.
|
|
|
|
- // GL_EXT_texture_array is for desktops.
|
|
|
|
- GLAD_EXT_texture_array = false;
|
|
|
|
-
|
|
|
|
- if (GLAD_OES_texture_3D)
|
|
|
|
- {
|
|
|
|
- // Function signatures don't match, we'll have to conditionally call it
|
|
|
|
- //fp_glTexImage3D = fp_glTexImage3DOES;
|
|
|
|
- fp_glTexSubImage3D = fp_glTexSubImage3DOES;
|
|
|
|
- fp_glCopyTexSubImage3D = fp_glCopyTexSubImage3DOES;
|
|
|
|
- fp_glCompressedTexImage3D = fp_glCompressedTexImage3DOES;
|
|
|
|
- fp_glCompressedTexSubImage3D = fp_glCompressedTexSubImage3DOES;
|
|
|
|
- fp_glFramebufferTexture3D = fp_glFramebufferTexture3DOES;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
if (!GLAD_VERSION_3_2 && !GLAD_ES_VERSION_3_2 && !GLAD_ARB_draw_elements_base_vertex)
|
|
if (!GLAD_VERSION_3_2 && !GLAD_ES_VERSION_3_2 && !GLAD_ARB_draw_elements_base_vertex)
|
|
{
|
|
{
|
|
if (GLAD_OES_draw_elements_base_vertex)
|
|
if (GLAD_OES_draw_elements_base_vertex)
|
|
@@ -486,16 +387,6 @@ void OpenGL::initOpenGLFunctions()
|
|
|
|
|
|
void OpenGL::initMaxValues()
|
|
void OpenGL::initMaxValues()
|
|
{
|
|
{
|
|
- if (GLAD_ES_VERSION_2_0 && !GLAD_ES_VERSION_3_0)
|
|
|
|
- {
|
|
|
|
- GLint range = 0;
|
|
|
|
- GLint precision = 0;
|
|
|
|
- glGetShaderPrecisionFormat(GL_FRAGMENT_SHADER, GL_HIGH_FLOAT, &range, &precision);
|
|
|
|
- pixelShaderHighpSupported = range > 0;
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- pixelShaderHighpSupported = true;
|
|
|
|
-
|
|
|
|
baseVertexSupported = GLAD_VERSION_3_2 || GLAD_ES_VERSION_3_2 || GLAD_ARB_draw_elements_base_vertex
|
|
baseVertexSupported = GLAD_VERSION_3_2 || GLAD_ES_VERSION_3_2 || GLAD_ARB_draw_elements_base_vertex
|
|
|| GLAD_OES_draw_elements_base_vertex || GLAD_EXT_draw_elements_base_vertex;
|
|
|| GLAD_OES_draw_elements_base_vertex || GLAD_EXT_draw_elements_base_vertex;
|
|
|
|
|
|
@@ -507,16 +398,8 @@ void OpenGL::initMaxValues()
|
|
|
|
|
|
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max2DTextureSize);
|
|
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max2DTextureSize);
|
|
glGetIntegerv(GL_MAX_CUBE_MAP_TEXTURE_SIZE, &maxCubeTextureSize);
|
|
glGetIntegerv(GL_MAX_CUBE_MAP_TEXTURE_SIZE, &maxCubeTextureSize);
|
|
-
|
|
|
|
- if (isTextureTypeSupported(TEXTURE_VOLUME))
|
|
|
|
- glGetIntegerv(GL_MAX_3D_TEXTURE_SIZE, &max3DTextureSize);
|
|
|
|
- else
|
|
|
|
- max3DTextureSize = 0;
|
|
|
|
-
|
|
|
|
- if (isTextureTypeSupported(TEXTURE_2D_ARRAY))
|
|
|
|
- glGetIntegerv(GL_MAX_ARRAY_TEXTURE_LAYERS, &maxTextureArrayLayers);
|
|
|
|
- else
|
|
|
|
- maxTextureArrayLayers = 0;
|
|
|
|
|
|
+ glGetIntegerv(GL_MAX_3D_TEXTURE_SIZE, &max3DTextureSize);
|
|
|
|
+ glGetIntegerv(GL_MAX_ARRAY_TEXTURE_LAYERS, &maxTextureArrayLayers);
|
|
|
|
|
|
if (isBufferUsageSupported(BUFFERUSAGE_TEXEL))
|
|
if (isBufferUsageSupported(BUFFERUSAGE_TEXEL))
|
|
glGetIntegerv(GL_MAX_TEXTURE_BUFFER_SIZE, &maxTexelBufferSize);
|
|
glGetIntegerv(GL_MAX_TEXTURE_BUFFER_SIZE, &maxTexelBufferSize);
|
|
@@ -549,23 +432,12 @@ void OpenGL::initMaxValues()
|
|
|
|
|
|
int maxattachments = 1;
|
|
int maxattachments = 1;
|
|
int maxdrawbuffers = 1;
|
|
int maxdrawbuffers = 1;
|
|
-
|
|
|
|
- if (GLAD_ES_VERSION_3_0 || GLAD_VERSION_2_0)
|
|
|
|
- {
|
|
|
|
- glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS, &maxattachments);
|
|
|
|
- glGetIntegerv(GL_MAX_DRAW_BUFFERS, &maxdrawbuffers);
|
|
|
|
- }
|
|
|
|
|
|
+ glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS, &maxattachments);
|
|
|
|
+ glGetIntegerv(GL_MAX_DRAW_BUFFERS, &maxdrawbuffers);
|
|
|
|
|
|
maxRenderTargets = std::max(std::min(maxattachments, maxdrawbuffers), 1);
|
|
maxRenderTargets = std::max(std::min(maxattachments, maxdrawbuffers), 1);
|
|
|
|
|
|
- if (GLAD_ES_VERSION_3_0 || GLAD_VERSION_3_0 || GLAD_ARB_framebuffer_object
|
|
|
|
- || GLAD_EXT_framebuffer_multisample || GLAD_APPLE_framebuffer_multisample
|
|
|
|
- || GLAD_ANGLE_framebuffer_multisample)
|
|
|
|
- {
|
|
|
|
- glGetIntegerv(GL_MAX_SAMPLES, &maxSamples);
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- maxSamples = 1;
|
|
|
|
|
|
+ glGetIntegerv(GL_MAX_SAMPLES, &maxSamples);
|
|
|
|
|
|
glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &maxTextureUnits);
|
|
glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &maxTextureUnits);
|
|
|
|
|
|
@@ -794,8 +666,7 @@ GLenum OpenGL::getGLBufferDataUsage(BufferDataUsage usage)
|
|
case BUFFERDATAUSAGE_STREAM: return GL_STREAM_DRAW;
|
|
case BUFFERDATAUSAGE_STREAM: return GL_STREAM_DRAW;
|
|
case BUFFERDATAUSAGE_DYNAMIC: return GL_DYNAMIC_DRAW;
|
|
case BUFFERDATAUSAGE_DYNAMIC: return GL_DYNAMIC_DRAW;
|
|
case BUFFERDATAUSAGE_STATIC: return GL_STATIC_DRAW;
|
|
case BUFFERDATAUSAGE_STATIC: return GL_STATIC_DRAW;
|
|
- case BUFFERDATAUSAGE_READBACK:
|
|
|
|
- return (GLAD_VERSION_1_1 || GLAD_ES_VERSION_3_0) ? GL_STREAM_READ : GL_STREAM_DRAW;
|
|
|
|
|
|
+ case BUFFERDATAUSAGE_READBACK: return GL_STREAM_READ;
|
|
default: return 0;
|
|
default: return 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -1285,42 +1156,27 @@ void OpenGL::setSamplerState(TextureType target, SamplerState &s)
|
|
s.maxAnisotropy = 1;
|
|
s.maxAnisotropy = 1;
|
|
}
|
|
}
|
|
|
|
|
|
- if (GLAD_ES_VERSION_3_0 || GLAD_VERSION_1_0)
|
|
|
|
- {
|
|
|
|
- glTexParameterf(gltarget, GL_TEXTURE_MIN_LOD, (float)s.minLod);
|
|
|
|
- glTexParameterf(gltarget, GL_TEXTURE_MAX_LOD, (float)s.maxLod);
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- s.minLod = 0;
|
|
|
|
- s.maxLod = LOVE_UINT8_MAX;
|
|
|
|
- }
|
|
|
|
|
|
+ glTexParameterf(gltarget, GL_TEXTURE_MIN_LOD, (float)s.minLod);
|
|
|
|
+ glTexParameterf(gltarget, GL_TEXTURE_MAX_LOD, (float)s.maxLod);
|
|
|
|
|
|
- if (isDepthCompareSampleSupported())
|
|
|
|
|
|
+ if (s.depthSampleMode.hasValue)
|
|
{
|
|
{
|
|
- if (s.depthSampleMode.hasValue)
|
|
|
|
- {
|
|
|
|
- // See the comment in renderstate.h
|
|
|
|
- GLenum glmode = getGLCompareMode(getReversedCompareMode(s.depthSampleMode.value));
|
|
|
|
|
|
+ // See the comment in renderstate.h
|
|
|
|
+ GLenum glmode = getGLCompareMode(getReversedCompareMode(s.depthSampleMode.value));
|
|
|
|
|
|
- glTexParameteri(gltarget, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE);
|
|
|
|
- glTexParameteri(gltarget, GL_TEXTURE_COMPARE_FUNC, glmode);
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- glTexParameteri(gltarget, GL_TEXTURE_COMPARE_MODE, GL_NONE);
|
|
|
|
- }
|
|
|
|
|
|
+ glTexParameteri(gltarget, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE);
|
|
|
|
+ glTexParameteri(gltarget, GL_TEXTURE_COMPARE_FUNC, glmode);
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
- s.depthSampleMode.hasValue = false;
|
|
|
|
|
|
+ glTexParameteri(gltarget, GL_TEXTURE_COMPARE_MODE, GL_NONE);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
bool OpenGL::rawTexStorage(TextureType target, int levels, PixelFormat pixelformat, int width, int height, int depth)
|
|
bool OpenGL::rawTexStorage(TextureType target, int levels, PixelFormat pixelformat, int width, int height, int depth)
|
|
{
|
|
{
|
|
GLenum gltarget = getGLTextureType(target);
|
|
GLenum gltarget = getGLTextureType(target);
|
|
- TextureFormat fmt = convertPixelFormat(pixelformat, false);
|
|
|
|
|
|
+ TextureFormat fmt = convertPixelFormat(pixelformat);
|
|
|
|
|
|
// This shouldn't be needed for glTexStorage, but some drivers don't follow
|
|
// This shouldn't be needed for glTexStorage, but some drivers don't follow
|
|
// the spec apparently.
|
|
// the spec apparently.
|
|
@@ -1375,16 +1231,8 @@ bool OpenGL::rawTexStorage(TextureType target, int levels, PixelFormat pixelform
|
|
}
|
|
}
|
|
else if (target == TEXTURE_2D_ARRAY || target == TEXTURE_VOLUME)
|
|
else if (target == TEXTURE_2D_ARRAY || target == TEXTURE_VOLUME)
|
|
{
|
|
{
|
|
- if (target == TEXTURE_VOLUME && GLAD_ES_VERSION_2_0 && GLAD_OES_texture_3D && !GLAD_ES_VERSION_3_0)
|
|
|
|
- {
|
|
|
|
- glTexImage3DOES(gltarget, level, fmt.internalformat, w, h,
|
|
|
|
- d, 0, fmt.externalformat, fmt.type, nullptr);
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- glTexImage3D(gltarget, level, fmt.internalformat, w, h, d,
|
|
|
|
- 0, fmt.externalformat, fmt.type, nullptr);
|
|
|
|
- }
|
|
|
|
|
|
+ glTexImage3D(gltarget, level, fmt.internalformat, w, h, d,
|
|
|
|
+ 0, fmt.externalformat, fmt.type, nullptr);
|
|
}
|
|
}
|
|
|
|
|
|
w = std::max(w / 2, 1);
|
|
w = std::max(w / 2, 1);
|
|
@@ -1406,24 +1254,6 @@ bool OpenGL::isTexStorageSupported()
|
|
return GLAD_ES_VERSION_3_0 || GLAD_VERSION_4_2 || GLAD_ARB_texture_storage;
|
|
return GLAD_ES_VERSION_3_0 || GLAD_VERSION_4_2 || GLAD_ARB_texture_storage;
|
|
}
|
|
}
|
|
|
|
|
|
-bool OpenGL::isTextureTypeSupported(TextureType type) const
|
|
|
|
-{
|
|
|
|
- switch (type)
|
|
|
|
- {
|
|
|
|
- case TEXTURE_2D:
|
|
|
|
- return true;
|
|
|
|
- case TEXTURE_VOLUME:
|
|
|
|
- return GLAD_VERSION_1_1 || GLAD_ES_VERSION_3_0 || GLAD_OES_texture_3D;
|
|
|
|
- case TEXTURE_2D_ARRAY:
|
|
|
|
- return GLAD_VERSION_3_0 || GLAD_ES_VERSION_3_0 || GLAD_EXT_texture_array;
|
|
|
|
- case TEXTURE_CUBE:
|
|
|
|
- return GLAD_VERSION_1_3 || GLAD_ES_VERSION_2_0;
|
|
|
|
- case TEXTURE_MAX_ENUM:
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
- return false;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
bool OpenGL::isBufferUsageSupported(BufferUsage usage) const
|
|
bool OpenGL::isBufferUsageSupported(BufferUsage usage) const
|
|
{
|
|
{
|
|
switch (usage)
|
|
switch (usage)
|
|
@@ -1434,7 +1264,7 @@ bool OpenGL::isBufferUsageSupported(BufferUsage usage) const
|
|
case BUFFERUSAGE_TEXEL:
|
|
case BUFFERUSAGE_TEXEL:
|
|
return GLAD_VERSION_3_1 || GLAD_ES_VERSION_3_2;
|
|
return GLAD_VERSION_3_1 || GLAD_ES_VERSION_3_2;
|
|
case BUFFERUSAGE_UNIFORM:
|
|
case BUFFERUSAGE_UNIFORM:
|
|
- return GLAD_VERSION_3_1 || GLAD_ES_VERSION_3_0;
|
|
|
|
|
|
+ return true;
|
|
case BUFFERUSAGE_SHADER_STORAGE:
|
|
case BUFFERUSAGE_SHADER_STORAGE:
|
|
return (GLAD_VERSION_4_3 && isCoreProfile()) || GLAD_ES_VERSION_3_1;
|
|
return (GLAD_VERSION_4_3 && isCoreProfile()) || GLAD_ES_VERSION_3_1;
|
|
case BUFFERUSAGE_INDIRECT_ARGUMENTS:
|
|
case BUFFERUSAGE_INDIRECT_ARGUMENTS:
|
|
@@ -1450,24 +1280,6 @@ bool OpenGL::isClampZeroOneTextureWrapSupported() const
|
|
return GLAD_VERSION_1_3 || GLAD_EXT_texture_border_clamp || GLAD_NV_texture_border_clamp;
|
|
return GLAD_VERSION_1_3 || GLAD_EXT_texture_border_clamp || GLAD_NV_texture_border_clamp;
|
|
}
|
|
}
|
|
|
|
|
|
-bool OpenGL::isPixelShaderHighpSupported() const
|
|
|
|
-{
|
|
|
|
- return pixelShaderHighpSupported;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-bool OpenGL::isInstancingSupported() const
|
|
|
|
-{
|
|
|
|
- return GLAD_ES_VERSION_3_0 || GLAD_VERSION_3_3
|
|
|
|
- || GLAD_ARB_instanced_arrays || GLAD_EXT_instanced_arrays || GLAD_ANGLE_instanced_arrays;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-bool OpenGL::isDepthCompareSampleSupported() const
|
|
|
|
-{
|
|
|
|
- // Our official API only supports this in GLSL3 shaders, but unofficially
|
|
|
|
- // the requirements are more lax.
|
|
|
|
- return GLAD_VERSION_2_0 || GLAD_ES_VERSION_3_0 || GLAD_EXT_shadow_samplers;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
bool OpenGL::isSamplerLODBiasSupported() const
|
|
bool OpenGL::isSamplerLODBiasSupported() const
|
|
{
|
|
{
|
|
return GLAD_VERSION_1_4;
|
|
return GLAD_VERSION_1_4;
|
|
@@ -1478,34 +1290,12 @@ bool OpenGL::isBaseVertexSupported() const
|
|
return baseVertexSupported;
|
|
return baseVertexSupported;
|
|
}
|
|
}
|
|
|
|
|
|
-bool OpenGL::isMultiFormatMRTSupported() const
|
|
|
|
-{
|
|
|
|
- return getMaxRenderTargets() > 1 && (GLAD_ES_VERSION_3_0 || GLAD_VERSION_3_0 || GLAD_ARB_framebuffer_object);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-bool OpenGL::isCopyBufferSupported() const
|
|
|
|
-{
|
|
|
|
- return GLAD_VERSION_3_1 || GLAD_ES_VERSION_3_0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-bool OpenGL::isCopyBufferToTextureSupported() const
|
|
|
|
-{
|
|
|
|
- // Requires pixel unpack buffer binding support.
|
|
|
|
- return GLAD_VERSION_2_0 || GLAD_ES_VERSION_3_0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
bool OpenGL::isCopyTextureToBufferSupported() const
|
|
bool OpenGL::isCopyTextureToBufferSupported() const
|
|
{
|
|
{
|
|
// Requires glGetTextureSubImage support.
|
|
// Requires glGetTextureSubImage support.
|
|
return GLAD_VERSION_4_5 || GLAD_ARB_get_texture_sub_image;
|
|
return GLAD_VERSION_4_5 || GLAD_ARB_get_texture_sub_image;
|
|
}
|
|
}
|
|
|
|
|
|
-bool OpenGL::isCopyRenderTargetToBufferSupported() const
|
|
|
|
-{
|
|
|
|
- // Requires pixel pack buffer binding support.
|
|
|
|
- return GLAD_VERSION_2_0 || GLAD_ES_VERSION_3_0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
int OpenGL::getMax2DTextureSize() const
|
|
int OpenGL::getMax2DTextureSize() const
|
|
{
|
|
{
|
|
return std::max(max2DTextureSize, 1);
|
|
return std::max(max2DTextureSize, 1);
|
|
@@ -1596,7 +1386,7 @@ OpenGL::Vendor OpenGL::getVendor() const
|
|
return vendor;
|
|
return vendor;
|
|
}
|
|
}
|
|
|
|
|
|
-OpenGL::TextureFormat OpenGL::convertPixelFormat(PixelFormat pixelformat, bool renderbuffer)
|
|
|
|
|
|
+OpenGL::TextureFormat OpenGL::convertPixelFormat(PixelFormat pixelformat)
|
|
{
|
|
{
|
|
TextureFormat f;
|
|
TextureFormat f;
|
|
|
|
|
|
@@ -1613,8 +1403,7 @@ OpenGL::TextureFormat OpenGL::convertPixelFormat(PixelFormat pixelformat, bool r
|
|
switch (pixelformat)
|
|
switch (pixelformat)
|
|
{
|
|
{
|
|
case PIXELFORMAT_R8_UNORM:
|
|
case PIXELFORMAT_R8_UNORM:
|
|
- if ((GLAD_VERSION_3_0 || GLAD_ES_VERSION_3_0 || GLAD_ARB_texture_rg || GLAD_EXT_texture_rg)
|
|
|
|
- && !gl.bugs.brokenR8PixelFormat)
|
|
|
|
|
|
+ if (!gl.bugs.brokenR8PixelFormat)
|
|
{
|
|
{
|
|
f.internalformat = GL_R8;
|
|
f.internalformat = GL_R8;
|
|
f.externalformat = GL_RED;
|
|
f.externalformat = GL_RED;
|
|
@@ -1639,10 +1428,7 @@ OpenGL::TextureFormat OpenGL::convertPixelFormat(PixelFormat pixelformat, bool r
|
|
case PIXELFORMAT_RGBA8_sRGB:
|
|
case PIXELFORMAT_RGBA8_sRGB:
|
|
f.internalformat = GL_SRGB8_ALPHA8;
|
|
f.internalformat = GL_SRGB8_ALPHA8;
|
|
f.type = GL_UNSIGNED_BYTE;
|
|
f.type = GL_UNSIGNED_BYTE;
|
|
- if (GLAD_ES_VERSION_2_0 && !GLAD_ES_VERSION_3_0)
|
|
|
|
- f.externalformat = GL_SRGB_ALPHA;
|
|
|
|
- else
|
|
|
|
- f.externalformat = GL_RGBA;
|
|
|
|
|
|
+ f.externalformat = GL_RGBA;
|
|
break;
|
|
break;
|
|
case PIXELFORMAT_BGRA8_UNORM:
|
|
case PIXELFORMAT_BGRA8_UNORM:
|
|
case PIXELFORMAT_BGRA8_sRGB:
|
|
case PIXELFORMAT_BGRA8_sRGB:
|
|
@@ -1841,28 +1627,10 @@ OpenGL::TextureFormat OpenGL::convertPixelFormat(PixelFormat pixelformat, bool r
|
|
|
|
|
|
case PIXELFORMAT_STENCIL8:
|
|
case PIXELFORMAT_STENCIL8:
|
|
// Prefer a combined depth/stencil buffer due to driver issues.
|
|
// Prefer a combined depth/stencil buffer due to driver issues.
|
|
- if (GLAD_ES_VERSION_3_0 || GLAD_VERSION_3_0 || GLAD_ARB_framebuffer_object)
|
|
|
|
- {
|
|
|
|
- f.internalformat = GL_DEPTH24_STENCIL8;
|
|
|
|
- f.externalformat = GL_DEPTH_STENCIL;
|
|
|
|
- f.type = GL_UNSIGNED_INT_24_8;
|
|
|
|
- f.framebufferAttachments[0] = GL_DEPTH_STENCIL_ATTACHMENT;
|
|
|
|
- }
|
|
|
|
- else if (GLAD_EXT_packed_depth_stencil || GLAD_OES_packed_depth_stencil)
|
|
|
|
- {
|
|
|
|
- f.internalformat = GL_DEPTH24_STENCIL8;
|
|
|
|
- f.externalformat = GL_DEPTH_STENCIL;
|
|
|
|
- f.type = GL_UNSIGNED_INT_24_8;
|
|
|
|
- f.framebufferAttachments[0] = GL_DEPTH_ATTACHMENT;
|
|
|
|
- f.framebufferAttachments[1] = GL_STENCIL_ATTACHMENT;
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- f.internalformat = GL_STENCIL_INDEX8;
|
|
|
|
- f.externalformat = GL_STENCIL;
|
|
|
|
- f.type = GL_UNSIGNED_BYTE;
|
|
|
|
- f.framebufferAttachments[0] = GL_STENCIL_ATTACHMENT;
|
|
|
|
- }
|
|
|
|
|
|
+ f.internalformat = GL_DEPTH24_STENCIL8;
|
|
|
|
+ f.externalformat = GL_DEPTH_STENCIL;
|
|
|
|
+ f.type = GL_UNSIGNED_INT_24_8;
|
|
|
|
+ f.framebufferAttachments[0] = GL_DEPTH_STENCIL_ATTACHMENT;
|
|
break;
|
|
break;
|
|
|
|
|
|
case PIXELFORMAT_DEPTH16_UNORM:
|
|
case PIXELFORMAT_DEPTH16_UNORM:
|
|
@@ -1873,21 +1641,10 @@ OpenGL::TextureFormat OpenGL::convertPixelFormat(PixelFormat pixelformat, bool r
|
|
break;
|
|
break;
|
|
|
|
|
|
case PIXELFORMAT_DEPTH24_UNORM:
|
|
case PIXELFORMAT_DEPTH24_UNORM:
|
|
- if (GLAD_ES_VERSION_2_0 && !GLAD_ES_VERSION_3_0 && !GLAD_OES_depth24 && GLAD_OES_packed_depth_stencil)
|
|
|
|
- {
|
|
|
|
- f.internalformat = GL_DEPTH24_STENCIL8;
|
|
|
|
- f.externalformat = GL_DEPTH_STENCIL;
|
|
|
|
- f.type = GL_UNSIGNED_INT_24_8;
|
|
|
|
- f.framebufferAttachments[0] = GL_DEPTH_ATTACHMENT;
|
|
|
|
- f.framebufferAttachments[1] = GL_STENCIL_ATTACHMENT;
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- f.internalformat = GL_DEPTH_COMPONENT24;
|
|
|
|
- f.externalformat = GL_DEPTH_COMPONENT;
|
|
|
|
- f.type = GL_UNSIGNED_INT;
|
|
|
|
- f.framebufferAttachments[0] = GL_DEPTH_ATTACHMENT;
|
|
|
|
- }
|
|
|
|
|
|
+ f.internalformat = GL_DEPTH_COMPONENT24;
|
|
|
|
+ f.externalformat = GL_DEPTH_COMPONENT;
|
|
|
|
+ f.type = GL_UNSIGNED_INT;
|
|
|
|
+ f.framebufferAttachments[0] = GL_DEPTH_ATTACHMENT;
|
|
break;
|
|
break;
|
|
|
|
|
|
case PIXELFORMAT_DEPTH32_FLOAT:
|
|
case PIXELFORMAT_DEPTH32_FLOAT:
|
|
@@ -1901,15 +1658,7 @@ OpenGL::TextureFormat OpenGL::convertPixelFormat(PixelFormat pixelformat, bool r
|
|
f.internalformat = GL_DEPTH24_STENCIL8;
|
|
f.internalformat = GL_DEPTH24_STENCIL8;
|
|
f.externalformat = GL_DEPTH_STENCIL;
|
|
f.externalformat = GL_DEPTH_STENCIL;
|
|
f.type = GL_UNSIGNED_INT_24_8;
|
|
f.type = GL_UNSIGNED_INT_24_8;
|
|
- if (GLAD_ES_VERSION_3_0 || GLAD_VERSION_3_0 || GLAD_ARB_framebuffer_object)
|
|
|
|
- {
|
|
|
|
- f.framebufferAttachments[0] = GL_DEPTH_STENCIL_ATTACHMENT;
|
|
|
|
- }
|
|
|
|
- else if (GLAD_EXT_packed_depth_stencil || GLAD_OES_packed_depth_stencil)
|
|
|
|
- {
|
|
|
|
- f.framebufferAttachments[0] = GL_DEPTH_ATTACHMENT;
|
|
|
|
- f.framebufferAttachments[1] = GL_STENCIL_ATTACHMENT;
|
|
|
|
- }
|
|
|
|
|
|
+ f.framebufferAttachments[0] = GL_DEPTH_STENCIL_ATTACHMENT;
|
|
break;
|
|
break;
|
|
|
|
|
|
case PIXELFORMAT_DEPTH32_FLOAT_STENCIL8:
|
|
case PIXELFORMAT_DEPTH32_FLOAT_STENCIL8:
|
|
@@ -2111,22 +1860,6 @@ OpenGL::TextureFormat OpenGL::convertPixelFormat(PixelFormat pixelformat, bool r
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
- if (!isPixelFormatCompressed(pixelformat))
|
|
|
|
- {
|
|
|
|
- // glTexImage in OpenGL ES 2 only accepts internal format enums that
|
|
|
|
- // match the external format. GLES3 doesn't have that restriction -
|
|
|
|
- // except for GL_LUMINANCE_ALPHA which doesn't have a sized version in
|
|
|
|
- // ES3. However we always use RG8 for PIXELFORMAT_LA8 on GLES3 so it
|
|
|
|
- // doesn't matter there.
|
|
|
|
- // Also note that GLES2+extension sRGB format enums are different from
|
|
|
|
- // desktop GL and GLES3+ (this is handled above).
|
|
|
|
- if (GLAD_ES_VERSION_2_0 && !GLAD_ES_VERSION_3_0
|
|
|
|
- && !renderbuffer && !isTexStorageSupported())
|
|
|
|
- {
|
|
|
|
- f.internalformat = f.externalformat;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
return f;
|
|
return f;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -2142,28 +1875,19 @@ uint32 OpenGL::getPixelFormatUsageFlags(PixelFormat pixelformat)
|
|
{
|
|
{
|
|
case PIXELFORMAT_R8_UNORM:
|
|
case PIXELFORMAT_R8_UNORM:
|
|
case PIXELFORMAT_RG8_UNORM:
|
|
case PIXELFORMAT_RG8_UNORM:
|
|
- if (GLAD_VERSION_3_0 || GLAD_ES_VERSION_3_0 || GLAD_ARB_texture_rg || GLAD_EXT_texture_rg)
|
|
|
|
- flags |= commonsample | commonrender;
|
|
|
|
- else if (pixelformat == PIXELFORMAT_R8_UNORM && (GLAD_ES_VERSION_2_0 || GLAD_VERSION_1_1))
|
|
|
|
- flags |= commonsample; // We'll use OpenGL's luminance format internally.
|
|
|
|
|
|
+ flags |= commonsample | commonrender;
|
|
if (GLAD_VERSION_4_3)
|
|
if (GLAD_VERSION_4_3)
|
|
flags |= computewrite;
|
|
flags |= computewrite;
|
|
break;
|
|
break;
|
|
case PIXELFORMAT_RGBA8_UNORM:
|
|
case PIXELFORMAT_RGBA8_UNORM:
|
|
- flags |= commonsample;
|
|
|
|
- if (GLAD_VERSION_1_0 || GLAD_ES_VERSION_3_0 || GLAD_OES_rgb8_rgba8 || GLAD_ARM_rgba8)
|
|
|
|
- flags |= commonrender;
|
|
|
|
|
|
+ flags |= commonsample | commonrender;
|
|
if (GLAD_VERSION_4_3 || GLAD_ES_VERSION_3_1)
|
|
if (GLAD_VERSION_4_3 || GLAD_ES_VERSION_3_1)
|
|
flags |= computewrite;
|
|
flags |= computewrite;
|
|
break;
|
|
break;
|
|
case PIXELFORMAT_RGBA8_sRGB:
|
|
case PIXELFORMAT_RGBA8_sRGB:
|
|
if (gl.bugs.brokenSRGB)
|
|
if (gl.bugs.brokenSRGB)
|
|
break;
|
|
break;
|
|
- if (GLAD_ES_VERSION_3_0 || GLAD_VERSION_2_1 || GLAD_EXT_texture_sRGB)
|
|
|
|
- flags |= commonsample;
|
|
|
|
- if (GLAD_ES_VERSION_3_0 || GLAD_VERSION_3_0
|
|
|
|
- || ((GLAD_ARB_framebuffer_sRGB || GLAD_EXT_framebuffer_sRGB) && (GLAD_VERSION_2_1 || GLAD_EXT_texture_sRGB)))
|
|
|
|
- flags |= commonrender;
|
|
|
|
|
|
+ flags |= commonsample | commonrender;
|
|
break;
|
|
break;
|
|
case PIXELFORMAT_BGRA8_UNORM:
|
|
case PIXELFORMAT_BGRA8_UNORM:
|
|
case PIXELFORMAT_BGRA8_sRGB:
|
|
case PIXELFORMAT_BGRA8_sRGB:
|
|
@@ -2171,9 +1895,7 @@ uint32 OpenGL::getPixelFormatUsageFlags(PixelFormat pixelformat)
|
|
break;
|
|
break;
|
|
case PIXELFORMAT_R16_UNORM:
|
|
case PIXELFORMAT_R16_UNORM:
|
|
case PIXELFORMAT_RG16_UNORM:
|
|
case PIXELFORMAT_RG16_UNORM:
|
|
- if (GLAD_VERSION_3_0
|
|
|
|
- || (GLAD_VERSION_1_1 && GLAD_ARB_texture_rg)
|
|
|
|
- || (GLAD_EXT_texture_norm16 && (GLAD_ES_VERSION_3_0 || GLAD_EXT_texture_rg)))
|
|
|
|
|
|
+ if (GLAD_VERSION_3_0 || (GLAD_EXT_texture_norm16 && GLAD_ES_VERSION_3_0))
|
|
flags |= commonsample | commonrender;
|
|
flags |= commonsample | commonrender;
|
|
if (GLAD_VERSION_4_3)
|
|
if (GLAD_VERSION_4_3)
|
|
flags |= computewrite;
|
|
flags |= computewrite;
|
|
@@ -2186,26 +1908,20 @@ uint32 OpenGL::getPixelFormatUsageFlags(PixelFormat pixelformat)
|
|
break;
|
|
break;
|
|
case PIXELFORMAT_R16_FLOAT:
|
|
case PIXELFORMAT_R16_FLOAT:
|
|
case PIXELFORMAT_RG16_FLOAT:
|
|
case PIXELFORMAT_RG16_FLOAT:
|
|
- if (GLAD_VERSION_1_0 && (GLAD_VERSION_3_0 || (GLAD_ARB_texture_float && GLAD_ARB_half_float_pixel && GLAD_ARB_texture_rg)))
|
|
|
|
- flags |= commonsample | commonrender;
|
|
|
|
- if (GLAD_ES_VERSION_3_0 || (GLAD_OES_texture_half_float && GLAD_EXT_texture_rg))
|
|
|
|
- flags |= commonsample;
|
|
|
|
- if ((GLAD_EXT_color_buffer_half_float || GLAD_EXT_color_buffer_float) && (GLAD_ES_VERSION_3_0 || GLAD_EXT_texture_rg))
|
|
|
|
|
|
+ flags |= commonsample;
|
|
|
|
+ if (GLAD_VERSION_3_0)
|
|
|
|
+ flags |= commonrender;
|
|
|
|
+ if ((GLAD_EXT_color_buffer_half_float || GLAD_EXT_color_buffer_float) && GLAD_ES_VERSION_3_0)
|
|
flags |= commonrender;
|
|
flags |= commonrender;
|
|
- if (!(GLAD_VERSION_1_1 || GLAD_ES_VERSION_3_0 || GLAD_OES_texture_half_float_linear))
|
|
|
|
- flags &= ~PIXELFORMATUSAGEFLAGS_LINEAR;
|
|
|
|
if (GLAD_VERSION_4_3)
|
|
if (GLAD_VERSION_4_3)
|
|
flags |= computewrite;
|
|
flags |= computewrite;
|
|
break;
|
|
break;
|
|
case PIXELFORMAT_RGBA16_FLOAT:
|
|
case PIXELFORMAT_RGBA16_FLOAT:
|
|
- if (GLAD_VERSION_3_0 || (GLAD_VERSION_1_0 && GLAD_ARB_texture_float && GLAD_ARB_half_float_pixel))
|
|
|
|
- flags |= commonsample | commonrender;
|
|
|
|
- if (GLAD_ES_VERSION_3_0 || GLAD_OES_texture_half_float)
|
|
|
|
- flags |= commonsample;
|
|
|
|
|
|
+ flags |= commonsample;
|
|
|
|
+ if (GLAD_VERSION_3_0)
|
|
|
|
+ flags |= commonrender;
|
|
if (GLAD_EXT_color_buffer_half_float || GLAD_EXT_color_buffer_float)
|
|
if (GLAD_EXT_color_buffer_half_float || GLAD_EXT_color_buffer_float)
|
|
flags |= commonrender;
|
|
flags |= commonrender;
|
|
- if (!(GLAD_VERSION_1_1 || GLAD_ES_VERSION_3_0 || GLAD_OES_texture_half_float_linear))
|
|
|
|
- flags &= ~PIXELFORMATUSAGEFLAGS_LINEAR;
|
|
|
|
if (GLAD_VERSION_4_3 || GLAD_ES_VERSION_3_1)
|
|
if (GLAD_VERSION_4_3 || GLAD_ES_VERSION_3_1)
|
|
flags |= computewrite;
|
|
flags |= computewrite;
|
|
break;
|
|
break;
|
|
@@ -2214,22 +1930,20 @@ uint32 OpenGL::getPixelFormatUsageFlags(PixelFormat pixelformat)
|
|
flags |= computewrite;
|
|
flags |= computewrite;
|
|
// Fallthrough.
|
|
// Fallthrough.
|
|
case PIXELFORMAT_RG32_FLOAT:
|
|
case PIXELFORMAT_RG32_FLOAT:
|
|
- if (GLAD_VERSION_3_0 || (GLAD_VERSION_1_0 && GLAD_ARB_texture_float && GLAD_ARB_texture_rg))
|
|
|
|
- flags |= commonsample | commonrender;
|
|
|
|
- if (GLAD_ES_VERSION_3_0 || (GLAD_OES_texture_float && GLAD_EXT_texture_rg))
|
|
|
|
- flags |= commonsample;
|
|
|
|
|
|
+ flags |= commonsample;
|
|
|
|
+ if (GLAD_VERSION_3_0)
|
|
|
|
+ flags |= commonrender;
|
|
if (GLAD_EXT_color_buffer_float)
|
|
if (GLAD_EXT_color_buffer_float)
|
|
flags |= commonrender;
|
|
flags |= commonrender;
|
|
- if (!(GLAD_VERSION_1_1 || GLAD_ES_VERSION_3_0 || GLAD_OES_texture_half_float_linear))
|
|
|
|
|
|
+ if (!(GLAD_VERSION_1_1 || GLAD_OES_texture_float_linear))
|
|
flags &= ~PIXELFORMATUSAGEFLAGS_LINEAR;
|
|
flags &= ~PIXELFORMATUSAGEFLAGS_LINEAR;
|
|
if (GLAD_VERSION_4_3)
|
|
if (GLAD_VERSION_4_3)
|
|
flags |= computewrite;
|
|
flags |= computewrite;
|
|
break;
|
|
break;
|
|
case PIXELFORMAT_RGBA32_FLOAT:
|
|
case PIXELFORMAT_RGBA32_FLOAT:
|
|
- if (GLAD_VERSION_3_0 || (GLAD_VERSION_1_0 && GLAD_ARB_texture_float))
|
|
|
|
- flags |= commonsample | commonrender;
|
|
|
|
- if (GLAD_ES_VERSION_3_0 || GLAD_OES_texture_float)
|
|
|
|
- flags |= commonsample;
|
|
|
|
|
|
+ flags |= commonsample;
|
|
|
|
+ if (GLAD_VERSION_3_0)
|
|
|
|
+ flags |= commonrender;
|
|
if (GLAD_EXT_color_buffer_float)
|
|
if (GLAD_EXT_color_buffer_float)
|
|
flags |= commonrender;
|
|
flags |= commonrender;
|
|
if (!(GLAD_VERSION_1_1 || GLAD_OES_texture_float_linear))
|
|
if (!(GLAD_VERSION_1_1 || GLAD_OES_texture_float_linear))
|
|
@@ -2256,8 +1970,7 @@ uint32 OpenGL::getPixelFormatUsageFlags(PixelFormat pixelformat)
|
|
case PIXELFORMAT_RG32_UINT:
|
|
case PIXELFORMAT_RG32_UINT:
|
|
case PIXELFORMAT_RGBA32_INT:
|
|
case PIXELFORMAT_RGBA32_INT:
|
|
case PIXELFORMAT_RGBA32_UINT:
|
|
case PIXELFORMAT_RGBA32_UINT:
|
|
- if (GLAD_VERSION_3_0 || GLAD_ES_VERSION_3_0)
|
|
|
|
- flags |= PIXELFORMATUSAGEFLAGS_SAMPLE | PIXELFORMATUSAGEFLAGS_RENDERTARGET;
|
|
|
|
|
|
+ flags |= PIXELFORMATUSAGEFLAGS_SAMPLE | PIXELFORMATUSAGEFLAGS_RENDERTARGET;
|
|
if (GLAD_VERSION_4_3)
|
|
if (GLAD_VERSION_4_3)
|
|
flags |= computewrite;
|
|
flags |= computewrite;
|
|
if (GLAD_ES_VERSION_3_1)
|
|
if (GLAD_ES_VERSION_3_1)
|
|
@@ -2293,8 +2006,7 @@ uint32 OpenGL::getPixelFormatUsageFlags(PixelFormat pixelformat)
|
|
flags |= commonsample | commonrender;
|
|
flags |= commonsample | commonrender;
|
|
break;
|
|
break;
|
|
case PIXELFORMAT_RGB10A2_UNORM:
|
|
case PIXELFORMAT_RGB10A2_UNORM:
|
|
- if (GLAD_ES_VERSION_3_0 || GLAD_VERSION_1_0)
|
|
|
|
- flags |= commonsample | commonrender;
|
|
|
|
|
|
+ flags |= commonsample | commonrender;
|
|
if (GLAD_VERSION_4_3)
|
|
if (GLAD_VERSION_4_3)
|
|
flags |= computewrite;
|
|
flags |= computewrite;
|
|
break;
|
|
break;
|
|
@@ -2314,31 +2026,20 @@ uint32 OpenGL::getPixelFormatUsageFlags(PixelFormat pixelformat)
|
|
break;
|
|
break;
|
|
|
|
|
|
case PIXELFORMAT_DEPTH16_UNORM:
|
|
case PIXELFORMAT_DEPTH16_UNORM:
|
|
- flags |= PIXELFORMATUSAGEFLAGS_RENDERTARGET | PIXELFORMATUSAGEFLAGS_MSAA;
|
|
|
|
- if (GLAD_VERSION_2_0 || GLAD_ES_VERSION_3_0 || GLAD_OES_depth_texture)
|
|
|
|
- flags |= commonsample;
|
|
|
|
|
|
+ flags |= commonsample | PIXELFORMATUSAGEFLAGS_RENDERTARGET | PIXELFORMATUSAGEFLAGS_MSAA;
|
|
break;
|
|
break;
|
|
|
|
|
|
case PIXELFORMAT_DEPTH24_UNORM:
|
|
case PIXELFORMAT_DEPTH24_UNORM:
|
|
- if (GLAD_VERSION_2_0 || GLAD_ES_VERSION_3_0 || GLAD_OES_depth24 || GLAD_OES_depth_texture)
|
|
|
|
- flags |= PIXELFORMATUSAGEFLAGS_RENDERTARGET | PIXELFORMATUSAGEFLAGS_MSAA;
|
|
|
|
-
|
|
|
|
- if (GLAD_VERSION_2_0 || GLAD_ES_VERSION_3_0 || (GLAD_OES_depth_texture && (GLAD_OES_depth24 || GLAD_OES_depth_texture)))
|
|
|
|
- flags |= commonsample;
|
|
|
|
|
|
+ flags |= commonsample | PIXELFORMATUSAGEFLAGS_RENDERTARGET | PIXELFORMATUSAGEFLAGS_MSAA;
|
|
break;
|
|
break;
|
|
|
|
|
|
case PIXELFORMAT_DEPTH24_UNORM_STENCIL8:
|
|
case PIXELFORMAT_DEPTH24_UNORM_STENCIL8:
|
|
- if (GLAD_VERSION_3_0 || GLAD_ES_VERSION_3_0 || GLAD_EXT_packed_depth_stencil || GLAD_OES_packed_depth_stencil)
|
|
|
|
- flags |= PIXELFORMATUSAGEFLAGS_RENDERTARGET | PIXELFORMATUSAGEFLAGS_MSAA;
|
|
|
|
-
|
|
|
|
- if (GLAD_VERSION_3_0 || GLAD_ES_VERSION_3_0 || GLAD_EXT_packed_depth_stencil || (GLAD_OES_depth_texture && GLAD_OES_packed_depth_stencil))
|
|
|
|
- flags |= commonsample;
|
|
|
|
|
|
+ flags |= commonsample | PIXELFORMATUSAGEFLAGS_RENDERTARGET | PIXELFORMATUSAGEFLAGS_MSAA;
|
|
break;
|
|
break;
|
|
|
|
|
|
case PIXELFORMAT_DEPTH32_FLOAT:
|
|
case PIXELFORMAT_DEPTH32_FLOAT:
|
|
case PIXELFORMAT_DEPTH32_FLOAT_STENCIL8:
|
|
case PIXELFORMAT_DEPTH32_FLOAT_STENCIL8:
|
|
- if (GLAD_VERSION_3_0 || GLAD_ES_VERSION_3_0 || GLAD_ARB_depth_buffer_float)
|
|
|
|
- flags |= commonsample | PIXELFORMATUSAGEFLAGS_RENDERTARGET | PIXELFORMATUSAGEFLAGS_MSAA;
|
|
|
|
|
|
+ flags |= commonsample | PIXELFORMATUSAGEFLAGS_RENDERTARGET | PIXELFORMATUSAGEFLAGS_MSAA;
|
|
break;
|
|
break;
|
|
|
|
|
|
case PIXELFORMAT_DXT1_UNORM:
|
|
case PIXELFORMAT_DXT1_UNORM:
|
|
@@ -2386,7 +2087,7 @@ uint32 OpenGL::getPixelFormatUsageFlags(PixelFormat pixelformat)
|
|
break;
|
|
break;
|
|
case PIXELFORMAT_ETC1_UNORM:
|
|
case PIXELFORMAT_ETC1_UNORM:
|
|
// ETC2 support guarantees ETC1 support as well.
|
|
// ETC2 support guarantees ETC1 support as well.
|
|
- if (GLAD_ES_VERSION_3_0 || GLAD_VERSION_4_3 || GLAD_ARB_ES3_compatibility || GLAD_OES_compressed_ETC1_RGB8_texture)
|
|
|
|
|
|
+ if (GLAD_ES_VERSION_3_0 || GLAD_VERSION_4_3 || GLAD_ARB_ES3_compatibility)
|
|
flags |= commonsample;
|
|
flags |= commonsample;
|
|
break;
|
|
break;
|
|
case PIXELFORMAT_ETC2_RGB_UNORM:
|
|
case PIXELFORMAT_ETC2_RGB_UNORM:
|