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() ...@@ -19,6 +19,7 @@ Renderbuffer::Renderbuffer()
{ {
mWidth = 0; mWidth = 0;
mHeight = 0; mHeight = 0;
mFormat = GL_RGBA4; // default format, needs to be one of the expected renderbuffer formats
} }
Renderbuffer::~Renderbuffer() Renderbuffer::~Renderbuffer()
...@@ -60,6 +61,11 @@ int Renderbuffer::getHeight() ...@@ -60,6 +61,11 @@ int Renderbuffer::getHeight()
return mHeight; return mHeight;
} }
GLenum Renderbuffer::getFormat()
{
return mFormat;
}
Colorbuffer::Colorbuffer(IDirect3DSurface9 *renderTarget) : mRenderTarget(renderTarget) Colorbuffer::Colorbuffer(IDirect3DSurface9 *renderTarget) : mRenderTarget(renderTarget)
{ {
if (renderTarget) if (renderTarget)
...@@ -95,11 +101,13 @@ Colorbuffer::Colorbuffer(int width, int height, GLenum format) ...@@ -95,11 +101,13 @@ Colorbuffer::Colorbuffer(int width, int height, GLenum format)
{ {
mWidth = width; mWidth = width;
mHeight = height; mHeight = height;
mFormat = format;
} }
else else
{ {
mWidth = 0; mWidth = 0;
mHeight = 0; mHeight = 0;
mFormat = GL_RGBA4;
} }
} }
...@@ -184,6 +192,9 @@ Depthbuffer::Depthbuffer(IDirect3DSurface9 *depthStencil) : mDepthStencil(depthS ...@@ -184,6 +192,9 @@ Depthbuffer::Depthbuffer(IDirect3DSurface9 *depthStencil) : mDepthStencil(depthS
mWidth = description.Width; mWidth = description.Width;
mHeight = description.Height; 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) ...@@ -207,11 +218,15 @@ Depthbuffer::Depthbuffer(int width, int height)
{ {
mWidth = width; mWidth = width;
mHeight = height; 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 else
{ {
mWidth = 0; mWidth = 0;
mHeight = 0; mHeight = 0;
mFormat = GL_RGBA4; //default format
} }
} }
...@@ -257,6 +272,9 @@ Stencilbuffer::Stencilbuffer(IDirect3DSurface9 *depthStencil) : mDepthStencil(de ...@@ -257,6 +272,9 @@ Stencilbuffer::Stencilbuffer(IDirect3DSurface9 *depthStencil) : mDepthStencil(de
mWidth = description.Width; mWidth = description.Width;
mHeight = description.Height; 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) ...@@ -280,11 +298,15 @@ Stencilbuffer::Stencilbuffer(int width, int height)
{ {
mWidth = width; mWidth = width;
mHeight = height; 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 else
{ {
mWidth = 0; mWidth = 0;
mHeight = 0; mHeight = 0;
mFormat = GL_RGBA4; //default format
} }
} }
......
...@@ -35,10 +35,12 @@ class Renderbuffer ...@@ -35,10 +35,12 @@ class Renderbuffer
int getWidth(); int getWidth();
int getHeight(); int getHeight();
GLenum getFormat();
protected: protected:
int mWidth; int mWidth;
int mHeight; int mHeight;
GLenum mFormat;
private: private:
DISALLOW_COPY_AND_ASSIGN(Renderbuffer); DISALLOW_COPY_AND_ASSIGN(Renderbuffer);
......
...@@ -2358,7 +2358,97 @@ void __stdcall glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* ...@@ -2358,7 +2358,97 @@ void __stdcall glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint*
try 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&) 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