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:

OpenGL Anfängerproblem
Gehe zu Seite 1, 2, 3, 4  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Bibliotheken
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Eternal_pain



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

BeitragVerfasst am: 26.09.2011, 14:19    Titel: OpenGL Anfängerproblem Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
XOR



Anmeldungsdatum: 23.07.2010
Beiträge: 161

BeitragVerfasst am: 26.09.2011, 15:34    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 26.09.2011, 17:06    Titel: Re: OpenGL Anfängerproblem Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Eternal_pain



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

BeitragVerfasst am: 26.09.2011, 19:56    Titel: Antworten mit Zitat

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 peinlich

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 26.09.2011, 20:40    Titel: Antworten mit Zitat

Liegt evtl. am compat. Profil. Hatte damit schon öfters Probleme, einfach nen richtigen OpenGL3/4 Kontext erstellen zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



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

BeitragVerfasst am: 26.09.2011, 21:19    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
XOR



Anmeldungsdatum: 23.07.2010
Beiträge: 161

BeitragVerfasst am: 27.09.2011, 06:43    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



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

BeitragVerfasst am: 27.09.2011, 07:33    Titel: Antworten mit Zitat

Vielen Dank (sogar mit Linux happy)
Es funktioniert soweit wohl genau so wie es soll lächeln

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
XOR



Anmeldungsdatum: 23.07.2010
Beiträge: 161

BeitragVerfasst am: 27.09.2011, 15:17    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



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

BeitragVerfasst am: 27.09.2011, 15:34    Titel: Antworten mit Zitat

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 happy
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 27.09.2011, 16:06    Titel: Antworten mit Zitat

Eternal_pain hat Folgendes geschrieben:
Na da kommt ja wirklich freude auf :S

Naja dafür haste jetzt praktisch garantierte zukunftskompatibilität...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
XOR



Anmeldungsdatum: 23.07.2010
Beiträge: 161

BeitragVerfasst am: 28.09.2011, 17:02    Titel: Antworten mit Zitat

Ein Beispiel für OpenGL3.
Ist etwas größer geworden.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



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

BeitragVerfasst am: 28.09.2011, 22:57    Titel: Antworten mit Zitat

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
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: 29.09.2011, 14:01    Titel: Antworten mit Zitat

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 peinlich
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
darkinsanity
aka sts


Anmeldungsdatum: 01.11.2006
Beiträge: 456

BeitragVerfasst am: 01.10.2011, 22:17    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



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

BeitragVerfasst am: 10.10.2011, 15:07    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 10.10.2011, 15:10    Titel: Antworten mit Zitat

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) zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



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

BeitragVerfasst am: 10.10.2011, 15:21    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 10.10.2011, 15:33    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



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

BeitragVerfasst am: 10.10.2011, 16:58    Titel: Antworten mit Zitat

Sorry, aber irgendwie raff ich's ned mit dem Kopf durch die Mauer wollen

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Bibliotheken Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2, 3, 4  Weiter
Seite 1 von 4

 
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