LZScene

Форк
0
/
GLViewer.pas 
96 строк · 2.5 Кб
1
//
2
// This unit is part of the GLScene Engine https://github.com/glscene
3
//
4
{
5
    Platform independant viewer.
6

7
    History:
8
       13/06/12 - Yar - Bugfix synchronization control for Mac OS (thanks to pchev)	
9
       23/08/10 - Yar - Replaced OpenGL1x to OpenGLTokens
10
       30/04/10 - Yar - Added vertical synchronization cntrol for Linux (by Rustam Asmandiarov aka Predato) 
11
       17/09/07 - DaStr - Replaced $IFNDEF KYLIX to $IFDEF MSWINDOWS in 
12
                              SetupVSync() because wgl* functions are Windows-specific
13
       12/09/07 - DaStr - Fixed SetupVSync() function (Bugtracker ID = 1786279)
14
                             Made cross-platform code easier to read
15
       12/07/07 - DaStr - Added SetupVSync
16
       30/03/07 - DaStr - Another update after the previous fix (removed class())
17
                             Added TVSyncMode type and constants.
18
       24/03/07 - DaStr - Update for Windows after the previous fix
19
       21/03/07 - DaStr - Improved Cross-Platform compatibility
20
                             (thanks Burkhard Carstens) (Bugtracker ID = 1684432)
21
       17/03/07 - DaStr - Dropped Kylix support in favor of FPC (BugTrackerID=1681585)
22
       24/01/02 -  EG   - Initial version
23
}
24

25
unit GLViewer;
26

27
interface
28

29
{$I GLScene.inc}
30

31
uses
32
  GLContext,
33

34
  GLLCLViewer;
35
type
36

37
  TGLSceneViewer = GLLCLViewer.TGLSceneViewer;
38

39

40
procedure SetupVSync(const AVSyncMode : TVSyncMode);
41

42
implementation
43

44
uses
45
  OpenGLTokens, OpenGLAdapter;
46

47
procedure SetupVSync(const AVSyncMode : TVSyncMode);
48
{$IFDEF MSWINDOWS}
49
var
50
  I: Integer;
51
begin
52
  if GL.W_EXT_swap_control then
53
  begin
54
    I := GL.WGetSwapIntervalEXT;
55
    case AVSyncMode of
56
      vsmSync  : if I <> 1 then GL.WSwapIntervalEXT(1);
57
      vsmNoSync: if I <> 0 then GL.WSwapIntervalEXT(0);
58
    else
59
       Assert(False);
60
    end;
61
  end;
62
end;
63
{$ENDIF}
64
{$IFDEF Linux}
65
begin
66
  if GL.X_SGI_swap_control then
67
  begin
68
    case AVSyncMode of
69
      vsmSync  : GL.XSwapIntervalSGI(GL_True);
70
      vsmNoSync: GL.XSwapIntervalSGI(GL_False);
71
    else
72
       Assert(False);
73
    end;
74
  end;
75
end;
76
{$ENDIF}
77
{$IFDEF DARWIN}
78
var ctx: TAGLContext;
79
const ISync: Integer = 0;
80
      INoSync: Integer = 1;
81
begin
82
  if Assigned(GL) then
83
  begin
84
    ctx := GL.aGetCurrentContext();
85
    if Assigned(ctx) then
86
      case AVSyncMode of
87
        vsmSync  : GL.aSetInteger(ctx, AGL_SWAP_INTERVAL, @ISync); 
88
        vsmNoSync: GL.aSetInteger(ctx, AGL_SWAP_INTERVAL, @INoSync);
89
      else
90
         Assert(False);
91
      end;
92
  end;
93
end;
94
{$ENDIF}
95

96
end.
97

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.