|
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 |
Eternal_pain
Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 26.09.2011, 15:19 Titel: OpenGL Anfängerproblem |
|
|
Erste 'gehversuche' mit OpenGL sehen schon ganz vielversprechend aus,
allerdings habe ich direkt schon ein Problem zu dem ich nirgendwo was finde:
Ich habe bisher nur ein kleines Dreieck als Objekt, das sich rotiert, sieht ganz nett aus und macht im prinzip auch genau das was es soll,
allerdings, immer wenn ich mit dem mauszeiger im Screen bin geht die CPU last extrem hoch und die FPS sinken rapide...
Keine ahnung womit das zu tun hat und vorallem nicht wie sich das lösen lässt...
Hier mal mein bisheriger Testcode:
Code: |
'-------------------------
'Includes
'-------------------------
#include once "fbgfx.bi"
#include once "GL/gl.bi"
#include once "GL/glu.bi"
#Define OGL_Error_Define_099 "Bildschirm konnte nicht initialisiert werden"
#Define OGL_False 0
#Define OGL_True not(OGL_False)
'!' Texturenstruktur
TYPE OGL_TextureType
Handle as GLuint '' Handle mit der die Textur identifiziert wird
Width as integer '' Breite der Textur in Pixel
Height as integer '' Höhe der Textur in Pixel
TextureFilter as integer '' Filter-Optionen
imageData as ubyte ptr '' Speicherblock, der die Bilddaten enthält
bpp as uinteger '' Bit-Per-Pixel, Farbtiefe der Textur
textype as uinteger '' Auskunft über Alphachannel (GL_RGB | GL_RGBA)
END TYPE
Enum
OGL_Fenster
OGL_Vollbild
End Enum
'!' Initialisieren eines OpenGL Screen
'' scr_width : breite des Bildschirms
'' scr_heigth : höhe des Bildschirms
'' scr_bpp : Bit Per Pixel (Farbtiefe in Bits) 8,16,32
'' scr_mode : Bildschirm-modi (0 Fenster, 1 Vollbild)
''
'*' Weiteres folgt evtl. noch.
'-------------------------
'Declarationen
'-------------------------
Declare Function OGL_Start (byval scr_width as integer, _
byval scr_heigth as integer, _
byval scr_bpp as integer = 32, _
byval scr_mode as integer = 0) as integer
Declare Sub OGL_DrawScene ()
Declare Sub CMsg(Byval Msg AS string)
Function OGL_Start (byval scr_width as integer, _
byval scr_heigth as integer, _
byval scr_bpp as integer = 32, _
byval scr_mode as integer = 0) as integer
'übergabe von scr_mode nach scr_mode_intern und bei der übergabe
'festlegen das wert nur 0 oder 1 sein kann/ist.
Dim scr_mode_intern as integer
scr_mode_intern=IIF(scr_mode = &h00, &h00, &h01)
'übergabe von scr_heigth nach scr_heigth_intern
'und bestimmen das wert >0 sein muss
Dim scr_heigth_intern as integer
scr_heigth_intern=IIF(scr_heigth=0,1,scr_heigth)
Dim OutString as String
If scr_mode_intern=0 Then
OutString="Fenster"
Else
Outstring="Vollbild"
End IF
'Initialisiere Screen:
Screenres scr_width, scr_heigth, scr_bpp,, &h02 + scr_mode_intern
If ScreenPTR=0 Then
CMsg "Fehler: " & OGL_Error_Define_099
Return OGL_False
Else
CMsg "Bildschirm Initialisiert: " & scr_width & " x " & _
scr_heigth & " " & scr_bpp & "BPP " & OutString & "modus"
End If
'OpenGL Init
glViewport 0, 0, scr_width, scr_heigth ' den aktuellen Viewport auf eine
' Ausgangsposition setzen
glMatrixMode GL_PROJECTION ' Matrix-Modus Projection wählen
glLoadIdentity ' Modus auf Anfangswerte setzen
' Grundeinstellungen des Anezeigefensters festlegen:
' Hier wird das Verhältnis der Höhe zur Breite
' und der Verzerrungswinkel von 45 Grad übergeben
gluPerspective 45.0, scr_width/scr_heigth_intern, 0.1, 100.0
glMatrixMode GL_MODELVIEW ' Matrix-Modus Modelview wählen
glLoadIdentity ' Modus auf Anfangswerte setzen
'!' Das Smooth Shading wird aktiviert, das
'' sehr schöne Farbübergänge auf Körpern ermöglicht.
glShadeModel(GL_SMOOTH)
'!' Hier werden die Farben für den Hintergrund festgelegt,
'' die ersten drei Ziffern geben Auskunft über die RGB-Werte
'' (Rot, Grün und Blau), der letzte Wert bestimmt den Alphafaktor,
'' also die Transparenz des Hintergrundes.
'' In diesem Falle ein schwarzer Hintergrund
glClearColor(0.0, 0.0, 0.0, 0.0)
'!' In den nächsten Zeilen wird der sogenannte depht buffer initialisiert,
'' der dafür sorgt das Objekte weiter hinten Raum von anderen
'' weiter vorn liegenden Objekten überdeckt werden können.
'' (Ansonsten würden alle Objekte merkwürdig übereinanderkleben,
'' was natürlich weder schön noch besonders realistisch wirkt.)
'' depht buffer zurückgesetzt
glClearDepth(1.0)
'' Aktivierung des depht Tests (dazu später mehr.)
glEnable(GL_DEPTH_TEST)
'' Der Typ des Depht Tests wird festgelegt
glDepthFunc(GL_LEQUAL)
'!' Als nächstes wird die Art der anzuzeigenden Perspektive festgelegt,
'' (In diesem Falle GL_NICEST, allerdings sehr rechenintensiv...)
'' Perspektive wird festgelegt
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)
Return OGL_True
End Function
'!' Und hier wirds dann endlich spannend, alles was auf den Schirm soll,
'' wird von hier aus gezeichnet.
Sub OGL_DrawScene ()
glFlush
flip
'!' Die vorherige Szene wird vom Bildschirm gelöscht,
'' damit die neuen nicht einfach über die alten
'' Objekte gezeichnet werden
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT)
'!' Modelview-Matrix wird wieder zurückgesetzt
glLoadIdentity
End Sub
'!'
Sub CMsg(Byval Msg AS string)
Dim FF as integer
FF = FreeFile
Open CONS for Output as #FF
print #FF, Msg
Close #FF
End Sub
OGL_Start (800,600,32,OGL_Fenster)
Dim Shared Vertex as Single PTR
Vertex=Callocate((3*3)*Len(Single))
Dim Shared VColor as Single PTR
VColor=Callocate((3*3)*Len(Single))
Vertex[0] = 0.0 : Vertex[1] = -1.5 : Vertex[2] = 0.0
Vertex[3] = -1.5 : Vertex[4] = 1.0 : Vertex[5] = 0.0
Vertex[6] = 1.5 : Vertex[7] = 1.0 : Vertex[8] = 0.0
VColor[0] = 1.0 : VColor[1] = 0.0 : VColor[2] = 0.0
VColor[3] = 0.0 : VColor[4] = 1.0 : VColor[5] = 0.0
VColor[6] = 0.0 : VColor[7] = 0.0 : VColor[8] = 1.0
sub testobject
static rotationtest as double
rotationtest=IIF (rotationtest>=360,rotationtest-360,rotationtest+0.2)
glTranslatef(0.0,0.0,-6.0)
glRotatef (rotationtest,0.0,1.0,0.0)
glEnableClientState(GL_VERTEX_ARRAY)
glEnableClientState(GL_COLOR_ARRAY)
glColorPointer(3, GL_FLOAT, 0, VColor)
glVertexPointer(3, GL_FLOAT, 0, Vertex)
glDrawArrays(GL_TRIANGLES, 0, 3)
glDisableClientState(GL_VERTEX_ARRAY)
glDisableClientState(GL_COLOR_ARRAY)
end sub
'test
Dim FPS as Integer
Dim FPSTimer as Double=Timer
do
if multikey(&h01) then exit do
testobject
OGL_DrawScene
FPS+=1
If Timer>=(FPSTimer+1) Then
CMsg STR(FPS)
FPS=0
FPSTimer=Timer
End If
sleep 1
loop
|
_________________
|
|
Nach oben |
|
|
XOR
Anmeldungsdatum: 23.07.2010 Beiträge: 161
|
Verfasst am: 26.09.2011, 16:34 Titel: |
|
|
Ich habe das Problem nicht, bei mir leuft das mit ~500 FPS.
Schau mal ob das auch so im VollBildModus ist oder nicht und wie hoch die openGL version ist.
Die openGl version bekommst du mit:
Code: | *glGetString ( GL_VERSION )
|
|
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 26.09.2011, 18:06 Titel: Re: OpenGL Anfängerproblem |
|
|
Eternal_pain hat Folgendes geschrieben: | allerdings, immer wenn ich mit dem mauszeiger im Screen bin geht die CPU last extrem hoch und die FPS sinken rapide... | Klingt nach deaktivierter Hardware-Beschleunigung beim Mauszeiger. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
Eternal_pain
Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 26.09.2011, 20:56 Titel: |
|
|
Danke XOR, das mit der Version hatte ich schon gesucht...
hmm.. ich denke inzwischen auch das es ein Hardware oder Treiber Problem ist, heute mittag lief das Beispiel noch problemlos ausser dem besagten Problem... mit ebenfalls ~500FPS und ~350 mit dem Problem...
Jetzt wo ich nachsehen und testen wollte läuft es zwar konstant, allerdings nur noch bei ~65 FPS
Zitat: | OpenGL Version 3.3.10237 Compatibility Profile Context
Bildschirm Initialisiert: 800 x 600 32BPP Fenstermodus
66Maus Ausserhalb
48Maus Ausserhalb
65Maus Ausserhalb
65Maus Ausserhalb
64Maus Ausserhalb
65Maus Ausserhalb
58Maus im Fenster
65Maus im Fenster
65Maus im Fenster
65Maus im Fenster
64Maus im Fenster
65Maus im Fenster
65Maus im Fenster
65Maus Ausserhalb
65Maus Ausserhalb
65Maus Ausserhalb
65Maus Ausserhalb
65Maus Ausserhalb
64Maus Ausserhalb
|
Edit: kein plan woran es liegt, scheint aber mein rechner zu sein, woran genau, kein plan, jetzt läuft es komischerweise richtig.. ohne probleme
Zitat: | OpenGL Version 3.3.10237 Compatibility Profile Context
Bildschirm Initialisiert: 800 x 600 32BPP Fenstermodus
510Maus im Fenster
512Maus im Fenster
512Maus im Fenster
431Maus Ausserhalb
513Maus im Fenster
511Maus im Fenster
513Maus im Fenster
513Maus Ausserhalb
513Maus Ausserhalb
513Maus im Fenster
513Maus Ausserhalb
513Maus Ausserhalb
512Maus im Fenster
512Maus im Fenster
512Maus im Fenster
513Maus Ausserhalb
512Maus Ausserhalb
512Maus Ausserhalb
512Maus Ausserhalb
511Maus Ausserhalb
512Maus Ausserhalb
512Maus Ausserhalb
512Maus Ausserhalb
512Maus Ausserhalb
|
_________________
|
|
Nach oben |
|
|
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 26.09.2011, 21:40 Titel: |
|
|
Liegt evtl. am compat. Profil. Hatte damit schon öfters Probleme, einfach nen richtigen OpenGL3/4 Kontext erstellen |
|
Nach oben |
|
|
Eternal_pain
Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 26.09.2011, 22:19 Titel: |
|
|
Danke für den Tipp,
leider weiss und verstehe ich nicht so richtig was und wozu das gut ist
könntest Du mir evtl. dabei behilflich sein?
Zum Thema OpenGL3 Zeichenkontext habe ich den Code im DGL Wiki gefunden,
aber irgendwie scheint mir entweder was zu fehlen (Declarationen, Funktionen, Types ect...)
Oder habe nicht alles eingebunden... btw: gibt es neuere Header für FB von OGL? _________________
|
|
Nach oben |
|
|
XOR
Anmeldungsdatum: 23.07.2010 Beiträge: 161
|
Verfasst am: 27.09.2011, 07:43 Titel: |
|
|
Hier ein beispiel um einen OpenGL3.3 Context zu bekommen.
Code: | #Include "gl/gl.bi"
''#Include "gl/glext.bi"
#Ifdef __FB_WIN32__
#Include "windows.bi"
#ElseIf __FB_LINUX__
#Include "X11.bi"
#EndIf
#Define NO_ERROR &H00
#Define NO_CONTEXT_CREATED &H01
#Define NO_OPENGL_3_SUPPORT &H02
#Define NO_VERSION_CONTEXT_CREATED &H03
Function InitGL ( ByVal MajorVersion As Long, ByVal MinorVersion As Long ) As Long
#Ifdef __FB_WIN32__
#Define WGL_CONTEXT_MAJOR_VERSION_ARB &H2091
#Define WGL_CONTEXT_MINOR_VERSION_ARB &H2092
#Define WGL_CONTEXT_FLAGS_ARB &H2094
#Define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB &H0002
Type PFNWGLCREATECONTEXTATTRIBSARBPROC As Function (ByVal hDC As HDC, ByVal hShareContext As HGLRC, ByVal attribList As Integer Ptr) As HGLRC
Dim GLRC As HGLRC
Dim GLHRC As HGLRC
Dim GLDC As HDC
Dim wglCreateContextAttribsARB As PFNWGLCREATECONTEXTATTRIBSARBPROC
Dim attribs(...) As Integer => { WGL_CONTEXT_MAJOR_VERSION_ARB, MajorVersion, WGL_CONTEXT_MINOR_VERSION_ARB, MinorVersion, WGL_CONTEXT_FLAGS_ARB, WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB, 0 }
GLRC = wglGetCurrentContext ( )
GLDC = wglGetCurrentDC ( )
If GLRC = 0 Then
Return NO_CONTEXT_CREATED
EndIf
wglCreateContextAttribsARB = Cast(PFNWGLCREATECONTEXTATTRIBSARBPROC, wglGetProcAddress("wglCreateContextAttribsARB"))
If wglCreateContextAttribsARB = 0 Then
Return NO_OPENGL_3_SUPPORT
EndIf
GLHRC = wglCreateContextAttribsARB ( GLDC, 0, @attribs(0) )
If GLHRC = 0 Then
Return NO_OPENGL_3_SUPPORT
EndIf
wglMakeCurrent(GLDC,GLHRC)
wglDeleteContext(GLRC)
#ElseIf Defined(__FB_LINUX__)
#Define GLX_CONTEXT_MAJOR_VERSION_ARB &H2091
#Define GLX_CONTEXT_MINOR_VERSION_ARB &H2092
#Define GLX_CONTEXT_FLAGS_ARB &H2094
#Define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB &H0002
Type GLXCREATECONTEXTATTRIBSARBPROC As Function ( ByVal dpy As Display Ptr, ByVal config As GLXFBConfig, ByVal share_context As GLXContex, ByVal direct As Bool, ByVal attrib_list As Integer Ptr) As GLXContext
Dim GLRC As GLXContext
Dim GLHRC As GLXContext
Dim GLDC As Display Ptr
Dim glXCreateContextAttribsARB As GLXCREATECONTEXTATTRIBSARBPROC
Dim attribs(...) As Integer => { GLX_CONTEXT_MAJOR_VERSION_ARB, MajorVersion, GLX_CONTEXT_MINOR_VERSION_ARB, MinorVersion, GLX_CONTEXT_FLAGS_ARB, GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB, 0 }
GLRC = glXGetCurrentContext ( )
GLDC = glXGetCurrentDisplay ( )
If GLRC = 0 Then
Return NO_CONTEXT_CREATED
EndIf
glXCreateContextAttribsARB = Cast(GLXCREATECONTEXTATTRIBSARBPROC, glXGetProcAddress("glXCreateContextAttribsARB"))
If wglCreateContextAttribsARB = 0 Then
Return NO_OPENGL_3_SUPPORT
EndIf
GLHRC = glCCreateContextAttribsARB ( GLDC, 0, 0, 1,@attribs(0) )
If GLHRC = 0 Then
Return NO_OPENGL_3_SUPPORT
EndIf
glXMakeCurrent(GLDC,GLHRC)
glXDeleteContext(GLRC)
#EndIf
Return NO_ERROR
End Function
''ScreenRes 800, 600, 32,, 2
''If InitGL ( 3, 3 ) <> NO_ERROR Then End |
|
|
Nach oben |
|
|
Eternal_pain
Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 27.09.2011, 08:33 Titel: |
|
|
Vielen Dank (sogar mit Linux )
Es funktioniert soweit wohl genau so wie es soll
Ohne Context Create
Zitat: |
OpenGL Version 3.3.10237 Compatibility Profile Context
Bildschirm Initialisiert: 640 x 480 32BPP Fenstermodus OpenGL
|
Mit Context Create
Zitat: |
OpenGL Version 3.3.10237 Core Profile Forward-Compatible Context
Bildschirm Initialisiert: 640 x 480 32BPP Fenstermodus OpenGL
|
Keine fehler...
ABER: obwohl scheinbar alles funktioniert, wird mit dem erstellten
Context gar nichts auf dem Bildschirm gerendern... hab nur noch ein
Schwarzen Screen (der aber scheinbar arbeitet...) _________________
|
|
Nach oben |
|
|
XOR
Anmeldungsdatum: 23.07.2010 Beiträge: 161
|
Verfasst am: 27.09.2011, 16:17 Titel: |
|
|
Zitat: | Vielen Dank (sogar mit Linux ) |
Ja aber ich habe es noch nicht unter Linux getestet.
Zitat: | ABER: obwohl scheinbar alles funktioniert, wird mit dem erstellten
Context gar nichts auf dem Bildschirm gerendern... hab nur noch ein
Schwarzen Screen (der aber scheinbar arbeitet...) |
Wäre das nicht so, hätte openGl einen fehler. Ab openGl3.X sind:
glEnableClientState+glColorPointer+glVertexPointer nicht mehr benutzbar.
benutzen musst du VBO's Link und statt glEnableClientState glEnableVertexAttribArray
Nachher könnte ich vielleicht noch ein beispiel posten. |
|
Nach oben |
|
|
Eternal_pain
Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 27.09.2011, 16:34 Titel: |
|
|
Na da kommt ja wirklich freude auf :S
Erstmal vielen Dank für die Info, ein Beispiel wäre wirklich toll.
komme irgendwie noch nicht so richtig mit allem zurecht,
dachte hätte endlich mal ein Anfang.
Versuchte mich bereits mit dem nächsten Thema Texturen auseinander zu setzen da geht schon wieder das vorrangegangene nicht mehr...
hab hier grad mal grob überflogen:
http://wiki.delphigl.com/index.php/Tutorial_Vertexbufferobject
http://wiki.delphigl.com/index.php/glEnableVertexAttribArray
Hoffe das ich nicht alle neuen Types und Functionen extra umschreiben muss _________________
|
|
Nach oben |
|
|
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 27.09.2011, 17:06 Titel: |
|
|
Eternal_pain hat Folgendes geschrieben: | Na da kommt ja wirklich freude auf :S |
Naja dafür haste jetzt praktisch garantierte zukunftskompatibilität... |
|
Nach oben |
|
|
XOR
Anmeldungsdatum: 23.07.2010 Beiträge: 161
|
Verfasst am: 28.09.2011, 18:02 Titel: |
|
|
Ein Beispiel für OpenGL3.
Ist etwas größer geworden. |
|
Nach oben |
|
|
Eternal_pain
Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 28.09.2011, 23:57 Titel: |
|
|
Das Beispiel sieht auf den ersten blick ganz gut aus,
auch wenn ich noch nicht so ganz draus schlau werde...
Zitat: | [INFO ] 23:54:37 [__FB_MAINPROC__]:3.3.10237 Core Profile Forward-Compatible Context
[ERROR] 23:54:37 [GETGLPROC]:Can't find OpengGL Proc glDrawArrays
[INFO ] 23:54:37 [__FB_MAINPROC__]:openGL3.0 created
[INFO ] 23:54:37 [__FB_MAINPROC__]:VBO created
[ERROR] 23:54:37 [SHADER.COMPILESHADERSTRING]:VersuchsShader.txt Vertex Shader:
Vertex shader failed to compile with the following errors:
ERROR: error(#272) Implicit version number 110 not supported by GL3 forward compatible context
ERROR: error(#273) 2 compilation errors. No code generated
[ERROR] 23:54:38 [SHADER.COMPILESHADERSTRING]:VersuchsShader.txt Fragment Shader:
Fragment shader failed to compile with the following errors:
ERROR: error(#272) Implicit version number 110 not supported by GL3 forward compatible context
ERROR: error(#273) 2 compilation errors. No code generated
[INFO ] 23:54:38 [SHADER.COMPILESHADERFROMSTRING]:Shader VersuchsShader.txt no code generated
[ERROR] 23:54:38 [SHADER.UNIFORMMATRIX4FV]:Uniform Shader Variable matrix not found in Shader
|
Das Beispiel kann ich jedoch gar nicht erst starten... _________________
|
|
Nach oben |
|
|
Eternal_pain
Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 29.09.2011, 15:01 Titel: |
|
|
Gibts noch gute (möglichst deutsche) Tutorials die besonders auf OGL 3.x eingehen und das mit den VOB's?
Hab mir mal glew geladen, konnte mit swig aber nicht richtig übersetzen, da die GL header in FB nur deklarationen bis 1.3 haben...
so hab ich zB keinerlei deklarationen für glEnableVertexAttribArray(ARB) und glDisableVertexAttribArray(ARB)
die meisten Tutorials arbeiten immernoch mit glBegin und glEnd, wo ich ja von selbst schon abgekommen bin...
und das hier verstehe ich nicht ganz...
http://wiki.delphigl.com/index.php/Tutorial_Vertexbufferobject
und könnte mir irgendwer mal genauer erklären was es mit den forward compatibility context auf sich hat?! irgendwie gibt es drei verschiedene, aber nirgendwo wird für mich verständlich die unterschiede erklärt...
Edit:
Meine GraKa ist zwar schon lange nicht mehr die neuste, aber sie reicht allemal für meine Zwecke und die paar Spiele die ich nutze so sollte mit der eigentlich gut zu arbeiten sein:
Zitat: | ATI Radeon HD 2600 PRO ATI Technologies Inc.
OpenGL Version 3.3.10237 Compatibility Profile Context
OpenGL Version 3.3.10237 Core Profile Forward-Compatible Context
Shader Language Version: 3.30
Lokal verfügbarer Videospeicher 262144 KB
Nichtlokaler verfügbarer Videospeicher (AGP) 250624 KB
Rendering Bittiefe 16, 32
Z-Puffer Bittiefe 16
Minimale Texture-Größe 1 x 1
Maximale Texture-Größe 8192 x 8192
Vertex-Shader Version 3.0
Pixel-Shader Version 3.0 |
OpenGL nervt mich jetzt schon _________________
|
|
Nach oben |
|
|
darkinsanity aka sts
Anmeldungsdatum: 01.11.2006 Beiträge: 456
|
Verfasst am: 01.10.2011, 23:17 Titel: |
|
|
Eternal_pain hat Folgendes geschrieben: | und könnte mir irgendwer mal genauer erklären was es mit den forward compatibility context auf sich hat?! irgendwie gibt es drei verschiedene, aber nirgendwo wird für mich verständlich die unterschiede erklärt... |
Ich versuchs mal: Mit OpenGL 3.0 wurde der forward-compatible context eingeführt. Compatibility und Core sind zwei Profile: Compatibility bietet dir noch veraltete Funktionen, während Core eben nur noch die modernen Funktionen bietet.
Das VBO Tutorial von DGL repräsentiert nicht den momentanen Stand der Technik. Meiner Meinung nach solltest du dir mal das ansehen: Klick.
Allerdings muss dir klar sein, dass bei OpenGL 3 auch einiges rausfliegt: Der gesamte "vorgefertigte" Matrix-Kram ist weg (glPushMatrix, glScale usw.), was das ganze für FB ziemlich doof macht.
So richtig "benutzerfreundlich" ist OpenGL 3+ eigentlich nur in C++, denn da hast du glm für den Matrix-Kram und glew für Extensions.
Da die neueren OpenGL Varianten eben noch relativ frisch sind und nebenbei auch ziemlich komplex, gibt es da echt wenig einsteigerfreundliches Material.
Das das Beispiel bei dir nicht geht ist logisch: Das Beispiel erstellt einen OpenGL 3.3 Context, aber die Shader sind nicht 3.3 konform. Nvidia ist da relativ tolerant, die AMD Treiber aber nicht. _________________ Traue keinem Computer, den du nicht aus dem Fenster werfen kannst -- Steve Wozniak |
|
Nach oben |
|
|
Eternal_pain
Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 10.10.2011, 16:07 Titel: |
|
|
Erst einmal danke für die Erklärung,
aufgrund der schwierigkeiten mit dem Core context habe ich mich erst einmal dazu entschlossen mit dem Forward Context zu arbeiten, der meinen ansprüchen ohnehin mehr als ausreichen 'sollte' für den Anfang ist es jedenfalls einfacher für mich...
Trotzdem habe ich direkt wieder ein neues 'Anfänger Problem'
Nachdem ich jetzt mehrere Tage versucht habe eine 'ansehnliches' Terrain mit Heightmap+Blending
zu erzeugen und mich vor der Möglichkeit mit Shadern gedrückt habe, geb ich das mit dem blending wie bisher auf und will versuchen wie überall vorgeschlagen das ganze mittels Shader zu versuchen.
Da ich allerding keine ahnung davon habe und mich durchlesen und probieren muss,
nehm ich mal das anfänger Tutorial von hier: http://wiki.delphigl.com/index.php/Tutorial_glsl
So hab ich erstmal GL eingebunden
GL_GLEXT_PROTOTYPES hab ich definiert damit auch die notwendigen Functionen declariert sind...
Code: |
#include once "GL/gl.bi"
#include once "GL/glu.bi"
#Define GL_GLEXT_PROTOTYPES
#include once "GL/glext.bi"
|
Aus dem Beispiel habe ich dann folgenen Code versucht:
Code: |
Dim ProgramObject as GLhandleARB 'oder GLuint
Dim VertexShaderObject as GLhandleARB 'oder GLuint
Dim FragmentShaderObject as GLhandleARB 'oder GLuint
ProgramObject = glCreateProgram()
|
Werd aber direkt vom Compiler angeschnautzt :/
fbc hat Folgendes geschrieben: | E:\FreeBASIC\FBIDETEMP.o:fake:(.text+0x3b1): undefined reference to `glCreateProgram@0' |
Ich nehme an ich hab veraltete Header oder DLL's bzw linker...
gibts dafür abhilfe? _________________
|
|
Nach oben |
|
|
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 10.10.2011, 16:10 Titel: |
|
|
GLEW
http://elf-stone.com/glee.php (ist aber nur OpenGL 3.0 kompatibel)
Die Standard-Windowsbibliotheken sind auf dem Stand von OpenGL 1.5 (circa) |
|
Nach oben |
|
|
Eternal_pain
Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 10.10.2011, 16:21 Titel: |
|
|
Version 3.0 würde mir ja ausreichen wenn alles funktioniert...
Aber.. GLEW habe ich mir schon vor längerem mal geladen V1.7.0..
wollte die glew.h dann mit swig übersetzen..
klappt leider nur halb
Code: |
''
''
'' mod_glew -- header translated with help of SWIG FB wrapper
''
'' NOTICE: This file is part of the FreeBASIC Compiler package and can't
'' be included in other distributions without authorization.
''
''
#ifndef __mod_glew_bi__
#define __mod_glew_bi__
#include once "glew.bi"
#endif
'' List of symbols not found:
'' __GLsync at glew
'' int64_t at glew
'' uint64_t at glew
'' _cl_context at glew
'' _cl_event at glew
'' ptrdiff_t at glew
|
_________________
|
|
Nach oben |
|
|
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 10.10.2011, 16:33 Titel: |
|
|
include mal ein paar Header in deine glew.h, bspw. gl, Standardlib etc.
Dafür benötigst du natürlich eine C-Umgebung im PATH.. |
|
Nach oben |
|
|
Eternal_pain
Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 10.10.2011, 17:58 Titel: |
|
|
Sorry, aber irgendwie raff ich's ned
Hab inzwischen auch alle C Header dabei, trotzdem werden ein paar Types nicht gefunden, welche ich zumindest teilweise von hand ergänzen konnte:
Code: |
'Eigene Type ergänzung:'
Type int64_t as LongInt
Type uint64_t as ULongInt
'------------'
|
Nu kommt der mir aber überall mit incomplete Type's
wie zB Code: | type PFNGLBEGINQUERYPROC as sub(byval as GLenum, byval as GLuint) |
Dieser Type (wie auch die anderen) ist aber in der glew.bi wie auch in der glext.bi genau gleich, und da meckert der nicht?! _________________
|
|
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.
|
|