Added a binding point for TEXTURE_3D.

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@2170 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 9599656a
...@@ -141,6 +141,7 @@ Context::Context(int clientVersion, const gl::Context *shareContext, rx::Rendere ...@@ -141,6 +141,7 @@ Context::Context(int clientVersion, const gl::Context *shareContext, rx::Rendere
mTexture2DZero.set(new Texture2D(mRenderer, 0)); mTexture2DZero.set(new Texture2D(mRenderer, 0));
mTextureCubeMapZero.set(new TextureCubeMap(mRenderer, 0)); mTextureCubeMapZero.set(new TextureCubeMap(mRenderer, 0));
mTexture3DZero.set(new Texture3D(mRenderer, 0));
mState.activeSampler = 0; mState.activeSampler = 0;
bindArrayBuffer(0); bindArrayBuffer(0);
...@@ -256,6 +257,7 @@ Context::~Context() ...@@ -256,6 +257,7 @@ Context::~Context()
mTexture2DZero.set(NULL); mTexture2DZero.set(NULL);
mTextureCubeMapZero.set(NULL); mTextureCubeMapZero.set(NULL);
mTexture3DZero.set(NULL);
mState.genericUniformBuffer.set(NULL); mState.genericUniformBuffer.set(NULL);
for (int i = 0; i < IMPLEMENTATION_MAX_COMBINED_SHADER_UNIFORM_BUFFERS; i++) for (int i = 0; i < IMPLEMENTATION_MAX_COMBINED_SHADER_UNIFORM_BUFFERS; i++)
...@@ -925,6 +927,13 @@ void Context::bindTextureCubeMap(GLuint texture) ...@@ -925,6 +927,13 @@ void Context::bindTextureCubeMap(GLuint texture)
mState.samplerTexture[TEXTURE_CUBE][mState.activeSampler].set(getTexture(texture)); mState.samplerTexture[TEXTURE_CUBE][mState.activeSampler].set(getTexture(texture));
} }
void Context::bindTexture3D(GLuint texture)
{
mResourceManager->checkTextureAllocation(texture, TEXTURE_3D);
mState.samplerTexture[TEXTURE_3D][mState.activeSampler].set(getTexture(texture));
}
void Context::bindReadFramebuffer(GLuint framebuffer) void Context::bindReadFramebuffer(GLuint framebuffer)
{ {
if (!getFramebuffer(framebuffer)) if (!getFramebuffer(framebuffer))
...@@ -1268,6 +1277,11 @@ TextureCubeMap *Context::getTextureCubeMap() ...@@ -1268,6 +1277,11 @@ TextureCubeMap *Context::getTextureCubeMap()
return static_cast<TextureCubeMap*>(getSamplerTexture(mState.activeSampler, TEXTURE_CUBE)); return static_cast<TextureCubeMap*>(getSamplerTexture(mState.activeSampler, TEXTURE_CUBE));
} }
Texture3D *Context::getTexture3D()
{
return static_cast<Texture3D*>(getSamplerTexture(mState.activeSampler, TEXTURE_3D));
}
Buffer *Context::getGenericUniformBuffer() Buffer *Context::getGenericUniformBuffer()
{ {
return mState.genericUniformBuffer.get(); return mState.genericUniformBuffer.get();
...@@ -1309,6 +1323,7 @@ Texture *Context::getSamplerTexture(unsigned int sampler, TextureType type) ...@@ -1309,6 +1323,7 @@ Texture *Context::getSamplerTexture(unsigned int sampler, TextureType type)
default: UNREACHABLE(); default: UNREACHABLE();
case TEXTURE_2D: return mTexture2DZero.get(); case TEXTURE_2D: return mTexture2DZero.get();
case TEXTURE_CUBE: return mTextureCubeMapZero.get(); case TEXTURE_CUBE: return mTextureCubeMapZero.get();
case TEXTURE_3D: return mTexture3DZero.get();
} }
} }
...@@ -1644,6 +1659,17 @@ bool Context::getIntegerv(GLenum pname, GLint *params) ...@@ -1644,6 +1659,17 @@ bool Context::getIntegerv(GLenum pname, GLint *params)
*params = mState.samplerTexture[TEXTURE_CUBE][mState.activeSampler].id(); *params = mState.samplerTexture[TEXTURE_CUBE][mState.activeSampler].id();
} }
break; break;
case GL_TEXTURE_BINDING_3D:
{
if (mState.activeSampler > mRenderer->getMaxCombinedTextureImageUnits() - 1)
{
gl::error(GL_INVALID_OPERATION);
return false;
}
*params = mState.samplerTexture[TEXTURE_3D][mState.activeSampler].id();
}
break;
case GL_RESET_NOTIFICATION_STRATEGY_EXT: case GL_RESET_NOTIFICATION_STRATEGY_EXT:
*params = mResetStrategy; *params = mResetStrategy;
break; break;
...@@ -1877,6 +1903,7 @@ bool Context::getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *nu ...@@ -1877,6 +1903,7 @@ bool Context::getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *nu
case GL_COPY_WRITE_BUFFER_BINDING: case GL_COPY_WRITE_BUFFER_BINDING:
case GL_PIXEL_PACK_BUFFER_BINDING: case GL_PIXEL_PACK_BUFFER_BINDING:
case GL_PIXEL_UNPACK_BUFFER_BINDING: case GL_PIXEL_UNPACK_BUFFER_BINDING:
case GL_TEXTURE_BINDING_3D:
case GL_MAX_3D_TEXTURE_SIZE: case GL_MAX_3D_TEXTURE_SIZE:
{ {
*type = GL_INT; *type = GL_INT;
......
...@@ -51,6 +51,7 @@ class ProgramBinary; ...@@ -51,6 +51,7 @@ class ProgramBinary;
class Texture; class Texture;
class Texture2D; class Texture2D;
class TextureCubeMap; class TextureCubeMap;
class Texture3D;
class Framebuffer; class Framebuffer;
class Renderbuffer; class Renderbuffer;
class RenderbufferStorage; class RenderbufferStorage;
...@@ -336,6 +337,7 @@ class Context ...@@ -336,6 +337,7 @@ class Context
void bindElementArrayBuffer(GLuint buffer); void bindElementArrayBuffer(GLuint buffer);
void bindTexture2D(GLuint texture); void bindTexture2D(GLuint texture);
void bindTextureCubeMap(GLuint texture); void bindTextureCubeMap(GLuint texture);
void bindTexture3D(GLuint texture);
void bindReadFramebuffer(GLuint framebuffer); void bindReadFramebuffer(GLuint framebuffer);
void bindDrawFramebuffer(GLuint framebuffer); void bindDrawFramebuffer(GLuint framebuffer);
void bindRenderbuffer(GLuint renderbuffer); void bindRenderbuffer(GLuint renderbuffer);
...@@ -377,6 +379,7 @@ class Context ...@@ -377,6 +379,7 @@ class Context
ProgramBinary *getCurrentProgramBinary(); ProgramBinary *getCurrentProgramBinary();
Texture2D *getTexture2D(); Texture2D *getTexture2D();
TextureCubeMap *getTextureCubeMap(); TextureCubeMap *getTextureCubeMap();
Texture3D *getTexture3D();
Buffer *getGenericUniformBuffer(); Buffer *getGenericUniformBuffer();
Buffer *getGenericTransformFeedbackBuffer(); Buffer *getGenericTransformFeedbackBuffer();
Buffer *getCopyReadBuffer(); Buffer *getCopyReadBuffer();
...@@ -482,6 +485,7 @@ class Context ...@@ -482,6 +485,7 @@ class Context
BindingPointer<Texture2D> mTexture2DZero; BindingPointer<Texture2D> mTexture2DZero;
BindingPointer<TextureCubeMap> mTextureCubeMapZero; BindingPointer<TextureCubeMap> mTextureCubeMapZero;
BindingPointer<Texture3D> mTexture3DZero;
#ifndef HASH_MAP #ifndef HASH_MAP
# ifdef _MSC_VER # ifdef _MSC_VER
......
...@@ -298,6 +298,10 @@ void ResourceManager::checkTextureAllocation(GLuint texture, TextureType type) ...@@ -298,6 +298,10 @@ void ResourceManager::checkTextureAllocation(GLuint texture, TextureType type)
{ {
textureObject = new TextureCubeMap(mRenderer, texture); textureObject = new TextureCubeMap(mRenderer, texture);
} }
else if (type == TEXTURE_3D)
{
textureObject = new Texture3D(mRenderer, texture);
}
else else
{ {
UNREACHABLE(); UNREACHABLE();
......
...@@ -16,6 +16,7 @@ enum TextureType ...@@ -16,6 +16,7 @@ enum TextureType
{ {
TEXTURE_2D, TEXTURE_2D,
TEXTURE_CUBE, TEXTURE_CUBE,
TEXTURE_3D,
TEXTURE_TYPE_COUNT, TEXTURE_TYPE_COUNT,
TEXTURE_UNKNOWN TEXTURE_UNKNOWN
......
...@@ -550,6 +550,13 @@ void __stdcall glBindTexture(GLenum target, GLuint texture) ...@@ -550,6 +550,13 @@ void __stdcall glBindTexture(GLenum target, GLuint texture)
case GL_TEXTURE_CUBE_MAP: case GL_TEXTURE_CUBE_MAP:
context->bindTextureCubeMap(texture); context->bindTextureCubeMap(texture);
return; return;
case GL_TEXTURE_3D:
if (context->getClientVersion() < 3)
{
return gl::error(GL_INVALID_ENUM);
}
context->bindTexture3D(texture);
return;
default: default:
return gl::error(GL_INVALID_ENUM); return gl::error(GL_INVALID_ENUM);
} }
...@@ -4011,6 +4018,13 @@ void __stdcall glGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params) ...@@ -4011,6 +4018,13 @@ void __stdcall glGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params)
case GL_TEXTURE_CUBE_MAP: case GL_TEXTURE_CUBE_MAP:
texture = context->getTextureCubeMap(); texture = context->getTextureCubeMap();
break; break;
case GL_TEXTURE_3D:
if (context->getClientVersion() < 3)
{
return gl::error(GL_INVALID_ENUM);
}
texture = context->getTexture3D();
break;
default: default:
return gl::error(GL_INVALID_ENUM); return gl::error(GL_INVALID_ENUM);
} }
...@@ -4080,6 +4094,13 @@ void __stdcall glGetTexParameteriv(GLenum target, GLenum pname, GLint* params) ...@@ -4080,6 +4094,13 @@ void __stdcall glGetTexParameteriv(GLenum target, GLenum pname, GLint* params)
case GL_TEXTURE_CUBE_MAP: case GL_TEXTURE_CUBE_MAP:
texture = context->getTextureCubeMap(); texture = context->getTextureCubeMap();
break; break;
case GL_TEXTURE_3D:
if (context->getClientVersion() < 3)
{
return gl::error(GL_INVALID_ENUM);
}
texture = context->getTexture3D();
break;
default: default:
return gl::error(GL_INVALID_ENUM); return gl::error(GL_INVALID_ENUM);
} }
...@@ -5728,6 +5749,12 @@ void __stdcall glTexParameterf(GLenum target, GLenum pname, GLfloat param) ...@@ -5728,6 +5749,12 @@ void __stdcall glTexParameterf(GLenum target, GLenum pname, GLfloat param)
case GL_TEXTURE_CUBE_MAP: case GL_TEXTURE_CUBE_MAP:
texture = context->getTextureCubeMap(); texture = context->getTextureCubeMap();
break; break;
case GL_TEXTURE_3D:
if (context->getClientVersion() < 3)
{
return gl::error(GL_INVALID_ENUM);
}
texture = context->getTexture3D();
default: default:
return gl::error(GL_INVALID_ENUM); return gl::error(GL_INVALID_ENUM);
} }
...@@ -5816,6 +5843,13 @@ void __stdcall glTexParameteri(GLenum target, GLenum pname, GLint param) ...@@ -5816,6 +5843,13 @@ void __stdcall glTexParameteri(GLenum target, GLenum pname, GLint param)
case GL_TEXTURE_CUBE_MAP: case GL_TEXTURE_CUBE_MAP:
texture = context->getTextureCubeMap(); texture = context->getTextureCubeMap();
break; break;
case GL_TEXTURE_3D:
if (context->getClientVersion() < 3)
{
return gl::error(GL_INVALID_ENUM);
}
texture = context->getTexture3D();
break;
default: default:
return gl::error(GL_INVALID_ENUM); 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