Implements color renderbuffers

TRAC #11890 Signed-off-by: Andrew Lewycky Signed-off-by: Daniel Koch Author: Shannon Woods git-svn-id: https://angleproject.googlecode.com/svn/trunk@167 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 3e7c8033
......@@ -74,6 +74,35 @@ Colorbuffer::Colorbuffer(IDirect3DSurface9 *renderTarget) : mRenderTarget(render
}
}
Colorbuffer::Colorbuffer(int width, int height, GLenum format)
{
IDirect3DDevice9 *device = getDevice();
mRenderTarget = NULL;
HRESULT result = device->CreateRenderTarget(width, height, es2dx::ConvertRenderbufferFormat(format),
D3DMULTISAMPLE_NONE, 0, FALSE, &mRenderTarget, NULL);
if (result == D3DERR_OUTOFVIDEOMEMORY || result == E_OUTOFMEMORY)
{
error(GL_OUT_OF_MEMORY);
return;
}
ASSERT(SUCCEEDED(result));
if (mRenderTarget)
{
mWidth = width;
mHeight = height;
}
else
{
mWidth = 0;
mHeight = 0;
}
}
Colorbuffer::~Colorbuffer()
{
if (mRenderTarget)
......
......@@ -47,7 +47,8 @@ class Renderbuffer
class Colorbuffer : public Renderbuffer
{
public:
Colorbuffer(IDirect3DSurface9 *renderTarget);
explicit Colorbuffer(IDirect3DSurface9 *renderTarget);
Colorbuffer(int width, int height, GLenum format);
~Colorbuffer();
......@@ -70,7 +71,7 @@ class Colorbuffer : public Renderbuffer
class Depthbuffer : public Renderbuffer
{
public:
Depthbuffer(IDirect3DSurface9 *depthStencil);
explicit Depthbuffer(IDirect3DSurface9 *depthStencil);
Depthbuffer(int width, int height);
~Depthbuffer();
......@@ -89,7 +90,7 @@ class Depthbuffer : public Renderbuffer
class Stencilbuffer : public Renderbuffer
{
public:
Stencilbuffer(IDirect3DSurface9 *depthStencil);
explicit Stencilbuffer(IDirect3DSurface9 *depthStencil);
Stencilbuffer(int width, int height);
~Stencilbuffer();
......
......@@ -3354,8 +3354,7 @@ void __stdcall glRenderbufferStorage(GLenum target, GLenum internalformat, GLsiz
case GL_RGBA4:
case GL_RGB5_A1:
case GL_RGB565:
UNIMPLEMENTED(); // FIXME
// context->setRenderbuffer(new Colorbuffer(renderTarget));
context->setRenderbuffer(new gl::Colorbuffer(width, height, internalformat));
break;
case GL_STENCIL_INDEX8:
context->setRenderbuffer(new gl::Stencilbuffer(width, height));
......
......@@ -392,4 +392,17 @@ bool CheckTextureFormatType(GLenum format, GLenum type)
}
}
D3DFORMAT ConvertRenderbufferFormat(GLenum format)
{
switch (format)
{
case GL_RGBA4:
case GL_RGB5_A1: return D3DFMT_A8R8G8B8;
case GL_RGB565: return D3DFMT_R5G6B5;
case GL_DEPTH_COMPONENT16:
case GL_STENCIL_INDEX8: return D3DFMT_D24S8;
default: UNREACHABLE(); return D3DFMT_A8R8G8B8;
}
}
}
......@@ -41,6 +41,7 @@ bool ConvertPrimitiveType(GLenum primitiveType, GLsizei primitiveCount,
D3DPRIMITIVETYPE *d3dPrimitiveType, int *d3dPrimitiveCount);
bool IsCubemapTextureTarget(GLenum target);
bool CheckTextureFormatType(GLenum format, GLenum type);
D3DFORMAT ConvertRenderbufferFormat(GLenum format);
}
......
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