Italia
Foro

glEnableClientState XProfan Absturz bei ~GL_NORMAL_ARRAY

 
- Page 1 -



Andreas
Gaida
Hi!
Bei mir verursacht glEnableClientState in verbindung mit ~GL_NORMAL_ARRAY einen Program absturz
in XProfan sowie auch mit Profan2CPP.
Während die anderen Arrays sich ohne Probleme aktivieren lassen macht dieser Ärger was sehr schade ist
weil in verbindung mit glVertexPointer und glDrawArrays ist er sehr schnell bei zeichnen vieler Objekte.
Ich hoffe es kann mir einer Helfen bei dem Problem.

Wenn im Beispiel Code in der Procedure DrawGLScene der oGL(glEnableClientState,$8075)
aktiviert wird stürzt das Programm sofort bei erreichen der stelle ab.
als Anhang habe ich einen Vollständigen Quellcode mit obj File angehängt .Das Programm liest die obj File ein und stellt die Vertex dar ,die Problem stelle per die Normalen ist noch auskommentiert.
Beim aktivieren dieser stelle in der proc DrawGLScene Stürzt das Programm ab .
Für Aiuto wäre ich sehr Dankbar.
KompilierenMarkierenSeparieren
proc DrawGLScene

    oGL(Clear)
    oGL(Move, 0,-0.2, -1.0)
    --------------------- Vierecke zeichnen -----------------------------------------------
    oGL(glEnableClientState,$8075)                   Normale Array aktivieren  $8075 = ~GL_NORMAL_ARRAY
    oGL(glEnableClientState,$8074)                   Vertex Array aktivieren   $8074 = ~GL_VERTEX_ARRAY
    oGL(glNormalPointer,3,$140A,0,vertex_NF4#)       Normale Array definieren  $140A = ~GL_DOUBLE
    oGL(glVertexPointer,3,$140A,0,vertex_VF4#)       Vertex Array definieren
    oGL(glDrawArrays,~GL_QUADS, 0 ,zähler_VF4&)      Vertex Array zeichnen
    oGL(glDisableClientState,$8074)                 glDisableClientState
    oGL(glDisableClientState,$8075)                  Normale Array deaktivieren
    --------------------- Dreicke zeichnen -----------------------------------------------
    oGL(glEnableClientState,$8075)                   Normale Array aktivieren  $8075
    oGL(glEnableClientState,$8074)                   Vertex Array aktivieren   $8074
    oGL(glNormalPointer,3,$140A,0,vertex_NF3#)       Normale Array definieren
    oGL(glVertexPointer,3,$140A,0,vertex_VF3#)       Vertex Array definieren
    oGL(glDrawArrays,~GL_TRIANGLES, 0 ,zähler_VF3&)  Vertex Array zeichnen
    oGL(glDisableClientState,$8074)                  Vertex Array deaktivieren
    oGL(glDisableClientState,$8075)                  Normale Array deaktivieren
    ---------------------------------------------------------------------------------------
    oGL(Show)
    GL_POINTS, GL_LINE_STRIP, GL_LINE_LOOP, GL_LINES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_TRIANGLES, GL_QUAD_STRIP, GL_QUADS, und GL_POLYGON.

endproc


MfG
Andreas

35 kB
Hochgeladen:01.06.2007
Downloadcounter33
Download
 
Athlon X2 4800 , 2GB Ram , GeForce 7800GT
Windows XP Pro , XProfan 10 und 11 , Profan2Cpp 1.6b
01.06.2007  
 



 
- Page 1 -


Windowttitle ist denkbar ungeeignet zum debuggen - da ein sendmessage gesendet wird. Du wirst damit also eben nicht immer die wirkliche Absturzstelle finden. Aber wenn Du dem Windowtitle mehr Vertrauen schenkst als dem echten Debugoutput des xpse dann werden wir aneinander vorbei reden müssen - hiernach kann ich dann aber nicht mehr helfen.

Wenn Du dennoch meine Vermutung hören möchtest: Da glDrawArrays abstürzt wird das Array falsch befüllt sein.


Habe die Konstanten nicht verwendet weil mir Profan2CPP die nicht angenommen hat.


Wer mit XPSE arbeitet hat solche Probleme nicht. Es gibt sogar einen extra Schalter {$cpp}.
 
01.06.2007  
 




Andreas
Gaida
Ich glaube dir ja
aber ich habe im quelltext 2 zeilen ausdokummentiert wenn beide aktiv sind
stürtzt es schon bei den glVertexPointer befehl ab es stürzt auch ab wenn glDrawArrays ausdokummentiert wird was gegen eine falsche bestückung des befehls spricht oder bin ich da so sehr auf dem holzweg

dieser code müsste früher abstürzen und wenn mann glDrawArrays ausdokummentiert stürtzt er trotzdem ab

Könntest du diesen teil in das Beispiel einfügen und es nochmal debugen ?
KompilierenMarkierenSeparieren
proc DrawGLScene

    oGL(Clear)
    oGL(Move, 0,-0.2, -1.0)
    --------------------- Vierecke zeichnen -----------------------------------------------
    oGL(glEnableClientState,$8075)                   Normale Array aktivieren  $8075 = ~GL_NORMAL_ARRAY
    oGL(glEnableClientState,$8074)                   Vertex Array aktivieren   $8074 = ~GL_VERTEX_ARRAY
    oGL(glNormalPointer,3,$140A,0,vertex_NF4#)       Normale Array definieren  $140A = ~GL_DOUBLE
    oGL(glVertexPointer,3,$140A,0,vertex_VF4#)       Vertex Array definieren
    oGL(glDrawArrays,~GL_QUADS, 0 ,zähler_VF4&)      Vertex Array zeichnen
    oGL(glDisableClientState,$8074)                 glDisableClientState
    oGL(glDisableClientState,$8075)                  Normale Array deaktivieren
    --------------------- Dreicke zeichnen -----------------------------------------------
    oGL(glEnableClientState,$8075)                   Normale Array aktivieren  $8075
    oGL(glEnableClientState,$8074)                   Vertex Array aktivieren   $8074
    oGL(glNormalPointer,3,$140A,0,vertex_NF3#)       Normale Array definieren
    oGL(glVertexPointer,3,$140A,0,vertex_VF3#)       Vertex Array definieren
    oGL(glDrawArrays,~GL_TRIANGLES, 0 ,zähler_VF3&)  Vertex Array zeichnen
    oGL(glDisableClientState,$8074)                  Vertex Array deaktivieren
    oGL(glDisableClientState,$8075)                  Normale Array deaktivieren
    ---------------------------------------------------------------------------------------
    oGL(Show)

endproc

 
Athlon X2 4800 , 2GB Ram , GeForce 7800GT
Windows XP Pro , XProfan 10 und 11 , Profan2Cpp 1.6b
01.06.2007  
 



Warum tust Du es nicht einfach selbst?

Gekürzter Auszug - unteres Ende ist Programmabbruch:
KompilierenMarkierenSeparieren
OGL(*Init*, %HWND, 0, 0, 0, 1)
@SET(*oGLDepth*, 1000)
SETTIMER 20

WHILENOT { WHILENOT ENDE% }/* LINE:11 {

WAITINPUT
DRAWGLSCENE
PROCEED PROCEDURE { proc DRAWGLSCENE } /* LINE:16 {
OGL(*Clear*)
OGL(*Move*, 0,-0.2, -1.0)
OGL(*glEnableClientState*,$8075)
OGL(*glEnableClientState*,$8074)
OGL(*glNormalPointer*,3,$140A,0,VERTEX
 
01.06.2007  
 




Andreas
Gaida
Danke schöne .
Dachte mir bis ich das mit dem debugen drauf habe würde länger dauern und so siehste auch gleich was ich meine . Wenn ich das richtig sehe ist es also doch der glNormalPointer befehl der alles stopt .

Hast Du oder jemand anders eine Idee wieso der spinnt es wird wohl nicht an OpenGL selber liegenoder wo mache ich einen blöden Fehler bei.

Ansonsten nochmals viellen Dank per die Aiuto.

MfG
Andreas
 
Athlon X2 4800 , 2GB Ram , GeForce 7800GT
Windows XP Pro , XProfan 10 und 11 , Profan2Cpp 1.6b
01.06.2007  
 



Na es gibt einen Grund dafür - die Daten die Du übergibst sind in falscher Struktur, Du wirst demnach einfach nur einen solchen von Dir beschriebenen blöden Fehler machen. *g*
 
01.06.2007  
 




Andreas
Gaida
Hier habe ich die Daten per die Normalen in die gleiche Struktur gebracht wie die der Vertex Daten
aber der Befehl stürzt immer noch ab .
Habe die selben Daten als Normale verwendet wie per das Rechteck sollte aber nicht das Programm
zum absturz bringen hösten merkwürdig aussehen aber die formatierung ist die gleiche wie sie bei zeichnen der Daten funktioniert.
Daten werden in der daten_init initialisiert.

Also ich gehe auch meisten davon aus das der Fehler bei mir liegt aber in diesem Fall fange ich an langsam daran zu zweifeln.
Währe aber trotzdem sehr froh darüber falls man mir einen Fehler aufzeigen potuto .
KompilierenMarkierenSeparieren
Declare Dateiname$,Datei$,ab$,rückgabe&,ende%
Declare vertex_P#,vertex_N#,vertex_T#,vertex_VF3#,vertex_VF4#,quad_A#
Declare zähler_P&,zähler_N&,zähler_T&,zähler_F&,zähler_VF3&,zähler_VF4&,vertex_NF3#,vertex_NF4#,zähler_NF4&
cls
daten_init
oGL(Init, %hWnd, 0, 0, 0, 1)
@Set(oGLDepth, 1000)
setTimer 20  max. 50 Frames /sek.

WhileNot ende%

    WaitInput
    DrawGLScene

EndWhile

ende_init

proc DrawGLScene

    oGL(Clear)
    oGL(Move, 0,-0.0, -5.0)
    --------------------- Vierecke zeichnen -----------------------------------------------
    oGL(glEnableClientState,~GL_NORMAL_ARRAY)             Normale Array aktivieren  $8075 = ~GL_NORMAL_ARRAY
    oGL(glEnableClientState,~GL_VERTEX_ARRAY)             Vertex Array aktivieren   $8074 = ~GL_VERTEX_ARRAY
    oGL(glNormalPointer,3,~GL_DOUBLE,0,vertex_NF4#)       Normale Array definieren  $140A = ~GL_DOUBLE
    oGL(glVertexPointer,3,~GL_DOUBLE,0,vertex_NF4#)       Vertex Array definieren
    oGL(glDrawArrays,~GL_QUADS, 0 ,zähler_VF4&)           Vertex Array zeichnen
    oGL(glDisableClientState,$8074)                      glDisableClientState
    oGL(glDisableClientState,$8075)                       Normale Array deaktivieren
    oGL(Show)

endproc

proc daten_init

    Dim vertex_P# ,240000
    Dim vertex_N# ,240000
    Dim vertex_T# ,160000
    Dim vertex_VF3#,120000
    Dim vertex_VF4#,120000
    Dim vertex_NF3#,120000
    Dim vertex_NF4#,120000
    Dim quad_A#    ,120000
    -------Vertex Array wird gefüllt ein Viereck--------------
    Float vertex_VF4#, 0 =   0.0
    Float vertex_VF4#, 8 =   1.0
    Float vertex_VF4#, 16 =  1.0
    Float vertex_VF4#, 24 =  0.0
    Float vertex_VF4#, 32 =  0.0
    Float vertex_VF4#, 40 =  1.0
    Float vertex_VF4#, 48 =  1.0
    Float vertex_VF4#, 56 =  0.0
    Float vertex_VF4#, 64 =  1.0
    Float vertex_VF4#, 72 =  1.0
    Float vertex_VF4#, 80 =  1.0
    Float vertex_VF4#, 88 =  1.0
    zähler_VF4& = 4
    -------Normal Vertex Array wird gefüllt---------------------
    Float vertex_NF4#, 0 =   0.0
    Float vertex_NF4#, 8 =   1.0
    Float vertex_NF4#, 16 =  1.0
    Float vertex_NF4#, 24 =  0.0
    Float vertex_NF4#, 32 =  0.0
    Float vertex_NF4#, 40 =  1.0
    Float vertex_NF4#, 48 =  1.0
    Float vertex_NF4#, 56 =  0.0
    Float vertex_NF4#, 64 =  1.0
    Float vertex_NF4#, 72 =  1.0
    Float vertex_NF4#, 80 =  1.0
    Float vertex_NF4#, 88 =  1.0
    zähler_NF4& = 4

endproc

proc ende_init

    Dispose vertex_P#
    Dispose vertex_N#
    Dispose vertex_T#
    Dispose vertex_VF3#
    Dispose vertex_VF4#
    Dispose vertex_NF3#
    Dispose vertex_NF4#
    Dispose_A#

endproc

 
Athlon X2 4800 , 2GB Ram , GeForce 7800GT
Windows XP Pro , XProfan 10 und 11 , Profan2Cpp 1.6b
01.06.2007  
 



 
- Page 2 -



KompilierenMarkierenSeparieren
REM ---FILE---
CLS
DATEN_INIT
PROCEED PROCEDURE { proc DATEN_INIT }/* LINE:27 {
DIM VERTEX_P# ,240000
DIM VERTEX_N# ,240000
DIM VERTEX_T# ,160000
DIM VERTEX_VF3#,120000
DIM VERTEX_VF4#,120000
DIM VERTEX_NF3#,120000
DIM VERTEX_NF4#,120000
DIM QUAD_A# ,120000
FLOAT VERTEX_VF4#, 0=0.0
FLOAT VERTEX_VF4#, 8=1.0
FLOAT VERTEX_VF4#, 16=1.0
FLOAT VERTEX_VF4#, 24=0.0
FLOAT VERTEX_VF4#, 32=0.0
FLOAT VERTEX_VF4#, 40=1.0
FLOAT VERTEX_VF4#, 48=1.0
FLOAT VERTEX_VF4#, 56=0.0
FLOAT VERTEX_VF4#, 64=1.0
FLOAT VERTEX_VF4#, 72=1.0
FLOAT VERTEX_VF4#, 80=1.0
FLOAT VERTEX_VF4#, 88=1.0
ZäHLER_VF4&=4
FLOAT VERTEX_NF4#, 0=0.0
FLOAT VERTEX_NF4#, 8=1.0
FLOAT VERTEX_NF4#, 16=1.0
FLOAT VERTEX_NF4#, 24=0.0
FLOAT VERTEX_NF4#, 32=0.0
FLOAT VERTEX_NF4#, 40=1.0
FLOAT VERTEX_NF4#, 48=1.0
FLOAT VERTEX_NF4#, 56=0.0
FLOAT VERTEX_NF4#, 64=1.0
FLOAT VERTEX_NF4#, 72=1.0
FLOAT VERTEX_NF4#, 80=1.0
FLOAT VERTEX_NF4#, 88=1.0
ZäHLER_NF4&=4
}
OGL(*Init*, %HWND, 0, 0, 0, 1)
@SET(*oGLDepth*, 1000)
SETTIMER 20
WHILENOT { WHILENOT ENDE% } /* LINE:10 {
WAITINPUT
DRAWGLSCENE
PROCEED PROCEDURE { proc DRAWGLSCENE } /* LINE:15 {
OGL(*Clear*)
OGL(*Move*, 0,-0.0, -5.0)
OGL(*glEnableClientState*,$8075)
OGL(*glEnableClientState*,$8074)
O
NormalPointer*,3,$140A,0,VERTEX_NF4#)
 
01.06.2007  
 




Andreas
Gaida
THX

Aber ich bin am ende der Fehler steck irgendwo in dem Befehl
OGL(*glNormalPointer*,3,$140A,0,VERTEX_NF4#)
Bin davon überzeugt das die Arrays soweit in ordnung sind wieso der Befehl abschmiert keine ahnung
aber solange das so ist kann ich OpenGl vergessen ,die anderen Befehle sind bei den Datenmengen die ich per eine 3D Animation aus obj dateien machen wollte einfach zu lahm

MfG
Andreas
 
Athlon X2 4800 , 2GB Ram , GeForce 7800GT
Windows XP Pro , XProfan 10 und 11 , Profan2Cpp 1.6b
01.06.2007  
 




RGH
Hallo Andreas,

ich fürchte, Du hast die Microsoft-Aiuto zu OpenGL nicht ausführlich genug studiert! glNormalPointer hat da einen Parameter weniger:

[...] 

The glNormalPointer function defines an array of normals.

void glNormalPointer(
GLenum type,
GLsizei stride,
const GLvoid *pointer
);

Parameters

type - The data type of each coordinate in the array using the following symbolic constants: GL_BYTE, GL_SHORT, GL_INT, GL_FLOAT, and GL_DOUBLE.
stride - The byte offset between consecutive normals. When stride is zero, the normals are tightly packed in the array.
pointer - A pointer to the first normal in the array.


Saluto
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
01.06.2007  
 




RGH
Nochmal ich:

So geht es also:
KompilierenMarkierenSeparieren
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
01.06.2007  
 




Andreas
Gaida
Vielen Dank !

Ich muss leider zugeben das ich nicht mit der Microsoft hilfe gearbeitet habe sondern
den Quelcode von C aus dem Internet habe :

glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);

glColorPointer(3, GL_FLOAT, 0, color);
glTexCoordPointer(2, GL_FLOAT, 0, texcoord);
glNormalPointer(3, GL_FLOAT, 0, normal);
glVertexPointer(3, GL_FLOAT, 0, vertex);

was sich jetzt leider als ein schwerer fehler per mich erwiesen hat . Ich werde mich doch lieber
auf Microsoft in Zukunft verlassen.
Ich möchte mich bei Dir und IF nochmals per die Aiuto bedanken und mich per die Umstände die ich gemacht habe entschuldigen .

MfG
Andreas
 
Athlon X2 4800 , 2GB Ram , GeForce 7800GT
Windows XP Pro , XProfan 10 und 11 , Profan2Cpp 1.6b
01.06.2007  
 



Du musst Dich keinesfalls entschuldigen!
 
01.06.2007  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

3.824 Views

Untitledvor 0 min.

Themeninformationen

Dieses Thema hat 3 subscriber:

Andreas Gaida (8x)
iF (8x)
RGH (2x)


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie