Edit

kc3-lang/angle/src/libGLESv2/renderer/Renderer.cpp

Branch :

  • Show log

    Commit

  • Author : Geoff Lang
    Date : 2014-04-16 10:52:36
    Hash : cec3590a
    Message : Use a Caps structure to store extension and texture format support. Removes support for fallbacks in D3D9 texture formats. The fallback formats did not work properly anyways. BUG=angle:658 Change-Id: Idfa5183bf71fd8ebf4608f940f9d93177b9eff08 Reviewed-on: https://chromium-review.googlesource.com/200813 Tested-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>

  • src/libGLESv2/renderer/Renderer.cpp
  • #include "precompiled.h"
    //
    // Copyright (c) 2012-2014 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.
    //
    
    // Renderer.cpp: Implements EGL dependencies for creating and destroying Renderer instances.
    
    #include <EGL/eglext.h>
    #include "libGLESv2/main.h"
    #include "libGLESv2/Program.h"
    #include "libGLESv2/renderer/Renderer.h"
    #include "common/utilities.h"
    #include "third_party/trace_event/trace_event.h"
    #include "libGLESv2/Shader.h"
    
    #if defined (ANGLE_ENABLE_D3D9)
    #include "libGLESv2/renderer/d3d9/Renderer9.h"
    #endif // ANGLE_ENABLE_D3D9
    
    #if defined (ANGLE_ENABLE_D3D11)
    #include "libGLESv2/renderer/d3d11/Renderer11.h"
    #endif // ANGLE_ENABLE_D3D11
    
    #if !defined(ANGLE_DEFAULT_D3D11)
    // Enables use of the Direct3D 11 API for a default display, when available
    #define ANGLE_DEFAULT_D3D11 0
    #endif
    
    namespace rx
    {
    
    Renderer::Renderer(egl::Display *display)
        : mDisplay(display),
          mCapsInitialized(false),
          mCurrentClientVersion(2)
    {
    }
    
    Renderer::~Renderer()
    {
        gl::Shader::releaseCompiler();
    }
    
    const gl::Caps &Renderer::getCaps() const
    {
        if (!mCapsInitialized)
        {
            mCaps = generateCaps();
            mCapsInitialized = true;
        }
    
        return mCaps;
    }
    
    }
    
    extern "C"
    {
    
    rx::Renderer *glCreateRenderer(egl::Display *display, HDC hDc, EGLNativeDisplayType displayId)
    {
    #if defined(ANGLE_ENABLE_D3D11)
        if (ANGLE_DEFAULT_D3D11 ||
            displayId == EGL_D3D11_ELSE_D3D9_DISPLAY_ANGLE ||
            displayId == EGL_D3D11_ONLY_DISPLAY_ANGLE)
        {
            rx::Renderer11 *renderer = new rx::Renderer11(display, hDc);
            if (renderer->initialize() == EGL_SUCCESS)
            {
                return renderer;
            }
            else
            {
                // Failed to create a D3D11 renderer, try D3D9
                SafeDelete(renderer);
            }
        }
    #endif
    
    #if defined(ANGLE_ENABLE_D3D9)
        if (displayId != EGL_D3D11_ONLY_DISPLAY_ANGLE)
        {
            rx::Renderer9 *renderer = new rx::Renderer9(display, hDc);
            if (renderer->initialize() == EGL_SUCCESS)
            {
                return renderer;
            }
            else
            {
                SafeDelete(renderer);
            }
        }
    #endif
    
        return NULL;
    }
    
    void glDestroyRenderer(rx::Renderer *renderer)
    {
        delete renderer;
    }
    
    }