diff options
author | 2013-02-06 16:51:04 -0800 | |
---|---|---|
committer | 2013-02-07 12:11:22 -0800 | |
commit | 3bbacf27c0be1bae4e4483577fc89ae3113abe5d (patch) | |
tree | 102ffa5362c1782af27f2f0abad3e9f481479e79 /libs/hwui/Extensions.cpp | |
parent | c2a972131f1870042eb63847d4b24fbe718d8e3f (diff) |
Add a RenderBuffer object to store stencil buffers.
Bug #7146141
This change is needed to add a render buffer cache to avoid
creating and destroying stencil buffers on every frame.
This change also allows the renderer to use a 1 bit or 4 bit
stencil buffer whenever possible.
Finally this change fixes a bug introduced by a previous CL
which causes the stencil buffer to not be updated in certain
conditions. The fix relies on a new optional parameter in
drawColorRects() that can be used to avoid performing a
quickReject on rectangles generated by the clip region.
Change-Id: I2f55a8e807009887b276a83cde9f53fd5c01199f
Diffstat (limited to 'libs/hwui/Extensions.cpp')
-rw-r--r-- | libs/hwui/Extensions.cpp | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/libs/hwui/Extensions.cpp b/libs/hwui/Extensions.cpp new file mode 100644 index 000000000000..edc90fbc80f0 --- /dev/null +++ b/libs/hwui/Extensions.cpp @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2013 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. + */ + +#include "Debug.h" +#include "Extensions.h" + +namespace android { + +using namespace uirenderer; +ANDROID_SINGLETON_STATIC_INSTANCE(Extensions); + +namespace uirenderer { + +/////////////////////////////////////////////////////////////////////////////// +// Defines +/////////////////////////////////////////////////////////////////////////////// + +// Debug +#if DEBUG_EXTENSIONS + #define EXT_LOGD(...) ALOGD(__VA_ARGS__) +#else + #define EXT_LOGD(...) +#endif + +/////////////////////////////////////////////////////////////////////////////// +// Constructors +/////////////////////////////////////////////////////////////////////////////// + +Extensions::Extensions(): Singleton<Extensions>() { + const char* buffer = (const char*) glGetString(GL_EXTENSIONS); + const char* current = buffer; + const char* head = current; + EXT_LOGD("Available GL extensions:"); + do { + head = strchr(current, ' '); + String8 s(current, head ? head - current : strlen(current)); + if (s.length()) { + mExtensionList.add(s); + EXT_LOGD(" %s", s.string()); + } + current = head + 1; + } while (head); + + mHasNPot = hasExtension("GL_OES_texture_npot"); + mHasFramebufferFetch = hasExtension("GL_NV_shader_framebuffer_fetch"); + mHasDiscardFramebuffer = hasExtension("GL_EXT_discard_framebuffer"); + mHasDebugMarker = hasExtension("GL_EXT_debug_marker"); + mHasDebugLabel = hasExtension("GL_EXT_debug_label"); + mHasTiledRendering = hasExtension("GL_QCOM_tiled_rendering"); + mHas1BitStencil = hasExtension("GL_OES_stencil1"); + mHas4BitStencil = hasExtension("GL_OES_stencil4"); + + mExtensions = strdup(buffer); +} + +Extensions::~Extensions() { + free(mExtensions); +} + +/////////////////////////////////////////////////////////////////////////////// +// Methods +/////////////////////////////////////////////////////////////////////////////// + +bool Extensions::hasExtension(const char* extension) const { + const String8 s(extension); + return mExtensionList.indexOf(s) >= 0; +} + +void Extensions::dump() const { + ALOGD("Supported extensions:\n%s", mExtensions); +} + +}; // namespace uirenderer +}; // namespace android |