Hallo!
My application is creshed with this error:
Exception with Klasse EAccessViolation. Zugriffsverletzung bei Adresse 6903151D in Modul atioglxx.dll. Lesen von Adresse (MEISTENS) 1D92100 aufgetretten.
I have ATI FireGL V7600 graphic.
It crashed not allways(WHY?), but often.
I make 3d rendering with Texture, using OpenGL, and need a functions as glTexImage3D and glTexParameterf.
What can I do?
Thanks!
Originally posted by: verput
Hallo! My application is creshed with this error:Exception with Klasse EAccessViolation. Zugriffsverletzung bei Adresse 6903151D in Modul atioglxx.dll. Lesen von Adresse (MEISTENS) 1D92100 aufgetretten.
I have ATI FireGL V7600 graphic. It crashed not allways(WHY?), but often.
I make 3d rendering with Texture, using OpenGL, and need a functions as glTexImage3D and glTexParameterf. What can I do?
Thanks!
Is it OpenCL application? If it is OpenGL application, This is not the appropriate place to ask this.
If it is OpenCL application, Please past your code here and give system information like OS, GPU, Driver version and SDK version.
I workd with OPENGL.
Code is too long.
System:windowsxp,
Treiber-Paketversion 8.723-100406a-098786C
Anbieter ATI Technologies Inc.
2D-Treiberversion 6.14.10.7070
Direct3D-Version 6.14.10.0743
OpenGL-Version 6.14.10.9756
Catalyst™ Control Center-Version 2010.0406.2133.36843
AIW/VIVO WDM-Treiberversion 6.14.10.6238
AIW/VIVO WDM-SP-Treiberversion 6.14.10.6238
If (gTexture.Handle = 0) Then Begin Assert (GL_EXT_texture3D, 'Graphic card does not support 3D textures.'); //Use PROXY to see if video card can support a texture... //http://www.opengl.org/resources/faq/technical/texture.htm //glTexImage3D(GL_PROXY_TEXTURE_2D, level, internalFormat, width, height, border, format, type, NULL); //Note the pixels parameter is NULL, because OpenGL doesn't load texel data when the target parameter is GL_PROXY_TEXTURE_2D. Instead, OpenGL merely considers whether it can accommodate a texture of the specified size and description. If the specified texture can't be accommodated, the width and height texture values will be set to zero. After making a texture proxy call, you'll want to query these values as follows: glTexImage3D (GL_PROXY_TEXTURE_3D, 0, GL_RGBA8, gTexture3D.FiltDim[1], gTexture3D.FiltDim[2], gTexture3D.FiltDim[3], 0, gTexture3D.DataType, GL_UNSIGNED_BYTE, nil); glGetTexLevelParameteriv(GL_PROXY_TEXTURE_3D, 0, GL_TEXTURE_WIDTH, @i); if i < 1 then begin showmessage('Your video card is unable to load an image that is this large.'); exit; end; //end of PROXY If (gTexture.Handle = 0) then gTexture.AllocateHandle; glBindTexture (GL_TEXTURE_3D, gTexture.Handle); glTexParameterf (GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameterf (GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP); glTexParameterf (GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP); glTexParameteri (GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri (GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); //OSX glTexImage3D not glTexImage3DEXT {$IFDEF Darwin} glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA8, gTexture3D.FiltDim[1], gTexture3D.FiltDim[2], gTexture3D.FiltDim[3], 0, gTexture3D.DataType, GL_UNSIGNED_BYTE, PChar(gTexture3D.FiltImg)); {$ELSE} glTexImage3DExt (GL_TEXTURE_3D, 0, GL_RGBA8, gTexture3D.FiltDim[1], gTexture3D.FiltDim[2], gTexture3D.FiltDim[3], 0, gTexture3D.DataType, GL_UNSIGNED_BYTE, PChar(gTexture3D.FiltImg)); {$ENDIF} //glTexImage3DEXT (GL_TEXTURE_3D, 0, GL_RGBA8, gTexture3D.FiltDim[1], gTexture3D.FiltDim[2], gTexture3D.FiltDim[3], 0, gTexture3D.DataType, GL_UNSIGNED_BYTE, PChar(gTexture3D.FiltImg)); //glTexImage3DEXT (GL_TEXTURE_3D, 0, GL_RGBA8, gTexture3D.Dim[1], gTexture3D.Dim[2], gTexture3D.Dim[3], 0, gTexture3D.Data_Type, GL_UNSIGNED_BYTE, PChar (gTexture3D.OData)); End; //new texture //exit; If M_Refresh = TRUE Then Begin //if texture changed due to loading new image, adjusting surface threshold, changing cutout M_Refresh := FALSE; Calculate_Transfer_Function; //glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA8, gTexture3D.Dim[1], gTexture3D.Dim[2], gTexture3D.Dim[3], 0, gTexture3D.Data_Type, GL_UNSIGNED_BYTE, PChar (gTexture3D.OData)); //glTexImage3DEXT (GL_TEXTURE_3D, 0, GL_RGBA8, gTexture3D.FiltDim[1], gTexture3D.FiltDim[2], gTexture3D.FiltDim[3], 0, gTexture3D.DataType, GL_UNSIGNED_BYTE, PChar(gTexture3D.FiltImg)); //OSX only supports glTexSubImage3D not glTexSubImage3DExt //Intel cards on Windows only support glTexSubImage3D not glTexSubImage3DExt {$IFDEF FPC} {$IFDEF Darwin} glTexSubImage3D (GL_TEXTURE_3D, 0, 0, 0, 0, gTexture3D.FiltDim[1], gTexture3D.FiltDim[2], gTexture3D.FiltDim[3], gTexture3D.DataType, GL_UNSIGNED_BYTE, PChar (gTexture3D.FiltImg)); {$ELSE} //The stable release of Lazarus GLScene for Windows only includes the Ext version... glTexSubImage3DExt (GL_TEXTURE_3D, 0, 0, 0, 0, gTexture3D.FiltDim[1], gTexture3D.FiltDim[2], gTexture3D.FiltDim[3], gTexture3D.DataType, GL_UNSIGNED_BYTE, PChar (gTexture3D.FiltImg)); {$ENDIF} {$ELSE} //not FPC - Intel cards on Windows prefer glTexSubImage3D over glTexSubImage3DExt glTexSubImage3D (GL_TEXTURE_3D, 0, 0, 0, 0, gTexture3D.FiltDim[1], gTexture3D.FiltDim[2], gTexture3D.FiltDim[3], gTexture3D.DataType, GL_UNSIGNED_BYTE, PChar (gTexture3D.FiltImg)); {$ENDIF} End; //if M_refresh // reset matrix - glLoadIdentity(); glPushAttrib (GL_ENABLE_BIT); glPushMatrix; glEnable (GL_BLEND); //glShadeModel(GL_SMOOTH); //integration can select brightest voxel that the ray traverses [MIP] // or the data can be integrated based on alpha level [trnanslucent slices] if MIPMenu.checked then glBlendEquationEXT(GL_MAX_EXT) else glBlendEquationEXT(GL_FUNC_ADD_EXT); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDisable (GL_CULL_FACE); glDisable (GL_LIGHTING); //glEnable (GL_LIGHTING); glTexGenf (GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); glTexGenf (GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); glTexGenf (GL_R, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); SetVector (v, XVector, 0.5); glTexGenfv (GL_S, GL_OBJECT_PLANE, @v); SetVector (v, YVector, 0.5); glTexGenfv (GL_T, GL_OBJECT_PLANE, @v); SetVector (v, ZVector, 0.5); glTexGenfv (GL_R, GL_OBJECT_PLANE, @v); glEnable (GL_TEXTURE_GEN_S); glEnable (GL_TEXTURE_GEN_T); glEnable (GL_TEXTURE_GEN_R); //without clip planes, voxels on the edges bleed into the periphery... glClipPlane(GL_CLIP_PLANE0, @clip0); glClipPlane(GL_CLIP_PLANE1, @clip1); glClipPlane(GL_CLIP_PLANE2, @clip2); glClipPlane(GL_CLIP_PLANE3, @clip3); glClipPlane(GL_CLIP_PLANE4, @clip4); glClipPlane(GL_CLIP_PLANE5, @clip5); glEnable(GL_CLIP_PLANE0); glEnable(GL_CLIP_PLANE1); glEnable(GL_CLIP_PLANE2); glEnable(GL_CLIP_PLANE3); glEnable(GL_CLIP_PLANE4); glEnable(GL_CLIP_PLANE5); //finally, draw object glBindTexture (GL_TEXTURE_3D, gTexture.Handle); if gPrefs.RenderQuality = kNORender then begin //draw slice sections instead of rendering... //glColor4f (1, 1, 1,1); //glBlendFunc (GL_ONE,GL_ZERO{GL_DST_COLOR, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA}); glBlendFunc (GL_ONE,GL_ZERO); glEnable (GL_TEXTURE_3D); // glMatrixMode(GL_MODELVIEW); z := 0; //slice glBegin (GL_QUADS); //X constant : sagittal glVertex3f (z, 1, 1); glVertex3f (z, -1, 1); glVertex3f (z,-1,-1); glVertex3f (z, 1, -1); //Y constant : coronal glVertex3f (1, z, 1); glVertex3f ( -1,z, 1); glVertex3f (-1,z,-1); glVertex3f (1,z, -1); //Z constant : axial glVertex3f (1, 1, z); glVertex3f (-1, 1, z); glVertex3f (-1,-1, z); glVertex3f (1, -1, z); glEnd; end else begin //not 2D planes ... next 3D rendering depthplanes := round(sqrt(sqr(gTexture3D.FiltDim[1])+sqr(gTexture3D.FiltDim[2])+sqr(gTexture3D.FiltDim[3]))); if gPrefs.RenderQuality = kFastRender then depthplanes := depthplanes div 2;//round(sqrt(sqr(gTexture3D.FiltDim[1])+sqr(gTexture3D.FiltDim[2])+sqr(gTexture3D.FiltDim[3]))); if depthplanes < 1 then depthplanes := 1; glEnable (GL_TEXTURE_3D); glGetFloatv (GL_MODELVIEW_MATRIX, @mat); vx [0] := mat [0] [0]; vy [0] := mat [0] [1]; vz [0] := mat [0] [2]; vx [1] := mat [1] [0]; vy [1] := mat [1] [1]; vz [1] := mat [1] [2]; vx [2] := mat [2] [0]; vy [2] := mat [2] [1]; vz [2] := mat [2] [2]; ScaleVector (vx, DIAGONAL_LENGTH * 0.5 / VectorLength (vx)); ScaleVector (vy, DIAGONAL_LENGTH * 0.5 / VectorLength (vy)); ScaleVector (vz, DIAGONAL_LENGTH * 0.5 / VectorLength (vz)); step := DIAGONAL_LENGTH / depthplanes; z := -DIAGONAL_LENGTH / 2; glBegin (GL_QUADS); glColor4f (gObjRed, gObjGreen, gObjBlue, 1.0); For i := 0 To depthplanes - 1 Do Begin //next line commented out...surface normals not used for volume rendering //glNormal3f (-GLCamera.AbsoluteVectorToTarget [0], -GLCamera.AbsoluteVectorToTarget [1], -GLCamera.AbsoluteVectorToTarget [2]); glVertex3f (vx [0] + vy [0] + vz [0] * z, vx [1] + vy [1] + vz [1] * z, vx [2] + vy [2] + vz [2] * z); glVertex3f (-vx [0] + vy [0] + vz [0] * z, -vx [1] + vy [1] + vz [1] * z, -vx [2] + vy [2] + vz [2] * z); glVertex3f (-vx [0] - vy [0] + vz [0] * z, -vx [1] - vy [1] + vz [1] * z, -vx [2] - vy [2] + vz [2] * z); glVertex3f (vx [0] - vy [0] + vz [0] * z, vx [1] - vy [1] + vz [1] * z, vx [2] - vy [2] + vz [2] * z); z := z + step; End; glEnd; end; //Rendering if MIPMenu.checked then //return to normal, otherwise overlay text appears odd.. glBlendEquationEXT(GL_FUNC_ADD_EXT); glPopMatrix; glPopAttrib;