Added binding points for the copy read and copy write buffers.

TRAC #22811 Signed-off-by: Jamie Madill Signed-off-by: Shannon Woods Author: Geoff Lang git-svn-id: https://angleproject.googlecode.com/svn/branches/es3proto@2130 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 667a29cf
......@@ -163,6 +163,9 @@ Context::Context(int clientVersion, const gl::Context *shareContext, rx::Rendere
bindIndexedTransformFeedbackBuffer(0, i, 0, -1);
}
bindCopyReadBuffer(0);
bindCopyWriteBuffer(0);
mState.currentProgram = 0;
mCurrentProgramBinary.set(NULL);
......@@ -264,6 +267,9 @@ Context::~Context()
mState.transformFeedbackBuffers[i].set(NULL);
}
mState.copyReadBuffer.set(NULL);
mState.copyWriteBuffer.set(NULL);
mResourceManager->release();
}
......@@ -968,6 +974,20 @@ void Context::bindIndexedTransformFeedbackBuffer(GLuint buffer, GLuint index, GL
mState.transformFeedbackBuffers[index].set(getBuffer(buffer), offset, size);
}
void Context::bindCopyReadBuffer(GLuint buffer)
{
mResourceManager->checkBufferAllocation(buffer);
mState.copyReadBuffer.set(getBuffer(buffer));
}
void Context::bindCopyWriteBuffer(GLuint buffer)
{
mResourceManager->checkBufferAllocation(buffer);
mState.copyWriteBuffer.set(getBuffer(buffer));
}
void Context::useProgram(GLuint program)
{
GLuint priorProgram = mState.currentProgram;
......@@ -1231,6 +1251,16 @@ Buffer *Context::getGenericTransformFeedbackBuffer()
return mState.genericTransformFeedbackBuffer.get();
}
Buffer *Context::getCopyReadBuffer()
{
return mState.copyReadBuffer.get();
}
Buffer *Context::getCopyWriteBuffer()
{
return mState.copyWriteBuffer.get();
}
Texture *Context::getSamplerTexture(unsigned int sampler, TextureType type)
{
GLuint texid = mState.samplerTexture[type][sampler].id();
......@@ -1591,6 +1621,12 @@ bool Context::getIntegerv(GLenum pname, GLint *params)
case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING:
*params = mState.genericTransformFeedbackBuffer.id();
break;
case GL_COPY_READ_BUFFER_BINDING:
*params = mState.copyReadBuffer.id();
break;
case GL_COPY_WRITE_BUFFER_BINDING:
*params = mState.copyWriteBuffer.id();
break;
default:
return false;
}
......@@ -1793,6 +1829,8 @@ bool Context::getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *nu
{
case GL_UNIFORM_BUFFER_BINDING:
case GL_TRANSFORM_FEEDBACK_BINDING:
case GL_COPY_READ_BUFFER_BINDING:
case GL_COPY_WRITE_BUFFER_BINDING:
{
*type = GL_INT;
*numParams = 1;
......
......@@ -189,6 +189,9 @@ struct State
BindingPointer<Buffer> genericTransformFeedbackBuffer;
OffsetBindingPointer<Buffer> transformFeedbackBuffers[IMPLEMENTATION_MAX_TRANSFORM_FEEDBACK_BUFFERS];
BindingPointer<Buffer> copyReadBuffer;
BindingPointer<Buffer> copyWriteBuffer;
GLint unpackAlignment;
GLint packAlignment;
bool packReverseRowOrder;
......@@ -337,6 +340,8 @@ class Context
void bindIndexedUniformBuffer(GLuint buffer, GLuint index, GLintptr offset, GLsizeiptr size);
void bindGenericTransformFeedbackBuffer(GLuint buffer);
void bindIndexedTransformFeedbackBuffer(GLuint buffer, GLuint index, GLintptr offset, GLsizeiptr size);
void bindCopyReadBuffer(GLuint buffer);
void bindCopyWriteBuffer(GLuint buffer);
void useProgram(GLuint program);
void linkProgram(GLuint program);
void setProgramBinary(GLuint program, const void *binary, GLint length);
......@@ -369,6 +374,8 @@ class Context
TextureCubeMap *getTextureCubeMap();
Buffer *getGenericUniformBuffer();
Buffer *getGenericTransformFeedbackBuffer();
Buffer *getCopyReadBuffer();
Buffer *getCopyWriteBuffer();
Texture *getSamplerTexture(unsigned int sampler, TextureType type);
Framebuffer *getReadFramebuffer();
Framebuffer *getDrawFramebuffer();
......
......@@ -420,6 +420,8 @@ void __stdcall glBindBuffer(GLenum target, GLuint buffer)
// Check ES3 specific targets
switch (target)
{
case GL_COPY_READ_BUFFER:
case GL_COPY_WRITE_BUFFER:
case GL_UNIFORM_BUFFER:
case GL_TRANSFORM_FEEDBACK_BUFFER:
if (context->getClientVersion() < 3)
......@@ -436,6 +438,12 @@ void __stdcall glBindBuffer(GLenum target, GLuint buffer)
case GL_ELEMENT_ARRAY_BUFFER:
context->bindElementArrayBuffer(buffer);
return;
case GL_COPY_READ_BUFFER:
context->bindCopyReadBuffer(buffer);
return;
case GL_COPY_WRITE_BUFFER:
context->bindCopyWriteBuffer(buffer);
return;
case GL_UNIFORM_BUFFER:
context->bindGenericUniformBuffer(buffer);
return;
......@@ -792,6 +800,8 @@ void __stdcall glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data,
// Check ES3 specific targets
switch (target)
{
case GL_COPY_READ_BUFFER:
case GL_COPY_WRITE_BUFFER:
case GL_UNIFORM_BUFFER:
case GL_TRANSFORM_FEEDBACK_BUFFER:
if (context->getClientVersion() < 3)
......@@ -810,6 +820,12 @@ void __stdcall glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data,
case GL_ELEMENT_ARRAY_BUFFER:
buffer = context->getElementArrayBuffer();
break;
case GL_COPY_READ_BUFFER:
buffer = context->getCopyReadBuffer();
break;
case GL_COPY_WRITE_BUFFER:
buffer = context->getCopyWriteBuffer();
break;
case GL_TRANSFORM_FEEDBACK_BUFFER:
buffer = context->getGenericTransformFeedbackBuffer();
break;
......@@ -858,6 +874,8 @@ void __stdcall glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size,
// Check ES3 specific targets
switch (target)
{
case GL_COPY_READ_BUFFER:
case GL_COPY_WRITE_BUFFER:
case GL_UNIFORM_BUFFER:
case GL_TRANSFORM_FEEDBACK_BUFFER:
if (context->getClientVersion() < 3)
......@@ -876,6 +894,12 @@ void __stdcall glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size,
case GL_ELEMENT_ARRAY_BUFFER:
buffer = context->getElementArrayBuffer();
break;
case GL_COPY_READ_BUFFER:
buffer = context->getCopyReadBuffer();
break;
case GL_COPY_WRITE_BUFFER:
buffer = context->getCopyWriteBuffer();
break;
case GL_TRANSFORM_FEEDBACK_BUFFER:
buffer = context->getGenericTransformFeedbackBuffer();
break;
......
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