[Improvement] (MG_Backend/DirectGLES): Add cache for swizzle params.

This commit is contained in:
BZLZHH
2025-11-29 01:35:58 +08:00
parent 32c062d019
commit 7a30c56b13
+19 -29
View File
@@ -415,36 +415,26 @@ namespace MobileGL::MG_Backend::DirectGLES {
errorLopper.Loop([file = __FILE__, line = __LINE__, func = __func__](GLenum err) { errorLopper.Loop([file = __FILE__, line = __LINE__, func = __func__](GLenum err) {
MGLOG_D("%s(%s:%d) ES error %s", func, file, line, MG_Util::ConvertGLEnumToString(err).c_str()); MGLOG_D("%s(%s:%d) ES error %s", func, file, line, MG_Util::ConvertGLEnumToString(err).c_str());
}); });
GLenum swizzleParams[4] = {MG_Util::ConvertTextureSwizzleParamToGLEnum(
stateTextureObject->GetSwizzleParam(TextureSwizzleParam::Red)), const auto& swizzleParams = stateTextureObject->GetAllSwizzleParams();
MG_Util::ConvertTextureSwizzleParamToGLEnum( if (swizzleParams != m_cacheSwizzleParams) {
stateTextureObject->GetSwizzleParam(TextureSwizzleParam::Green)), #define SYNC_TEX_SWIZZLE_PARAM_IF_CHANGED(func, glEnum) \
MG_Util::ConvertTextureSwizzleParamToGLEnum( if (m_cacheSwizzleParams.func != swizzleParams.func) { \
stateTextureObject->GetSwizzleParam(TextureSwizzleParam::Blue)), BIND_CURRENT_TEXTURE_IF_NOT_BOUND(); \
MG_Util::ConvertTextureSwizzleParamToGLEnum( MG_External::GLES::glTexParameteri(targetGL, glEnum, \
stateTextureObject->GetSwizzleParam(TextureSwizzleParam::Alpha))}; MG_Util::ConvertTextureSwizzleParamToGLEnum(swizzleParams.func)); \
MG_External::GLES::glTexParameteri(target, GL_TEXTURE_SWIZZLE_R, m_cacheSwizzleParams.func = swizzleParams.func; \
MG_Util::ConvertTextureSwizzleParamToGLEnum( }
stateTextureObject->GetSwizzleParam(TextureSwizzleParam::Red))); SYNC_TEX_SWIZZLE_PARAM_IF_CHANGED(r(), GL_TEXTURE_SWIZZLE_R)
MG_External::GLES::glTexParameteri( SYNC_TEX_SWIZZLE_PARAM_IF_CHANGED(g(), GL_TEXTURE_SWIZZLE_G)
target, GL_TEXTURE_SWIZZLE_G, SYNC_TEX_SWIZZLE_PARAM_IF_CHANGED(b(), GL_TEXTURE_SWIZZLE_B)
MG_Util::ConvertTextureSwizzleParamToGLEnum( SYNC_TEX_SWIZZLE_PARAM_IF_CHANGED(a(), GL_TEXTURE_SWIZZLE_A)
stateTextureObject->GetSwizzleParam(TextureSwizzleParam::Green))); #undef SYNC_TEX_SWIZZLE_PARAM_IF_CHANGED
MG_External::GLES::glTexParameteri(target, GL_TEXTURE_SWIZZLE_B, m_cacheSwizzleParams = swizzleParams;
MG_Util::ConvertTextureSwizzleParamToGLEnum( errorLopper.Loop([file = __FILE__, line = __LINE__, func = __func__](GLenum err) {
stateTextureObject->GetSwizzleParam(TextureSwizzleParam::Blue))); MGLOG_D("%s(%s:%d) ES error %s", func, file, line, MG_Util::ConvertGLEnumToString(err).c_str());
MG_External::GLES::glTexParameteri(
target, GL_TEXTURE_SWIZZLE_A,
MG_Util::ConvertTextureSwizzleParamToGLEnum(
stateTextureObject->GetSwizzleParam(TextureSwizzleParam::Alpha)));
errorLopper.Loop([file = __FILE__, line = __LINE__, func = __func__, swizzleParams](GLenum err) {
MGLOG_D("%s(%s:%d) ES error %s, GL_TEXTURE_SWIZZLE_RGBA: [%s %s %s %s]", func, file, line,
MG_Util::ConvertGLEnumToString(err).c_str(),
MG_Util::ConvertGLEnumToString(swizzleParams[0]).c_str(),
MG_Util::ConvertGLEnumToString(swizzleParams[1]).c_str(),
MG_Util::ConvertGLEnumToString(swizzleParams[2]).c_str(),
MG_Util::ConvertGLEnumToString(swizzleParams[3]).c_str());
}); });
}
if (m_cacheBorderColor != stateTextureObject->GetBorderColor()) { if (m_cacheBorderColor != stateTextureObject->GetBorderColor()) {
const auto& borderColor = stateTextureObject->GetBorderColor(); const auto& borderColor = stateTextureObject->GetBorderColor();