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 ...@@ -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() Colorbuffer::~Colorbuffer()
{ {
if (mRenderTarget) if (mRenderTarget)
......
...@@ -47,7 +47,8 @@ class Renderbuffer ...@@ -47,7 +47,8 @@ class Renderbuffer
class Colorbuffer : public Renderbuffer class Colorbuffer : public Renderbuffer
{ {
public: public:
Colorbuffer(IDirect3DSurface9 *renderTarget); explicit Colorbuffer(IDirect3DSurface9 *renderTarget);
Colorbuffer(int width, int height, GLenum format);
~Colorbuffer(); ~Colorbuffer();
...@@ -70,7 +71,7 @@ class Colorbuffer : public Renderbuffer ...@@ -70,7 +71,7 @@ class Colorbuffer : public Renderbuffer
class Depthbuffer : public Renderbuffer class Depthbuffer : public Renderbuffer
{ {
public: public:
Depthbuffer(IDirect3DSurface9 *depthStencil); explicit Depthbuffer(IDirect3DSurface9 *depthStencil);
Depthbuffer(int width, int height); Depthbuffer(int width, int height);
~Depthbuffer(); ~Depthbuffer();
...@@ -89,7 +90,7 @@ class Depthbuffer : public Renderbuffer ...@@ -89,7 +90,7 @@ class Depthbuffer : public Renderbuffer
class Stencilbuffer : public Renderbuffer class Stencilbuffer : public Renderbuffer
{ {
public: public:
Stencilbuffer(IDirect3DSurface9 *depthStencil); explicit Stencilbuffer(IDirect3DSurface9 *depthStencil);
Stencilbuffer(int width, int height); Stencilbuffer(int width, int height);
~Stencilbuffer(); ~Stencilbuffer();
......
...@@ -3354,8 +3354,7 @@ void __stdcall glRenderbufferStorage(GLenum target, GLenum internalformat, GLsiz ...@@ -3354,8 +3354,7 @@ void __stdcall glRenderbufferStorage(GLenum target, GLenum internalformat, GLsiz
case GL_RGBA4: case GL_RGBA4:
case GL_RGB5_A1: case GL_RGB5_A1:
case GL_RGB565: case GL_RGB565:
UNIMPLEMENTED(); // FIXME context->setRenderbuffer(new gl::Colorbuffer(width, height, internalformat));
// context->setRenderbuffer(new Colorbuffer(renderTarget));
break; break;
case GL_STENCIL_INDEX8: case GL_STENCIL_INDEX8:
context->setRenderbuffer(new gl::Stencilbuffer(width, height)); context->setRenderbuffer(new gl::Stencilbuffer(width, height));
......
...@@ -392,4 +392,17 @@ bool CheckTextureFormatType(GLenum format, GLenum type) ...@@ -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, ...@@ -41,6 +41,7 @@ bool ConvertPrimitiveType(GLenum primitiveType, GLsizei primitiveCount,
D3DPRIMITIVETYPE *d3dPrimitiveType, int *d3dPrimitiveCount); D3DPRIMITIVETYPE *d3dPrimitiveType, int *d3dPrimitiveCount);
bool IsCubemapTextureTarget(GLenum target); bool IsCubemapTextureTarget(GLenum target);
bool CheckTextureFormatType(GLenum format, GLenum type); 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