2 Replies Latest reply on May 4, 2010 7:15 AM by verput

    crash with atioglxx error

    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!

        • crash with atioglxx error
          genaganna

           

          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.

            • crash with atioglxx error
              verput

              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;