Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

07.07.2013, 15:40

SFML BlendMode Mod

Hiho!
Ich wollte zu meiner SFML-Version mal den sf::BlendMode::BlendSub hinzufügen. Da ich mir äußerst unsicher mit meiner Version bin und kompilieren nervig werden kann, wollte ich mal nachfragen.
Hier ein Beispiel von seinem Code zur Umsetzung des sf::BlendMode::BlendAdd

C-/C++-Quelltext

1
2
3
4
5
6
7
// Additive blending
case BlendAdd :
    if (GLEW_EXT_blend_func_separate)
        glCheck(glBlendFuncSeparateEXT(GL_SRC_ALPHA, GL_ONE, GL_ONE, GL_ONE));
    else
        glCheck(glBlendFunc(GL_SRC_ALPHA, GL_ONE));
    break;

Mein Ansatz ist der folgende:

C-/C++-Quelltext

1
2
3
4
5
6
7
// Subtractive blending
case BlendSub :
    if (GLEW_EXT_blend_func_seperate)
        glCheck(glBlendFuncSeparateEXT(GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE, GL_ONE));
    else
        glCheck(glBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_ONE));
    break;

Kann man das so "einfach" machen bzw hat das meinen gewünschten Effekt? Ich könnts ja einfach testen, aber für jede kleine Änderung neu kompilieren und das Zeug herumkopieren und verschieben nervt eben. Da ist bequemes herumprobieren schwer möglich, zumindest in dem Kontext. Soll man wohl in den Einstellungen ändern können, muss ich auch mal gucken... Egal.
Wär kuhl wenn mir jemand unter die Arme greifen könnte! :)

MfG
Check

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

2

07.07.2013, 16:43

Ich glaube, du hast da einen Denkfehler.
Echtes subtraktives Blending ist mit dieser OpenGL-Funktion unmöglich.
GL_ONE_MINUS_SRC_ALPHA heißt, der Alpha Wert wird invertiert.
Das bedeutet aber noch lange nicht, dass irgendwo beim Verrechnen der RGB Komponenten eine Subtraktion stattfindet.
Schau mal hier:
http://wiki.delphigl.com/index.php/glBlendFunc

Um das umzusetzen, was du willst, brauchst du eine andere OpenGL-Funktion:
http://wiki.delphigl.com/index.php/glBlendEquation

Wie du das allerdings am Besten in SFML einbaust, kann ich dir nicht sagen.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Spiele Programmierer« (07.07.2013, 16:49)


3

09.07.2013, 13:27

Kann mir das irgendwer sagen? ;(
Reicht es glBendEquation aufzurufen oder müssen noch andere Calls stattfinden?

MfG
Check

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

4

09.07.2013, 14:15

Ich hab doch schon alles geschrieben.
Fertiglösung:

C-/C++-Quelltext

1
2
glBlendEquation(GL_FUNC_REVERSE_SUBTRACT);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);


In allen anderen Blending Modes in SFML darfst du aber nicht vergessen, "glBlendEquation" wieder auf "GL_FUNC_ADD" zurückzusetzen und du musst vorher überprüfen ob "glBlendEquation" evt. auch noch an anderer Stelle in SFML aufgerufen wird, was deine Einstellungen dann wieder verstellt.
Ich kenne den SFML Code aber nicht. Es kann auch sein dass das Einstellen der "BlendEquation" an anderer Stelle stattfinden muss/soll.

Werbeanzeige