 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 10.03.2013, 22:17 Titel: Splashscreen mit OpenGL& window9 oder fbgfx |
|
|
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 |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 14.03.2013, 01:01 Titel: |
|
|
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 |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 14.03.2013, 01:19 Titel: |
|
|
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 (ich sollte Nachts keine Einträge mehr schreiben )
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 |
|
 |
hitori04
Anmeldungsdatum: 21.04.2011 Beiträge: 53
|
Verfasst am: 14.03.2013, 23:27 Titel: |
|
|
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  |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 15.03.2013, 11:43 Titel: |
|
|
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 |
|
 |
|
|
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.
|
|