Получить ошибку SIGSEGV при добавлении PNGImage в TGLCompositeImage

Я использую Lazarus 1.2.4 и GLSCENE SVN 6462 (версия 1.2 SVN)

Я добавляю материал с этой функцией ниже

function AddMaterial(aMatLib: TGlMaterialLibrary; aFileName, aMaterialName: string):     TGlLibMaterial; overload;
  begin
    result := aMatLib.Materials.Add;
    with result do
      begin
        with Material do
          begin
            if aFileName= 'Fast_Blur' then
              begin
                MaterialOptions:= [moNoLighting];
                Texture.Disabled:= true;
                Texture.TextureMode:= tmDecal;
                BlendingMode:= bmModulate;
              end
            else
              begin
                MaterialOptions := [moIgnoreFog, moNoLighting];
                Texture.Disabled := false;
                Texture.TextureMode:= tmModulate;
                BlendingMode := bmTransparency;
              end;
         with FrontProperties do
           begin
             Ambient.SetColor(1, 1, 1, 1);
             if aFileName= 'Fast_Blur' then
              Diffuse.SetColor(204,204,204,1)
             else
              Diffuse.SetColor(1, 1, 1, 1);
             Emission.SetColor(1, 1, 1, 1);
             Specular.SetColor(1, 1, 1, 1);
           end;
     Texture.ImageClassName:= 'TGLCompositeImage';

       if aFileName<> 'Fast_Blur' then
         begin
           if ExtractFileExt(aFileName) = '.bmp' then
             TGLCompositeImage(Texture.Image).LoadFromFile(aFileName)
         else if ExtractFileExt(aFileName) = '.tga' then
            begin
              TGLCompositeImage(Texture.Image).LoadFromFile(aFileName);
            end
         else if ExtractFileExt(aFileName) = '' then
           TGLCompositeImage(Texture.Image).LoadFromFile(aFileName + '.png');
     end;
  end;
  Name := aMaterialName;
  end;
end;

Когда я запускаю его, я получаю ошибку ниже

Project One raised exception class "External : SIGSEGV"

Попробуйте покопаться и найдите, что когда pngimage попытается загрузить из потока строку

177

CODE
 if _png_sig_cmp(@sig, 0, 8) <> 0 then

И прежде чем выполнить повышение EInvalidRasterFile.Create('Invalid PNG file');

получить SIGSEGV..

Так что любой может помочь...

Ps... если я изменяю изображение TGLComposite с TGLPictureImage, то работает отлично, но у меня нет прозрачности изображений..

PS2... После еще копания я обнаружил, что все ошибки происходят от внешней LIBPNG, поэтому не работают хорошо вместе GLPNGFILE и LIBPNG

1 ответ

Мои настройки для *.png текстур:

  • Имя класса: TGLCompositeImage

  • альфа: tiaDefault

  • режим текстуры: tmAdd

Другие вопросы по тегам