Initializes storage from GL params instead of D3D params

TRAC #21910 Signed-off-by: Daniel Koch Author: Shannon Woods git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1369 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent df14c761
......@@ -838,11 +838,8 @@ void Texture2D::copySubImage(GLenum target, GLint level, GLint xoffset, GLint yo
void Texture2D::storage(GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
{
D3DFORMAT d3dfmt = TextureStorage::ConvertTextureInternalFormat(internalformat);
DWORD d3dusage = TextureStorage::GetTextureUsage(d3dfmt, mUsage, false);
delete mTexStorage;
mTexStorage = new TextureStorage2D(levels, d3dfmt, d3dusage, width, height);
mTexStorage = new TextureStorage2D(levels, internalformat, mUsage, false, width, height);
mImmutable = true;
for (int level = 0; level < levels; level++)
......@@ -976,21 +973,20 @@ IDirect3DBaseTexture9 *Texture2D::getBaseTexture() const
return mTexStorage ? mTexStorage->getBaseTexture() : NULL;
}
// Constructs a Direct3D 9 texture resource from the texture images
// Constructs a native texture resource from the texture images
void Texture2D::createTexture()
{
GLsizei width = mImageArray[0].getWidth();
GLsizei height = mImageArray[0].getHeight();
if (!(width > 0 && height > 0))
return; // do not attempt to create d3d textures for nonexistant data
return; // do not attempt to create native textures for nonexistant data
GLint levels = creationLevels(width, height);
D3DFORMAT d3dfmt = mImageArray[0].getD3DFormat();
DWORD d3dusage = TextureStorage::GetTextureUsage(d3dfmt, mUsage, false);
GLenum internalformat = mImageArray[0].getInternalFormat();
delete mTexStorage;
mTexStorage = new TextureStorage2D(levels, d3dfmt, d3dusage, width, height);
mTexStorage = new TextureStorage2D(levels, internalformat, mUsage, false, width, height);
if (mTexStorage->isManaged())
{
......@@ -1032,10 +1028,9 @@ void Texture2D::convertToRenderTarget()
GLsizei width = mImageArray[0].getWidth();
GLsizei height = mImageArray[0].getHeight();
GLint levels = creationLevels(width, height);
D3DFORMAT d3dfmt = mImageArray[0].getD3DFormat();
DWORD d3dusage = TextureStorage::GetTextureUsage(d3dfmt, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, true);
GLenum internalformat = mImageArray[0].getInternalFormat();
newTexStorage = new TextureStorage2D(levels, d3dfmt, d3dusage, width, height);
newTexStorage = new TextureStorage2D(levels, internalformat, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, true, width, height);
if (mTexStorage != NULL)
{
......@@ -1464,20 +1459,19 @@ IDirect3DBaseTexture9 *TextureCubeMap::getBaseTexture() const
return mTexStorage ? mTexStorage->getBaseTexture() : NULL;
}
// Constructs a Direct3D 9 texture resource from the texture images, or returns an existing one
// Constructs a native texture resource from the texture images, or returns an existing one
void TextureCubeMap::createTexture()
{
GLsizei size = mImageArray[0][0].getWidth();
if (!(size > 0))
return; // do not attempt to create d3d textures for nonexistant data
return; // do not attempt to create native textures for nonexistant data
GLint levels = creationLevels(size);
D3DFORMAT d3dfmt = mImageArray[0][0].getD3DFormat();
DWORD d3dusage = TextureStorage::GetTextureUsage(d3dfmt, mUsage, false);
GLenum internalformat = mImageArray[0][0].getInternalFormat();
delete mTexStorage;
mTexStorage = new TextureStorageCubeMap(levels, d3dfmt, d3dusage, size);
mTexStorage = new TextureStorageCubeMap(levels, internalformat, mUsage, false, size);
if (mTexStorage->isManaged())
{
......@@ -1524,10 +1518,9 @@ void TextureCubeMap::convertToRenderTarget()
{
GLsizei size = mImageArray[0][0].getWidth();
GLint levels = creationLevels(size);
D3DFORMAT d3dfmt = mImageArray[0][0].getD3DFormat();
DWORD d3dusage = TextureStorage::GetTextureUsage(d3dfmt, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, true);
GLenum internalformat = mImageArray[0][0].getInternalFormat();
newTexStorage = new TextureStorageCubeMap(levels, d3dfmt, d3dusage, size);
newTexStorage = new TextureStorageCubeMap(levels, internalformat, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, true, size);
if (mTexStorage != NULL)
{
......@@ -1707,11 +1700,8 @@ void TextureCubeMap::copySubImage(GLenum target, GLint level, GLint xoffset, GLi
void TextureCubeMap::storage(GLsizei levels, GLenum internalformat, GLsizei size)
{
D3DFORMAT d3dfmt = TextureStorage::ConvertTextureInternalFormat(internalformat);
DWORD d3dusage = TextureStorage::GetTextureUsage(d3dfmt, mUsage, false);
delete mTexStorage;
mTexStorage = new TextureStorageCubeMap(levels, d3dfmt, d3dusage, size);
mTexStorage = new TextureStorageCubeMap(levels, internalformat, mUsage, false, size);
mImmutable = true;
for (int level = 0; level < levels; level++)
......
......@@ -157,8 +157,9 @@ TextureStorage2D::TextureStorage2D(IDirect3DTexture9 *surfaceTexture) : TextureS
mTexture = surfaceTexture;
}
TextureStorage2D::TextureStorage2D(int levels, D3DFORMAT format, DWORD usage, int width, int height)
: TextureStorage(usage), mRenderTargetSerial(RenderbufferStorage::issueSerial())
TextureStorage2D::TextureStorage2D(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height)
: TextureStorage(GetTextureUsage(ConvertTextureInternalFormat(internalformat), usage, forceRenderable)),
mRenderTargetSerial(RenderbufferStorage::issueSerial())
{
mTexture = NULL;
// if the width or height is not positive this should be treated as an incomplete texture
......@@ -166,8 +167,9 @@ TextureStorage2D::TextureStorage2D(int levels, D3DFORMAT format, DWORD usage, in
if (width > 0 && height > 0)
{
IDirect3DDevice9 *device = getDisplay()->getRenderer()->getDevice(); // D3D9_REPLACE
MakeValidSize(false, dx::IsCompressedFormat(format), &width, &height, &mLodOffset);
HRESULT result = device->CreateTexture(width, height, levels ? levels + mLodOffset : 0, getUsage(), format, getPool(), &mTexture, NULL);
MakeValidSize(false, gl::IsCompressed(internalformat), &width, &height, &mLodOffset);
HRESULT result = device->CreateTexture(width, height, levels ? levels + mLodOffset : 0, getUsage(),
ConvertTextureInternalFormat(internalformat), getPool(), &mTexture, NULL);
if (FAILED(result))
{
......@@ -216,8 +218,9 @@ unsigned int TextureStorage2D::getRenderTargetSerial(GLenum target) const
return mRenderTargetSerial;
}
TextureStorageCubeMap::TextureStorageCubeMap(int levels, D3DFORMAT format, DWORD usage, int size)
: TextureStorage(usage), mFirstRenderTargetSerial(RenderbufferStorage::issueCubeSerials())
TextureStorageCubeMap::TextureStorageCubeMap(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size)
: TextureStorage(GetTextureUsage(ConvertTextureInternalFormat(internalformat), usage, forceRenderable)),
mFirstRenderTargetSerial(RenderbufferStorage::issueCubeSerials())
{
mTexture = NULL;
// if the size is not positive this should be treated as an incomplete texture
......@@ -226,8 +229,9 @@ TextureStorageCubeMap::TextureStorageCubeMap(int levels, D3DFORMAT format, DWORD
{
IDirect3DDevice9 *device = getDisplay()->getRenderer()->getDevice(); // D3D9_REPLACE
int height = size;
MakeValidSize(false, dx::IsCompressedFormat(format), &size, &height, &mLodOffset);
HRESULT result = device->CreateCubeTexture(size, levels ? levels + mLodOffset : 0, getUsage(), format, getPool(), &mTexture, NULL);
MakeValidSize(false, gl::IsCompressed(internalformat), &size, &height, &mLodOffset);
HRESULT result = device->CreateCubeTexture(size, levels ? levels + mLodOffset : 0, getUsage(),
ConvertTextureInternalFormat(internalformat), getPool(), &mTexture, NULL);
if (FAILED(result))
{
......
......@@ -58,7 +58,7 @@ class TextureStorage2D : public TextureStorage
{
public:
explicit TextureStorage2D(IDirect3DTexture9 *surfaceTexture);
TextureStorage2D(int levels, D3DFORMAT format, DWORD usage, int width, int height);
TextureStorage2D(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height);
virtual ~TextureStorage2D();
......@@ -77,7 +77,7 @@ class TextureStorage2D : public TextureStorage
class TextureStorageCubeMap : public TextureStorage
{
public:
TextureStorageCubeMap(int levels, D3DFORMAT format, DWORD usage, int size);
TextureStorageCubeMap(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size);
virtual ~TextureStorageCubeMap();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment