mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-03-30 13:33:42 +08:00
add library override for windows, forcing EGL/GLESv2 -> libEGL/libGELSv2
This commit is contained in:
parent
27b6f8a927
commit
c821d8ee2a
@ -35,10 +35,33 @@ def _preload_angle():
|
|||||||
_preload_angle()
|
_preload_angle()
|
||||||
os.environ.setdefault("PYOPENGL_PLATFORM", "egl")
|
os.environ.setdefault("PYOPENGL_PLATFORM", "egl")
|
||||||
|
|
||||||
|
import OpenGL
|
||||||
|
OpenGL.USE_ACCELERATE = False
|
||||||
|
|
||||||
|
|
||||||
|
def _patch_find_library():
|
||||||
|
"""On Windows, PyOpenGL's EGL platform looks for 'EGL' and 'GLESv2' by
|
||||||
|
name via ctypes.util.find_library, but ANGLE ships as 'libEGL' and
|
||||||
|
'libGLESv2'. Patch find_library to return the full ANGLE paths so
|
||||||
|
PyOpenGL loads the same DLLs we pre-loaded (same handle, no duplicates)."""
|
||||||
|
if sys.platform != "win32":
|
||||||
|
return
|
||||||
|
import ctypes.util
|
||||||
|
_orig = ctypes.util.find_library
|
||||||
|
def _patched(name):
|
||||||
|
if name == 'EGL':
|
||||||
|
return comfy_angle.get_egl_path()
|
||||||
|
if name == 'GLESv2':
|
||||||
|
return comfy_angle.get_glesv2_path()
|
||||||
|
return _orig(name)
|
||||||
|
ctypes.util.find_library = _patched
|
||||||
|
|
||||||
|
|
||||||
|
_patch_find_library()
|
||||||
|
|
||||||
from OpenGL import EGL
|
from OpenGL import EGL
|
||||||
from OpenGL import GLES3 as gl
|
from OpenGL import GLES3 as gl
|
||||||
|
|
||||||
|
|
||||||
class SizeModeInput(TypedDict):
|
class SizeModeInput(TypedDict):
|
||||||
size_mode: str
|
size_mode: str
|
||||||
width: int
|
width: int
|
||||||
@ -93,7 +116,7 @@ def _egl_attribs(*values):
|
|||||||
def _gl_str(name):
|
def _gl_str(name):
|
||||||
"""Get an OpenGL string parameter."""
|
"""Get an OpenGL string parameter."""
|
||||||
v = gl.glGetString(name)
|
v = gl.glGetString(name)
|
||||||
if v is None:
|
if not v:
|
||||||
return "Unknown"
|
return "Unknown"
|
||||||
if isinstance(v, bytes):
|
if isinstance(v, bytes):
|
||||||
return v.decode(errors="replace")
|
return v.decode(errors="replace")
|
||||||
@ -136,11 +159,8 @@ class GLContext:
|
|||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
if GLContext._initialized:
|
if GLContext._initialized:
|
||||||
logger.debug("GLContext.__init__: already initialized, skipping")
|
|
||||||
return
|
return
|
||||||
|
|
||||||
logger.debug("GLContext.__init__: starting initialization")
|
|
||||||
|
|
||||||
import time
|
import time
|
||||||
start = time.perf_counter()
|
start = time.perf_counter()
|
||||||
|
|
||||||
@ -251,8 +271,10 @@ def _compile_shader(source: str, shader_type: int) -> int:
|
|||||||
gl.glShaderSource(shader, source)
|
gl.glShaderSource(shader, source)
|
||||||
gl.glCompileShader(shader)
|
gl.glCompileShader(shader)
|
||||||
|
|
||||||
if gl.glGetShaderiv(shader, gl.GL_COMPILE_STATUS) != gl.GL_TRUE:
|
if not gl.glGetShaderiv(shader, gl.GL_COMPILE_STATUS):
|
||||||
error = gl.glGetShaderInfoLog(shader).decode()
|
error = gl.glGetShaderInfoLog(shader)
|
||||||
|
if isinstance(error, bytes):
|
||||||
|
error = error.decode(errors="replace")
|
||||||
gl.glDeleteShader(shader)
|
gl.glDeleteShader(shader)
|
||||||
raise RuntimeError(f"Shader compilation failed:\n{error}")
|
raise RuntimeError(f"Shader compilation failed:\n{error}")
|
||||||
|
|
||||||
@ -276,8 +298,10 @@ def _create_program(vertex_source: str, fragment_source: str) -> int:
|
|||||||
gl.glDeleteShader(vertex_shader)
|
gl.glDeleteShader(vertex_shader)
|
||||||
gl.glDeleteShader(fragment_shader)
|
gl.glDeleteShader(fragment_shader)
|
||||||
|
|
||||||
if gl.glGetProgramiv(program, gl.GL_LINK_STATUS) != gl.GL_TRUE:
|
if not gl.glGetProgramiv(program, gl.GL_LINK_STATUS):
|
||||||
error = gl.glGetProgramInfoLog(program).decode()
|
error = gl.glGetProgramInfoLog(program)
|
||||||
|
if isinstance(error, bytes):
|
||||||
|
error = error.decode(errors="replace")
|
||||||
gl.glDeleteProgram(program)
|
gl.glDeleteProgram(program)
|
||||||
raise RuntimeError(f"Program linking failed:\n{error}")
|
raise RuntimeError(f"Program linking failed:\n{error}")
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user