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
This commit is contained in:
daniel@transgaming.com 2010-04-20 18:52:41 +00:00
Родитель 70d312a701
Коммит 4901fca3aa
3 изменённых файлов: 115 добавлений и 1 удалений

Просмотреть файл

@ -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&)
{