Adds RenderTarget11 type
TRAC #22134
Signed-off-by: Nicolas Capens
Signed-off-by: Daniel Koch
git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1481 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/libGLESv2.vcxproj b/src/libGLESv2/libGLESv2.vcxproj
index 04dbedd..b394843 100644
--- a/src/libGLESv2/libGLESv2.vcxproj
+++ b/src/libGLESv2/libGLESv2.vcxproj
@@ -252,6 +252,7 @@
<ClCompile Include="renderer\Renderer9.cpp" />
<ClCompile Include="renderer\Image.cpp" />
<ClCompile Include="renderer\renderer9_utils.cpp" />
+ <ClCompile Include="renderer\RenderTarget11.cpp" />
<ClCompile Include="renderer\RenderTarget9.cpp" />
<ClCompile Include="renderer\RenderStateCache.cpp" />
<ClCompile Include="renderer\SwapChain11.cpp" />
@@ -293,6 +294,7 @@
<ClInclude Include="renderer\Renderer9.h" />
<ClInclude Include="renderer\renderer9_utils.h" />
<ClInclude Include="renderer\RenderTarget.h" />
+ <ClInclude Include="renderer\RenderTarget11.h" />
<ClInclude Include="renderer\RenderTarget9.h" />
<ClInclude Include="renderer\RenderStateCache.h" />
<ClInclude Include="renderer\ShaderCache.h" />
diff --git a/src/libGLESv2/libGLESv2.vcxproj.filters b/src/libGLESv2/libGLESv2.vcxproj.filters
index d04e14a..5b01d08 100644
--- a/src/libGLESv2/libGLESv2.vcxproj.filters
+++ b/src/libGLESv2/libGLESv2.vcxproj.filters
@@ -125,6 +125,9 @@
<ClCompile Include="renderer\SwapChain11.cpp">
<Filter>Renderer</Filter>
</ClCompile>
+ <ClCompile Include="renderer\RenderTarget11.cpp">
+ <Filter>Renderer</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="BinaryStream.h">
@@ -256,6 +259,9 @@
<ClInclude Include="renderer\SwapChain11.h">
<Filter>Renderer</Filter>
</ClInclude>
+ <ClInclude Include="renderer\RenderTarget11.h">
+ <Filter>Renderer</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="libGLESv2.def">
@@ -265,4 +271,4 @@
<ItemGroup>
<ResourceCompile Include="libGLESv2.rc" />
</ItemGroup>
-</Project>
\ No newline at end of file
+</Project>
diff --git a/src/libGLESv2/renderer/RenderTarget11.cpp b/src/libGLESv2/renderer/RenderTarget11.cpp
new file mode 100644
index 0000000..737d030
--- /dev/null
+++ b/src/libGLESv2/renderer/RenderTarget11.cpp
@@ -0,0 +1,78 @@
+//
+// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+
+// RenderTarget11.cpp: Implements a DX11-specific wrapper for ID3D11View pointers
+// retained by Renderbuffers.
+
+#include "libGLESv2/renderer/RenderTarget11.h"
+#include "libGLESv2/renderer/Renderer11.h"
+
+#include "libGLESv2/renderer/renderer11_utils.h"
+#include "libGLESv2/main.h"
+
+namespace rx
+{
+
+RenderTarget11::RenderTarget11(Renderer *renderer, ID3D11RenderTargetView *view, GLsizei width, GLsizei height)
+{
+ mRenderer = Renderer11::makeRenderer11(renderer);
+ mRenderTarget = view;
+ mDepthStencil = NULL;
+
+ if (mRenderTarget)
+ {
+ D3D11_RENDER_TARGET_VIEW_DESC desc;
+ view->GetDesc(&desc);
+
+ mWidth = width;
+ mHeight = height;
+
+ mInternalFormat = d3d11_gl::ConvertRenderbufferFormat(desc.Format);
+ mActualFormat = d3d11_gl::ConvertRenderbufferFormat(desc.Format);
+ mSamples = 1; // TEMP?
+ }
+}
+
+RenderTarget11::RenderTarget11(Renderer *renderer, ID3D11DepthStencilView *view, GLsizei width, GLsizei height)
+{
+ mRenderer = Renderer11::makeRenderer11(renderer);
+ mRenderTarget = NULL;
+ mDepthStencil = view;
+
+ if (mDepthStencil)
+ {
+ D3D11_DEPTH_STENCIL_VIEW_DESC desc;
+ view->GetDesc(&desc);
+
+ mWidth = width;
+ mHeight = height;
+
+ mInternalFormat = d3d11_gl::ConvertRenderbufferFormat(desc.Format);
+ mActualFormat = d3d11_gl::ConvertRenderbufferFormat(desc.Format);
+ mSamples = 1; // TEMP?
+ }
+}
+
+RenderTarget11::~RenderTarget11()
+{
+ if (mRenderTarget)
+ {
+ mRenderTarget->Release();
+ }
+
+ if (mDepthStencil)
+ {
+ mDepthStencil->Release();
+ }
+}
+
+RenderTarget11 *RenderTarget11::makeRenderTarget11(RenderTarget *target)
+{
+ ASSERT(dynamic_cast<rx::RenderTarget11*>(target) != NULL);
+ return static_cast<rx::RenderTarget11*>(target);
+}
+
+}
\ No newline at end of file
diff --git a/src/libGLESv2/renderer/RenderTarget11.h b/src/libGLESv2/renderer/RenderTarget11.h
new file mode 100644
index 0000000..1980575
--- /dev/null
+++ b/src/libGLESv2/renderer/RenderTarget11.h
@@ -0,0 +1,42 @@
+//
+// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+
+// RenderTarget11.h: Defines a DX11-specific wrapper for ID3D11View pointers
+// retained by Renderbuffers.
+
+#ifndef LIBGLESV2_RENDERER_RENDERTARGET11_H_
+#define LIBGLESV2_RENDERER_RENDERTARGET11_H_
+
+#include <d3d11.h>
+
+#include "libGLESv2/renderer/RenderTarget.h"
+
+namespace rx
+{
+class Renderer;
+class Renderer11;
+
+class RenderTarget11 : public RenderTarget
+{
+ public:
+ RenderTarget11(Renderer *renderer, ID3D11RenderTargetView *view, GLsizei width, GLsizei height);
+ RenderTarget11(Renderer *renderer, ID3D11DepthStencilView *view, GLsizei width, GLsizei height);
+ virtual ~RenderTarget11();
+
+ static RenderTarget11 *makeRenderTarget11(RenderTarget *renderTarget);
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(RenderTarget11);
+
+ ID3D11RenderTargetView *mRenderTarget;
+ ID3D11DepthStencilView *mDepthStencil;
+
+ Renderer11 *mRenderer;
+};
+
+}
+
+#endif LIBGLESV2_RENDERER_RENDERTARGET11_H_
\ No newline at end of file
diff --git a/src/libGLESv2/renderer/Renderer11.cpp b/src/libGLESv2/renderer/Renderer11.cpp
index bdf7bc7..0bc1990 100644
--- a/src/libGLESv2/renderer/Renderer11.cpp
+++ b/src/libGLESv2/renderer/Renderer11.cpp
@@ -11,6 +11,7 @@
#include "libGLESv2/utilities.h"
#include "libGLESv2/mathutil.h"
#include "libGLESv2/renderer/Renderer11.h"
+#include "libGLESv2/renderer/RenderTarget11.h"
#include "libGLESv2/renderer/renderer11_utils.h"
#include "libGLESv2/renderer/SwapChain11.h"
@@ -730,9 +731,17 @@
RenderTarget *Renderer11::createRenderTarget(SwapChain *swapChain, bool depth)
{
- // TODO
- UNIMPLEMENTED();
- return NULL;
+ SwapChain11 *swapChain11 = SwapChain11::makeSwapChain11(swapChain);
+ RenderTarget11 *renderTarget = NULL;
+ if (depth)
+ {
+ renderTarget = new RenderTarget11(this, swapChain11->getDepthStencil(), swapChain11->getWidth(), swapChain11->getHeight());
+ }
+ else
+ {
+ renderTarget = new RenderTarget11(this, swapChain11->getRenderTarget(), swapChain11->getWidth(), swapChain11->getHeight());
+ }
+ return renderTarget;
}
RenderTarget *Renderer11::createRenderTarget(int width, int height, GLenum format, GLsizei samples, bool depth)
diff --git a/src/libGLESv2/renderer/SwapChain11.h b/src/libGLESv2/renderer/SwapChain11.h
index d912e80..9c74e2c 100644
--- a/src/libGLESv2/renderer/SwapChain11.h
+++ b/src/libGLESv2/renderer/SwapChain11.h
@@ -32,6 +32,9 @@
virtual ID3D11DepthStencilView *getDepthStencil();
virtual ID3D11Texture2D *getOffscreenTexture();
+ EGLint getWidth() const { return mWidth; }
+ EGLint getHeight() const { return mHeight; }
+
static SwapChain11 *makeSwapChain11(SwapChain *swapChain);
private: