Edit

kc3-lang/angle/src/libANGLE/Platform.cpp

Branch :

  • Show log

    Commit

  • Author : James Darpinian
    Date : 2019-08-06 10:10:52
    Hash : 22ec7dc9
    Message : Remove all global constructors and exit time destructors. WebKit compiles with -Wglobal-constructors, so they want this. I decided to do -Wexit-time-destructors at the same time. Bug: angleproject:3439 Bug: angleproject:1459 Change-Id: I4b44ae4f8e6f066e07dc7f9f6ced9a5d49dc8f8a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1738438 Commit-Queue: James Darpinian <jdarpinian@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>

  • src/libANGLE/Platform.cpp
  • //
    // Copyright 2015 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.
    //
    
    // Platform.cpp: Implementation methods for angle::Platform.
    
    #include <platform/Platform.h>
    
    #include <cstring>
    
    #include "common/debug.h"
    
    namespace
    {
    // TODO(jmadill): Make methods owned by egl::Display.
    angle::PlatformMethods &PlatformMethods()
    {
        static angle::PlatformMethods platformMethods;
        return platformMethods;
    }
    }  // anonymous namespace
    
    angle::PlatformMethods *ANGLEPlatformCurrent()
    {
        return &PlatformMethods();
    }
    
    bool ANGLE_APIENTRY ANGLEGetDisplayPlatform(angle::EGLDisplayType display,
                                                const char *const methodNames[],
                                                unsigned int methodNameCount,
                                                void *context,
                                                void *platformMethods)
    {
        angle::PlatformMethods **platformMethodsOut =
            reinterpret_cast<angle::PlatformMethods **>(platformMethods);
    
        // We allow for a lower input count of impl platform methods if the subset is correct.
        if (methodNameCount > angle::g_NumPlatformMethods)
        {
            ERR() << "Invalid platform method count: " << methodNameCount << ", expected "
                  << angle::g_NumPlatformMethods << ".";
            return false;
        }
    
        for (unsigned int nameIndex = 0; nameIndex < methodNameCount; ++nameIndex)
        {
            const char *expectedName = angle::g_PlatformMethodNames[nameIndex];
            const char *actualName   = methodNames[nameIndex];
            if (strcmp(expectedName, actualName) != 0)
            {
                ERR() << "Invalid platform method name: " << actualName << ", expected " << expectedName
                      << ".";
                return false;
            }
        }
    
        // TODO(jmadill): Store platform methods in display.
        PlatformMethods().context = context;
        *platformMethodsOut       = &PlatformMethods();
        return true;
    }
    
    void ANGLE_APIENTRY ANGLEResetDisplayPlatform(angle::EGLDisplayType display)
    {
        // TODO(jmadill): Store platform methods in display.
        PlatformMethods() = angle::PlatformMethods();
    }