Scissor-Test Bug in GUIRenderer #34

Closed
opened 2026-04-17 04:46:47 +00:00 by sebastian · 0 comments
Owner

Problem: Der Scissor-Test wird in GUIRenderer::render() aktiviert und direkt danach wieder deaktiviert – noch bevor glDrawArrays() aufgerufen wird. UI-Clipping funktioniert damit überhaupt nicht.

// GUIRenderer.cpp – aktuell:
glEnable(GL_SCISSOR_TEST);
glScissor(r.x, r.y, r.w, r.h);
glDisable(GL_SCISSOR_TEST);  // ← Scissor schon aus
// ...
glDrawArrays(...);             // ← Scissor ist inaktiv

Lösung:

// GUIRenderer.cpp – korrekt:
glEnable(GL_SCISSOR_TEST);
const auto& r = texture->getClipRect();
glScissor(r.x, r.y, r.w, r.h);

glDrawArrays(GL_TRIANGLE_STRIP, 0, rawModel->vertexCount);  // Scissor aktiv!

glDisable(GL_SCISSOR_TEST);   // ← erst nach dem Draw deaktivieren

Nebenhinweis: GUITexture::getClipRect() sollte standardmäßig den vollen Bildschirm zurückgeben ({0, 0, screenW, screenH}) damit UI-Elemente ohne explizites ClipRect nicht beschnitten werden.
Acceptance Criteria:

  • UI-Elemente die über ihren Container hinausgehen werden korrekt abgeschnitten
  • UI-Elemente ohne ClipRect werden vollständig gerendert
  • Manueller Test: UI-Text der über einen Panel-Rand geht wird abgeschnitten
Problem: Der Scissor-Test wird in GUIRenderer::render() aktiviert und direkt danach wieder deaktiviert – noch bevor glDrawArrays() aufgerufen wird. UI-Clipping funktioniert damit überhaupt nicht. ``` // GUIRenderer.cpp – aktuell: glEnable(GL_SCISSOR_TEST); glScissor(r.x, r.y, r.w, r.h); glDisable(GL_SCISSOR_TEST); // ← Scissor schon aus // ... glDrawArrays(...); // ← Scissor ist inaktiv ``` Lösung: ``` // GUIRenderer.cpp – korrekt: glEnable(GL_SCISSOR_TEST); const auto& r = texture->getClipRect(); glScissor(r.x, r.y, r.w, r.h); glDrawArrays(GL_TRIANGLE_STRIP, 0, rawModel->vertexCount); // Scissor aktiv! glDisable(GL_SCISSOR_TEST); // ← erst nach dem Draw deaktivieren ``` Nebenhinweis: GUITexture::getClipRect() sollte standardmäßig den vollen Bildschirm zurückgeben ({0, 0, screenW, screenH}) damit UI-Elemente ohne explizites ClipRect nicht beschnitten werden. Acceptance Criteria: - UI-Elemente die über ihren Container hinausgehen werden korrekt abgeschnitten - UI-Elemente ohne ClipRect werden vollständig gerendert - Manueller Test: UI-Text der über einen Panel-Rand geht wird abgeschnitten
sebastian added this to the RenderSystem Refactoring milestone 2026-04-17 04:46:47 +00:00
sebastian added the
bug
engine
labels 2026-04-17 04:46:47 +00:00
sebastian added this to the Dicewars project 2026-04-17 04:46:47 +00:00
Sign in to join this conversation.
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: sebastian/Dicewars-Siedler#34
No description provided.