Move SetTexture calls to the renderer class
Trac #21727
git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1337 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/Context.cpp b/src/libGLESv2/Context.cpp
index cd3f7dd..6274e43 100644
--- a/src/libGLESv2/Context.cpp
+++ b/src/libGLESv2/Context.cpp
@@ -2415,13 +2415,11 @@
int samplerCount = (type == SAMPLER_PIXEL) ? MAX_TEXTURE_IMAGE_UNITS : MAX_VERTEX_TEXTURE_IMAGE_UNITS_VTF; // Range of Direct3D 9 samplers of given sampler type
unsigned int *appliedTextureSerial = (type == SAMPLER_PIXEL) ? mAppliedTextureSerialPS : mAppliedTextureSerialVS;
- int d3dSamplerOffset = (type == SAMPLER_PIXEL) ? 0 : D3DVERTEXTEXTURESAMPLER0;
int samplerRange = programBinary->getUsedSamplerRange(type);
for (int samplerIndex = 0; samplerIndex < samplerRange; samplerIndex++)
{
int textureUnit = programBinary->getSamplerMapping(type, samplerIndex); // OpenGL texture image unit index
- int d3dSampler = samplerIndex + d3dSamplerOffset;
if (textureUnit != -1)
{
@@ -2432,9 +2430,7 @@
if (appliedTextureSerial[samplerIndex] != texSerial || texture->hasDirtyParameters() || texture->hasDirtyImages())
{
- IDirect3DBaseTexture9 *d3dTexture = texture->getTexture();
-
- if (d3dTexture)
+ if (texture->isSamplerComplete())
{
if (appliedTextureSerial[samplerIndex] != texSerial || texture->hasDirtyParameters())
{
@@ -2446,12 +2442,12 @@
if (appliedTextureSerial[samplerIndex] != texSerial || texture->hasDirtyImages())
{
- mDevice->SetTexture(d3dSampler, d3dTexture);
+ mRenderer->setTexture(type, samplerIndex, texture);
}
}
else
{
- mDevice->SetTexture(d3dSampler, getIncompleteTexture(textureType)->getTexture());
+ mRenderer->setTexture(type, samplerIndex, getIncompleteTexture(textureType));
}
appliedTextureSerial[samplerIndex] = texSerial;
@@ -2462,7 +2458,7 @@
{
if (appliedTextureSerial[samplerIndex] != 0)
{
- mDevice->SetTexture(d3dSampler, NULL);
+ mRenderer->setTexture(type, samplerIndex, NULL);
appliedTextureSerial[samplerIndex] = 0;
}
}
@@ -2472,7 +2468,7 @@
{
if (appliedTextureSerial[samplerIndex] != 0)
{
- mDevice->SetTexture(samplerIndex + d3dSamplerOffset, NULL);
+ mRenderer->setTexture(type, samplerIndex, NULL);
appliedTextureSerial[samplerIndex] = 0;
}
}
diff --git a/src/libGLESv2/Texture.cpp b/src/libGLESv2/Texture.cpp
index 8a244ce..e491d78 100644
--- a/src/libGLESv2/Texture.cpp
+++ b/src/libGLESv2/Texture.cpp
@@ -1550,13 +1550,9 @@
return true;
}
-IDirect3DBaseTexture9 *Texture::getTexture()
+// D3D9_REPLACE
+IDirect3DBaseTexture9 *Texture::getD3DTexture()
{
- if (!isSamplerComplete())
- {
- return NULL;
- }
-
// ensure the underlying texture is created
if (getStorage(false) == NULL)
{
diff --git a/src/libGLESv2/Texture.h b/src/libGLESv2/Texture.h
index 27f2d75..f65bba5 100644
--- a/src/libGLESv2/Texture.h
+++ b/src/libGLESv2/Texture.h
@@ -206,7 +206,7 @@
virtual bool isSamplerComplete() const = 0;
- IDirect3DBaseTexture9 *getTexture();
+ IDirect3DBaseTexture9 *getD3DTexture(); // D3D9_REPLACE
virtual Renderbuffer *getRenderbuffer(GLenum target) = 0;
virtual void generateMipmaps() = 0;
diff --git a/src/libGLESv2/renderer/Renderer.cpp b/src/libGLESv2/renderer/Renderer.cpp
index a6b75d7..1b5f5d8 100644
--- a/src/libGLESv2/renderer/Renderer.cpp
+++ b/src/libGLESv2/renderer/Renderer.cpp
@@ -381,6 +381,24 @@
}
}
+void Renderer::setTexture(gl::SamplerType type, int index, gl::Texture *texture)
+{
+ int d3dSamplerOffset = (type == gl::SAMPLER_PIXEL) ? 0 : D3DVERTEXTEXTURESAMPLER0;
+ int d3dSampler = index + d3dSamplerOffset;
+ IDirect3DBaseTexture9 *d3dTexture = NULL;
+
+ if (texture)
+ {
+ d3dTexture = texture->getD3DTexture();
+ // If we get NULL back from getTexture here, something went wrong
+ // in the texture class and we're unexpectedly missing the d3d texture
+ ASSERT(d3dTexture != NULL);
+ }
+
+ mDevice->SetTexture(d3dSampler, d3dTexture);
+}
+
+
void Renderer::releaseDeviceResources()
{
while (!mEventQueryPool.empty())
diff --git a/src/libGLESv2/renderer/Renderer.h b/src/libGLESv2/renderer/Renderer.h
index d0eefd7..6bc4b7e 100644
--- a/src/libGLESv2/renderer/Renderer.h
+++ b/src/libGLESv2/renderer/Renderer.h
@@ -74,13 +74,13 @@
virtual void *createVertexbuffer();
// state setup
- virtual void applyTexture();
virtual void applyShaders();
virtual void applyConstants();
virtual void applyRenderTargets();
virtual void applyState();
#endif
virtual void setSamplerState(gl::SamplerType type, int index, const gl::SamplerState &sampler);
+ virtual void setTexture(gl::SamplerType type, int index, gl::Texture *texture);
// lost device
virtual void markDeviceLost();