Interprex

Technik

Was unter der Oberfläche passiert

Vierzehn Kapitel zum Nachschlagen: welche Schicht welche Aufgabe hat, woraus Interprex seine Entscheidungen ableitet, und wo die Grenzen des Verfahrens liegen.

Grundlage
Wine · D3DMetal · Rosetta 2
Stand
28. Juli 2026
Kürzer
Hilfe & Fehlerbehebung

Aufbau

Interprex ist eine native SwiftUI-Anwendung für macOS. Sie erfindet nichts neu, sondern richtet bewährte freie Software so ein, dass sie ohne Handarbeit funktioniert:

SchichtWasWoher
OberflächeInterprex (SwiftUI, arm64, Hardened Runtime)dieses Projekt
Windows-SchnittstellenWine (CrossOver-Zweig)winecx-dist, aus CodeWeavers-Quellen
DirectX → Metalwined3d ab Werk, optional D3DMetalWine bzw. Apple GPTK
x86 → ARMRosetta 2macOS
SpieleplattformSteam-Client für WindowsValve, zur Laufzeit geladen

Wine ist kein Emulator

Ein Emulator ahmt fremde Hardware nach. Wine tut etwas anderes: Es implementiert die Windows-Schnittstellen neu. Ruft ein Spiel eine Windows-Funktion auf, landet der Aufruf bei Wines eigener Umsetzung, die ihn auf macOS-Aufrufe abbildet.

Daraus folgt zweierlei: Du brauchst keine Windows-Lizenz, und es gibt keinen Emulations-Aufschlag auf jede Instruktion. Wine steht unter der LGPL 2.1; Interprex liefert es unverändert aus. Quellen und Lizenztexte stehen unter Lizenzen.

DirectX auf Metal

Zwei Wege, die Interprex unterstützt:

wined3d (ab Werk)D3DMetal (optional)
HerkunftTeil von WineApple Game Porting Toolkit
WegDirectX → OpenGL → MetalDirectX → Metal direkt
Geschwindigkeitläuft überall, deutlich langsamererheblich schneller, besonders DirectX 12
Mitgeliefertjanein — Evaluierungslizenz, Eigenimport nötig

DXVK ist keine Alternative, auch wenn es unter Linux der Standardweg ist. Getestet mit DXVK 3.0.2 und dem macOS-Zweig 1.10.3: Beide scheitern schon bei der Geräteerstellung mit Device does not support required feature 'geometryShader'. Metal hat keine Geometry-Shader-Stufe, MoltenVK kann sie deshalb nicht melden, und DirectX verlangt sie ab Feature-Level 10_0. Das ist keine Konfigurationsfrage.

Wie Interprex den Übersetzer wählt

Die folgenreichste Entscheidung bei einem Spielstart ist, welche DirectX-Fassung benutzt wird. DirectX 12 gibt dem Übersetzer vorbereitete Befehlslisten und feste Ressourcenbindungen; das lässt sich fast direkt auf Metal abbilden und über mehrere Kerne verteilen. DirectX 11 verlangt dagegen einen Treiber, der Zustände nachverfolgt und Ressourcen zur Laufzeit auflöst — und das läuft im Wesentlichen auf einem Kern.

Trotzdem ist „immer 12“ falsch, und der Grund liegt nicht in der API: Viele Engines liefern ihren DirectX-12-Pfad ungetestet aus. Interprex entscheidet deshalb nach Engine, nicht nach API-Verfügbarkeit — und liest die Engine aus den Dateien des Spiels, statt sie am Ordnernamen zu raten. Dafür wird die Importtabelle der Programmdatei ausgelesen (was fest gebunden ist) und ihr Datenbestand durchsucht (was zur Laufzeit geladen wird).

EngineGewähltWarum
Unreal Engine 5DirectX 12Nanite und Lumen brauchen Shader-Modell 6; der DirectX-11-Pfad wird meist nicht mehr mitgeliefert
Unreal Engine 4DirectX 11gepflegt und erprobt; DirectX 12 im Profil „Experimentell“, wenn die CPU limitiert
UnityDirectX 11Unitys DirectX-12-Backend ist bis heute als experimentell ausgewiesen
id Tech 6/7Vulkanhat keinen DirectX-Pfad — läuft über MoltenVK
SourceDirectX 9keine Wahl; D3DMetal deckt erst ab DirectX 10 ab, deshalb Wines eigener Weg

Erkannt werden außerdem die Startdatei (bei Unreal die Shipping-Datei, die die VC++-Abfrage des Launchers überspringt), passende Startargumente und der Anti-Cheat, falls einer dabei ist. Was Interprex für ein Spiel entschieden hat, steht in der App unter dem Schieberegler an der Spielkachel — mit Begründung, und jede Zeile ist überschreibbar.

DLSS wird zu MetalFX

Apples D3DMetal enthält eine vollständige Brücke zu NVIDIAs NGX-Schnittstelle. Ruft ein Spiel DLSS auf, landet der Aufruf auf Apples MetalFX:

Das Spiel fragt nachInterprex liefert
DLSS Super ResolutionMetalFX-Upscaling
DLSS Frame GenerationMetalFX-Zwischenbilder
DLSS Ray ReconstructionMetalFX-Entrauschen

Es gibt dabei eine Hürde: Spiele schalten ihre DLSS-Optionen anhand des Grafikkarten-Herstellers frei. Wer keine NVIDIA-Karte findet, zeigt das Menü gar nicht an — und damit bleibt genau der Weg verschlossen, der auf einem Mac am meisten bringt. Interprex meldet deshalb eine GeForce RTX, aber nur, wenn das Spiel die DLSS-Bibliotheken tatsächlich mitbringt und die Übersetzung über D3DMetal läuft. Ohne diese Bedingungen wäre die Angabe eine Lüge ohne Gegenwert, und jede Lüge gegenüber dem Spiel ist ein Risiko.

Warum 60 Bilder flüssiger sein können als 100

Ein Bildschirm zeigt neue Bilder nur zu festen Zeitpunkten. Ein 120-Hz-Panel hat alle 8,33 ms ein Zeitfenster. Liefert das Spiel 100 Bilder pro Sekunde, ist jedes Bild 10 ms alt — und weil 10 nicht in 8,33 passt, wird ein Bild ein Fenster lang gehalten und das nächste zwei. Bei genau 60 Bildern (= 120 ÷ 2) trifft jedes Bild zwei Fenster, immer.

60 wirkt also flüssiger als 100. Das ist keine Geschmacksfrage, sondern Arithmetik. Deshalb rastet der Bildraten-Schieberegler in Interprex auf die echten Teiler der Bildwiederholrate ein und zeigt sie unter der Bahn an; und deshalb wählen die Energiemodi ihren Deckel aus dieser Leiter statt eine runde Zahl zu rechnen.

BildschirmGleichmäßige Bildraten
60 Hz30, 60
120 Hz24, 30, 40, 60, 120
144 Hz24, 36, 48, 72, 144
240 Hz24, 30, 40, 48, 60, 80, 120, 240

Stellt man einen Wert ein, der nicht dazugehört, bekommt man ihn — mit dem Hinweis, dass er nicht in den Takt passt, und den beiden nächsten Werten, die es täten. Über mehrere Sitzungen lernt Interprex zusätzlich, welchen Deckel ein Spiel auf diesem Mac wirklich hält: Läuft die Grafikeinheit in mehr als einem Fünftel der Zeit am Anschlag, geht der Deckel beim nächsten Start eine Stufe herunter; bleibt durchgehend Luft, eine Stufe herauf.

Was ein Deckel an Laufzeit bringt

Interprex liest die tatsächliche Leistungsaufnahme des Geräts aus — in Watt, im Sekundentakt, ohne Administratorrechte. Daraus und aus dem Verbrauch ohne Spiel ergibt sich, was ein Bildratendeckel bringt: Der Verbrauch zerfällt in einen festen Anteil (Bildschirm, Speicher, Systemgrundlast) und einen bildabhängigen. Halbiert man die Bildrate, halbiert sich nur der zweite Teil.

Die halbe Bildrate ist deshalb nicht die doppelte Laufzeit — und genau das erwarten die meisten. Die App zeigt die Reichweite je Bildrate als Balken, gerechnet aus gemessenen Werten dieses Spiels auf diesem Gerät, nicht aus einer Faustregel.

Warum die Bildrate niedriger ist als unter Windows

Der Spielcode selbst ist für x86-Prozessoren übersetzt und läuft über Rosetta 2 auf dem ARM-Chip. Diese Übersetzung kostet Rechenzeit auf der CPU — und bei vielen Spielen liegt dort der Flaschenhals, nicht bei der Grafik.

Das ist der Grund, warum Interprex eine Leistungsanzeige mit Flaschenhals-Einschätzung hat statt eines bloßen Bildratenzählers. Die beiden Fälle verlangen genau entgegengesetzte Maßnahmen:

MessungHeißtWas hilft
GPU über 85 %GrafikgrenzeAuflösung senken, Upscaling an, Schatten reduzieren
GPU unter 60 %, mehrere Kerne ausgelastetCPU-/Rosetta-GrenzeSichtweite, Physik und Objektdichte senken — Auflösung bringt nichts

Deshalb kann ein Spiel bei niedrigerer Auflösung gleich langsam bleiben: Wenn die CPU limitiert, ändert weniger Auflösung schlicht nichts.

Energiemodi

Interprex setzt Bildratengrenze, Texturspeicher und Upscaling aus dem gewählten Modus — aber der Systemzustand überstimmt den Wunsch:

  • Stromsparmodus des Systems an → effizient
  • Wärmezustand kritisch → effizient
  • Wärmezustand ernst und Modus „Volle Leistung“ → ausgewogen
  • Akku unter 20 % → effizient
Diese Werte sind Umgebungsvariablen, die beim Prozessstart gelesen werden. Ein Wechsel der Stromquelle mitten im Spiel wirkt deshalb erst beim nächsten Start. Interprex verspricht keine Live-Anpassung, weil es sie technisch nicht geben kann.

Der Eingriff in den Steam-Client

Steams Oberfläche ist ein eingebauter Chromium-Browser. Dessen Zeichenprozess läuft in einem eigenen Prozess und malt von dort in das Fenster des Hauptprozesses. Unter Wine geht das nicht: Ein Prozess kann nicht in das Fenster eines anderen Prozesses zeichnen. Alle Aufrufe melden Erfolg, die Pixel kommen nie an — das Fenster bleibt schwarz.

Interprex löst das, indem es dem Hilfsprogramm steamwebhelper.exe ein kleines Startprogramm voranstellt, das den Schalter --in-process-gpu setzt. Die Originaldatei bleibt daneben liegen und wird bei Bedarf automatisch zurückgespielt.

Das ist eine lokale Veränderung von Steam-Dateien. Sie bleibt auf deinem Gerät, dient allein der Darstellung und ist über „Steam neu aufsetzen“ rückgängig zu machen — kann aber je nach Auslegung der Steam-Nutzungsvereinbarung als Veränderung des Clients gelten. Deshalb steht sie ausdrücklich in Abschnitt 4 der Nutzungsbedingungen, damit du selbst entscheiden kannst.

Warum Anti-Cheat nicht geht

Easy Anti-Cheat und BattlEye laden im Kernelmodus einen Windows-Treiber, um das laufende System zu überwachen. Wine implementiert Windows-Schnittstellen im Benutzermodus — es gibt keinen Windows-Kernel, in den sich ein solcher Treiber laden ließe.

Das lässt sich nicht durch Einstellungen, eine andere Wine-Fassung oder eine neuere macOS-Version umgehen. Selbst wenn es technisch ginge, würden die Hersteller es als Umgehungsversuch werten. Prüfe vor dem Kauf auf ProtonDB, ob ein Titel außerhalb von Windows läuft — die Linux-Bewertungen gelten sinngemäß.

Wo Interprex was ablegt

PfadInhalt
~/Library/Application Support/Interprex/WineCXDie Wine-Installation. Austauschbar gegen eine eigene Fassung.
~/Library/Application Support/Interprex/BottlesDie Windows-Umgebungen samt Steam und Spielen.
~/Library/Application Support/Interprex/LogsEin Protokoll je Vorgang. Grundlage jeder Supportanfrage.
~/Library/Preferences/com.hnbdev.Interprex.plistEinstellungen, Zustimmungen, Unterstützer-Schlüssel.

Welche Verbindungen Interprex aufbaut

ZielWannWozu
github.comErsteinrichtungWine herunterladen
cdn.akamai.steamstatic.comErsteinrichtungSteam-Installationsprogramm
interprex.de/appcast.jsonhöchstens täglichAktualisierungsprüfung (abschaltbar)
interprex.de/sponsors.jsonhöchstens täglichAnzeigenkarte (abschaltbar)
interprex.de/api/pingnur mit Einwilligunganonyme Nutzungsstatistik (Standard: aus)
interprex.de/config.jsonhöchstens alle 6 StundenBezugsquellen und Hinweise (siehe unten)
cdn.cloudflare.steamstatic.comeinmal je SpielTitelbild für die Bibliothek (abschaltbar)

Mehr nicht. Kein Werbenetzwerk, keine Gerätekennung, kein Zählpixel — Einzelheiten in der Datenschutzerklärung. Vor deiner Zustimmung beim ersten Start baut Interprex keine dieser Verbindungen auf.

Warum die App eine Konfigurationsdatei lädt

Interprex hängt an Dingen, die anderen gehören: Wine-Fassungen auf GitHub, Steams Installationsprogramm, Bildadressen bei Valve. Zieht eine davon um oder geht kaputt, ist die App bei allen unbrauchbar — und ein Notfall-Release braucht Bauen, Signieren, Notarisieren und dann noch die Zeit, bis Leute es installieren.

Deshalb liest Interprex config.json von interprex.de: Dort stehen die Bezugsquellen, Schalter für einzelne Bereiche und ein Feld für einen Hinweis in der App. Damit daraus kein Weg wird, beliebigen Code nachzuladen, gelten drei Regeln, die im Programm stehen und nicht in der Datei:

  • Jede Adresse muss HTTPS sein.
  • Download-Adressen müssen aus einer fest einkompilierten Liste von Hosts stammen. Die Datei kann diese Liste nicht erweitern.
  • Was die Prüfung nicht besteht, wird verworfen; es gilt der eingebaute Wert.

Ohne Netzverbindung, ohne Datei oder bei fehlerhaftem Inhalt ändert sich schlicht nichts — die App ist ohne diese Datei vollständig funktionsfähig. Das ist die Bedingung, unter der so ein Mechanismus überhaupt vertretbar ist.

Diagnosebericht

Unter Diagnose → Technische Details steht alles, was für eine Supportanfrage nötig ist: Chip, Kerne, Arbeitsspeicher, macOS-Fassung, Grafikübersetzung, Energiemodus und Pfade. Ein Knopf kopiert das als Text.

Diagnosebereich mit Systemprüfung und der Liste der Fehlerbehebungen
Die Systemprüfung sagt nicht nur, was fehlt, sondern bietet den passenden Schritt gleich an.

Schick den Bericht zusammen mit dem Protokoll und dem Namen des Spiels an info@hnbdev.com.

Anzeige
Werbeplatz — erscheint nach deiner Einwilligung.