Explicitly retrieve a Renderer9 or Renderer interface from Display.

TRAC #21963 Signed-off-by: Daniel Koch Author: Nicolas Capens git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1377 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent d8e3656a
......@@ -83,22 +83,7 @@ bool Display::initialize()
return true;
}
HMODULE hModule = NULL;
if (mSoftwareDevice)
{
hModule = GetModuleHandle(TEXT("swiftshader_d3d9.dll"));
}
else
{
hModule = GetModuleHandle(TEXT("d3d9.dll"));
}
if (hModule == NULL)
{
terminate();
return false;
}
mRenderer = glCreateRenderer(this, hModule, mDc);
mRenderer = glCreateRenderer(this, mDc, mSoftwareDevice);
EGLint status = EGL_BAD_ALLOC;
if (mRenderer)
status = mRenderer->initialize();
......
......@@ -54,7 +54,8 @@ class Display
bool isValidSurface(egl::Surface *surface);
bool hasExistingWindowSurface(HWND window);
renderer::Renderer9 *getRenderer() { return mRenderer; };
renderer::Renderer *getRenderer() { return mRenderer; };
renderer::Renderer9 *getRenderer9() { assert(dynamic_cast<renderer::Renderer9*>(mRenderer) != NULL); return static_cast<renderer::Renderer9*>(mRenderer); }; // D3D9_REPLACE
virtual void notifyDeviceLost();
......@@ -80,7 +81,7 @@ class Display
typedef std::set<gl::Context*> ContextSet;
ContextSet mContextSet;
renderer::Renderer9 *mRenderer; // D3D9_REPLACE
renderer::Renderer *mRenderer;
void initExtensionString();
std::string mExtensionString;
......
......@@ -27,7 +27,7 @@ namespace egl
Surface::Surface(Display *display, const Config *config, HWND window, EGLint postSubBufferSupported)
: mDisplay(display), mConfig(config), mWindow(window), mPostSubBufferSupported(postSubBufferSupported)
{
mRenderer = mDisplay->getRenderer();
mRenderer = mDisplay->getRenderer9();
mSwapChain = NULL;
mShareHandle = NULL;
mTexture = NULL;
......@@ -48,7 +48,7 @@ Surface::Surface(Display *display, const Config *config, HWND window, EGLint pos
Surface::Surface(Display *display, const Config *config, HANDLE shareHandle, EGLint width, EGLint height, EGLenum textureFormat, EGLenum textureType)
: mDisplay(display), mWindow(NULL), mConfig(config), mShareHandle(shareHandle), mWidth(width), mHeight(height), mPostSubBufferSupported(EGL_FALSE)
{
mRenderer = mDisplay->getRenderer();
mRenderer = mDisplay->getRenderer9();
mSwapChain = NULL;
mWindowSubclassed = false;
mTexture = NULL;
......
//
// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
// Copyright (c) 2002-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.
//
......@@ -19,7 +19,7 @@ namespace gl
Buffer::Buffer(GLuint id) : RefCountObject(id)
{
mRenderer = getDisplay()->getRenderer();
mRenderer = getDisplay()->getRenderer9();
mContents = NULL;
mSize = 0;
mUsage = GL_DYNAMIC_DRAW;
......
......@@ -249,7 +249,7 @@ Context::~Context()
void Context::makeCurrent(egl::Display *display, egl::Surface *surface)
{
mDisplay = display;
mRenderer = mDisplay->getRenderer();
mRenderer = mDisplay->getRenderer9();
mDevice = mRenderer->getDevice(); // D3D9_REMOVE
if (!mHasBeenCurrent)
......@@ -4398,8 +4398,24 @@ gl::Context *glGetCurrentContext()
return gl::getContext();
}
renderer::Renderer9 *glCreateRenderer(egl::Display *display, HMODULE hModule, HDC hDc)
renderer::Renderer *glCreateRenderer(egl::Display *display, HDC hDc, bool softwareDevice)
{
HMODULE hModule = NULL;
if (softwareDevice)
{
hModule = GetModuleHandle(TEXT("swiftshader_d3d9.dll"));
}
else
{
hModule = GetModuleHandle(TEXT("d3d9.dll"));
}
if (hModule == NULL)
{
return NULL;
}
return new renderer::Renderer9(display, hModule, hDc); // D3D9_REPLACE
}
......
......@@ -667,7 +667,7 @@ gl::Context *glCreateContext(const gl::Context *shareContext, bool notifyResets,
void glDestroyContext(gl::Context *context);
void glMakeCurrent(gl::Context *context, egl::Display *display, egl::Surface *surface);
gl::Context *glGetCurrentContext();
renderer::Renderer9 *glCreateRenderer(egl::Display *display, HMODULE hModule, HDC hDc); // D3D9_REPLACE
renderer::Renderer *glCreateRenderer(egl::Display *display, HDC hDc, bool softwareDevice);
void glDestroyRenderer(renderer::Renderer *renderer);
renderer::SwapChain *glCreateSwapChain(renderer::Renderer9 *renderer, HWND window, HANDLE shareHandle,
GLenum backBufferFormat, GLenum depthBufferFormat); // D3D9_REPLACE
......
......@@ -64,7 +64,7 @@ unsigned int ProgramBinary::mCurrentSerial = 1;
ProgramBinary::ProgramBinary() : RefCountObject(0), mSerial(issueSerial())
{
mRenderer = getDisplay()->getRenderer();
mRenderer = getDisplay()->getRenderer9();
mDevice = mRenderer->getDevice(); // D3D9_REPLACE
mPixelExecutable = NULL;
......
//
// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
// Copyright (c) 2002-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.
//
......@@ -401,7 +401,7 @@ Colorbuffer::Colorbuffer(renderer::SwapChain *swapChain)
Colorbuffer::Colorbuffer(int width, int height, GLenum format, GLsizei samples) : mRenderTarget(NULL)
{
renderer::Renderer9 *renderer = getDisplay()->getRenderer();
renderer::Renderer9 *renderer = getDisplay()->getRenderer9();
IDirect3DDevice9 *device = renderer->getDevice(); // D3D9_REPLACE
D3DFORMAT requestedFormat = es2dx::ConvertRenderbufferFormat(format);
......@@ -476,7 +476,7 @@ DepthStencilbuffer::DepthStencilbuffer(renderer::SwapChain *swapChain)
DepthStencilbuffer::DepthStencilbuffer(int width, int height, GLsizei samples)
{
renderer::Renderer9 *renderer = getDisplay()->getRenderer();
renderer::Renderer9 *renderer = getDisplay()->getRenderer9();
IDirect3DDevice9 *device = renderer->getDevice(); // D3D9_REPLACE
mDepthStencil = NULL;
......
......@@ -310,7 +310,7 @@ void Image::createSurface()
MakeValidSize(true, IsCompressed(mInternalFormat), &requestWidth, &requestHeight, &levelToFetch);
// D3D9_REPLACE
IDirect3DDevice9 *device = getDisplay()->getRenderer()->getDevice();
IDirect3DDevice9 *device = getDisplay()->getRenderer9()->getDevice();
HRESULT result = device->CreateTexture(requestWidth, requestHeight, levelToFetch + 1, NULL, d3dFormat,
poolToUse, &newTexture, NULL);
......@@ -437,7 +437,7 @@ bool Image::updateSurface(IDirect3DSurface9 *destSurface, GLint xoffset, GLint y
rect.bottom = yoffset + height;
POINT point = {rect.left, rect.top};
IDirect3DDevice9 *device = getDisplay()->getRenderer()->getDevice(); // D3D9_REPLACE
IDirect3DDevice9 *device = getDisplay()->getRenderer9()->getDevice(); // D3D9_REPLACE
if (mD3DPool == D3DPOOL_MANAGED)
{
......@@ -986,7 +986,7 @@ void Image::copy(GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width,
return error(GL_OUT_OF_MEMORY);
}
IDirect3DDevice9 *device = getDisplay()->getRenderer()->getDevice(); // D3D9_REPLACE
IDirect3DDevice9 *device = getDisplay()->getRenderer9()->getDevice(); // D3D9_REPLACE
IDirect3DSurface9 *renderTargetData = NULL;
D3DSURFACE_DESC description;
renderTarget->GetDesc(&description);
......
......@@ -23,7 +23,7 @@ unsigned int TextureStorage::mCurrentTextureSerial = 1;
TextureStorage::TextureStorage(DWORD usage)
: mD3DUsage(usage),
mD3DPool(getDisplay()->getRenderer()->getTexturePool(usage)), // D3D9_REPLACE
mD3DPool(getDisplay()->getRenderer9()->getTexturePool(usage)), // D3D9_REPLACE
mTextureSerial(issueTextureSerial()),
mLodOffset(0)
{
......@@ -172,7 +172,7 @@ bool TextureStorage::copyToRenderTarget(IDirect3DSurface9 *dest, IDirect3DSurfac
if (source && dest)
{
HRESULT result = D3DERR_OUTOFVIDEOMEMORY;
renderer::Renderer9 *renderer = getDisplay()->getRenderer();
renderer::Renderer9 *renderer = getDisplay()->getRenderer9();
IDirect3DDevice9 *device = renderer->getDevice(); // D3D9_REPLACE
if (fromManaged)
......@@ -221,7 +221,7 @@ TextureStorage2D::TextureStorage2D(int levels, GLenum internalformat, GLenum usa
// we handle that here by skipping the d3d texture creation
if (width > 0 && height > 0)
{
IDirect3DDevice9 *device = getDisplay()->getRenderer()->getDevice(); // D3D9_REPLACE
IDirect3DDevice9 *device = getDisplay()->getRenderer9()->getDevice(); // D3D9_REPLACE
MakeValidSize(false, gl::IsCompressed(internalformat), &width, &height, &mLodOffset);
HRESULT result = device->CreateTexture(width, height, levels ? levels + mLodOffset : 0, getUsage(),
ConvertTextureInternalFormat(internalformat), getPool(), &mTexture, NULL);
......@@ -321,7 +321,7 @@ TextureStorageCubeMap::TextureStorageCubeMap(int levels, GLenum internalformat,
// we handle that here by skipping the d3d texture creation
if (size > 0)
{
IDirect3DDevice9 *device = getDisplay()->getRenderer()->getDevice(); // D3D9_REPLACE
IDirect3DDevice9 *device = getDisplay()->getRenderer9()->getDevice(); // D3D9_REPLACE
int height = size;
MakeValidSize(false, gl::IsCompressed(internalformat), &size, &height, &mLodOffset);
HRESULT result = device->CreateCubeTexture(size, levels ? levels + mLodOffset : 0, getUsage(),
......
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