Implements GetRenderbufferParameteriv

TRAC #11877 Signed-off-by: Andrew Lewycky Signed-off-by: Daniel Koch Author: Shannon Woods git-svn-id: https://angleproject.googlecode.com/svn/trunk@168 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 70d312a7
......@@ -19,6 +19,7 @@ Renderbuffer::Renderbuffer()
{
mWidth = 0;
mHeight = 0;
mFormat = GL_RGBA4; // default format, needs to be one of the expected renderbuffer formats
}
Renderbuffer::~Renderbuffer()
......@@ -60,6 +61,11 @@ int Renderbuffer::getHeight()
return mHeight;
}
GLenum Renderbuffer::getFormat()
{
return mFormat;
}
Colorbuffer::Colorbuffer(IDirect3DSurface9 *renderTarget) : mRenderTarget(renderTarget)
{
if (renderTarget)
......@@ -95,11 +101,13 @@ Colorbuffer::Colorbuffer(int width, int height, GLenum format)
{
mWidth = width;
mHeight = height;
mFormat = format;
}
else
{
mWidth = 0;
mHeight = 0;
mFormat = GL_RGBA4;
}
}
......@@ -184,6 +192,9 @@ Depthbuffer::Depthbuffer(IDirect3DSurface9 *depthStencil) : mDepthStencil(depthS
mWidth = description.Width;
mHeight = description.Height;
mFormat = GL_DEPTH_COMPONENT16; // If the renderbuffer parameters are queried, the calling function
// will expect one of the valid renderbuffer formats for use in
// glRenderbufferStorage
}
}
......@@ -207,11 +218,15 @@ Depthbuffer::Depthbuffer(int width, int height)
{
mWidth = width;
mHeight = height;
mFormat = GL_DEPTH_COMPONENT16; // If the renderbuffer parameters are queried, the calling function
// will expect one of the valid renderbuffer formats for use in
// glRenderbufferStorage
}
else
{
mWidth = 0;
mHeight = 0;
mFormat = GL_RGBA4; //default format
}
}
......@@ -257,6 +272,9 @@ Stencilbuffer::Stencilbuffer(IDirect3DSurface9 *depthStencil) : mDepthStencil(de
mWidth = description.Width;
mHeight = description.Height;
mFormat = GL_STENCIL_INDEX8; // If the renderbuffer parameters are queried, the calling function
// will expect one of the valid renderbuffer formats for use in
// glRenderbufferStorage
}
}
......@@ -280,11 +298,15 @@ Stencilbuffer::Stencilbuffer(int width, int height)
{
mWidth = width;
mHeight = height;
mFormat = GL_STENCIL_INDEX8; // If the renderbuffer parameters are queried, the calling function
// will expect one of the valid renderbuffer formats for use in
// glRenderbufferStorage
}
else
{
mWidth = 0;
mHeight = 0;
mFormat = GL_RGBA4; //default format
}
}
......
......@@ -35,10 +35,12 @@ class Renderbuffer
int getWidth();
int getHeight();
GLenum getFormat();
protected:
int mWidth;
int mHeight;
GLenum mFormat;
private:
DISALLOW_COPY_AND_ASSIGN(Renderbuffer);
......
......@@ -2358,7 +2358,97 @@ void __stdcall glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint*
try
{
UNIMPLEMENTED(); // FIXME
gl::Context *context = gl::getContext();
if (context)
{
if (target != GL_RENDERBUFFER)
{
return error(GL_INVALID_ENUM);
}
if (context->renderbuffer == 0)
{
return error(GL_INVALID_OPERATION);
}
gl::Renderbuffer *renderbuffer = context->getRenderbuffer(context->renderbuffer);
switch (pname)
{
case GL_RENDERBUFFER_WIDTH:
*params = renderbuffer->getWidth();
break;
case GL_RENDERBUFFER_HEIGHT:
*params = renderbuffer->getHeight();
break;
case GL_RENDERBUFFER_INTERNAL_FORMAT:
*params = renderbuffer->getFormat();
break;
case GL_RENDERBUFFER_RED_SIZE:
if (renderbuffer->isColorbuffer())
{
*params = static_cast<gl::Colorbuffer*>(renderbuffer)->getRedSize();
}
else
{
*params = 0;
}
break;
case GL_RENDERBUFFER_GREEN_SIZE:
if (renderbuffer->isColorbuffer())
{
*params = static_cast<gl::Colorbuffer*>(renderbuffer)->getGreenSize();
}
else
{
*params = 0;
}
break;
case GL_RENDERBUFFER_BLUE_SIZE:
if (renderbuffer->isColorbuffer())
{
*params = static_cast<gl::Colorbuffer*>(renderbuffer)->getBlueSize();
}
else
{
*params = 0;
}
break;
case GL_RENDERBUFFER_ALPHA_SIZE:
if (renderbuffer->isColorbuffer())
{
*params = static_cast<gl::Colorbuffer*>(renderbuffer)->getAlphaSize();
}
else
{
*params = 0;
}
break;
case GL_RENDERBUFFER_DEPTH_SIZE:
if (renderbuffer->isDepthbuffer())
{
*params = static_cast<gl::Depthbuffer*>(renderbuffer)->getDepthSize();
}
else
{
*params = 0;
}
break;
case GL_RENDERBUFFER_STENCIL_SIZE:
if (renderbuffer->isStencilbuffer())
{
*params = static_cast<gl::Stencilbuffer*>(renderbuffer)->getStencilSize();
}
else
{
*params = 0;
}
break;
default:
return error(GL_INVALID_ENUM);
}
}
}
catch(std::bad_alloc&)
{
......
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