mirror of
https://github.com/AxioDL/boo.git
synced 2025-05-15 03:41:23 +00:00
Metal stubs for resolveBindTexture
This commit is contained in:
parent
fec5218666
commit
7bdabb5ed3
2
glslang
2
glslang
@ -1 +1 @@
|
|||||||
Subproject commit c8720ad209ba609f80a736dc777887c805b7b2f5
|
Subproject commit cb9c7d7bd57c09fd73c5aadfc881c0140b64fcdb
|
@ -32,7 +32,7 @@ struct IGraphicsCommandQueue
|
|||||||
virtual void drawInstances(size_t start, size_t count, size_t instCount)=0;
|
virtual void drawInstances(size_t start, size_t count, size_t instCount)=0;
|
||||||
virtual void drawInstancesIndexed(size_t start, size_t count, size_t instCount)=0;
|
virtual void drawInstancesIndexed(size_t start, size_t count, size_t instCount)=0;
|
||||||
|
|
||||||
virtual void resolveBindTexture(ITextureR* texture, const SWindowRect& rect, bool tlOrigin)=0;
|
virtual void resolveBindTexture(ITextureR* texture, const SWindowRect& rect, bool tlOrigin, bool color, bool depth)=0;
|
||||||
virtual void resolveDisplay(ITextureR* source)=0;
|
virtual void resolveDisplay(ITextureR* source)=0;
|
||||||
virtual void execute()=0;
|
virtual void execute()=0;
|
||||||
|
|
||||||
|
@ -49,7 +49,8 @@ public:
|
|||||||
ITextureSA* newStaticArrayTexture(size_t width, size_t height, size_t layers, TextureFormat fmt,
|
ITextureSA* newStaticArrayTexture(size_t width, size_t height, size_t layers, TextureFormat fmt,
|
||||||
const void* data, size_t sz);
|
const void* data, size_t sz);
|
||||||
ITextureD* newDynamicTexture(size_t width, size_t height, TextureFormat fmt);
|
ITextureD* newDynamicTexture(size_t width, size_t height, TextureFormat fmt);
|
||||||
ITextureR* newRenderTexture(size_t width, size_t height);
|
ITextureR* newRenderTexture(size_t width, size_t height,
|
||||||
|
bool enableShaderColorBinding, bool enableShaderDepthBinding);
|
||||||
|
|
||||||
bool bindingNeedsVertexFormat() const {return false;}
|
bool bindingNeedsVertexFormat() const {return false;}
|
||||||
IVertexFormat* newVertexFormat(size_t elementCount, const VertexElementDescriptor* elements);
|
IVertexFormat* newVertexFormat(size_t elementCount, const VertexElementDescriptor* elements);
|
||||||
|
@ -767,6 +767,8 @@ struct GLCommandQueue : IGraphicsCommandQueue
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
const ITextureR* resolveTex;
|
const ITextureR* resolveTex;
|
||||||
|
bool resolveColor : 1;
|
||||||
|
bool resolveDepth : 1;
|
||||||
Command(Op op) : m_op(op) {}
|
Command(Op op) : m_op(op) {}
|
||||||
};
|
};
|
||||||
std::vector<Command> m_cmdBufs[3];
|
std::vector<Command> m_cmdBufs[3];
|
||||||
@ -980,15 +982,15 @@ struct GLCommandQueue : IGraphicsCommandQueue
|
|||||||
const GLTextureR* tex = static_cast<const GLTextureR*>(cmd.resolveTex);
|
const GLTextureR* tex = static_cast<const GLTextureR*>(cmd.resolveTex);
|
||||||
GLenum target = (tex->m_samples > 1) ? GL_TEXTURE_2D_MULTISAMPLE : GL_TEXTURE_2D;
|
GLenum target = (tex->m_samples > 1) ? GL_TEXTURE_2D_MULTISAMPLE : GL_TEXTURE_2D;
|
||||||
glBindFramebuffer(GL_READ_FRAMEBUFFER, tex->m_fbo);
|
glBindFramebuffer(GL_READ_FRAMEBUFFER, tex->m_fbo);
|
||||||
glReadBuffer(GL_BACK);
|
//glReadBuffer(GL_FRONT);
|
||||||
glActiveTexture(GL_TEXTURE9);
|
glActiveTexture(GL_TEXTURE9);
|
||||||
if (tex->m_bindTexs[0])
|
if (cmd.resolveColor && tex->m_bindTexs[0])
|
||||||
{
|
{
|
||||||
glBindTexture(target, tex->m_bindTexs[0]);
|
glBindTexture(target, tex->m_bindTexs[0]);
|
||||||
glCopyTexSubImage2D(target, 0, cmd.rect.location[0], cmd.rect.location[1],
|
glCopyTexSubImage2D(target, 0, cmd.rect.location[0], cmd.rect.location[1],
|
||||||
cmd.rect.location[0], cmd.rect.location[1], cmd.rect.size[0], cmd.rect.size[1]);
|
cmd.rect.location[0], cmd.rect.location[1], cmd.rect.size[0], cmd.rect.size[1]);
|
||||||
}
|
}
|
||||||
if (tex->m_bindTexs[1])
|
if (cmd.resolveDepth && tex->m_bindTexs[1])
|
||||||
{
|
{
|
||||||
glBindTexture(target, tex->m_bindTexs[1]);
|
glBindTexture(target, tex->m_bindTexs[1]);
|
||||||
glCopyTexSubImage2D(target, 0, cmd.rect.location[0], cmd.rect.location[1],
|
glCopyTexSubImage2D(target, 0, cmd.rect.location[0], cmd.rect.location[1],
|
||||||
@ -1134,14 +1136,16 @@ struct GLCommandQueue : IGraphicsCommandQueue
|
|||||||
cmds.back().instCount = instCount;
|
cmds.back().instCount = instCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
void resolveBindTexture(ITextureR* texture, const SWindowRect& rect, bool tlOrigin)
|
void resolveBindTexture(ITextureR* texture, const SWindowRect& rect, bool tlOrigin, bool color, bool depth)
|
||||||
{
|
{
|
||||||
std::vector<Command>& cmds = m_cmdBufs[m_fillBuf];
|
std::vector<Command>& cmds = m_cmdBufs[m_fillBuf];
|
||||||
cmds.emplace_back(Command::Op::ResolveBindTexture);
|
cmds.emplace_back(Command::Op::ResolveBindTexture);
|
||||||
cmds.back().resolveTex = texture;
|
cmds.back().resolveTex = texture;
|
||||||
cmds.back().rect = rect;
|
cmds.back().rect = rect;
|
||||||
|
cmds.back().resolveColor = color;
|
||||||
|
cmds.back().resolveDepth = depth;
|
||||||
if (tlOrigin)
|
if (tlOrigin)
|
||||||
cmds.back().rect.location[1] = static_cast<GLTextureR*>(texture)->m_height - rect.location[1];
|
cmds.back().rect.location[1] = static_cast<GLTextureR*>(texture)->m_height - rect.location[1] - rect.size[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
void resolveDisplay(ITextureR* source)
|
void resolveDisplay(ITextureR* source)
|
||||||
|
@ -678,6 +678,11 @@ struct MetalCommandQueue : IGraphicsCommandQueue
|
|||||||
instanceCount:instCount];
|
instanceCount:instCount];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void resolveBindTexture(ITextureR* texture, const SWindowRect& rect, bool tlOrigin, bool color, bool depth)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
MetalTextureR* m_needsDisplay = nullptr;
|
MetalTextureR* m_needsDisplay = nullptr;
|
||||||
void resolveDisplay(ITextureR* source)
|
void resolveDisplay(ITextureR* source)
|
||||||
{
|
{
|
||||||
@ -892,7 +897,8 @@ ITextureD* MetalDataFactory::newDynamicTexture(size_t width, size_t height, Text
|
|||||||
m_deferredData->m_DTexs.emplace_back(retval);
|
m_deferredData->m_DTexs.emplace_back(retval);
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
ITextureR* MetalDataFactory::newRenderTexture(size_t width, size_t height)
|
ITextureR* MetalDataFactory::newRenderTexture(size_t width, size_t height,
|
||||||
|
bool enableShaderColorBinding, bool enableShaderDepthBinding)
|
||||||
{
|
{
|
||||||
MetalTextureR* retval = new MetalTextureR(m_ctx, width, height, m_sampleCount);
|
MetalTextureR* retval = new MetalTextureR(m_ctx, width, height, m_sampleCount);
|
||||||
if (!m_deferredData.get())
|
if (!m_deferredData.get())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user