Added the GL_TEXTURE_WRAP_R parameter.
TRAC #22705
Signed-off-by: Jamie Madill
Signed-off-by: Shannon Woods
Author: Geoff Lang
git-svn-id: https://angleproject.googlecode.com/svn/branches/es3proto@2168 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/Texture.cpp b/src/libGLESv2/Texture.cpp
index 050ef23..13ac3a8 100644
--- a/src/libGLESv2/Texture.cpp
+++ b/src/libGLESv2/Texture.cpp
@@ -32,6 +32,7 @@
mSamplerState.magFilter = GL_LINEAR;
mSamplerState.wrapS = GL_REPEAT;
mSamplerState.wrapT = GL_REPEAT;
+ mSamplerState.wrapR = GL_REPEAT;
mSamplerState.maxAnisotropy = 1.0f;
mSamplerState.lodOffset = 0;
mUsage = GL_NONE;
@@ -107,6 +108,21 @@
}
}
+// Returns true on successful wrap state update (valid enum parameter)
+bool Texture::setWrapR(GLenum wrap)
+{
+ switch (wrap)
+ {
+ case GL_REPEAT:
+ case GL_CLAMP_TO_EDGE:
+ case GL_MIRRORED_REPEAT:
+ mSamplerState.wrapR = wrap;
+ return true;
+ default:
+ return false;
+ }
+}
+
// Returns true on successful max anisotropy update (valid anisotropy value)
bool Texture::setMaxAnisotropy(float textureMaxAnisotropy, float contextMaxAnisotropy)
{
@@ -155,6 +171,11 @@
return mSamplerState.wrapT;
}
+GLenum Texture::getWrapR() const
+{
+ return mSamplerState.wrapR;
+}
+
float Texture::getMaxAnisotropy() const
{
return mSamplerState.maxAnisotropy;
diff --git a/src/libGLESv2/Texture.h b/src/libGLESv2/Texture.h
index 71b9878..71e8958 100644
--- a/src/libGLESv2/Texture.h
+++ b/src/libGLESv2/Texture.h
@@ -69,6 +69,7 @@
bool setMagFilter(GLenum filter);
bool setWrapS(GLenum wrap);
bool setWrapT(GLenum wrap);
+ bool setWrapR(GLenum wrap);
bool setMaxAnisotropy(float textureMaxAnisotropy, float contextMaxAnisotropy);
bool setUsage(GLenum usage);
@@ -76,6 +77,7 @@
GLenum getMagFilter() const;
GLenum getWrapS() const;
GLenum getWrapT() const;
+ GLenum getWrapR() const;
float getMaxAnisotropy() const;
int getLodOffset();
void getSamplerState(SamplerState *sampler);
diff --git a/src/libGLESv2/angletypes.h b/src/libGLESv2/angletypes.h
index 37f67f4..b151e21 100644
--- a/src/libGLESv2/angletypes.h
+++ b/src/libGLESv2/angletypes.h
@@ -103,6 +103,7 @@
GLenum magFilter;
GLenum wrapS;
GLenum wrapT;
+ GLenum wrapR;
float maxAnisotropy;
int lodOffset;
};
diff --git a/src/libGLESv2/libGLESv2.cpp b/src/libGLESv2/libGLESv2.cpp
index e512b83..3979dcb 100644
--- a/src/libGLESv2/libGLESv2.cpp
+++ b/src/libGLESv2/libGLESv2.cpp
@@ -4029,6 +4029,13 @@
case GL_TEXTURE_WRAP_T:
*params = (GLfloat)texture->getWrapT();
break;
+ case GL_TEXTURE_WRAP_R:
+ if (context->getClientVersion() < 3)
+ {
+ return gl::error(GL_INVALID_ENUM);
+ }
+ *params = (GLfloat)texture->getWrapR();
+ break;
case GL_TEXTURE_IMMUTABLE_FORMAT_EXT:
*params = (GLfloat)(texture->isImmutable() ? GL_TRUE : GL_FALSE);
break;
@@ -4091,6 +4098,13 @@
case GL_TEXTURE_WRAP_T:
*params = texture->getWrapT();
break;
+ case GL_TEXTURE_WRAP_R:
+ if (context->getClientVersion() < 3)
+ {
+ return gl::error(GL_INVALID_ENUM);
+ }
+ *params = texture->getWrapR();
+ break;
case GL_TEXTURE_IMMUTABLE_FORMAT_EXT:
*params = texture->isImmutable() ? GL_TRUE : GL_FALSE;
break;
@@ -5732,6 +5746,12 @@
return gl::error(GL_INVALID_ENUM);
}
break;
+ case GL_TEXTURE_WRAP_R:
+ if (context->getClientVersion() < 3 || !texture->setWrapR((GLenum)param))
+ {
+ return gl::error(GL_INVALID_ENUM);
+ }
+ break;
case GL_TEXTURE_MIN_FILTER:
if (!texture->setMinFilter((GLenum)param))
{
@@ -5814,6 +5834,12 @@
return gl::error(GL_INVALID_ENUM);
}
break;
+ case GL_TEXTURE_WRAP_R:
+ if (context->getClientVersion() < 3 || !texture->setWrapR((GLenum)param))
+ {
+ return gl::error(GL_INVALID_ENUM);
+ }
+ break;
case GL_TEXTURE_MIN_FILTER:
if (!texture->setMinFilter((GLenum)param))
{
diff --git a/src/libGLESv2/renderer/RenderStateCache.cpp b/src/libGLESv2/renderer/RenderStateCache.cpp
index f60a88f..172f018 100644
--- a/src/libGLESv2/renderer/RenderStateCache.cpp
+++ b/src/libGLESv2/renderer/RenderStateCache.cpp
@@ -378,7 +378,7 @@
samplerDesc.Filter = gl_d3d11::ConvertFilter(samplerState.minFilter, samplerState.magFilter, samplerState.maxAnisotropy);
samplerDesc.AddressU = gl_d3d11::ConvertTextureWrap(samplerState.wrapS);
samplerDesc.AddressV = gl_d3d11::ConvertTextureWrap(samplerState.wrapT);
- samplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP;
+ samplerDesc.AddressW = gl_d3d11::ConvertTextureWrap(samplerState.wrapR);
samplerDesc.MipLODBias = static_cast<float>(samplerState.lodOffset);
samplerDesc.MaxAnisotropy = samplerState.maxAnisotropy;
samplerDesc.ComparisonFunc = D3D11_COMPARISON_NEVER;