X-Git-Url: https://gerrit.akraino.org/r/gitweb?a=blobdiff_plain;f=src%2Ftype3_AndroidCloud%2Fanbox-master%2Fsrc%2Fanbox%2Fgraphics%2Femugl%2FRendererConfig.h;fp=src%2Ftype3_AndroidCloud%2Fanbox-master%2Fsrc%2Fanbox%2Fgraphics%2Femugl%2FRendererConfig.h;h=eb33db9c17f14ce32fded270839a045833f1de21;hb=e26c1ec581be598521517829adba8c8dd23a768f;hp=0000000000000000000000000000000000000000;hpb=6699c1aea74eeb0eb400e6299079f0c7576f716f;p=iec.git diff --git a/src/type3_AndroidCloud/anbox-master/src/anbox/graphics/emugl/RendererConfig.h b/src/type3_AndroidCloud/anbox-master/src/anbox/graphics/emugl/RendererConfig.h new file mode 100644 index 0000000..eb33db9 --- /dev/null +++ b/src/type3_AndroidCloud/anbox-master/src/anbox/graphics/emugl/RendererConfig.h @@ -0,0 +1,162 @@ +// Copyright (C) 2015 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef _LIBRENDER_FB_CONFIG_H +#define _LIBRENDER_FB_CONFIG_H + +#include +#include + +#include + +// A class used to model a guest EGL config. +// This really wraps a host EGLConfig handle, and provides a few cached +// attributes that can be retrieved through direct accessors, like +// getDepthSize(). +// +// Each FbConfig is identified by a unique id which is its index in +// an FbConfigList instance (as declared below). It is not related to +// the host EGLConfig value or its EGL_CONFIG_ID. +// +// One doesn't create an FbConfig instance. Instead, create and initialize +// an FbConfigList from the host EGLDisplay, and use its size() and get() +// methods to access it. +class RendererConfig { + public: + // Destructor + ~RendererConfig(); + + // Retrieve host EGLConfig. + EGLConfig getEglConfig() const { return mEglConfig; } + + // Get depth size in bits. + GLuint getDepthSize() const { return getAttribValue(0); } + + // Get stencil size in bits. + GLuint getStencilSize() const { return getAttribValue(1); } + + // Get renderable type mask. + GLuint getRenderableType() const { return getAttribValue(2); } + + // Get surface type mask. + GLuint getSurfaceType() const { return getAttribValue(3); } + + // Get the EGL_CONFIG_ID value. This is the same as the one of the + // underlying host EGLConfig handle. + GLint getConfigId() const { return static_cast(getAttribValue(4)); } + + private: + RendererConfig(); + RendererConfig(RendererConfig& other); + + explicit RendererConfig(EGLConfig hostConfig, EGLDisplay hostDisplay); + + friend class RendererConfigList; + + GLuint getAttribValue(int n) const { + return mAttribValues ? mAttribValues[n] : 0U; + } + + EGLConfig mEglConfig; + GLint* mAttribValues; +}; + +// A class to model the list of FbConfig for a given EGLDisplay, this is +// built from the list of host EGLConfig handles, filtered to only accept +// configs that are useful by the rendering library (e.g. they must support +// PBuffers and RGB pixel values). +// +// Usage is the following: +// +// 1) Create new instance by passing host EGLDisplay value. +// +// 2) Call empty() to check that the list is not empty, which would indicate +// an error during creation. +// +// 3) FbConfig instances are identified by numbers in 0..(N-1) range, where +// N is the result of the size() method. +// +// 4) Convert an FbConfig id into an FbConfig instance with get(). +// +// 5) Use getPackInfo() and packConfigs() to retrieve information about +// available configs to the guest. +class RendererConfigList { + public: + // Create a new list of FbConfig instance, by querying all compatible + // host configs from |display|. A compatible config is one that supports + // Pbuffers and RGB pixel values. + // + // After construction, call empty() to check if there are items. + // An empty list means there was an error during construction. + explicit RendererConfigList(EGLDisplay display); + + // Destructor. + ~RendererConfigList(); + + // Return true iff the list is empty. true means there was an error + // during construction. + bool empty() const { return mCount == 0; } + + // Return the number of FbConfig instances in the list. + // Each instance is identified by a number from 0 to N-1, + // where N is the result of this function. + size_t size() const { return static_cast(mCount); } + + // Retrieve the FbConfig instance associated with |guestId|, + // which must be an integer between 0 and |size() - 1|. Returns + // NULL in case of failure. + const RendererConfig* get(int guestId) const { + if (guestId >= 0 && guestId < mCount) { + return mConfigs[guestId]; + } else { + return NULL; + } + } + + // Use |attribs| a list of EGL attribute name/values terminated by + // EGL_NONE, to select a set of matching FbConfig instances. + // + // On success, returns the number of matching instances. + // If |configs| is not NULL, it will be populated with the guest IDs + // of the matched FbConfig instances. + // + // |configsSize| is the number of entries in the |configs| array. The + // function will never write more than |configsSize| entries into + // |configsSize|. + EGLint chooseConfig(const EGLint* attribs, EGLint* configs, + EGLint configsSize) const; + + // Retrieve information that can be sent to the guest before packed + // config list information. If |numConfigs| is NULL, then |*numConfigs| + // will be set on return to the number of config instances. + // If |numAttribs| is not NULL, then |*numAttribs| will be set on return + // to the number of attribute values cached by each FbConfig instance. + void getPackInfo(EGLint* mumConfigs, EGLint* numAttribs) const; + + // Write the full list information into an array of EGLuint items. + // |buffer| is the output buffer that will receive the data. + // |bufferByteSize| is teh buffer size in bytes. + // On success, this returns + EGLint packConfigs(GLuint bufferByteSize, GLuint* buffer) const; + + private: + RendererConfigList(); + RendererConfigList(const RendererConfigList& other); + + int mCount; + RendererConfig** mConfigs; + EGLDisplay mDisplay; +}; + +#endif // _LIBRENDER_FB_CONFIG_H