Added a binding point for TEXTURE_2D_ARRAY.

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@2179 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 7625f798
......@@ -142,6 +142,7 @@ Context::Context(int clientVersion, const gl::Context *shareContext, rx::Rendere
mTexture2DZero.set(new Texture2D(mRenderer, 0));
mTextureCubeMapZero.set(new TextureCubeMap(mRenderer, 0));
mTexture3DZero.set(new Texture3D(mRenderer, 0));
mTexture2DArrayZero.set(new Texture2DArray(mRenderer, 0));
mState.activeSampler = 0;
bindArrayBuffer(0);
......@@ -258,6 +259,7 @@ Context::~Context()
mTexture2DZero.set(NULL);
mTextureCubeMapZero.set(NULL);
mTexture3DZero.set(NULL);
mTexture2DArrayZero.set(NULL);
mState.genericUniformBuffer.set(NULL);
for (int i = 0; i < IMPLEMENTATION_MAX_COMBINED_SHADER_UNIFORM_BUFFERS; i++)
......@@ -936,6 +938,13 @@ void Context::bindTexture3D(GLuint texture)
mState.samplerTexture[TEXTURE_3D][mState.activeSampler].set(getTexture(texture));
}
void Context::bindTexture2DArray(GLuint texture)
{
mResourceManager->checkTextureAllocation(texture, TEXTURE_2D_ARRAY);
mState.samplerTexture[TEXTURE_2D_ARRAY][mState.activeSampler].set(getTexture(texture));
}
void Context::bindReadFramebuffer(GLuint framebuffer)
{
if (!getFramebuffer(framebuffer))
......@@ -1284,6 +1293,11 @@ Texture3D *Context::getTexture3D()
return static_cast<Texture3D*>(getSamplerTexture(mState.activeSampler, TEXTURE_3D));
}
Texture2DArray *Context::getTexture2DArray()
{
return static_cast<Texture2DArray*>(getSamplerTexture(mState.activeSampler, TEXTURE_2D_ARRAY));
}
Buffer *Context::getGenericUniformBuffer()
{
return mState.genericUniformBuffer.get();
......@@ -1323,9 +1337,10 @@ Texture *Context::getSamplerTexture(unsigned int sampler, TextureType type)
switch (type)
{
default: UNREACHABLE();
case TEXTURE_2D: return mTexture2DZero.get();
case TEXTURE_CUBE: return mTextureCubeMapZero.get();
case TEXTURE_3D: return mTexture3DZero.get();
case TEXTURE_2D: return mTexture2DZero.get();
case TEXTURE_CUBE: return mTextureCubeMapZero.get();
case TEXTURE_3D: return mTexture3DZero.get();
case TEXTURE_2D_ARRAY: return mTexture2DArrayZero.get();
}
}
......@@ -1673,6 +1688,17 @@ bool Context::getIntegerv(GLenum pname, GLint *params)
*params = mState.samplerTexture[TEXTURE_3D][mState.activeSampler].id();
}
break;
case GL_TEXTURE_BINDING_2D_ARRAY:
{
if (mState.activeSampler > mRenderer->getMaxCombinedTextureImageUnits() - 1)
{
gl::error(GL_INVALID_OPERATION);
return false;
}
*params = mState.samplerTexture[TEXTURE_2D_ARRAY][mState.activeSampler].id();
}
break;
case GL_RESET_NOTIFICATION_STRATEGY_EXT:
*params = mResetStrategy;
break;
......@@ -1907,6 +1933,7 @@ bool Context::getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *nu
case GL_PIXEL_PACK_BUFFER_BINDING:
case GL_PIXEL_UNPACK_BUFFER_BINDING:
case GL_TEXTURE_BINDING_3D:
case GL_TEXTURE_BINDING_2D_ARRAY:
case GL_MAX_3D_TEXTURE_SIZE:
case GL_MAX_ARRAY_TEXTURE_LAYERS:
{
......
......@@ -52,6 +52,7 @@ class Texture;
class Texture2D;
class TextureCubeMap;
class Texture3D;
class Texture2DArray;
class Framebuffer;
class Renderbuffer;
class RenderbufferStorage;
......@@ -338,6 +339,7 @@ class Context
void bindTexture2D(GLuint texture);
void bindTextureCubeMap(GLuint texture);
void bindTexture3D(GLuint texture);
void bindTexture2DArray(GLuint texture);
void bindReadFramebuffer(GLuint framebuffer);
void bindDrawFramebuffer(GLuint framebuffer);
void bindRenderbuffer(GLuint renderbuffer);
......@@ -380,6 +382,7 @@ class Context
Texture2D *getTexture2D();
TextureCubeMap *getTextureCubeMap();
Texture3D *getTexture3D();
Texture2DArray *getTexture2DArray();
Buffer *getGenericUniformBuffer();
Buffer *getGenericTransformFeedbackBuffer();
Buffer *getCopyReadBuffer();
......@@ -487,6 +490,7 @@ class Context
BindingPointer<Texture2D> mTexture2DZero;
BindingPointer<TextureCubeMap> mTextureCubeMapZero;
BindingPointer<Texture3D> mTexture3DZero;
BindingPointer<Texture2DArray> mTexture2DArrayZero;
#ifndef HASH_MAP
# ifdef _MSC_VER
......
......@@ -302,6 +302,10 @@ void ResourceManager::checkTextureAllocation(GLuint texture, TextureType type)
{
textureObject = new Texture3D(mRenderer, texture);
}
else if (type == TEXTURE_2D_ARRAY)
{
textureObject = new Texture2DArray(mRenderer, texture);
}
else
{
UNREACHABLE();
......
......@@ -17,6 +17,7 @@ enum TextureType
TEXTURE_2D,
TEXTURE_CUBE,
TEXTURE_3D,
TEXTURE_2D_ARRAY,
TEXTURE_TYPE_COUNT,
TEXTURE_UNKNOWN
......
......@@ -904,6 +904,13 @@ void __stdcall glBindTexture(GLenum target, GLuint texture)
}
context->bindTexture3D(texture);
return;
case GL_TEXTURE_2D_ARRAY:
if (context->getClientVersion() < 3)
{
return gl::error(GL_INVALID_ENUM);
}
context->bindTexture2DArray(texture);
return;
default:
return gl::error(GL_INVALID_ENUM);
}
......@@ -6119,6 +6126,13 @@ void __stdcall glTexParameterf(GLenum target, GLenum pname, GLfloat param)
return gl::error(GL_INVALID_ENUM);
}
texture = context->getTexture3D();
case GL_TEXTURE_2D_ARRAY:
if (context->getClientVersion() < 3)
{
return gl::error(GL_INVALID_ENUM);
}
texture = context->getTexture2DArray();
break;
default:
return gl::error(GL_INVALID_ENUM);
}
......@@ -6214,6 +6228,13 @@ void __stdcall glTexParameteri(GLenum target, GLenum pname, GLint param)
}
texture = context->getTexture3D();
break;
case GL_TEXTURE_2D_ARRAY:
if (context->getClientVersion() < 3)
{
return gl::error(GL_INVALID_ENUM);
}
texture = context->getTexture2DArray();
break;
default:
return gl::error(GL_INVALID_ENUM);
}
......
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