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

05.10.2014, 14:50

Sdl_SetVideoMode flags per or verknüpfen übergabe per variablen

Hey Leute

Bei der SDL gibt es die Funktion SDL_SetVideoMode(int Width, Height, ColorDepth, Uint32 Flags)

Bei dem letzten Parmeter den die Funktion erwartet werden ja unsigned int werte übergeben die durch or also | voneinander getrennt werden.

Ich wollte Persönlich eine Struktur bauen die verschieden werte enthält und diese dann in den letzten Parameter einträgt.

Hier habe ich aber gerade ein Problem die Funktion erwartet ja das ich die flags mit | (or) voneinander trenne, genaus dort liegt meine Frage.

Wie kann ich dieser Funktion jetzt am Ende 3 unsigned int Werte übergeben, denn mit , kann ich diese nicht trennen weil sonst die maximale Parameter Anzahl überschritten ist.


Gruß Leri :)

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

05.10.2014, 15:07

Genau wie Du es gesagt hast:
SetVideoMode( 800, 600, 32, FULLSCREEN | BACKBUFFER | HARDWARE )
(Die Flags sind Beispiele, k.A. was SDL da wirklich nutzt)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

3

05.10.2014, 15:08

habe jetzt nochmal nachgeschaut und frage mich ob die operanden also die uint32 flags verknüft werden also aus 0 und 1 wir 01?

Habe bei google operatoren eingegeben und da steht folgendes

| (bitweise Oder-Verknüpfung)
1100
1010
----
0110

ja Die flags kenne ich das sind Uint32

aber die sollen ja mit | verknüft werden wenn ich nun aber die flags mit int werten übergeben möchte, und diese in hexadezimal vorliegen weiß ich nicht wie ich da vorgehen soll.

Habe ja nun die möglichkeit gefunden diese zu verbinden, da stellt sich mir jetzt die Frage müssen diese in hexadezimal vorliegen für die verknüpfung oder geht das auch per int werten.

Die Funktion würde ja normal so aufgerufen

SDL_SetVideoMode(int Width, int Height, int Colordepth, SDL_HWSurface | SDL_Doublebuff etc)

Bei mir sollen da aber int werte oder Hexadezimalwerte benutzt werden Sprich so

SDL_SetVideoMode(int Width, int Height, int Colordepth, 1| 3)


SDL_SetVideoMode(int Width, int Height, int Colordepth, 0x000000| 0x000003)


Hierbei ist noch anzumerken, das ich nicht genau wissen werde wieviele Parameter b.z.w flags übergeben werden es könnten mal 2 sein oder 5.

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

4

05.10.2014, 15:11

Deine Rechnung ist ein XOR, aber kein OR, bei letzterem würde 1110 rauskommen

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

05.10.2014, 15:26

10 = 0xA0 = 1010
Es ist völlig egal, in welchem Format die Zahlen geschrieben werden. Die OR-Verknüpfung wirkt auf alle gleich, denn Zahlen sind von ihrer Darstellung unabhängig.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

6

05.10.2014, 15:29

Der |-operator ist wie +,-,*,/,%,<,>,=,== usw. ein ganz normaler Operator, der zwei Operanden nimmt, diese binär or-verknüpft und dann zurückliefert. Google mal nach 'binäre Verknüpfungen', da findest du mehr vom Thema.
Hexadezimal ist genauso wie Dezimal, Binär und Oktal nur eine Form, einen Zahlenwert darzustellen. Es macht keinen Unterschied, in welcher Form du es schreibst, es stellt immer den gleichen Wert dar.
Flags sind ein feines Mittel, um mehrere Zustände in einer Zahl zu speichern. Dabei kann jedes Bit einen Wahr/Falsch-Zustand speichern. Du übergibst der Funktion als letzten Parameter also nur eine Zahl, in der dann entsprechende Bits gesetzt sind, die dann von der Funktion ausgewertet werden.

7

05.10.2014, 15:29

Habe gerade ausgetestet wenn ich die Zahlen zusammen addiere dann scheint er auch beide b.z.w alle 5 flags zu nehmen :)

Wusste nicht wie genau der or operator arbeitet.

Ich danke für eure Hilfe :)

Gruß Leri :thumbsup:

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

05.10.2014, 15:36

Addieren ist eine ganz schlechte Idee.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

9

05.10.2014, 15:40

bis jetzt hat es geklappt :D

Nein aber wieso nicht addieren, er scheint ja die bits einzeln durchzugehen und die flags zu setzen.

Wieso wäre addieren eine schlechte idee?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

05.10.2014, 15:42

FULLSCREEN = 0001
DOUBLE_BUFFERED = 0010
Z_BUFFER = 0100
MONOCHROME = 1000
GAME_MODE = FULLSCREEN | DOUBLE_BUFFERED | Z_BUFFER

SetVideoMode ( GAME_MODE | FULLSCREEN ) // geht gut
SetVideoMode ( GAME_MODE + FULLSCREEN ) // geht nicht gut, denn es ist dasselbe wie SetVideoMode ( MONOCHROME )

Da Du nicht alle Flags vorher nachschauen willst (und es eh nicht machst) und auch bei Updates der Bibliothek nicht in die Hölle fahren willst, gewöhn Dir die Addition bei Flags gar nicht erst an.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige