mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-11 21:58:31 +09:00
[Feat|Fix] (...): Add/Fix lots of stuff, being able not to crash in MC.
This commit is contained in:
@@ -863,21 +863,45 @@ namespace MobileGL {
|
||||
if (libEGL != NULL) { \
|
||||
MG_External::EGL::name = (MG_External::EGL::name##_PTR)ProcAddress(libEGL, #name); \
|
||||
}
|
||||
|
||||
void InitEGL() {
|
||||
INIT_EGL_FUNC(eglGetProcAddress)
|
||||
INIT_EGL_FUNC(eglBindAPI)
|
||||
INIT_EGL_FUNC(eglInitialize)
|
||||
INIT_EGL_FUNC(eglGetDisplay)
|
||||
INIT_EGL_FUNC(eglCreatePbufferSurface)
|
||||
INIT_EGL_FUNC(eglDestroySurface)
|
||||
INIT_EGL_FUNC(eglDestroyContext)
|
||||
INIT_EGL_FUNC(eglMakeCurrent)
|
||||
INIT_EGL_FUNC(eglBindTexImage)
|
||||
INIT_EGL_FUNC(eglChooseConfig)
|
||||
INIT_EGL_FUNC(eglCopyBuffers)
|
||||
INIT_EGL_FUNC(eglCreateContext)
|
||||
INIT_EGL_FUNC(eglQueryString)
|
||||
INIT_EGL_FUNC(eglTerminate)
|
||||
INIT_EGL_FUNC(eglCreatePbufferFromClientBuffer)
|
||||
INIT_EGL_FUNC(eglCreatePbufferSurface)
|
||||
INIT_EGL_FUNC(eglCreatePixmapSurface)
|
||||
INIT_EGL_FUNC(eglCreatePlatformWindowSurface)
|
||||
INIT_EGL_FUNC(eglCreateWindowSurface)
|
||||
INIT_EGL_FUNC(eglDestroyContext)
|
||||
INIT_EGL_FUNC(eglDestroySurface)
|
||||
INIT_EGL_FUNC(eglGetConfigAttrib)
|
||||
INIT_EGL_FUNC(eglGetConfigs)
|
||||
INIT_EGL_FUNC(eglGetCurrentContext)
|
||||
INIT_EGL_FUNC(eglGetCurrentDisplay)
|
||||
INIT_EGL_FUNC(eglGetCurrentSurface)
|
||||
INIT_EGL_FUNC(eglGetDisplay)
|
||||
INIT_EGL_FUNC(eglGetPlatformDisplay)
|
||||
INIT_EGL_FUNC(eglGetError)
|
||||
INIT_EGL_FUNC(eglGetProcAddress)
|
||||
INIT_EGL_FUNC(eglInitialize)
|
||||
INIT_EGL_FUNC(eglMakeCurrent)
|
||||
INIT_EGL_FUNC(eglQueryAPI)
|
||||
INIT_EGL_FUNC(eglQueryContext)
|
||||
INIT_EGL_FUNC(eglQueryString)
|
||||
INIT_EGL_FUNC(eglQuerySurface)
|
||||
INIT_EGL_FUNC(eglReleaseTexImage)
|
||||
INIT_EGL_FUNC(eglReleaseThread)
|
||||
INIT_EGL_FUNC(eglSurfaceAttrib)
|
||||
INIT_EGL_FUNC(eglSwapBuffers)
|
||||
INIT_EGL_FUNC(eglSwapBuffersWithDamageEXT)
|
||||
INIT_EGL_FUNC(eglSwapInterval)
|
||||
INIT_EGL_FUNC(eglTerminate)
|
||||
INIT_EGL_FUNC(eglUnlockSurfaceKHR)
|
||||
INIT_EGL_FUNC(eglWaitClient)
|
||||
INIT_EGL_FUNC(eglWaitGL)
|
||||
INIT_EGL_FUNC(eglWaitNative)
|
||||
|
||||
EGLint configAttribs[] = {EGL_RED_SIZE,
|
||||
8,
|
||||
|
||||
@@ -26,8 +26,6 @@ namespace MobileGL {
|
||||
return FramebufferAttachmentType::Depth;
|
||||
case GL_STENCIL_ATTACHMENT:
|
||||
return FramebufferAttachmentType::Stencil;
|
||||
case GL_DEPTH_STENCIL_ATTACHMENT:
|
||||
return FramebufferAttachmentType::DepthStencil;
|
||||
case GL_UNKNOWN_MGL:
|
||||
default:
|
||||
return FramebufferAttachmentType::Unknown;
|
||||
|
||||
@@ -305,5 +305,76 @@ namespace MobileGL {
|
||||
}
|
||||
}
|
||||
|
||||
SamplerFilterMode ConvertGLEnumToSamplerFilterMode(GLenum v) {
|
||||
switch (v) {
|
||||
case GL_NEAREST:
|
||||
return SamplerFilterMode::Nearest;
|
||||
case GL_LINEAR:
|
||||
return SamplerFilterMode::Linear;
|
||||
default:
|
||||
return SamplerFilterMode::Unknown;
|
||||
}
|
||||
}
|
||||
|
||||
SamplerMipmapMode ConvertGLEnumToSamplerMipmapMode(GLenum v) {
|
||||
switch (v) {
|
||||
case 0:
|
||||
return SamplerMipmapMode::None; // 无 mipmap 时
|
||||
case GL_NEAREST_MIPMAP_NEAREST:
|
||||
return SamplerMipmapMode::Nearest;
|
||||
default:
|
||||
return SamplerMipmapMode::Unknown;
|
||||
}
|
||||
}
|
||||
|
||||
SamplerWrapMode ConvertGLEnumToSamplerWrapMode(GLenum v) {
|
||||
switch (v) {
|
||||
case GL_CLAMP_TO_EDGE:
|
||||
return SamplerWrapMode::ClampToEdge;
|
||||
case GL_MIRRORED_REPEAT:
|
||||
return SamplerWrapMode::MirroredRepeat;
|
||||
case GL_REPEAT:
|
||||
return SamplerWrapMode::Repeat;
|
||||
case GL_CLAMP_TO_BORDER:
|
||||
return SamplerWrapMode::ClampToBorder;
|
||||
default:
|
||||
return SamplerWrapMode::Unknown;
|
||||
}
|
||||
}
|
||||
|
||||
SamplerCompareMode ConvertGLEnumToSamplerCompareMode(GLenum v) {
|
||||
switch (v) {
|
||||
case 0:
|
||||
return SamplerCompareMode::None; // 无 compare
|
||||
case GL_COMPARE_REF_TO_TEXTURE:
|
||||
return SamplerCompareMode::CompareToTexture;
|
||||
default:
|
||||
return SamplerCompareMode::Unknown;
|
||||
}
|
||||
}
|
||||
|
||||
SamplerCompareFunc ConvertGLEnumToSamplerCompareFunc(GLenum v) {
|
||||
switch (v) {
|
||||
case GL_NEVER:
|
||||
return SamplerCompareFunc::Never;
|
||||
case GL_LESS:
|
||||
return SamplerCompareFunc::Less;
|
||||
case GL_EQUAL:
|
||||
return SamplerCompareFunc::Equal;
|
||||
case GL_LEQUAL:
|
||||
return SamplerCompareFunc::LessEqual;
|
||||
case GL_GREATER:
|
||||
return SamplerCompareFunc::Greater;
|
||||
case GL_NOTEQUAL:
|
||||
return SamplerCompareFunc::NotEqual;
|
||||
case GL_GEQUAL:
|
||||
return SamplerCompareFunc::GreaterEqual;
|
||||
case GL_ALWAYS:
|
||||
return SamplerCompareFunc::Always;
|
||||
default:
|
||||
return SamplerCompareFunc::Unknown;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace MG_Util
|
||||
} // namespace MobileGL
|
||||
@@ -9,5 +9,10 @@ namespace MobileGL {
|
||||
TextureInternalFormat ConvertGLEnumToTextureInternalFormat(GLenum internalformat);
|
||||
TexturePixelDataType ConvertGLEnumToTexturePixelDataType(GLenum type);
|
||||
TextureUploadTarget ConvertGLEnumToTextureUploadTarget(GLenum target);
|
||||
SamplerFilterMode ConvertGLEnumToSamplerFilterMode(GLenum value);
|
||||
SamplerMipmapMode ConvertGLEnumToSamplerMipmapMode(GLenum value);
|
||||
SamplerWrapMode ConvertGLEnumToSamplerWrapMode(GLenum value);
|
||||
SamplerCompareMode ConvertGLEnumToSamplerCompareMode(GLenum value);
|
||||
SamplerCompareFunc ConvertGLEnumToSamplerCompareFunc(GLenum value);
|
||||
} // namespace MG_Util
|
||||
} // namespace MobileGL
|
||||
@@ -25,8 +25,6 @@ namespace MobileGL {
|
||||
return GL_DEPTH_ATTACHMENT;
|
||||
case FramebufferAttachmentType::Stencil:
|
||||
return GL_STENCIL_ATTACHMENT;
|
||||
case FramebufferAttachmentType::DepthStencil:
|
||||
return GL_DEPTH_STENCIL_ATTACHMENT;
|
||||
default:
|
||||
return GL_COLOR_ATTACHMENT0;
|
||||
}
|
||||
|
||||
@@ -305,5 +305,76 @@ namespace MobileGL {
|
||||
}
|
||||
}
|
||||
|
||||
GLenum ConvertSamplerFilterModeToGLEnum(SamplerFilterMode v) {
|
||||
switch (v) {
|
||||
case SamplerFilterMode::Nearest:
|
||||
return GL_NEAREST;
|
||||
case SamplerFilterMode::Linear:
|
||||
return GL_LINEAR;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
GLenum ConvertSamplerMipmapModeToGLEnum(SamplerMipmapMode v) {
|
||||
switch (v) {
|
||||
case SamplerMipmapMode::None:
|
||||
return 0;
|
||||
case SamplerMipmapMode::Nearest:
|
||||
return GL_NEAREST_MIPMAP_NEAREST;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
GLenum ConvertSamplerWrapModeToGLEnum(SamplerWrapMode v) {
|
||||
switch (v) {
|
||||
case SamplerWrapMode::ClampToEdge:
|
||||
return GL_CLAMP_TO_EDGE;
|
||||
case SamplerWrapMode::MirroredRepeat:
|
||||
return GL_MIRRORED_REPEAT;
|
||||
case SamplerWrapMode::Repeat:
|
||||
return GL_REPEAT;
|
||||
case SamplerWrapMode::ClampToBorder:
|
||||
return GL_CLAMP_TO_BORDER;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
GLenum ConvertSamplerCompareModeToGLEnum(SamplerCompareMode v) {
|
||||
switch (v) {
|
||||
case SamplerCompareMode::None:
|
||||
return 0;
|
||||
case SamplerCompareMode::CompareToTexture:
|
||||
return GL_COMPARE_REF_TO_TEXTURE;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
GLenum ConvertSamplerCompareFuncToGLEnum(SamplerCompareFunc v) {
|
||||
switch (v) {
|
||||
case SamplerCompareFunc::Never:
|
||||
return GL_NEVER;
|
||||
case SamplerCompareFunc::Less:
|
||||
return GL_LESS;
|
||||
case SamplerCompareFunc::Equal:
|
||||
return GL_EQUAL;
|
||||
case SamplerCompareFunc::LessEqual:
|
||||
return GL_LEQUAL;
|
||||
case SamplerCompareFunc::Greater:
|
||||
return GL_GREATER;
|
||||
case SamplerCompareFunc::NotEqual:
|
||||
return GL_NOTEQUAL;
|
||||
case SamplerCompareFunc::GreaterEqual:
|
||||
return GL_GEQUAL;
|
||||
case SamplerCompareFunc::Always:
|
||||
return GL_ALWAYS;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace MG_Util
|
||||
} // namespace MobileGL
|
||||
@@ -9,5 +9,10 @@ namespace MobileGL {
|
||||
GLenum ConvertTextureInternalFormatToGLEnum(TextureInternalFormat internalformat);
|
||||
GLenum ConvertTexturePixelDataTypeToGLEnum(TexturePixelDataType type);
|
||||
GLenum ConvertTextureUploadTargetToGLEnum(TextureUploadTarget target);
|
||||
GLenum ConvertSamplerFilterModeToGLEnum(SamplerFilterMode value);
|
||||
GLenum ConvertSamplerMipmapModeToGLEnum(SamplerMipmapMode value);
|
||||
GLenum ConvertSamplerWrapModeToGLEnum(SamplerWrapMode value);
|
||||
GLenum ConvertSamplerCompareModeToGLEnum(SamplerCompareMode value);
|
||||
GLenum ConvertSamplerCompareFuncToGLEnum(SamplerCompareFunc value);
|
||||
} // namespace MG_Util
|
||||
} // namespace MobileGL
|
||||
@@ -25,8 +25,6 @@ namespace MobileGL {
|
||||
return "Depth";
|
||||
case FramebufferAttachmentType::Stencil:
|
||||
return "Stencil";
|
||||
case FramebufferAttachmentType::DepthStencil:
|
||||
return "DepthStencil";
|
||||
case FramebufferAttachmentType::Unknown:
|
||||
default:
|
||||
return "Unknown";
|
||||
|
||||
@@ -300,5 +300,76 @@ namespace MobileGL {
|
||||
return "Unknown";
|
||||
}
|
||||
}
|
||||
|
||||
String ConvertSamplerFilterModeToString(SamplerFilterMode v) {
|
||||
switch (v) {
|
||||
case SamplerFilterMode::Nearest:
|
||||
return "Nearest";
|
||||
case SamplerFilterMode::Linear:
|
||||
return "Linear";
|
||||
default:
|
||||
return "Unknown";
|
||||
}
|
||||
}
|
||||
|
||||
String ConvertSamplerMipmapModeToString(SamplerMipmapMode v) {
|
||||
switch (v) {
|
||||
case SamplerMipmapMode::None:
|
||||
return "None";
|
||||
case SamplerMipmapMode::Nearest:
|
||||
return "Nearest";
|
||||
default:
|
||||
return "Unknown";
|
||||
}
|
||||
}
|
||||
|
||||
String ConvertSamplerWrapModeToString(SamplerWrapMode v) {
|
||||
switch (v) {
|
||||
case SamplerWrapMode::ClampToEdge:
|
||||
return "ClampToEdge";
|
||||
case SamplerWrapMode::MirroredRepeat:
|
||||
return "MirroredRepeat";
|
||||
case SamplerWrapMode::Repeat:
|
||||
return "Repeat";
|
||||
case SamplerWrapMode::ClampToBorder:
|
||||
return "ClampToBorder";
|
||||
default:
|
||||
return "Unknown";
|
||||
}
|
||||
}
|
||||
|
||||
String ConvertSamplerCompareModeToString(SamplerCompareMode v) {
|
||||
switch (v) {
|
||||
case SamplerCompareMode::None:
|
||||
return "None";
|
||||
case SamplerCompareMode::CompareToTexture:
|
||||
return "CompareToTexture";
|
||||
default:
|
||||
return "Unknown";
|
||||
}
|
||||
}
|
||||
|
||||
String ConvertSamplerCompareFuncToString(SamplerCompareFunc v) {
|
||||
switch (v) {
|
||||
case SamplerCompareFunc::Never:
|
||||
return "Never";
|
||||
case SamplerCompareFunc::Less:
|
||||
return "Less";
|
||||
case SamplerCompareFunc::Equal:
|
||||
return "Equal";
|
||||
case SamplerCompareFunc::LessEqual:
|
||||
return "LessEqual";
|
||||
case SamplerCompareFunc::Greater:
|
||||
return "Greater";
|
||||
case SamplerCompareFunc::NotEqual:
|
||||
return "NotEqual";
|
||||
case SamplerCompareFunc::GreaterEqual:
|
||||
return "GreaterEqual";
|
||||
case SamplerCompareFunc::Always:
|
||||
return "Always";
|
||||
default:
|
||||
return "Unknown";
|
||||
}
|
||||
}
|
||||
} // namespace MG_Util
|
||||
} // namespace MobileGL
|
||||
@@ -9,5 +9,10 @@ namespace MobileGL {
|
||||
String ConvertTextureInternalFormatToString(TextureInternalFormat internalformat);
|
||||
String ConvertTexturePixelDataTypeToString(TexturePixelDataType type);
|
||||
String ConvertTextureUploadTargetToString(TextureUploadTarget target);
|
||||
String ConvertSamplerFilterModeToString(SamplerFilterMode value);
|
||||
String ConvertSamplerMipmapModeToString(SamplerMipmapMode value);
|
||||
String ConvertSamplerWrapModeToString(SamplerWrapMode value);
|
||||
String ConvertSamplerCompareModeToString(SamplerCompareMode value);
|
||||
String ConvertSamplerCompareFuncToString(SamplerCompareFunc value);
|
||||
} // namespace MG_Util
|
||||
} // namespace MobileGL
|
||||
@@ -61,6 +61,28 @@ namespace MobileGL {
|
||||
m_active_count--;
|
||||
}
|
||||
|
||||
bool Insert(IndexType index) noexcept {
|
||||
if (IsValid(index)) return false;
|
||||
|
||||
if (index >= m_valid_bits.size()) {
|
||||
m_valid_bits.resize(index + 1, false);
|
||||
}
|
||||
|
||||
auto it = std::find(m_free_list.begin(), m_free_list.end(), index);
|
||||
if (it != m_free_list.end()) {
|
||||
m_free_list.erase(it);
|
||||
}
|
||||
|
||||
m_valid_bits[index] = true;
|
||||
m_active_count++;
|
||||
|
||||
if (index >= m_next_index) {
|
||||
m_next_index = index + 1;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IsValid(IndexType index) const noexcept { return index < m_valid_bits.size() && m_valid_bits[index]; }
|
||||
|
||||
SizeT FreeListSize() const noexcept { return m_free_list.size(); }
|
||||
@@ -74,5 +96,4 @@ namespace MobileGL {
|
||||
std::vector<IndexType> m_free_list;
|
||||
std::vector<bool> m_valid_bits;
|
||||
};
|
||||
|
||||
} // namespace MobileGL
|
||||
@@ -132,7 +132,7 @@ namespace MobileGL {
|
||||
tshader->setStrings(src, 1);
|
||||
tshader->setInvertY(true);
|
||||
if (attrib.flags & ShaderCompileBits::CompileForOpenGL) {
|
||||
tshader->setEnvInput(glslang::EShSourceGlsl, lang, glslang::EShClientOpenGL, 450);
|
||||
tshader->setEnvInput(glslang::EShSourceGlsl, lang, glslang::EShClientVulkan, 450);
|
||||
tshader->setEnvClient(glslang::EShClientOpenGL, glslang::EShTargetOpenGL_450);
|
||||
tshader->setEnvTarget(glslang::EShTargetSpv, glslang::EShTargetSpv_1_5);
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user