mirror of https://github.com/AxioDL/boo.git
Add ClampToEdgeNearest texture mode
This commit is contained in:
parent
c314730d51
commit
72c9809655
|
@ -71,7 +71,8 @@ enum class TextureClampMode
|
||||||
{
|
{
|
||||||
Repeat,
|
Repeat,
|
||||||
ClampToWhite,
|
ClampToWhite,
|
||||||
ClampToEdge
|
ClampToEdge,
|
||||||
|
ClampToEdgeNearest
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Typeless texture */
|
/** Typeless texture */
|
||||||
|
|
|
@ -257,6 +257,15 @@ static void SetClampMode(GLenum target, TextureClampMode clampMode)
|
||||||
glTexParameteri(target, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
|
glTexParameteri(target, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case TextureClampMode::ClampToEdgeNearest:
|
||||||
|
{
|
||||||
|
glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||||
|
glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||||
|
glTexParameteri(target, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
|
||||||
|
glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||||
|
glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -274,7 +283,7 @@ class GLTextureS : public GraphicsDataNode<ITextureS>
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
if (mips > 1)
|
if (mips > 1)
|
||||||
{
|
{
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, mips-1);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, mips-1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -1129,7 +1129,7 @@ struct MetalCommandQueue : IGraphicsCommandQueue
|
||||||
IGraphicsContext* m_parent;
|
IGraphicsContext* m_parent;
|
||||||
id<MTLCommandBuffer> m_cmdBuf;
|
id<MTLCommandBuffer> m_cmdBuf;
|
||||||
id<MTLRenderCommandEncoder> m_enc;
|
id<MTLRenderCommandEncoder> m_enc;
|
||||||
id<MTLSamplerState> m_samplers[3];
|
id<MTLSamplerState> m_samplers[4];
|
||||||
bool m_running = true;
|
bool m_running = true;
|
||||||
|
|
||||||
int m_fillBuf = 0;
|
int m_fillBuf = 0;
|
||||||
|
@ -1162,6 +1162,13 @@ struct MetalCommandQueue : IGraphicsCommandQueue
|
||||||
sampDesc.sAddressMode = MTLSamplerAddressModeClampToEdge;
|
sampDesc.sAddressMode = MTLSamplerAddressModeClampToEdge;
|
||||||
sampDesc.tAddressMode = MTLSamplerAddressModeClampToEdge;
|
sampDesc.tAddressMode = MTLSamplerAddressModeClampToEdge;
|
||||||
m_samplers[2] = [ctx->m_dev newSamplerStateWithDescriptor:sampDesc];
|
m_samplers[2] = [ctx->m_dev newSamplerStateWithDescriptor:sampDesc];
|
||||||
|
|
||||||
|
sampDesc.rAddressMode = MTLSamplerAddressModeClampToEdge;
|
||||||
|
sampDesc.sAddressMode = MTLSamplerAddressModeClampToEdge;
|
||||||
|
sampDesc.tAddressMode = MTLSamplerAddressModeClampToEdge;
|
||||||
|
sampDesc.minFilter = MTLSamplerMinMagFilterNearest;
|
||||||
|
sampDesc.magFilter = MTLSamplerMinMagFilterNearest;
|
||||||
|
m_samplers[3] = [ctx->m_dev newSamplerStateWithDescriptor:sampDesc];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1192,7 +1199,7 @@ struct MetalCommandQueue : IGraphicsCommandQueue
|
||||||
cbind->bind(m_enc, m_fillBuf);
|
cbind->bind(m_enc, m_fillBuf);
|
||||||
m_boundData = cbind;
|
m_boundData = cbind;
|
||||||
m_currentPrimitive = cbind->m_pipeline.cast<MetalShaderPipeline>()->m_drawPrim;
|
m_currentPrimitive = cbind->m_pipeline.cast<MetalShaderPipeline>()->m_drawPrim;
|
||||||
[m_enc setFragmentSamplerStates:m_samplers withRange:NSMakeRange(0, 3)];
|
[m_enc setFragmentSamplerStates:m_samplers withRange:NSMakeRange(0, 4)];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1493,7 +1500,7 @@ struct MetalCommandQueue : IGraphicsCommandQueue
|
||||||
MetalShaderDataBinding* gammaBinding = gfxF->m_gammaBinding.cast<MetalShaderDataBinding>();
|
MetalShaderDataBinding* gammaBinding = gfxF->m_gammaBinding.cast<MetalShaderDataBinding>();
|
||||||
gammaBinding->m_texs[0].tex = m_needsDisplay.get();
|
gammaBinding->m_texs[0].tex = m_needsDisplay.get();
|
||||||
gammaBinding->bind(enc, m_drawBuf);
|
gammaBinding->bind(enc, m_drawBuf);
|
||||||
[enc setFragmentSamplerStates:m_samplers withRange:NSMakeRange(0, 3)];
|
[enc setFragmentSamplerStates:m_samplers withRange:NSMakeRange(0, 4)];
|
||||||
[enc drawPrimitives:MTLPrimitiveTypeTriangleStrip vertexStart:0 vertexCount:4];
|
[enc drawPrimitives:MTLPrimitiveTypeTriangleStrip vertexStart:0 vertexCount:4];
|
||||||
gammaBinding->m_texs[0].tex.reset();
|
gammaBinding->m_texs[0].tex.reset();
|
||||||
[enc endEncoding];
|
[enc endEncoding];
|
||||||
|
|
Loading…
Reference in New Issue