0023243: Adapt OpenGL viewer for using in Cocoa applications on Mac OS X
[occt.git] / src / OpenGl / OpenGl_Context_1.mm
CommitLineData
4fe56619 1// Created on: 2012-11-12
2// Created by: Kirill GAVRILOV
3// Copyright (c) 2012 OPEN CASCADE SAS
4//
5// The content of this file is subject to the Open CASCADE Technology Public
6// License Version 6.5 (the "License"). You may not use the content of this file
7// except in compliance with the License. Please obtain a copy of the License
8// at http://www.opencascade.org and read it completely before using this file.
9//
10// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
11// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
12//
13// The Original Code and all software distributed under the License is
14// distributed on an "AS IS" basis, without warranty of any kind, and the
15// Initial Developer hereby disclaims all such warranties, including without
16// limitation, any warranties of merchantability, fitness for a particular
17// purpose or non-infringement. Please see the License for the specific terms
18// and conditions governing the rights and limitations under the License.
19
20#if defined(__APPLE__) && !defined(MACOSX_USE_GLX)
21
22#import <Cocoa/Cocoa.h>
23
24#include <OpenGl_GlCore11.hxx>
25#include <OpenGl_Context.hxx>
26
27#include <Standard_ProgramError.hxx>
28
29// =======================================================================
30// function : IsCurrent
31// purpose :
32// =======================================================================
33Standard_Boolean OpenGl_Context::IsCurrent() const
34{
35 return myGContext != NULL
36 && [NSOpenGLContext currentContext] == (NSOpenGLContext* )myGContext;
37}
38
39// =======================================================================
40// function : MakeCurrent
41// purpose :
42// =======================================================================
43Standard_Boolean OpenGl_Context::MakeCurrent()
44{
45 if (myGContext == NULL)
46 {
47 Standard_ProgramError_Raise_if (myIsInitialized, "OpenGl_Context::Init() should be called before!");
48 return Standard_False;
49 }
50
51 [(NSOpenGLContext* )myGContext makeCurrentContext];
52 return Standard_True;
53}
54
55// =======================================================================
56// function : SwapBuffers
57// purpose :
58// =======================================================================
59void OpenGl_Context::SwapBuffers()
60{
61 if (myGContext != NULL)
62 {
63 glFinish();
64 [(NSOpenGLContext* )myGContext flushBuffer];
65 }
66}
67
68// =======================================================================
69// function : Init
70// purpose :
71// =======================================================================
72Standard_Boolean OpenGl_Context::Init()
73{
74 if (myIsInitialized)
75 {
76 return Standard_True;
77 }
78
79 myGContext = [NSOpenGLContext currentContext];
80 if (myGContext == NULL)
81 {
82 return Standard_False;
83 }
84
85 init();
86 myIsInitialized = Standard_True;
87 return Standard_True;
88}
89
90#endif // __APPLE__