2018-10-07 03:36:44 +00:00
|
|
|
#pragma once
|
2015-11-09 02:24:45 +00:00
|
|
|
#if __APPLE__
|
|
|
|
|
2015-12-31 04:54:11 +00:00
|
|
|
#if !__has_feature(objc_arc)
|
|
|
|
#error ARC Required
|
|
|
|
#endif
|
|
|
|
|
2016-07-31 20:25:02 +00:00
|
|
|
#if BOO_HAS_METAL
|
2015-11-16 22:03:46 +00:00
|
|
|
|
|
|
|
#include <Metal/Metal.h>
|
|
|
|
#include <QuartzCore/CAMetalLayer.h>
|
2015-11-18 23:55:25 +00:00
|
|
|
#include <unordered_map>
|
2015-12-09 22:23:22 +00:00
|
|
|
#include <mutex>
|
2015-11-16 22:03:46 +00:00
|
|
|
|
2015-11-09 02:24:45 +00:00
|
|
|
namespace boo
|
|
|
|
{
|
2015-11-18 23:55:25 +00:00
|
|
|
class IWindow;
|
2015-11-09 02:24:45 +00:00
|
|
|
struct MetalContext
|
|
|
|
{
|
2016-01-11 22:26:40 +00:00
|
|
|
id<MTLDevice> m_dev = nullptr;
|
|
|
|
id<MTLCommandQueue> m_q = nullptr;
|
2015-11-09 02:24:45 +00:00
|
|
|
struct Window
|
|
|
|
{
|
|
|
|
CAMetalLayer* m_metalLayer = nullptr;
|
2015-12-09 22:23:22 +00:00
|
|
|
std::mutex m_resizeLock;
|
|
|
|
bool m_needsResize;
|
|
|
|
CGSize m_size;
|
2015-11-09 02:24:45 +00:00
|
|
|
};
|
|
|
|
std::unordered_map<IWindow*, Window> m_windows;
|
2018-01-07 05:17:14 +00:00
|
|
|
uint32_t m_sampleCount = 1;
|
|
|
|
uint32_t m_anisotropy = 1;
|
2018-01-16 06:29:43 +00:00
|
|
|
MTLPixelFormat m_pixelFormat = MTLPixelFormatBGRA8Unorm;
|
2015-11-09 02:24:45 +00:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2015-11-16 22:03:46 +00:00
|
|
|
#else
|
|
|
|
namespace boo
|
|
|
|
{
|
|
|
|
struct MetalContext {};
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2015-11-09 02:24:45 +00:00
|
|
|
#endif // __APPLE__
|