Problem mit "getblend()"

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

Equilibrium

Betreff: Problem mit "getblend()"

BeitragDi, Jan 09, 2007 0:11
Antworten mit Zitat
Benutzer-Profile anzeigen
hiho wieder mal
ich versuche mal mein problem zu schildern:

Zitat:
Function GetBlend()
Returns 0 (SOLIDBLEND), 1 (MASKBLEND) ,2 (ALPHABLEND), 3 (LIGHTBLEND) or 4 (SHADEBLEND).
Description Get current blendmode setting.


sagt die BMax-Hilfe.... soweit sogut....

um das ganze zu testen bastle ich mir mal ein testprog:
Code: [AUSKLAPPEN]
Graphics 30,30
SetBlend(SOLIDBLEND)
x=GetBlend()
Print(x)
End


nun meine resultate:
SOLIDBLEND x=2 (nicht 0)
MASKBLEND x=1 (wie in der Hilfe beschrieben)
ALPHABLEND x=3 (nicht 2)
LIGHTBLEND x=4 (nicht 3)
SHADEBLEND x=5 (nicht 4)

leicht verwirrt aber nungut... vieleicht ein fehler in der hilfe...

aber wenn ich nun
SetBlend(SOLIDBLEND|MASKBLEND) wähle ist x=3 und somit das selbe wie SetBlend(ALPHABLEND) :S Verwirrung perfekt Sad

wo liegt der Fehler? (warscheinlich bei mir Wink)

was ich im Endeffekt eigentlich haben möchte sind die momentanen Blend-Einstellungen zu speichern um später wieder darauf zugreiffen zu können....

ein grosses DANKE von mir schon mal für jegliche Hilfe Smile

D2006

Administrator

BeitragDi, Jan 09, 2007 1:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Da ist der Hilfetext wohl veraltet.

Code: [AUSKLAPPEN]
Graphics 30,30
Print SOLIDBLEND
Print MASKBLEND
Print ALPHABLEND
Print LIGHTBLEND
Print SHADEBLEND
End


Ergo: Die Funktion gibt schon das richtige zurück. Arbeite mit den Konstanten und du hast keine Probleme.

Und das bei SOLIDBLEND | MASKBLEND dann ALPHABLEND rauskommt, ist total logisch. Denn 1 OR 2 ist 3. Und das wiederum ist Alphablend.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2
 

Dreamora

BeitragDi, Jan 09, 2007 8:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Nur um das Fehlverständnis auch noch auszuräumen: Die Blending Flags können NICHT kombiniert werden. Es sind "entweder oder" flags, also Solid oder Mask oder Alpha oder Light oder Shade
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Equilibrium

BeitragMi, Jan 10, 2007 1:00
Antworten mit Zitat
Benutzer-Profile anzeigen
danke euch beiden Very Happy

dank euren beiden beiträgen und ein paar experimentellen spielereien von meiner seite ist das ganze jetzt doch viel klarer ^^

und @dreamora
was du erwähnt hast war tatsächlich ein zentraler Denkfehler von mir...
habe wohl

Zitat:
These blendmodes can be mixed using the | (OR) operator.


aus nem tutorial falsch interpretiert Razz (wobei das ganze im nachhinein eigentlich logisch ist.. immerhin heisst das ding (bzw der operator) ja "or".. näjo ^^)

Wenn wer schon bei dem "Ding" sind... noch ne reine Interessenfrage... tut eigentlich nichts mehr zur sache aber würde mich dennoch interessieren...

Wieso ist 1 or 2 ->3 ? Die Bedeutung von "or" als "oder" ist mir klar.... auch die logischen abhängigkeiten die sich mit or schaffen lassen.. aber wie man 2 zahlen mit "or" verrechnen kann.... ka Sad

näjo wär schön wenn mir das jemand beantworten könnte... thx schonmal
 

Dreamora

BeitragMi, Jan 10, 2007 1:05
Antworten mit Zitat
Benutzer-Profile anzeigen
or ist nicht das gleiche wie |

or ist eine boolean operation, die gibt nur wahr oder falsch zurück
| hingegen ist eine bit weise operation

1 | 2 ist 00000001 | 00000010 = 00000011

Allerdings frage ich mich in welchem tutorial so ein elementarer Fehler steht, denn eigentlich sollte jeder Wissen, das nur 1 Blending auf einmal aktiv sein kann (Hardware kann nur eine Blendfunktion auf einmal ausführen, zumindest solange man nicht Multipass + Shader nutzt).

Wer in die Sources der Module schaut wird das auch sofort einsetzen, denn dort ist

select activeBlend
case solidblend
case maskblend
...

nix mit if activeBlend & solidblend else if activeBlend & maskblend etc Smile
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

maximilian

BeitragMi, Jan 10, 2007 17:16
Antworten mit Zitat
Benutzer-Profile anzeigen
@Dreamora: | ist OR, aber lediglich binär. Wenn du es nicht OR nennst, wie dann? Wenn man von | spricht, sollte es klar sein, dass damit das binäre OR gemeint ist.

Was du da machst ist Haarspalterei.
Variety is the spice of life. One day ignore people, next day annoy them.
 

Equilibrium

BeitragMi, Jan 10, 2007 18:26
Antworten mit Zitat
Benutzer-Profile anzeigen
http://www.2dgamecreators.com/...mages.html

is das tutorial... zu finden ganz am ende..

Farbfinsternis

BeitragMi, Jan 10, 2007 19:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Wozu eigentlich ein so langer Thread? Mir fällt nicht mal ein Grund ein wofür GetBlend() überhaupt da sein könnte ... ich als Programmierer setze aktiv den Blendstate und dessen Wert, wozu sollte ich mich davon überzeugen wollen dass dies auch tatsächlich passiert ist?
Farbfinsternis.tv

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group