texGen and CVA

Hi

I have problems with TexGen enabled and compiled vertex array.

This code crashes in nvoglnt.dll under nt4
and win2k on my TNT2U and GeForce 2MX cards

glEnableClientState(GL_VERTEX_ARRAY);

//one triangle
glVertexPointer(3,GL_FLOAT,0,verts);
glLockArraysEXT(0,3);

//first pass
glBindTexture(GL_TEXTURE_2D,bind1);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2,GL_FLOAT,0,tverts);
glDrawElements(GL_TRIANGLES,3,GL_UNSIGNED_INT,elems);

//second pass
glBindTexture(GL_TEXTURE_2D,bind2);
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
//crashes with any texGen mode
glTexGenf( GL_S,GL_TEXTURE_GEN_MODE,GL_SPHERE_MAP);
glTexGenf(
GL_T,GL_TEXTURE_GEN_MODE,GL_SPHERE_MAP);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);

//crash here
glDrawElements(GL_TRIANGLES,3,GL_UNSIGNED_INT,elems);
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);

glUnlockArraysEXT();

without CVA or if I enable TexGen for first pass and disable for second,everything works fine.Also on win98 where is no problems.

Please help.
What I am doing wrong ?

Thanks.

Probably

glLockArrays(0,33sizeof(float));

is required?

PS A ti znaesch russkie konferencii po OpenGL?

[This message has been edited by IronPeter (edited 12-22-2000).]

Hi.
>Probably glLockArrays(0,33sizeof(float)); >is required?

no.

PS net,ne znau.

Try this

//one triangle
glVertexPointer(3,GL_FLOAT,0,verts);
glTexCoordPointer(2,GL_FLOAT,0,tverts);
glLockArraysEXT(0,3);

//first pass
//second pass

glUnlockArraysEXT();

Hi.

Thank you for reply,but I still have the same
result.

I guess,it is driver issue,maybe nvidia
guys can help?

Thanks.

> glVertexPointer(3,GL_FLOAT,0,verts);

On Nvidia boards, i’ve heard this could cause crashs.
My suggestion is to try to use 4 floats for a vertex. Put the xyz coordinates as usual in the first three, and any number in the 4th (like 0.0).
Now use glVertexPointer(4,GL_FLOAT,0,verts).
As far as i remember, the reason is because vertices must be 16-bytes aligned. This is the mode used in Q3.
Hope that solves your problem,

Y.

Here is some similar code I have used successfully on TNT and TNT2 cards. And I haven’t heard of any complaints from Geforce users so I assume it works with those too.

glEnableClientState(GL_VERTEX_ARRAY_EXT);
glEnableClientState(GL_NORMAL_ARRAY_EXT);
glVertexPointerEXT(3,GL_FLOAT,sizeof(Vertex),numverts,transformedVerts->p);
glNormalPointerEXT(GL_FLOAT,sizeof(Vertex),numverts,transformedVerts->normal);
if(glLockArraysEXT)
glLockArraysEXT(0,numverts);
glEnableClientState(GL_TEXTURE_COORD_ARRAY_EXT);
glTexCoordPointerEXT(2,GL_FLOAT,sizeof(Vertex),numverts,transformedVerts->tex[k]);
glBindTexture(GL_TEXTURE_2D,sl->gltexbind);
glDrawElements(GL_TRIANGLES,numIndices,GL_UNSIGNED_INT,indices);
glBindTexture(GL_TEXTURE_2D,sl->gltexbind2);
glDisableClientState(GL_TEXTURE_COORD_ARRAY_EXT);
glTexGenf(GL_S,GL_TEXTURE_GEN_MODE,GL_SPHERE_MAP);
glTexGenf(GL_T,GL_TEXTURE_GEN_MODE,GL_SPHERE_MAP);
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
glDrawElements(GL_TRIANGLES,numIndices,GL_UNSIGNED_INT,indices);
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);

[This message has been edited by DFrey (edited 12-24-2000).]

I don’t have any idea why any of the code I’ve seen here so far would cause a crash.

  • Matt

Ysaneya - On my TNT, Quake3 does not use glVertexPointer(4,GL_FLOAT,0,verts), it uses glVertexPointer(3,GL_FLOAT,16,verts). Which amounts to the same thing I suppose.

[This message has been edited by DFrey (edited 12-23-2000).]

Hi

I tried all combinations
glVertexPointer(3,GL_FLOAT,16,verts);
glVertexPointer(4,GL_FLOAT,16,verts);
glVertexPointer(4,GL_FLOAT,0,verts);

and for glTexCoordPointer.

I tried code provided by DFrey.
Still crashes.

I always use glTexCoordPointer(2,GL_FLOAT,0,ptr);
and glVertexPointer(3,GL_FLOAT,16,ptr); in other projects and,as I said,it works fine without texgen.
Only CVA and texgen on second pass cause crash on my cards.
I have 7.17 drivers for both cards.

If you are interesting,i can email or post here a small glut example.

Thanks.

Don’t use the 7.17 drivers. They are leaked and unreliable. They should never have been seen by the general public.

  • Matt

I started a topic named “Compiled Vertex Arrays, GeForce2, Crash !?”. I also have problems with CVAs, my code only crashed on GF2 cards. Looks like this extension is a bit broken…

Tim

I’ve installed 7.17 drivers yestarday.
I thought latest drives would solve my problems, but …
already have replaced them with previos 7.04.
my code crashes with all drivers since 5.13
don’t now about earlier.
Also I’ve found out,that with multitexture where is no problems.

Thanks.

Don’t use 7.04, that’s probably even worse than 7.17…

I can’t debug it because I’m at my parents’ house right now, but can you post a link to an .exe so I can see whether it crashes or not on my system here?

  • Matt