Files

65 lines
2.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 软件渲染选项
from PySide2.QtGui import QGuiApplication, QOpenGLContext
from PySide2.QtCore import Qt
import os
from umi_log import logger
from . import pre_configs
from ..platform import Platform
_GLDict = {
"AA_UseDesktopOpenGL": Qt.AA_UseDesktopOpenGL,
"AA_UseOpenGLES": Qt.AA_UseOpenGLES,
"AA_UseSoftwareOpenGL": Qt.AA_UseSoftwareOpenGL,
}
_Opt = ""
def initOpengl():
global _Opt
opt = getOpengl()
if opt not in _GLDict:
opt = Platform.getOpenGLUse()
setOpengl(opt)
QGuiApplication.setAttribute(_GLDict[opt], True)
_Opt = opt
def checkOpengl():
global _Opt
if _Opt == "AA_UseOpenGLES": # GLES需要检查有些win7不支持
if not QOpenGLContext.openGLModuleType() == QOpenGLContext.LibGLES:
QGuiApplication.setAttribute(Qt.AA_UseOpenGLES, False)
_Opt = "AA_UseSoftwareOpenGL" # 既然不支持opengl那就软渲染吧
setOpengl(_Opt)
msg = "当前系统不支持OpenGLES已禁用此渲染器。\n若本次运行中程序崩溃或报错,请重新启动程序。\n\n"
msg += "The current system does not support OpenGLES and has disabled the program from using this renderer. \nIf there are crashes or errors during this run, please restarting the program."
logger.warning(msg)
os.MessageBox(msg, type_="warning")
def setOpengl(opt):
if opt not in _GLDict:
raise ValueError
pre_configs.setValue("opengl", opt)
def getOpengl():
return pre_configs.getValue("opengl")
# OpenGL渲染模式
# 启用 OpenGL 上下文之间的资源共享
# QGuiApplication.setAttribute(Qt.AA_ShareOpenGLContexts, True)
# 渲染模式,【减少窗口调整大小时内容的抖动】
# 方式一启用OpenGL软件渲染。性能最差CPU占用率大幅提升效果最好。
# QGuiApplication.setAttribute(Qt.AA_UseSoftwareOpenGL, True)
# 方式二:使用 桌面 OpenGL例如 opengl32.dll 或 libGL.so。性能最好效果较差。
# QGuiApplication.setAttribute(Qt.AA_UseDesktopOpenGL, True)
# 方式三:使用 OpenGL ES 2.0 或更高版本用d3d接口抽象成Opengl。性能和效果都很好。但兼容性很差
# 1. ColorOverlay必须开启cache否则无法渲染透明层。
# 2. 需要系统安装dx9和OpenGL3。虚拟机中可能无法使用。需要检查兼容性
# 必须做兼容性判定兼容时才启用AA_UseOpenGLES。
# QGuiApplication.setAttribute(Qt.AA_UseOpenGLES, True)