0

After upgrading to Delphi XE5 and latest GLScene, on some PC's the TGLSceneForm crashes the app completely (see log file below). However if I take the exact same app and compile it in Delphi 2010 (with older version of GLScene) it works perfectly!

It only does this on some PC's. For example we have 3 HP workstations in our office, with the XE5 app 2 work fine and 1 crashes (has a different graphics adapter). However all 3 PC's work ok when compiled in Delphi 2010!

The GLScene log file from the app is:

Thread ID 12776 0    (i)  Log subsystem started in elapsed time mode.
Thread ID 12776 0    (i)  Logging [debug info (D), info (i), notices (M), warnings (W), errors (Er), fatal errors (!!)]
Thread ID 12776 0    (i)  Buffered mode: False
Thread ID 12776 0    (M)  Service thread started
Thread ID 12776 234  (i)  Temporary rendering context created
Thread ID 12776 234  (M)  Getting OpenGL entry points and extension
Thread ID 12776 234  (M)  
Thread ID 12776 234  (i)  OpenGL rendering context information:
Thread ID 12776 234  (i)  Renderer     : AMD Radeon HD 6570  
Thread ID 12776 234  (i)  Vendor       : ATI Technologies Inc.
Thread ID 12776 250  (i)  Version      : 4.1.10765 Compatibility Profile Context
Thread ID 12776 250  (i)  GLSL version : 4.10
Thread ID 12776 250  (M)  
Thread ID 12776 297  (M)  Getting OpenGL entry points and extension
Thread ID 12776 312  (i)  Backward compatible core PBuffer context successfully created
Thread ID 12776 312  (M)  Service context successfuly initialized
Thread ID 7680  1311     (i)  Temporary rendering context created
Thread ID 7680  1311     (M)  Getting OpenGL entry points and extension
Thread ID 7680  1311     (i)  Temporary rendering context destroyed
Thread ID 7680  1358     (M)  Getting OpenGL entry points and extension
Thread ID 7680  1373     (D)  glDebugMessageEnableAMD parameter <category> has an invalid enum '0x1' (GL_INVALID_ENUM)

The code for the sample is below:

program GLSceneError;

uses
  EMemLeaks,
  EResLeaks,
  EDialogWinAPIMSClassic,
  EDialogWinAPIEurekaLogDetailed,
  EDialogWinAPIStepsToReproduce,
  EDebugExports,
  EFixSafeCallException,
  EMapWin32,
  EAppVCL,
  ExceptionLog7,
  Vcl.Forms,
  ufrmMain in 'ufrmMain.pas' {frmMain},
  ufrmGLScene in 'ufrmGLScene.pas' {frmGLScene: TGLSceneForm};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TfrmMain, frmMain);
  Application.Run;
end.

unit ufrmMain;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TfrmMain = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmMain: TfrmMain;

implementation

{$R *.dfm}

uses ufrmGLScene;

procedure TfrmMain.Button1Click(Sender: TObject);
begin
  try
    if not Assigned(frmGLScene) then
      Application.CreateForm(TfrmGLScene, frmGLScene);

    frmGLScene.Show;
  except
    on E: Exception do
    begin
      ShowMessage(E.Message);
    end;
  end;
end;

end.

object frmMain: TfrmMain
  Left = 0
  Top = 0
  Caption = 'frmMain'
  ClientHeight = 182
  ClientWidth = 199
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Button1: TButton
    Left = 32
    Top = 32
    Width = 141
    Height = 57
    Caption = 'Open GLScene Viewer'
    TabOrder = 0
    OnClick = Button1Click
  end
end

unit ufrmGLScene;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  GLScene, GLSceneForm;

type
  TfrmGLScene = class(TGLSceneForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmGLScene : TfrmGLScene;

implementation

{$R *.dfm}

end.

object frmGLScene: TfrmGLScene
  Left = 246
  Top = 74
  Caption = 'GLScene'
  ClientHeight = 326
  ClientWidth = 405
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  Position = poMainFormCenter
  Buffer.BackgroundColor = 2064383
  FullScreenVideoMode.Width = 1920
  FullScreenVideoMode.Height = 1080
  FullScreenVideoMode.ColorDepth = 32
  FullScreenVideoMode.Frequency = 50
  PixelsPerInch = 96
  TextHeight = 13
end

I've got no idea where to turn since this appears to be some kind of fundamental issue with GLScene since upgrading to XE5. I can't push out software which requires all of our customers to troubleshoot graphics adapters, particularly since it is working Delphi 2010 on the exact same PC's so I know it is not our programming causing the issue.

Any ideas or help would be greatly appreciated. Rick.

Danilo Casa
  • 506
  • 1
  • 9
  • 18
Rick Wheeler
  • 1,142
  • 10
  • 22
  • You should check the difference in the GLScene Versions on theses part:glDebugMessageEnableAMD parameter has an invalid enum '0x1' (GL_INVALID_ENUM) – Fritzw May 13 '14 at 12:21

1 Answers1

2

The error is pretty clear :

glDebugMessageEnableAMD parameter <category> has an invalid enum '0x1' (GL_INVALID_ENUM)

Debug messages have only been core in OpenGL since version 4.3. You are running OpenGL 4.1. You need to upgrade OpenGL on the problematic system.

J...
  • 30,968
  • 6
  • 66
  • 143
  • Is it possible to change GLScene to use/bind an earlier version of OpenGL? I don't want to force hundreds of users to have to upgrade their graphics drivers if it can be avoided. – Rick Wheeler May 13 '14 at 22:07
  • @RickWheeler I don't know, I've never used GLScene. You might dig around the documentation to see if there are flags you can configure to drop newer core features. – J... May 13 '14 at 22:08