mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-15 16:44:36 +00:00
Merge pull request #1053 from marauder2k9-torque/GLBorder
Add border color and clamp to border
This commit is contained in:
commit
9d89e015e7
7 changed files with 22 additions and 7 deletions
|
|
@ -186,10 +186,11 @@ GFXD3D11StateBlock::GFXD3D11StateBlock(const GFXStateBlockDesc& desc)
|
||||||
else
|
else
|
||||||
mSamplerDesc[i].Filter = comparison ? D3D11_FILTER_COMPARISON_ANISOTROPIC : D3D11_FILTER_ANISOTROPIC;
|
mSamplerDesc[i].Filter = comparison ? D3D11_FILTER_COMPARISON_ANISOTROPIC : D3D11_FILTER_ANISOTROPIC;
|
||||||
|
|
||||||
mSamplerDesc[i].BorderColor[0] = 1.0f;
|
LinearColorF bc = LinearColorF(gfxSamplerState.borderColor);
|
||||||
mSamplerDesc[i].BorderColor[1] = 1.0f;
|
mSamplerDesc[i].BorderColor[0] = bc.red;
|
||||||
mSamplerDesc[i].BorderColor[2] = 1.0f;
|
mSamplerDesc[i].BorderColor[1] = bc.green;
|
||||||
mSamplerDesc[i].BorderColor[3] = 1.0f;
|
mSamplerDesc[i].BorderColor[2] = bc.blue;
|
||||||
|
mSamplerDesc[i].BorderColor[3] = bc.alpha;
|
||||||
mSamplerDesc[i].ComparisonFunc = GFXD3D11CmpFunc[gfxSamplerState.samplerFunc];
|
mSamplerDesc[i].ComparisonFunc = GFXD3D11CmpFunc[gfxSamplerState.samplerFunc];
|
||||||
|
|
||||||
hr = D3D11DEVICE->CreateSamplerState(&mSamplerDesc[i], &mSamplerStates[i]);
|
hr = D3D11DEVICE->CreateSamplerState(&mSamplerDesc[i], &mSamplerStates[i]);
|
||||||
|
|
|
||||||
|
|
@ -278,6 +278,7 @@ GFXSamplerStateDesc::GFXSamplerStateDesc()
|
||||||
samplerFunc = GFXCmpNever;
|
samplerFunc = GFXCmpNever;
|
||||||
maxAnisotropy = 1;
|
maxAnisotropy = 1;
|
||||||
mipLODBias = 0.0f;
|
mipLODBias = 0.0f;
|
||||||
|
borderColor = ColorI::WHITE;
|
||||||
}
|
}
|
||||||
|
|
||||||
GFXSamplerStateDesc GFXSamplerStateDesc::getWrapLinear()
|
GFXSamplerStateDesc GFXSamplerStateDesc::getWrapLinear()
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,8 @@ struct GFXSamplerStateDesc
|
||||||
|
|
||||||
GFXCmpFunc samplerFunc;
|
GFXCmpFunc samplerFunc;
|
||||||
|
|
||||||
|
ColorI borderColor;
|
||||||
|
|
||||||
/// The maximum anisotropy used when one of the filter types
|
/// The maximum anisotropy used when one of the filter types
|
||||||
/// is set to anisotropic.
|
/// is set to anisotropic.
|
||||||
///
|
///
|
||||||
|
|
|
||||||
|
|
@ -93,7 +93,7 @@ void GFXGLEnumTranslate::init()
|
||||||
GFXGLTextureAddress[GFXAddressWrap] = GL_REPEAT;
|
GFXGLTextureAddress[GFXAddressWrap] = GL_REPEAT;
|
||||||
GFXGLTextureAddress[GFXAddressMirror] = GL_REPEAT;
|
GFXGLTextureAddress[GFXAddressMirror] = GL_REPEAT;
|
||||||
GFXGLTextureAddress[GFXAddressClamp] = GL_CLAMP_TO_EDGE;
|
GFXGLTextureAddress[GFXAddressClamp] = GL_CLAMP_TO_EDGE;
|
||||||
GFXGLTextureAddress[GFXAddressBorder] = GL_REPEAT;
|
GFXGLTextureAddress[GFXAddressBorder] = GL_CLAMP_TO_BORDER;
|
||||||
GFXGLTextureAddress[GFXAddressMirrorOnce] = GL_REPEAT;
|
GFXGLTextureAddress[GFXAddressMirrorOnce] = GL_REPEAT;
|
||||||
|
|
||||||
// Stencil ops
|
// Stencil ops
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,16 @@ GFXGLStateBlock::GFXGLStateBlock(const GFXStateBlockDesc& desc) :
|
||||||
glSamplerParameteri(id, GL_TEXTURE_WRAP_S, GFXGLTextureAddress[ssd.addressModeU]);
|
glSamplerParameteri(id, GL_TEXTURE_WRAP_S, GFXGLTextureAddress[ssd.addressModeU]);
|
||||||
glSamplerParameteri(id, GL_TEXTURE_WRAP_T, GFXGLTextureAddress[ssd.addressModeV]);
|
glSamplerParameteri(id, GL_TEXTURE_WRAP_T, GFXGLTextureAddress[ssd.addressModeV]);
|
||||||
glSamplerParameteri(id, GL_TEXTURE_WRAP_R, GFXGLTextureAddress[ssd.addressModeW]);
|
glSamplerParameteri(id, GL_TEXTURE_WRAP_R, GFXGLTextureAddress[ssd.addressModeW]);
|
||||||
|
|
||||||
|
if (ssd.addressModeU == GFXAddressBorder ||
|
||||||
|
ssd.addressModeV == GFXAddressBorder ||
|
||||||
|
ssd.addressModeW == GFXAddressBorder)
|
||||||
|
{
|
||||||
|
LinearColorF bc = LinearColorF(ssd.borderColor);
|
||||||
|
GLfloat color[4] = { bc.red, bc.green, bc.blue, bc.alpha };
|
||||||
|
glSamplerParameterfv(id, GL_TEXTURE_BORDER_COLOR, color);
|
||||||
|
}
|
||||||
|
|
||||||
//compare modes
|
//compare modes
|
||||||
const bool comparison = ssd.samplerFunc != GFXCmpNever;
|
const bool comparison = ssd.samplerFunc != GFXCmpNever;
|
||||||
glSamplerParameteri(id, GL_TEXTURE_COMPARE_MODE, comparison ? GL_COMPARE_R_TO_TEXTURE_ARB : GL_NONE );
|
glSamplerParameteri(id, GL_TEXTURE_COMPARE_MODE, comparison ? GL_COMPARE_R_TO_TEXTURE_ARB : GL_NONE );
|
||||||
|
|
|
||||||
|
|
@ -219,7 +219,7 @@ void GFXGLTextureObject::initSamplerState(const GFXSamplerStateDesc &ssd)
|
||||||
glTexParameteri(mBinding, GL_TEXTURE_WRAP_R, GFXGLTextureAddress[ssd.addressModeW]);
|
glTexParameteri(mBinding, GL_TEXTURE_WRAP_R, GFXGLTextureAddress[ssd.addressModeW]);
|
||||||
if(static_cast< GFXGLDevice* >( GFX )->supportsAnisotropic() )
|
if(static_cast< GFXGLDevice* >( GFX )->supportsAnisotropic() )
|
||||||
glTexParameterf(mBinding, GL_TEXTURE_MAX_ANISOTROPY_EXT, ssd.maxAnisotropy);
|
glTexParameterf(mBinding, GL_TEXTURE_MAX_ANISOTROPY_EXT, ssd.maxAnisotropy);
|
||||||
|
|
||||||
mNeedInitSamplerState = false;
|
mNeedInitSamplerState = false;
|
||||||
mSampler = ssd;
|
mSampler = ssd;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -315,6 +315,8 @@ void GFXSamplerStateData::initPersistFields()
|
||||||
|
|
||||||
endGroup( "Filter State" );
|
endGroup( "Filter State" );
|
||||||
|
|
||||||
|
addField("borderColor", TypeColorI, Offset(mState.borderColor, GFXSamplerStateData), "");
|
||||||
|
|
||||||
addField("samplerFunc", TypeGFXCmpFunc, Offset(mState.samplerFunc, GFXSamplerStateData),
|
addField("samplerFunc", TypeGFXCmpFunc, Offset(mState.samplerFunc, GFXSamplerStateData),
|
||||||
"Compares sampled data against existing sampled data. The default is GFXCmpNever.");
|
"Compares sampled data against existing sampled data. The default is GFXCmpNever.");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue