mirror of https://github.com/AxioDL/boo.git
Add deep color arg to ApplicationRun
This commit is contained in:
parent
41cfb56c36
commit
3d987b6dc9
|
@ -64,6 +64,7 @@ ApplicationRun(IApplication::EPlatformType platform,
|
||||||
std::string_view gfxApi = {},
|
std::string_view gfxApi = {},
|
||||||
uint32_t samples = 1,
|
uint32_t samples = 1,
|
||||||
uint32_t anisotropy = 1,
|
uint32_t anisotropy = 1,
|
||||||
|
bool deepColor = false,
|
||||||
bool singleInstance=true);
|
bool singleInstance=true);
|
||||||
extern IApplication* APP;
|
extern IApplication* APP;
|
||||||
|
|
||||||
|
@ -76,6 +77,7 @@ ApplicationRun(IApplication::EPlatformType platform,
|
||||||
std::string_view gfxApi = {},
|
std::string_view gfxApi = {},
|
||||||
uint32_t samples = 1,
|
uint32_t samples = 1,
|
||||||
uint32_t anisotropy = 1,
|
uint32_t anisotropy = 1,
|
||||||
|
bool deepColor = false,
|
||||||
bool singleInstance=true)
|
bool singleInstance=true)
|
||||||
{
|
{
|
||||||
if (APP)
|
if (APP)
|
||||||
|
@ -84,7 +86,7 @@ ApplicationRun(IApplication::EPlatformType platform,
|
||||||
for (int i=1 ; i<argc ; ++i)
|
for (int i=1 ; i<argc ; ++i)
|
||||||
args.push_back(argv[i]);
|
args.push_back(argv[i]);
|
||||||
return ApplicationRun(platform, cb, uniqueName, friendlyName, argv[0], args,
|
return ApplicationRun(platform, cb, uniqueName, friendlyName, argv[0], args,
|
||||||
gfxApi, samples, anisotropy, singleInstance);
|
gfxApi, samples, anisotropy, deepColor, singleInstance);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,9 +34,10 @@ public:
|
||||||
{
|
{
|
||||||
None = 0,
|
None = 0,
|
||||||
RGBA8 = 1, /* Default */
|
RGBA8 = 1, /* Default */
|
||||||
RGBA8_Z24 = 2,
|
RGBA16 = 2,
|
||||||
RGBAF32 = 3,
|
RGBA8_Z24 = 3,
|
||||||
RGBAF32_Z24 = 4
|
RGBAF32 = 4,
|
||||||
|
RGBAF32_Z24 = 5
|
||||||
};
|
};
|
||||||
|
|
||||||
virtual ~IGraphicsContext() {}
|
virtual ~IGraphicsContext() {}
|
||||||
|
|
|
@ -15,6 +15,7 @@ struct GLContext
|
||||||
{
|
{
|
||||||
uint32_t m_sampleCount = 1;
|
uint32_t m_sampleCount = 1;
|
||||||
uint32_t m_anisotropy = 1;
|
uint32_t m_anisotropy = 1;
|
||||||
|
bool m_deepColor = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
class GLDataFactory : public IGraphicsDataFactory
|
class GLDataFactory : public IGraphicsDataFactory
|
||||||
|
|
|
@ -444,10 +444,12 @@ class GLTextureR : public GraphicsDataNode<ITextureR>
|
||||||
size_t m_width = 0;
|
size_t m_width = 0;
|
||||||
size_t m_height = 0;
|
size_t m_height = 0;
|
||||||
size_t m_samples = 0;
|
size_t m_samples = 0;
|
||||||
|
GLenum m_colorFormat;
|
||||||
size_t m_colorBindCount;
|
size_t m_colorBindCount;
|
||||||
size_t m_depthBindCount;
|
size_t m_depthBindCount;
|
||||||
GLTextureR(const ObjToken<BaseGraphicsData>& parent, GLCommandQueue* q, size_t width, size_t height, size_t samples,
|
GLTextureR(const ObjToken<BaseGraphicsData>& parent, GLCommandQueue* q, size_t width, size_t height,
|
||||||
TextureClampMode clampMode, size_t colorBindCount, size_t depthBindCount);
|
size_t samples, GLenum colorFormat, TextureClampMode clampMode,
|
||||||
|
size_t colorBindCount, size_t depthBindCount);
|
||||||
public:
|
public:
|
||||||
~GLTextureR()
|
~GLTextureR()
|
||||||
{
|
{
|
||||||
|
@ -486,14 +488,14 @@ public:
|
||||||
if (m_samples > 1)
|
if (m_samples > 1)
|
||||||
{
|
{
|
||||||
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, m_texs[0]);
|
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, m_texs[0]);
|
||||||
glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, m_samples, GL_RGBA, width, height, GL_FALSE);
|
glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, m_samples, m_colorFormat, width, height, GL_FALSE);
|
||||||
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, m_texs[1]);
|
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, m_texs[1]);
|
||||||
glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, m_samples, GL_DEPTH_COMPONENT24, width, height, GL_FALSE);
|
glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, m_samples, GL_DEPTH_COMPONENT24, width, height, GL_FALSE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
glBindTexture(GL_TEXTURE_2D, m_texs[0]);
|
glBindTexture(GL_TEXTURE_2D, m_texs[0]);
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
|
glTexImage2D(GL_TEXTURE_2D, 0, m_colorFormat, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
|
||||||
glBindTexture(GL_TEXTURE_2D, m_texs[1]);
|
glBindTexture(GL_TEXTURE_2D, m_texs[1]);
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, width, height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, nullptr);
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, width, height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, nullptr);
|
||||||
|
|
||||||
|
@ -507,7 +509,7 @@ public:
|
||||||
if (m_bindTexs[0][i])
|
if (m_bindTexs[0][i])
|
||||||
{
|
{
|
||||||
glBindTexture(GL_TEXTURE_2D, m_bindTexs[0][i]);
|
glBindTexture(GL_TEXTURE_2D, m_bindTexs[0][i]);
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
|
glTexImage2D(GL_TEXTURE_2D, 0, m_colorFormat, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1639,9 +1641,10 @@ GLDataFactory::Context::newDynamicTexture(size_t width, size_t height, TextureFo
|
||||||
}
|
}
|
||||||
|
|
||||||
GLTextureR::GLTextureR(const ObjToken<BaseGraphicsData>& parent, GLCommandQueue* q, size_t width, size_t height,
|
GLTextureR::GLTextureR(const ObjToken<BaseGraphicsData>& parent, GLCommandQueue* q, size_t width, size_t height,
|
||||||
size_t samples, TextureClampMode clampMode, size_t colorBindingCount, size_t depthBindingCount)
|
size_t samples, GLenum colorFormat, TextureClampMode clampMode,
|
||||||
|
size_t colorBindingCount, size_t depthBindingCount)
|
||||||
: GraphicsDataNode<ITextureR>(parent), m_q(q), m_width(width), m_height(height), m_samples(samples),
|
: GraphicsDataNode<ITextureR>(parent), m_q(q), m_width(width), m_height(height), m_samples(samples),
|
||||||
m_colorBindCount(colorBindingCount), m_depthBindCount(depthBindingCount)
|
m_colorFormat(colorFormat), m_colorBindCount(colorBindingCount), m_depthBindCount(depthBindingCount)
|
||||||
{
|
{
|
||||||
glGenTextures(2, m_texs);
|
glGenTextures(2, m_texs);
|
||||||
if (colorBindingCount)
|
if (colorBindingCount)
|
||||||
|
@ -1660,14 +1663,14 @@ GLTextureR::GLTextureR(const ObjToken<BaseGraphicsData>& parent, GLCommandQueue*
|
||||||
if (samples > 1)
|
if (samples > 1)
|
||||||
{
|
{
|
||||||
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, m_texs[0]);
|
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, m_texs[0]);
|
||||||
glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, samples, GL_RGBA, width, height, GL_FALSE);
|
glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, samples, colorFormat, width, height, GL_FALSE);
|
||||||
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, m_texs[1]);
|
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, m_texs[1]);
|
||||||
glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, samples, GL_DEPTH_COMPONENT24, width, height, GL_FALSE);
|
glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, samples, GL_DEPTH_COMPONENT24, width, height, GL_FALSE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
glBindTexture(GL_TEXTURE_2D, m_texs[0]);
|
glBindTexture(GL_TEXTURE_2D, m_texs[0]);
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
|
glTexImage2D(GL_TEXTURE_2D, 0, colorFormat, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
|
||||||
glBindTexture(GL_TEXTURE_2D, m_texs[1]);
|
glBindTexture(GL_TEXTURE_2D, m_texs[1]);
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, width, height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, nullptr);
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, width, height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, nullptr);
|
||||||
}
|
}
|
||||||
|
@ -1675,7 +1678,7 @@ GLTextureR::GLTextureR(const ObjToken<BaseGraphicsData>& parent, GLCommandQueue*
|
||||||
for (int i=0 ; i<colorBindingCount ; ++i)
|
for (int i=0 ; i<colorBindingCount ; ++i)
|
||||||
{
|
{
|
||||||
glBindTexture(GL_TEXTURE_2D, m_bindTexs[0][i]);
|
glBindTexture(GL_TEXTURE_2D, m_bindTexs[0][i]);
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
|
glTexImage2D(GL_TEXTURE_2D, 0, colorFormat, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
SetClampMode(GL_TEXTURE_2D, clampMode);
|
SetClampMode(GL_TEXTURE_2D, clampMode);
|
||||||
|
@ -1698,7 +1701,8 @@ GLDataFactory::Context::newRenderTexture(size_t width, size_t height, TextureCla
|
||||||
{
|
{
|
||||||
GLDataFactoryImpl& factory = static_cast<GLDataFactoryImpl&>(m_parent);
|
GLDataFactoryImpl& factory = static_cast<GLDataFactoryImpl&>(m_parent);
|
||||||
GLCommandQueue* q = static_cast<GLCommandQueue*>(factory.m_parent->getCommandQueue());
|
GLCommandQueue* q = static_cast<GLCommandQueue*>(factory.m_parent->getCommandQueue());
|
||||||
ObjToken<ITextureR> retval(new GLTextureR(m_data, q, width, height, factory.m_glCtx->m_sampleCount, clampMode,
|
ObjToken<ITextureR> retval(new GLTextureR(m_data, q, width, height, factory.m_glCtx->m_sampleCount,
|
||||||
|
factory.m_glCtx->m_deepColor ? GL_RGBA16 : GL_RGBA8, clampMode,
|
||||||
colorBindingCount, depthBindingCount));
|
colorBindingCount, depthBindingCount));
|
||||||
q->resizeRenderTexture(retval, width, height);
|
q->resizeRenderTexture(retval, width, height);
|
||||||
return retval;
|
return retval;
|
||||||
|
|
|
@ -490,7 +490,7 @@ class MetalTextureR : public GraphicsDataNode<ITextureR>
|
||||||
@autoreleasepool
|
@autoreleasepool
|
||||||
{
|
{
|
||||||
MTLTextureDescriptor* desc =
|
MTLTextureDescriptor* desc =
|
||||||
[MTLTextureDescriptor texture2DDescriptorWithPixelFormat:MTLPixelFormatBGRA8Unorm
|
[MTLTextureDescriptor texture2DDescriptorWithPixelFormat:ctx->m_pixelFormat
|
||||||
width:m_width height:m_height
|
width:m_width height:m_height
|
||||||
mipmapped:NO];
|
mipmapped:NO];
|
||||||
desc.storageMode = MTLStorageModePrivate;
|
desc.storageMode = MTLStorageModePrivate;
|
||||||
|
@ -521,7 +521,7 @@ class MetalTextureR : public GraphicsDataNode<ITextureR>
|
||||||
desc.usage = MTLTextureUsageShaderRead;
|
desc.usage = MTLTextureUsageShaderRead;
|
||||||
if (m_colorBindCount)
|
if (m_colorBindCount)
|
||||||
{
|
{
|
||||||
desc.pixelFormat = MTLPixelFormatBGRA8Unorm;
|
desc.pixelFormat = ctx->m_pixelFormat;
|
||||||
for (int i=0 ; i<m_colorBindCount ; ++i)
|
for (int i=0 ; i<m_colorBindCount ; ++i)
|
||||||
{
|
{
|
||||||
m_colorBindTex[i] = [ctx->m_dev newTextureWithDescriptor:desc];
|
m_colorBindTex[i] = [ctx->m_dev newTextureWithDescriptor:desc];
|
||||||
|
@ -799,7 +799,7 @@ class MetalShaderPipeline : public GraphicsDataNode<IShaderPipeline>
|
||||||
desc.fragmentFunction = m_frag.get().m_shader;
|
desc.fragmentFunction = m_frag.get().m_shader;
|
||||||
desc.vertexDescriptor = vtxFmt.cast<MetalVertexFormat>()->m_vdesc;
|
desc.vertexDescriptor = vtxFmt.cast<MetalVertexFormat>()->m_vdesc;
|
||||||
desc.sampleCount = targetSamples;
|
desc.sampleCount = targetSamples;
|
||||||
desc.colorAttachments[0].pixelFormat = MTLPixelFormatBGRA8Unorm;
|
desc.colorAttachments[0].pixelFormat = ctx->m_pixelFormat;
|
||||||
desc.colorAttachments[0].writeMask = (colorWrite ? COLOR_WRITE_MASK : 0) |
|
desc.colorAttachments[0].writeMask = (colorWrite ? COLOR_WRITE_MASK : 0) |
|
||||||
(alphaWrite ? MTLColorWriteMaskAlpha : 0);
|
(alphaWrite ? MTLColorWriteMaskAlpha : 0);
|
||||||
desc.colorAttachments[0].blendingEnabled = dstFac != BlendFactor::Zero;
|
desc.colorAttachments[0].blendingEnabled = dstFac != BlendFactor::Zero;
|
||||||
|
|
|
@ -67,7 +67,8 @@ public:
|
||||||
const std::vector<SystemString>& args,
|
const std::vector<SystemString>& args,
|
||||||
std::string_view gfxApi,
|
std::string_view gfxApi,
|
||||||
uint32_t samples,
|
uint32_t samples,
|
||||||
uint32_t anisotropy)
|
uint32_t anisotropy,
|
||||||
|
bool deepColor)
|
||||||
: m_callback(callback),
|
: m_callback(callback),
|
||||||
m_uniqueName(uniqueName),
|
m_uniqueName(uniqueName),
|
||||||
m_friendlyName(friendlyName),
|
m_friendlyName(friendlyName),
|
||||||
|
@ -76,8 +77,10 @@ public:
|
||||||
{
|
{
|
||||||
m_metalCtx.m_sampleCount = samples;
|
m_metalCtx.m_sampleCount = samples;
|
||||||
m_metalCtx.m_anisotropy = anisotropy;
|
m_metalCtx.m_anisotropy = anisotropy;
|
||||||
|
m_metalCtx.m_pixelFormat = deepColor ? MTLPixelFormatRGBA16Float : MTLPixelFormatBGRA8Unorm;
|
||||||
m_glCtx.m_sampleCount = samples;
|
m_glCtx.m_sampleCount = samples;
|
||||||
m_glCtx.m_anisotropy = anisotropy;
|
m_glCtx.m_anisotropy = anisotropy;
|
||||||
|
m_glCtx.m_deepColor = deepColor;
|
||||||
|
|
||||||
[[NSApplication sharedApplication] setActivationPolicy:NSApplicationActivationPolicyRegular];
|
[[NSApplication sharedApplication] setActivationPolicy:NSApplicationActivationPolicyRegular];
|
||||||
|
|
||||||
|
@ -228,6 +231,7 @@ int ApplicationRun(IApplication::EPlatformType platform,
|
||||||
std::string_view gfxApi,
|
std::string_view gfxApi,
|
||||||
uint32_t samples,
|
uint32_t samples,
|
||||||
uint32_t anisotropy,
|
uint32_t anisotropy,
|
||||||
|
bool deepColor,
|
||||||
bool singleInstance)
|
bool singleInstance)
|
||||||
{
|
{
|
||||||
std::string thrName = std::string(friendlyName) + " Main Thread";
|
std::string thrName = std::string(friendlyName) + " Main Thread";
|
||||||
|
@ -240,7 +244,8 @@ int ApplicationRun(IApplication::EPlatformType platform,
|
||||||
platform != IApplication::EPlatformType::Auto)
|
platform != IApplication::EPlatformType::Auto)
|
||||||
return 1;
|
return 1;
|
||||||
/* Never deallocated to ensure window destructors have access */
|
/* Never deallocated to ensure window destructors have access */
|
||||||
APP = new ApplicationCocoa(cb, uniqueName, friendlyName, pname, args, gfxApi, samples, anisotropy);
|
APP = new ApplicationCocoa(cb, uniqueName, friendlyName, pname, args,
|
||||||
|
gfxApi, samples, anisotropy, deepColor);
|
||||||
}
|
}
|
||||||
[NSApp run];
|
[NSApp run];
|
||||||
ApplicationCocoa* appCocoa = static_cast<ApplicationCocoa*>(APP);
|
ApplicationCocoa* appCocoa = static_cast<ApplicationCocoa*>(APP);
|
||||||
|
|
|
@ -30,6 +30,7 @@ struct MetalContext
|
||||||
std::unordered_map<IWindow*, Window> m_windows;
|
std::unordered_map<IWindow*, Window> m_windows;
|
||||||
uint32_t m_sampleCount = 1;
|
uint32_t m_sampleCount = 1;
|
||||||
uint32_t m_anisotropy = 1;
|
uint32_t m_anisotropy = 1;
|
||||||
|
MTLPixelFormat m_pixelFormat = MTLPixelFormatBGRA8Unorm;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -42,6 +42,16 @@ static const NSOpenGLPixelFormatAttribute PF_RGBA8_ATTRS[] =
|
||||||
0, 0
|
0, 0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const NSOpenGLPixelFormatAttribute PF_RGBA16_ATTRS[] =
|
||||||
|
{
|
||||||
|
NSOpenGLPFAAccelerated,
|
||||||
|
NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion3_2Core,
|
||||||
|
NSOpenGLPFADoubleBuffer,
|
||||||
|
NSOpenGLPFAColorSize, 48,
|
||||||
|
NSOpenGLPFAAlphaSize, 16,
|
||||||
|
0, 0
|
||||||
|
};
|
||||||
|
|
||||||
static const NSOpenGLPixelFormatAttribute PF_RGBA8_Z24_ATTRS[] =
|
static const NSOpenGLPixelFormatAttribute PF_RGBA8_Z24_ATTRS[] =
|
||||||
{
|
{
|
||||||
NSOpenGLPFAAccelerated,
|
NSOpenGLPFAAccelerated,
|
||||||
|
@ -80,6 +90,7 @@ static const NSOpenGLPixelFormatAttribute* PF_TABLE[] =
|
||||||
{
|
{
|
||||||
NULL,
|
NULL,
|
||||||
PF_RGBA8_ATTRS,
|
PF_RGBA8_ATTRS,
|
||||||
|
PF_RGBA16_ATTRS,
|
||||||
PF_RGBA8_Z24_ATTRS,
|
PF_RGBA8_Z24_ATTRS,
|
||||||
PF_RGBAF32_ATTRS,
|
PF_RGBAF32_ATTRS,
|
||||||
PF_RGBAF32_Z24_ATTRS
|
PF_RGBAF32_Z24_ATTRS
|
||||||
|
@ -207,7 +218,8 @@ public:
|
||||||
|
|
||||||
GraphicsContextCocoaGL(EGraphicsAPI api, IWindow* parentWindow,
|
GraphicsContextCocoaGL(EGraphicsAPI api, IWindow* parentWindow,
|
||||||
NSOpenGLContext* lastGLCtx, GLContext* glCtx)
|
NSOpenGLContext* lastGLCtx, GLContext* glCtx)
|
||||||
: GraphicsContextCocoa(api, EPixelFormat::RGBA8, parentWindow),
|
: GraphicsContextCocoa(api, glCtx->m_deepColor ?
|
||||||
|
EPixelFormat::RGBA16 : EPixelFormat::RGBA8, parentWindow),
|
||||||
m_lastCtx(lastGLCtx), m_glCtx(glCtx)
|
m_lastCtx(lastGLCtx), m_glCtx(glCtx)
|
||||||
{
|
{
|
||||||
m_dataFactory = _NewGLDataFactory(this, glCtx);
|
m_dataFactory = _NewGLDataFactory(this, glCtx);
|
||||||
|
@ -365,7 +377,9 @@ public:
|
||||||
MetalContext* m_metalCtx;
|
MetalContext* m_metalCtx;
|
||||||
|
|
||||||
GraphicsContextCocoaMetal(EGraphicsAPI api, IWindow* parentWindow, MetalContext* metalCtx)
|
GraphicsContextCocoaMetal(EGraphicsAPI api, IWindow* parentWindow, MetalContext* metalCtx)
|
||||||
: GraphicsContextCocoa(api, EPixelFormat::RGBA8, parentWindow),
|
: GraphicsContextCocoa(api,
|
||||||
|
(metalCtx->m_pixelFormat == MTLPixelFormatRGBA16Float) ?
|
||||||
|
EPixelFormat::RGBA16 : EPixelFormat::RGBA8, parentWindow),
|
||||||
m_parentWindow(parentWindow), m_metalCtx(metalCtx)
|
m_parentWindow(parentWindow), m_metalCtx(metalCtx)
|
||||||
{
|
{
|
||||||
m_dataFactory = _NewMetalDataFactory(this, metalCtx);
|
m_dataFactory = _NewMetalDataFactory(this, metalCtx);
|
||||||
|
@ -1229,7 +1243,8 @@ static boo::ESpecialKey translateKeycode(short code)
|
||||||
{
|
{
|
||||||
CAMetalLayer* layer = [CAMetalLayer new];
|
CAMetalLayer* layer = [CAMetalLayer new];
|
||||||
layer.device = m_ctx->m_dev;
|
layer.device = m_ctx->m_dev;
|
||||||
layer.pixelFormat = MTLPixelFormatBGRA8Unorm;
|
layer.pixelFormat = m_ctx->m_pixelFormat;
|
||||||
|
layer.colorspace = CGColorSpaceCreateDeviceRGB();
|
||||||
layer.framebufferOnly = NO;
|
layer.framebufferOnly = NO;
|
||||||
return layer;
|
return layer;
|
||||||
}
|
}
|
||||||
|
|
|
@ -569,6 +569,7 @@ int ApplicationRun(IApplication::EPlatformType platform,
|
||||||
std::string_view gfxApi,
|
std::string_view gfxApi,
|
||||||
uint32_t samples,
|
uint32_t samples,
|
||||||
uint32_t anisotropy,
|
uint32_t anisotropy,
|
||||||
|
bool deepColor,
|
||||||
bool singleInstance)
|
bool singleInstance)
|
||||||
{
|
{
|
||||||
std::string thrName = WCSTMBS(friendlyName.data()) + " Main Thread";
|
std::string thrName = WCSTMBS(friendlyName.data()) + " Main Thread";
|
||||||
|
|
|
@ -61,6 +61,7 @@ int ApplicationRun(IApplication::EPlatformType platform,
|
||||||
std::string_view gfxApi,
|
std::string_view gfxApi,
|
||||||
uint32_t samples,
|
uint32_t samples,
|
||||||
uint32_t anisotropy,
|
uint32_t anisotropy,
|
||||||
|
bool deepColor,
|
||||||
bool singleInstance)
|
bool singleInstance)
|
||||||
{
|
{
|
||||||
std::string thrName = std::string(friendlyName) + " Main Thread";
|
std::string thrName = std::string(friendlyName) + " Main Thread";
|
||||||
|
|
|
@ -302,12 +302,21 @@ struct TestApplicationCallback : IApplicationCallback
|
||||||
float pos[3];
|
float pos[3];
|
||||||
float uv[2];
|
float uv[2];
|
||||||
};
|
};
|
||||||
|
/*
|
||||||
static const Vert quad[4] =
|
static const Vert quad[4] =
|
||||||
{
|
{
|
||||||
{{0.5,0.5},{1.0,1.0}},
|
{{0.5,0.5},{1.0,1.0}},
|
||||||
{{-0.5,0.5},{0.0,1.0}},
|
{{-0.5,0.5},{0.0,1.0}},
|
||||||
{{0.5,-0.5},{1.0,0.0}},
|
{{0.5,-0.5},{1.0,0.0}},
|
||||||
{{-0.5,-0.5},{0.0,0.0}}
|
{{-0.5,-0.5},{0.0,0.0}}
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
static const Vert quad[4] =
|
||||||
|
{
|
||||||
|
{{1.0,1.0},{1.0,1.0}},
|
||||||
|
{{-1.0,1.0},{0.0,1.0}},
|
||||||
|
{{1.0,-1.0},{1.0,0.0}},
|
||||||
|
{{-1.0,-1.0},{0.0,0.0}}
|
||||||
};
|
};
|
||||||
auto vbo = ctx.newStaticBuffer(BufferUse::Vertex, quad, sizeof(Vert), 4);
|
auto vbo = ctx.newStaticBuffer(BufferUse::Vertex, quad, sizeof(Vert), 4);
|
||||||
|
|
||||||
|
@ -361,7 +370,8 @@ struct TestApplicationCallback : IApplicationCallback
|
||||||
"in vec2 out_uv;\n"
|
"in vec2 out_uv;\n"
|
||||||
"void main()\n"
|
"void main()\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" out_frag = texture(tex, out_uv);\n"
|
" //out_frag = texture(tex, out_uv);\n"
|
||||||
|
" out_frag = vec4(out_uv.xy, 0.0, 1.0);\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
static const char* texName = "tex";
|
static const char* texName = "tex";
|
||||||
|
@ -541,7 +551,7 @@ struct TestApplicationCallback : IApplicationCallback
|
||||||
gfxQ->setViewport(r);
|
gfxQ->setViewport(r);
|
||||||
gfxQ->setScissor(r);
|
gfxQ->setScissor(r);
|
||||||
float rgba[] = {std::max(0.f, sinf(frameIdx / 60.0)), std::max(0.f, cosf(frameIdx / 60.0)), 0.0, 1.0};
|
float rgba[] = {std::max(0.f, sinf(frameIdx / 60.0)), std::max(0.f, cosf(frameIdx / 60.0)), 0.0, 1.0};
|
||||||
gfxQ->setClearColor(rgba);
|
//gfxQ->setClearColor(rgba);
|
||||||
gfxQ->clearTarget();
|
gfxQ->clearTarget();
|
||||||
|
|
||||||
gfxQ->setShaderDataBinding(m_binding);
|
gfxQ->setShaderDataBinding(m_binding);
|
||||||
|
@ -596,7 +606,7 @@ int main(int argc, const boo::SystemChar** argv)
|
||||||
logvisor::RegisterConsoleLogger();
|
logvisor::RegisterConsoleLogger();
|
||||||
boo::TestApplicationCallback appCb;
|
boo::TestApplicationCallback appCb;
|
||||||
int ret = ApplicationRun(boo::IApplication::EPlatformType::Auto,
|
int ret = ApplicationRun(boo::IApplication::EPlatformType::Auto,
|
||||||
appCb, _S("boo"), _S("boo"), argc, argv);
|
appCb, _S("boo"), _S("boo"), argc, argv, {}, 1, 1, false);
|
||||||
printf("IM DYING!!\n");
|
printf("IM DYING!!\n");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue