|
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 |
Thorben
Anmeldungsdatum: 26.04.2005 Beiträge: 173 Wohnort: SH
|
Verfasst am: 15.08.2007, 18:22 Titel: OpenGL und FBedit? |
|
|
Moin,
wie kann ich mit der FBedit IDE ein OpenGL Fenster in einem WindowsFenster anzeigen? mit dem meiner alten IDE wußte ich wies geht nur hier ist es anscheind etwas schwieriger. Jedenfalls wenn man das Windows Fenster in dem Editor erstellen möchte. Kann mir von euch einer weiterhelfen?
MFG Thorben |
|
Nach oben |
|
|
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 15.08.2007, 19:14 Titel: |
|
|
Nun, in diesem Falle musst du die Initialisierung selbst übernehmen... Beispiele kann ich wiedermal nur für XProfan anbieten, sollte aber portierbar sein. |
|
Nach oben |
|
|
csde_rats
Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 15.08.2007, 21:37 Titel: |
|
|
Du willst in einem mit CreateWindow initialisiertem fenster mit OGL arbeiten?
oder in einem Dialog?
Machs besser net, denn wenn müsstest du DIREKT mit OGL verkehren => DIREKT den OGL-Treiber initialisieren... _________________ If hilfreicher_Beitrag then klick(location.here)
Klick |
|
Nach oben |
|
|
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 15.08.2007, 21:59 Titel: |
|
|
csde, quatsch bitte kein dummes Zeug wenn du keine Ahnung hast, es ist nicht viel schwerer, als openGL mit FBGFX zu initsialisiern. |
|
Nach oben |
|
|
Thorben
Anmeldungsdatum: 26.04.2005 Beiträge: 173 Wohnort: SH
|
Verfasst am: 16.08.2007, 01:27 Titel: |
|
|
Also ich hab direkt vorher in der alten IDE das Fenster Initialiesiert und ebenfalls OpenGL( ca. 300 zeilen Quelltext ). d.h. ich weiß schon wie es geht.
Nur wenn ich versuche es mit einem Dialog zu machen( also ohne das Windows Fenster vorher selbst zu initialisieren funktioniert die Funktion
"SetPixelFormat" bei mir nicht. Ich würd gerne wissen ob und wie es mit einem Dialog geht?
MFG Thorben |
|
Nach oben |
|
|
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 16.08.2007, 01:47 Titel: |
|
|
Also, so wie ich das versteh, hast du in fbIde noch Screen verwendet und nun halt ein per CreateWindowEx- / Ressoucrendatei-erstelltes Fenster, wo du die OpenGL-Ausgabe rein haben willst... oder? |
|
Nach oben |
|
|
Thorben
Anmeldungsdatum: 26.04.2005 Beiträge: 173 Wohnort: SH
|
Verfasst am: 16.08.2007, 01:57 Titel: |
|
|
Nein ich habe kein Screen verwendet.
MFG Thorben |
|
Nach oben |
|
|
Thorben
Anmeldungsdatum: 26.04.2005 Beiträge: 173 Wohnort: SH
|
Verfasst am: 16.08.2007, 14:25 Titel: |
|
|
Ist es jetzt eigentlich möglich beides zu Kombinieren? ( also: selbst mit CreateWindowEx erstellte Fenster und Dialoge die mit dem Editor erstellt wurden)? Also immoment hab ich mit CreateWindowEx mein Hauptfenster erstellt. Auf dem Fenster habe ich ein ChildWindow erstellt.( wieder mit CreateWindowEx ). Das 2. Fenster habe ich dann für OpenGL initialisiert.
Funktioniert auch alles wunderbar. Nur wenn ich dann noch ein Dialog hizufügen möchte passiert folgendes. Klickt man auf den Button um den Dialog zu starten öffnet er sich die Buttons in dem Dialog funktionieren aber man kann in weder verschieben, maximierne, minimieren noch schließen über das kreutz. Wenn ich in über einen selbst erstellten button schließe, dann stürzt das haupt Fenster merkwürdig ab.
Der wichtigste code:
Starten des Dialogs und Haupt Fenster ausblenden
Code: |
CASE MENUID_COPY_OBJ
ShowWindow( hWnds( WIN_MAIN ) , SW_HIDE )
AktiveID = 3
DialogBoxParam( hInstance , Cast( ZSTRING PTR , 1000 ), hWnds( WIN_MAIN ) , @MainWndProc , NULL ) |
Das haupt verwaltungs Programm:
Code: |
'===========================================================================
FUNCTION MainWndProc ( BYVAL hWnd AS HWND, _
BYVAL message AS UINT, _
BYVAL wParam AS WPARAM, _
BYVAL lParam AS LPARAM ) AS INTEGER
'===========================================================================
SELECT CASE AktiveID
CASE 1
IF MainWnd( hWnd , message , wParam , lParam ) THEN EXIT FUNCTION
CASE 2
IF CreatePln( hWnd , message , wParam , lParam ) THEN EXIT FUNCTION
CASE 3
IF CopyObj( hWnd , message , wParam , lParam ) THEN EXIT FUNCTION
END SELECT
RETURN DefWindowProc( hWnd, message, wParam, lParam )
END FUNCTION |
Das Verwaltungs Prog für den Dialog:
Code: |
'===========================================================================
FUNCTION CopyObj( BYVAL hWnd AS HWND, _
BYVAL message AS UINT, _
BYVAL wParam AS WPARAM, _
BYVAL lParam AS LPARAM ) AS INTEGER
'===========================================================================
SELECT CASE message
CASE WM_INITDIALOG
SendMessage GetDlgItem( hWnd , 1002 ), TBM_SETRANGE, 1, makelong(0, 360) 'MAKELONG(Min, Max)
SendMessage GetDlgItem( hWnd , 1002 ), TBM_SETTICFREQ, 45,0
SendMessage GetDlgItem( hWnd , 1009 ), TBM_SETRANGE, 1, makelong(0, 360) 'MAKELONG(Min, Max)
SendMessage GetDlgItem( hWnd , 1009 ), TBM_SETTICFREQ, 45,0
SendMessage GetDlgItem( hWnd , 1014 ), TBM_SETRANGE, 1, makelong(0, 360) 'MAKELONG(Min, Max)
SendMessage GetDlgItem( hWnd , 1014 ), TBM_SETTICFREQ, 45,0
CASE WM_COMMAND
SELECT CASE LOWORD( wParam )
CASE 1016
ShowWindow( hWnd , SW_HIDE )
AktiveID = WIN_MAIN
ShowWindow( hWnds( AktiveID ) , SW_SHOW )
UpdateWindow( hWnds( AktiveID ) )
RETURN TRUE
END SELECT
CASE WM_HSCROLL
SetWindowText( GetDlgItem( hWnd , 1005 ) , STR$( SendDlgItemMessage(hWnd,1002,TBM_GETPOS,0,0) ) )
SetWindowText( GetDlgItem( hWnd , 1006 ) , STR$( SendDlgItemMessage(hWnd,1009,TBM_GETPOS,0,0) ) )
SetWindowText( GetDlgItem( hWnd , 1011 ) , STR$( SendDlgItemMessage(hWnd,1014,TBM_GETPOS,0,0) ) )
CASE WM_CLOSE
ShowWindow( hWnd , SW_HIDE )
AktiveID = WIN_MAIN
ShowWindow( hWnds( AktiveID ) , SW_SHOW )
UpdateWindow( hWnds( AktiveID ) )
SetActiveWindow( hWnds( AktiveID ) )
RETURN TRUE
END SELECT
END FUNCTION |
MFG Thorben |
|
Nach oben |
|
|
Thorben
Anmeldungsdatum: 26.04.2005 Beiträge: 173 Wohnort: SH
|
Verfasst am: 16.08.2007, 16:47 Titel: |
|
|
Ok, Ich habs! Mir war das System mit den DialogBoxen noch nicht so ganz klar.( wusste nicht das die DialogBox ihre eigene Nachrichten schleife hat )
Das ganze muss einfach mit "EndDialog( hWnd , 0 )" beendet werden damit das ElternFenster wieder Freigegeben wird.
Jetzt bleibt mir nur noch die Frage ob ich auch in einer dialogBox ein Child Window erzeugen kann das ich für OpenGL initailiesiere. Und wenns geht wie?
Bis jetzt hab ichs immer so gemacht:
Code: |
'===========================================================================
SUB InitWindows()
'===========================================================================
AnzahlWindows = 1
REDIM StyleWindow( AnzahlWindows )
REDIM hWnds( AnzahlWindows )
DIM i AS INTEGER
WITH StyleWindow( WIN_MAIN )
.left = CW_USEDEFAULT
.top = CW_USEDEFAULT
.width = 1000
.height = 725
.caption = "TDgames MapEditor"
.aktive = TRUE
.show = TRUE
.style = WS_OVERLAPPED OR WS_SYSMENU OR WS_MINIMIZEBOX
.parent = NULL
END WITH
WITH wcls
.style = CS_HREDRAW OR CS_VREDRAW OR CS_OWNDC
.lpfnWndProc = @MainWndProc
.cbClsExtra = 0
.cbWndExtra = 0
.hInstance = hInstance
.hIcon = LoadIcon( NULL, IDI_APPLICATION )
.hCursor = LoadCursor( NULL, IDC_ARROW )
.hbrBackground = COLOR_WINDOW
.lpszMenuName = NULL
.lpszClassName = STRPTR( "TD" )
END WITH
RegisterClass( @wcls )
FOR i = 1 TO AnzahlWindows
hWnds( i ) = CreateWindowEx( NULL, _
"TDgames", _
StyleWindow( i ).caption, _
StyleWindow( i ).style, _
StyleWindow( i ).left, _
StyleWindow( i ).top, _
StyleWindow( i ).width, _
StyleWindow( i ).height, _
StyleWindow( i ).parent, _
NULL, _
hInstance, _
NULL )
NEXT i
END SUB
'===========================================================================
SUB InitGLWindow()
'===========================================================================
DIM i AS INTEGER
AnzahlGLWindows = 1
REDIM StyleGLWindow( AnzahlGLWindows )
REDIM HandleGLWindow( AnzahlGLWindows )
REDIM hDC( AnzahlGLWindows )
REDIM hRC( AnzahlGLWindows )
WITH StyleGLWindow( 1 )
.left = 20
.top = 20
.width = 600
.height = 500
.caption = "3d View"
.aktive = TRUE
.show = TRUE
.style = WS_CHILD OR WS_CLIPSIBLINGS OR WS_CLIPCHILDREN
.parent = hWnds( 1 )
END WITH
FOR i = 1 TO AnzahlGLWindows
HandleGLWindow( i ) = CreateWindowEx( WS_EX_CLIENTEDGE, _
"TDgames", _
StyleGLWindow( i ).caption, _
StyleGLWindow( i ).style, _
StyleGLWindow( i ).left, _
StyleGLWindow( i ).top, _
StyleGLWindow( i ).width, _
StyleGLWindow( i ).height, _
StyleGLWindow( i ).parent, _
NULL, _
hInstance, _
NULL )
pfd = TDCreatePixelFormat()
ShowWindow( HandleGLWindow( i ) , SW_NORMAL )
UpdateWindow( HandleGLWindow( i ) )
NEXT i
END SUB
'---------------------------------------------------------------------------
SUB InitOpenGL( GlWindowNr AS INTEGER )
'---------------------------------------------------------------------------
DIM PixelFormat AS UINTEGER
IF( GetDC( HandleGLWindow( GlWindowNr ) ) = FALSE ) THEN
MessageBox( NULL , "Can't create a GL Device Context." , "ERROR" , MB_ICONERROR )
END
ELSE
hDC( GlWindowNr )=GetDC( HandleGLWindow( GlWindowNr ) )
END IF
IF( ChoosePixelFormat( hDC( GlWindowNr ) , @pfd ) = FALSE ) THEN
MessageBox( NULL , "Can't find a suitable PixelFormat." , "ERROR" , MB_ICONERROR )
END
ELSE
PixelFormat=ChoosePixelFormat( hDC( GlWindowNr ) , @pfd )
END IF
IF( SetPixelFormat( hDC( GlWindowNr ) , PixelFormat , @pfd ) = FALSE ) THEN
MessageBox( NULL , "Can't set the PixelFormat." , "ERROR" , MB_ICONERROR )
END
END IF
IF( wglCreateContext( hDC( GlWindowNr ) ) = FALSE ) THEN
MessageBox( NULL , "Can't create a GL Rendering Context." , "ERROR" , MB_ICONERROR )
END
ELSE
hRC( GlWindowNr ) = wglCreateContext( hDC( GlWindowNr ) )
END IF
IF( wglMakeCurrent( hDC( GlWindowNr ) , hRC( GlWindowNr ) ) = FALSE ) THEN
MessageBox( NULL , "Can't activate the GL Rendering Context." , "ERROR" , MB_ICONERROR )
END
END IF
glViewport( 0 , 0 , StyleGLWindow( GlWindowNr ).width , StyleGLWindow( GlWindowNr ).height )
glMatrixMode( GL_PROJECTION )
glLoadIdentity()
gluPerspective( 45.0f , StyleGLWindow( GlWindowNr ).width / StyleGLWindow( GlWindowNr ).height , 0.01f , 200.0f )
glMatrixMode( GL_MODELVIEW )
glLoadIdentity()
glEnable( GL_TEXTURE_2D )
glShadeModel( GL_SMOOTH )
glBlendFunc( GL_SRC_ALPHA, GL_ONE )
glClearColor( 0.0f , 0.0f , 0.0f , 0.0f )
glClearDepth( 1.0f )
glEnable( GL_DEPTH_TEST )
glDepthFunc( GL_LEQUAL )
glHint( GL_PERSPECTIVE_CORRECTION_HINT , GL_NICEST )
END SUB
'===========================================================================
FUNCTION TDCreatePixelFormat() AS PIXELFORMATDESCRIPTOR
'===========================================================================
DIM pfd AS PIXELFORMATDESCRIPTOR
pfd.nSize=LEN( PIXELFORMATDESCRIPTOR )
pfd.nVersion=1
pfd.dwFlags=PFD_DRAW_TO_WINDOW OR PFD_SUPPORT_OPENGL OR PFD_DOUBLEBUFFER
pfd.iPixelType=PFD_TYPE_RGBA
pfd.iLayerType=PFD_MAIN_PLANE
pfd.cDepthBits=16
pfd.cAccumAlphaBits=0
pfd.cAccumBits=0
pfd.cAccumBlueBits=0
pfd.cAccumGreenBits=0
pfd.cAccumRedBits=0
pfd.cAlphaBits=0
pfd.cAlphaShift=0
pfd.cAuxBuffers=0
pfd.cBlueBits=0
pfd.cBlueShift=0
pfd.cColorBits=16
pfd.cGreenBits=0
pfd.cGreenShift=0
pfd.cRedBits=0
pfd.cRedShift=0
pfd.cStencilBits=0
pfd.dwDamageMask=0
pfd.dwLayerMask=0
pfd.dwVisibleMask=0
RETURN pfd
END FUNCTION
|
MFG Thorben
/edit: Sorry wegen doppel post. |
|
Nach oben |
|
|
csde_rats
Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 16.08.2007, 16:58 Titel: |
|
|
Code: | GetDC( HandleGLWindow( GlWindowNr ) ) |
Du weißt schon, dass du damit einen GDI Device Context erstellst, OGL verwendet keine DCs
---
Solange dein Mapeditor nicht allzu "hyper komplexe Sachen" macht, wird die GDI aber auch vollkommen ausreichend sein (Die GDI schafft bei sauberer Programmierung ca. 65536 Linien in 1,5 Sekunden => Für die meisten Sachen reicht das...) _________________ If hilfreicher_Beitrag then klick(location.here)
Klick |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 16.08.2007, 18:35 Titel: |
|
|
....Die GDI schafft mehr also nur 60000 Linien... Solange man Grafiken puttet, ist das viel schneller... _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
csde_rats
Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 16.08.2007, 19:10 Titel: |
|
|
csderats hat Folgendes geschrieben: | Darauf wollte ich ja hinaus |
Dein Satz erweckte eher den Eindruck, dass sie ziemlich langsam ist... Schon weil selbst ältere Rechner deutlich mehr als "nur" 60000 Zeilen setzen können, selbst ohne GDI... _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
Thorben
Anmeldungsdatum: 26.04.2005 Beiträge: 173 Wohnort: SH
|
Verfasst am: 17.08.2007, 13:00 Titel: |
|
|
Habt ihr den auch ne Antwort auf meine Frage?
MFG Thorben |
|
Nach oben |
|
|
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 18.08.2007, 01:05 Titel: |
|
|
irgendeiner (nicht ich) hat Folgendes geschrieben: | Gute Frage... nächste Frage. |
Ich glaube, ich nicht... ich hab aber auch gar nicht alles gelesen, sry. |
|
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.
|
|