This is the render method of the program.
I have replaced the variable names, so that you can just search for variable names stated below to see the use of glDrawElements on the two vertex arrays.
vertex array 1 is vertexArray_1
size of vertex array 1 is Size_Of_VertexArray_1
index Array 1 is indexArray_1
size of index array 1 is Size_Of_IndexArray_1
vertex array 2 is vertexArray_2
size of vertex array 2 is Size_Of_VertexArray_2
index Array 2 is indexArray_2
size of index array 2 is Size_Of_IndexArray_2
I also commented where in the code the access violation error occurs, and by commenting which part of the code the program will run regularly.
void CMeshH::Render()
{
glPushMatrix();
cgGLBindProgram(myCgVertexProgram_mesh);
cgGLEnableProfile(myCgVertexProfile_mesh);
cgGLBindProgram(myCgFragmentProgram_mesh);
cgGLEnableProfile(myCgFragmentProfile_mesh);
cgSetParameter4f(myCgFragmentParam_c, 1,0,0,1);
cgGLSetTextureParameter(myCgFragmentParam_decal, SPHERE_TEX_ID);
cgUpdateProgramParameters(myCgFragmentProgram_mesh);
glEnable(GL_POINT_SPRITE);
glTexEnvi(GL_POINT_SPRITE,GL_COORD_REPLACE,GL_TRUE);
cgGLSetStateMatrixParameter(myCgVertexParam_modelViewProj,
CG_GL_MODELVIEW_PROJECTION_MATRIX,
CG_GL_MATRIX_IDENTITY);
cgGLEnableTextureParameter(myCgFragmentParam_decal);
cgUpdateProgramParameters(myCgVertexProgram_mesh);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, SPHERE_TEX_ID);
glEnable(GL_BLEND);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, vertexArray_1);
glPointSize(sphereRadius);
//The access violation is thrown at this glDrawElements call.
glDrawElements(GL_POINTS,Size_Of_indexArray_1,GL_UNSIGNED_INT,indexArray_1);
/* If I uncomment this for loop, and comment glDrawElements call above, the program renders as usual
int t=0;
glBegin(GL_POINTS);
for(int i=0;i<Size_Of_indexArray_1;i++)
{
glVertex3f(wound->vertexArray_1[3*indexArray_1[i]],
wound->vertexArray_1[3*indexArray_1[i]+1],
wound->vertexArray_1[3*indexArray_1[i]+2]);
t+=3;
}
glEnd();
*/
glVertexPointer(3, GL_FLOAT, 0, vertexArray_2);
glEnableClientState(GL_NORMAL_ARRAY);
glNormalPointer(GL_FLOAT, 0, mpNormalArray);
glDisable(GL_POINT_SMOOTH);
glDisable(GL_POINT_SPRITE);
//disable CG shading
cgGLDisableProfile(myCgVertexProfile_mesh);
cgGLDisableProfile(myCgFragmentProfile_mesh);
cgGLDisableTextureParameter(myCgFragmentParam_decal);
glDisable(GL_TEXTURE_2D);
glColor3f(mRed, mGreen, mBlue);
if (LTE_WIRE_FRAME){
glPushAttrib(GL_POLYGON_BIT);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glColor3f(0.0f, 0.0f, 1.0f);
}
else {
glShadeModel(GL_SMOOTH);
if (!mOpaque)
{
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glColor4f(mRed_Body, mGreen_Body, mBlue_Body, mAlpha_Body);
}
if (mTextureEnabled)
{
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, mOuterTexture);
// enable and specify the texture coordinate array
if (mTextureEnabled && mpTexCoordArray)
{
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, mpTexCoordArray);
}
else glDisableClientState(GL_TEXTURE_COORD_ARRAY);
}
}
// enable and specify the colour array
if (mpColourArray != 0){
glEnableClientState(GL_COLOR_ARRAY);
glColorPointer(4, GL_FLOAT, 0, mpColourArray);
}
else glDisableClientState(GL_COLOR_ARRAY);
glDrawElements(GL_TRIANGLES,Size_Of_indexArray_2, GL_UNSIGNED_INT, indexArray_2);
if (!LTE_WIRE_FRAME && mTextureEnabled)
glBindTexture(GL_TEXTURE_2D, mGrooveTexture);
glDrawElements(GL_TRIANGLES, mGrooveIndexArraySize, GL_UNSIGNED_INT, mpGrooveIndexArray);
if (!mOpaque) glDisable(GL_BLEND);
glFlush();
if (mTextureEnabled)
glDisable(GL_TEXTURE_2D);
glDisableClientState(GL_NORMAL_ARRAY);
if (LTE_WIRE_FRAME)
glPopAttrib();
glPopMatrix();
glDisableClientState(GL_VERTEX_ARRAY);
}