Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Splashscreen mit OpenGL& window9 oder fbgfx

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 10.03.2013, 22:17    Titel: Splashscreen mit OpenGL& window9 oder fbgfx Antworten mit Zitat

Hi,
in einem Thread ist schon eine Möglichkeit gefunden worden.
Mit window9 und einem Tipp aus http://www.codeproject.com/Tips/141076/Transparent-OpenGL-window fand ich eine einfache Art:

Code:
#Include "window9.bi"
#Include "GL/glut.bi"

Dim Shared As Integer OpenGL = 1

Sub RenderScene
  Static rtri As Single
  glClear GL_COLOR_BUFFER_BIT Or GL_DEPTH_BUFFER_BIT
  glPushMatrix

  glLoadIdentity
  glTranslatef 0.0, 0.0, -3.0
  glRotatef rtri, 0, 1, 0

  glBegin GL_TRIANGLES
  glColor3f   1.0, 0.0, 0.0         'Red
  glVertex3f  0.0, 1.0, 0.0         'Top Of Triangle  Front)
  glColor3f   0.0, 1.0, 0.0         'Green
  glVertex3f -1.0,-1.0, 1.0         'Left Of Triangle  Front)
  glColor3f   0.0, 0.0, 1.0         'Blue
  glVertex3f  1.0,-1.0, 1.0         'Right Of Triangle  Front)
  glColor3f   1.0, 0.0, 0.0         'Red
  glVertex3f  0.0, 1.0, 0.0         'Top Of Triangle  Right)
  glColor3f   0.0, 0.0, 1.0         'Blue
  glVertex3f  1.0,-1.0, 1.0         'Left Of Triangle  Right)
  glColor3f   0.0, 1.0, 0.0         'Green
  glVertex3f  1.0,-1.0,-1.0         'Right Of Triangle  Right)
  glColor3f   1.0, 0.0, 0.0         'Red
  glVertex3f  0.0, 1.0, 0.0         'Top Of Triangle  Back)
  glColor3f   0.0, 1.0, 0.0         'Green
  glVertex3f  1.0,-1.0,-1.0         'Left Of Triangle  Back)
  glColor3f   0.0, 0.0, 1.0         'Blue
  glVertex3f -1.0,-1.0,-1.0         'Right Of Triangle  Back)
  glColor3f   1.0, 0.0, 0.0         'Red
  glVertex3f  0.0, 1.0, 0.0         'Top Of Triangle  Left)
  glColor3f   0.0, 0.0, 1.0         'Blue
  glVertex3f -1.0,-1.0,-1.0         'Left Of Triangle  Left)
  glColor3f   0.0, 1.0, 0.0         'Green
  glVertex3f -1.0,-1.0, 1.0         'Right Of Triangle  Left)
  glEnd
  glPopMatrix
  rtri = rtri + 2.0f
  OpenGLGadgetSwapBuffers opengl
End Sub

'http://www.codeproject.com/Tips/141076/Transparent-OpenGL-window
Var win = OpenWindow ("Transparent", 0,0,640,480,  WS_POPUP Or WS_VISIBLE, WS_EX_LAYERED )
SetLayeredWindowAttributes(win, 0, 0, LWA_COLORKEY)
CenterWindow win

OpenGLGadget(OpenGL, 0, 0, WindowClientWidth(win), WindowClientHeight(win))

'glEnable GL_ALPHA_TEST
glEnable GL_DEPTH_TEST
'glEnable GL_COLOR_MATERIAL

'Transparent-OpenGL-window
'glEnable GL_BLEND
'glBlendFunc GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA
glClearColor 0, 0, 0, 0

Do
  Var event = WindowEvent
  If event = EventClose Then End
  If EventKEY = 27 Then End 'ESC -Taste
  RenderScene
  Sleep  1
Loop

EDIT/
auch mit fbgfx
Code:
#Include "windows.bi"
#Include "GL/glu.bi"

Sub RenderScene
  Static rtri As Single
  glClear GL_COLOR_BUFFER_BIT Or GL_DEPTH_BUFFER_BIT
  glPushMatrix

  glLoadIdentity
  glTranslatef 0.0, 0.0, -4.0
  glRotatef rtri, 0, 1, 0

  glBegin GL_TRIANGLES
  glColor3f   1.0, 0.0, 0.0         'Red
  glVertex3f  0.0, 1.0, 0.0         'Top Of Triangle  Front)
  glColor3f   0.0, 1.0, 0.0         'Green
  glVertex3f -1.0,-1.0, 1.0         'Left Of Triangle  Front)
  glColor3f   0.0, 0.0, 1.0         'Blue
  glVertex3f  1.0,-1.0, 1.0         'Right Of Triangle  Front)
  glColor3f   1.0, 0.0, 0.0         'Red
  glVertex3f  0.0, 1.0, 0.0         'Top Of Triangle  Right)
  glColor3f   0.0, 0.0, 1.0         'Blue
  glVertex3f  1.0,-1.0, 1.0         'Left Of Triangle  Right)
  glColor3f   0.0, 1.0, 0.0         'Green
  glVertex3f  1.0,-1.0,-1.0         'Right Of Triangle  Right)
  glColor3f   1.0, 0.0, 0.0         'Red
  glVertex3f  0.0, 1.0, 0.0         'Top Of Triangle  Back)
  glColor3f   0.0, 1.0, 0.0         'Green
  glVertex3f  1.0,-1.0,-1.0         'Left Of Triangle  Back)
  glColor3f   0.0, 0.0, 1.0         'Blue
  glVertex3f -1.0,-1.0,-1.0         'Right Of Triangle  Back)
  glColor3f   1.0, 0.0, 0.0         'Red
  glVertex3f  0.0, 1.0, 0.0         'Top Of Triangle  Left)
  glColor3f   0.0, 0.0, 1.0         'Blue
  glVertex3f -1.0,-1.0,-1.0         'Left Of Triangle  Left)
  glColor3f   0.0, 1.0, 0.0         'Green
  glVertex3f -1.0,-1.0, 1.0         'Right Of Triangle  Left)
  glEnd
  glPopMatrix
  rtri = rtri + 2.0f
  Flip
End Sub

ScreenRes 640, 480, 32,,2
Dim As HWND hwnd
ScreenControl(2 ,Cast(Integer, hwnd))
'http://www.codeproject.com/Tips/141076/Transparent-OpenGL-window
SetWindowLong hwnd, GWL_STYLE, WS_POPUP Or WS_VISIBLE
SetWindowLong hwnd, GWL_EXSTYLE, WS_EX_LAYERED
SetLayeredWindowAttributes(hwnd, 0, 0, LWA_COLORKEY)

glViewport 0, 0, 640, 480              ' Reset The Current Viewport
glMatrixMode GL_PROJECTION             ' Select The Projection Matrix
glLoadIdentity                         ' Reset The Projection Matrix
gluPerspective 45, 640/480, 0.1, 100   ' Calculate The Aspect Ratio Of The Window
glMatrixMode GL_MODELVIEW              ' Select The Modelview Matrix
glLoadIdentity                         ' Reset The Modelview Matrix

'glEnable GL_ALPHA_TEST
glEnable GL_DEPTH_TEST

'Transparent-OpenGL-window
'glEnable GL_BLEND
'glBlendFunc GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA
glClearColor 0, 0, 0, 0

Do
  RenderScene
  Sleep 1
Loop While InKey = ""

_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 14.03.2013, 01:01    Titel: Antworten mit Zitat

hi Volta,

hatte mir den Code nun ein paar mal angesehen weil die Lösung ja so viel besser scheint als das was ich da umständlich zusammengebastelt habe.
Und mehrfach enttäuscht das bei mir aber auch rein gar nichts transparentes ist...




Hab nun einiges Probiert und gegooglet, scheint unter anderen an Windows7 und/oder OpenGL zu liegen das LWA_COLORKEY da einfach nicht geht...
(Die Spielerei mit LWA_ALPHA allerdings funktioniert ganz gut...)

Unter anderen gefunden: http://www.delphigl.com/forum/viewtopic.php?f=2&t=9997 (selbe Problem)
Bin immer wieder auf UpdateLayeredWindow gestossen.. allerdings hab ich das noch nicht gelöst bekommen... doch wenn ich nun alles richtig verstanden habe läuft es immer wieder darauf hinaus eine BMP 'darüber zu legen'...
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 14.03.2013, 01:19    Titel: Antworten mit Zitat

Eternal_pain hat Folgendes geschrieben:
hi Volta,

hatte mir den Code nun ein paar mal angesehen weil die Lösung ja so viel besser scheint als das was ich da umständlich zusammengebastelt habe.
Und mehrfach enttäuscht das bei mir aber auch rein gar nichts transparentes ist...




Hab nun einiges Probiert und gegooglet, scheint unter anderen an Windows7 und/oder OpenGL zu liegen das LWA_COLORKEY da einfach nicht geht...
(Die Spielerei mit LWA_ALPHA allerdings funktioniert ganz gut...)

Unter anderen gefunden: http://www.delphigl.com/forum/viewtopic.php?f=2&t=9997 (selbe Problem)
Bin immer wieder auf UpdateLayeredWindow gestossen.. allerdings hab ich das noch nicht gelöst bekommen... doch wenn ich nun alles richtig verstanden habe läuft es immer wieder darauf hinaus eine BMP 'darüber zu legen'...


Edit: unter winXP gehts...
ups.. falschen buttOn gedrückt mit dem Kopf durch die Mauer wollen (ich sollte Nachts keine Einträge mehr schreiben happy)

Nachtrag:
laut google sollte man bei 64bit OSS statt (Set/Get)WindowLong, SetWindowLongPtr benutzen, brachte allein aber kein Erfolg....

Erfolg brachte allerdings das umschalten des Farbschemas bzw Aero

Code:

'http://forum.qbasic.at/viewtopic.php?t=7923
Dim shared dwmapi As Any Ptr
dwmapi = DylibLoad("dwmapi.dll")
If( dwmapi = 0) Then
   Print "Dll nicht gefunden"
   Sleep
   End 1
EndIf

#Define DWM_EC_ENABLECOMPOSITION   1
#Define DWM_EC_DISABLECOMPOSITION  0

Dim Shared DwmEnableComposition As Function (ByVal uCompositionAction As UInteger) As UInteger
DwmEnableComposition = DylibSymbol(dwmapi, "DwmEnableComposition")
If (DwmEnableComposition = 0) Then
   Print "Funktion nicht gefunden"
   Sleep
   End 1
Else
   Print "Funktion gefunden"
End If


Mit
Code:
DwmEnableComposition(DWM_EC_DISABLECOMPOSITION)

kann man das Farbschema wieder auf BASIS stellen... dannach funktioniert auch das von Dir gepostete Beispiel bei mir mit Win7 64bit
ob es jetzt an AERO oder 64bit liegt weiss ich nicht ganz genau... (vermute AERO)

Anschalten wieder mit
Code:
DwmEnableComposition(DWM_EC_ENABLECOMPOSITION)


hab leider keine header für FB von der dwmapi gefunden
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
hitori04



Anmeldungsdatum: 21.04.2011
Beiträge: 53

BeitragVerfasst am: 14.03.2013, 23:27    Titel: Antworten mit Zitat

Auch wenn ich mit dem eigentlichen thema hier nicht vertraut bin kann ich aber die vermutung die Eternal_pain hier äussert bestätigen da ich mal ein ähnliches problem hatte , bei mir war das ganze so dass ich einen kleinen videoplayer schreiben wollte der hatte auch soweit funktioniert nur wenn man auf vollbild wechseln wollte schmierte das programm unter windows 7 64 bit mit aktiviertem aero ab, war aero durch selbe funktion wie Eternal_pain sie hier benutzt nun aus lief alles problemos, lange rede kurzer sinn: die vermutung dass das problem bei aero liegt kann ich nur bestätigen

EDIT: Das Hier gezeiget Beispuiel funktioniert unter windows 8 64 bit nämlich problemlos zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 15.03.2013, 11:43    Titel: Antworten mit Zitat

Hi
Mit allen 32bit Winversionen (ab win2000) scheint es zu funktionieren, ist ja auch ein fast 10 Jahre alter Tip.
Siehe http://msdn.microsoft.com/de-de/library/bb979284.aspx

Das AERO - Problem ist auch nicht neu.
Siehe http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/bc7ef5a3-c60b-440c-a047-025af2ed2739
Zitat:
Hey, Thanks for the reply. I already did that test. Yep, it works without Aero on 7.

@hitori04, schön das es auch in Windows 8 funktioniert, da
Zitat:
Windows 8: The WS_EX_LAYERED style is supported for top-level windows and child windows.
Previous Windows versions support WS_EX_LAYERED only for top-level windows.
Was auch immer das bedeuten soll!
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz