10bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// Copyright 2016 The SwiftShader Authors. All Rights Reserved.
20bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens//
30bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// Licensed under the Apache License, Version 2.0 (the "License");
40bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// you may not use this file except in compliance with the License.
50bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// You may obtain a copy of the License at
60bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens//
70bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens//    http://www.apache.org/licenses/LICENSE-2.0
80bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens//
90bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// Unless required by applicable law or agreed to in writing, software
100bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// distributed under the License is distributed on an "AS IS" BASIS,
110bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
120bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// See the License for the specific language governing permissions and
130bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// limitations under the License.
140bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens
1527654c2509db2d7f9936815597c686d3339af480Corentin Wallez#ifndef sw_FrameBufferOSX_hpp
1627654c2509db2d7f9936815597c686d3339af480Corentin Wallez#define sw_FrameBufferOSX_hpp
1727654c2509db2d7f9936815597c686d3339af480Corentin Wallez
1827654c2509db2d7f9936815597c686d3339af480Corentin Wallez#include "Main/FrameBuffer.hpp"
1927654c2509db2d7f9936815597c686d3339af480Corentin Wallez
20cd0a4575b3d3b1aa4dcaf3ae7a7a142cd9895b32Corentin Wallez#import <Cocoa/Cocoa.h>
21cd0a4575b3d3b1aa4dcaf3ae7a7a142cd9895b32Corentin Wallez
2227654c2509db2d7f9936815597c686d3339af480Corentin Wallez@class CALayer;
2327654c2509db2d7f9936815597c686d3339af480Corentin Wallez
2427654c2509db2d7f9936815597c686d3339af480Corentin Walleznamespace sw
2527654c2509db2d7f9936815597c686d3339af480Corentin Wallez{
2627654c2509db2d7f9936815597c686d3339af480Corentin Wallez	class FrameBufferOSX : public FrameBuffer
2727654c2509db2d7f9936815597c686d3339af480Corentin Wallez	{
2827654c2509db2d7f9936815597c686d3339af480Corentin Wallez	public:
29cd0a4575b3d3b1aa4dcaf3ae7a7a142cd9895b32Corentin Wallez		FrameBufferOSX(CALayer *layer, int width, int height);
30cd0a4575b3d3b1aa4dcaf3ae7a7a142cd9895b32Corentin Wallez		~FrameBufferOSX() override;
3127654c2509db2d7f9936815597c686d3339af480Corentin Wallez
32241f789c783201a64127b7f28fea89db18c2609cNicolas Capens		void flip(sw::Surface *source) override;
33241f789c783201a64127b7f28fea89db18c2609cNicolas Capens		void blit(sw::Surface *source, const Rect *sourceRect, const Rect *destRect) override;
34cd0a4575b3d3b1aa4dcaf3ae7a7a142cd9895b32Corentin Wallez
35cd0a4575b3d3b1aa4dcaf3ae7a7a142cd9895b32Corentin Wallez		void *lock() override;
36cd0a4575b3d3b1aa4dcaf3ae7a7a142cd9895b32Corentin Wallez		void unlock() override;
3727654c2509db2d7f9936815597c686d3339af480Corentin Wallez
38cd0a4575b3d3b1aa4dcaf3ae7a7a142cd9895b32Corentin Wallez	private:
39cd0a4575b3d3b1aa4dcaf3ae7a7a142cd9895b32Corentin Wallez		int width;
40cd0a4575b3d3b1aa4dcaf3ae7a7a142cd9895b32Corentin Wallez		int height;
41cd0a4575b3d3b1aa4dcaf3ae7a7a142cd9895b32Corentin Wallez		CALayer *layer;
42cd0a4575b3d3b1aa4dcaf3ae7a7a142cd9895b32Corentin Wallez		uint8_t *buffer;
43cd0a4575b3d3b1aa4dcaf3ae7a7a142cd9895b32Corentin Wallez		CGDataProviderRef provider;
44cd0a4575b3d3b1aa4dcaf3ae7a7a142cd9895b32Corentin Wallez		CGColorSpaceRef colorspace;
45cd0a4575b3d3b1aa4dcaf3ae7a7a142cd9895b32Corentin Wallez		CGImageRef currentImage;
4627654c2509db2d7f9936815597c686d3339af480Corentin Wallez	};
4727654c2509db2d7f9936815597c686d3339af480Corentin Wallez}
4827654c2509db2d7f9936815597c686d3339af480Corentin Wallez
4927654c2509db2d7f9936815597c686d3339af480Corentin Wallez#endif   // sw_FrameBufferOSX
50