зеркало из https://github.com/AvaloniaUI/angle.git
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:
Родитель
70d312a701
Коммит
4901fca3aa
|
@ -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&)
|
||||
{
|
||||
|
|
Загрузка…
Ссылка в новой задаче