Merge "Make embedded hardware layers work. Bug #3369474" into honeycomb
This commit is contained in:
@@ -58,7 +58,6 @@ import android.util.PoolableManager;
|
||||
import android.util.Pools;
|
||||
import android.util.SparseArray;
|
||||
import android.view.ContextMenu.ContextMenuInfo;
|
||||
import android.view.View.MeasureSpec;
|
||||
import android.view.accessibility.AccessibilityEvent;
|
||||
import android.view.accessibility.AccessibilityEventSource;
|
||||
import android.view.accessibility.AccessibilityManager;
|
||||
|
||||
@@ -29,7 +29,6 @@ namespace uirenderer {
|
||||
void LayerRenderer::prepare(bool opaque) {
|
||||
LAYER_RENDERER_LOGD("Rendering into layer, fbo = %d", mLayer->fbo);
|
||||
|
||||
glGetIntegerv(GL_FRAMEBUFFER_BINDING, (GLint*) &mPreviousFbo);
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, mLayer->fbo);
|
||||
|
||||
OpenGLRenderer::prepare(opaque);
|
||||
@@ -37,11 +36,17 @@ void LayerRenderer::prepare(bool opaque) {
|
||||
|
||||
void LayerRenderer::finish() {
|
||||
OpenGLRenderer::finish();
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, mPreviousFbo);
|
||||
|
||||
generateMesh();
|
||||
|
||||
LAYER_RENDERER_LOGD("Finished rendering into layer, fbo = %d", mLayer->mFbo);
|
||||
|
||||
// No need to unbind our FBO, this will be taken care of by the caller
|
||||
// who will invoke OpenGLRenderer::resume()
|
||||
}
|
||||
|
||||
GLint LayerRenderer::getTargetFbo() {
|
||||
return mLayer->fbo;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -51,6 +51,7 @@ public:
|
||||
|
||||
bool hasLayer();
|
||||
Region* getRegion();
|
||||
GLint getTargetFbo();
|
||||
|
||||
static Layer* createLayer(uint32_t width, uint32_t height, bool isOpaque = false);
|
||||
static bool resizeLayer(Layer* layer, uint32_t width, uint32_t height);
|
||||
@@ -61,8 +62,6 @@ private:
|
||||
void generateMesh();
|
||||
|
||||
Layer* mLayer;
|
||||
GLuint mPreviousFbo;
|
||||
|
||||
}; // class LayerRenderer
|
||||
|
||||
}; // namespace uirenderer
|
||||
|
||||
@@ -200,7 +200,7 @@ void OpenGLRenderer::resume() {
|
||||
|
||||
glDisable(GL_DITHER);
|
||||
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, getTargetFbo());
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||
|
||||
mCaches.blend = true;
|
||||
|
||||
@@ -145,14 +145,27 @@ protected:
|
||||
return mSnapshot;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the region of the current layer.
|
||||
*/
|
||||
virtual Region* getRegion() {
|
||||
return mSnapshot->region;
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates whether rendering is currently targeted at a layer.
|
||||
*/
|
||||
virtual bool hasLayer() {
|
||||
return (mSnapshot->flags & Snapshot::kFlagFboTarget) && mSnapshot->region;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of the FBO this renderer is rendering into.
|
||||
*/
|
||||
virtual GLint getTargetFbo() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
private:
|
||||
/**
|
||||
* Saves the current state of the renderer as a new snapshot.
|
||||
|
||||
@@ -52,6 +52,15 @@
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<activity
|
||||
android:name="ViewLayersActivity3"
|
||||
android:label="_ViewLayers3">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<activity
|
||||
android:name="AlphaLayersActivity"
|
||||
android:label="_αLayers">
|
||||
|
||||
48
tests/HwAccelerationTest/res/layout/view_layers_3.xml
Normal file
48
tests/HwAccelerationTest/res/layout/view_layers_3.xml
Normal file
@@ -0,0 +1,48 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (C) 2011 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.
|
||||
-->
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<LinearLayout
|
||||
android:background="#30ff0000"
|
||||
android:layout_width="0dip"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1" />
|
||||
|
||||
<LinearLayout
|
||||
android:background="#3000ff00"
|
||||
android:layout_width="0dip"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:padding="12dip">
|
||||
|
||||
<ListView
|
||||
android:id="@+id/list1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:background="#300000ff"
|
||||
android:layout_width="0dip"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1" />
|
||||
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,108 @@
|
||||
/*
|
||||
* Copyright (C) 2011 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.
|
||||
*/
|
||||
|
||||
package com.android.test.hwui;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.os.Bundle;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.ListView;
|
||||
import android.widget.TextView;
|
||||
|
||||
@SuppressWarnings({"UnusedDeclaration"})
|
||||
public class ViewLayersActivity3 extends Activity {
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
setContentView(R.layout.view_layers_3);
|
||||
|
||||
setupList(R.id.list1);
|
||||
}
|
||||
|
||||
private void setupList(int listId) {
|
||||
final ListView list = (ListView) findViewById(listId);
|
||||
list.setAdapter(new SimpleListAdapter(this));
|
||||
list.setLayerType(View.LAYER_TYPE_HARDWARE, null);
|
||||
((View) list.getParent()).setLayerType(View.LAYER_TYPE_HARDWARE, null);
|
||||
}
|
||||
|
||||
private static class SimpleListAdapter extends ArrayAdapter<String> {
|
||||
public SimpleListAdapter(Context context) {
|
||||
super(context, android.R.layout.simple_list_item_1, DATA_LIST);
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getView(int position, View convertView, ViewGroup parent) {
|
||||
TextView v = (TextView) super.getView(position, convertView, parent);
|
||||
final Resources r = getContext().getResources();
|
||||
final DisplayMetrics metrics = r.getDisplayMetrics();
|
||||
v.setCompoundDrawablePadding((int) (6 * metrics.density + 0.5f));
|
||||
v.setCompoundDrawablesWithIntrinsicBounds(r.getDrawable(R.drawable.icon),
|
||||
null, null, null);
|
||||
return v;
|
||||
}
|
||||
}
|
||||
|
||||
private static final String[] DATA_LIST = {
|
||||
"Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra",
|
||||
"Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", "Argentina",
|
||||
"Armenia", "Aruba", "Australia", "Austria", "Azerbaijan",
|
||||
"Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium",
|
||||
"Belize", "Benin", "Bermuda", "Bhutan", "Bolivia",
|
||||
"Bosnia and Herzegovina", "Botswana", "Bouvet Island", "Brazil",
|
||||
"British Indian Ocean Territory", "British Virgin Islands", "Brunei", "Bulgaria",
|
||||
"Burkina Faso", "Burundi", "Cote d'Ivoire", "Cambodia", "Cameroon", "Canada", "Cape Verde",
|
||||
"Cayman Islands", "Central African Republic", "Chad", "Chile", "China",
|
||||
"Christmas Island", "Cocos (Keeling) Islands", "Colombia", "Comoros", "Congo",
|
||||
"Cook Islands", "Costa Rica", "Croatia", "Cuba", "Cyprus", "Czech Republic",
|
||||
"Democratic Republic of the Congo", "Denmark", "Djibouti", "Dominica", "Dominican Republic",
|
||||
"East Timor", "Ecuador", "Egypt", "El Salvador", "Equatorial Guinea", "Eritrea",
|
||||
"Estonia", "Ethiopia", "Faeroe Islands", "Falkland Islands", "Fiji", "Finland",
|
||||
"Former Yugoslav Republic of Macedonia", "France", "French Guiana", "French Polynesia",
|
||||
"French Southern Territories", "Gabon", "Georgia", "Germany", "Ghana", "Gibraltar",
|
||||
"Greece", "Greenland", "Grenada", "Guadeloupe", "Guam", "Guatemala", "Guinea", "Guinea-Bissau",
|
||||
"Guyana", "Haiti", "Heard Island and McDonald Islands", "Honduras", "Hong Kong", "Hungary",
|
||||
"Iceland", "India", "Indonesia", "Iran", "Iraq", "Ireland", "Israel", "Italy", "Jamaica",
|
||||
"Japan", "Jordan", "Kazakhstan", "Kenya", "Kiribati", "Kuwait", "Kyrgyzstan", "Laos",
|
||||
"Latvia", "Lebanon", "Lesotho", "Liberia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg",
|
||||
"Macau", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali", "Malta", "Marshall Islands",
|
||||
"Martinique", "Mauritania", "Mauritius", "Mayotte", "Mexico", "Micronesia", "Moldova",
|
||||
"Monaco", "Mongolia", "Montserrat", "Morocco", "Mozambique", "Myanmar", "Namibia",
|
||||
"Nauru", "Nepal", "Netherlands", "Netherlands Antilles", "New Caledonia", "New Zealand",
|
||||
"Nicaragua", "Niger", "Nigeria", "Niue", "Norfolk Island", "North Korea", "Northern Marianas",
|
||||
"Norway", "Oman", "Pakistan", "Palau", "Panama", "Papua New Guinea", "Paraguay", "Peru",
|
||||
"Philippines", "Pitcairn Islands", "Poland", "Portugal", "Puerto Rico", "Qatar",
|
||||
"Reunion", "Romania", "Russia", "Rwanda", "Sqo Tome and Principe", "Saint Helena",
|
||||
"Saint Kitts and Nevis", "Saint Lucia", "Saint Pierre and Miquelon",
|
||||
"Saint Vincent and the Grenadines", "Samoa", "San Marino", "Saudi Arabia", "Senegal",
|
||||
"Seychelles", "Sierra Leone", "Singapore", "Slovakia", "Slovenia", "Solomon Islands",
|
||||
"Somalia", "South Africa", "South Georgia and the South Sandwich Islands", "South Korea",
|
||||
"Spain", "Sri Lanka", "Sudan", "Suriname", "Svalbard and Jan Mayen", "Swaziland", "Sweden",
|
||||
"Switzerland", "Syria", "Taiwan", "Tajikistan", "Tanzania", "Thailand", "The Bahamas",
|
||||
"The Gambia", "Togo", "Tokelau", "Tonga", "Trinidad and Tobago", "Tunisia", "Turkey",
|
||||
"Turkmenistan", "Turks and Caicos Islands", "Tuvalu", "Virgin Islands", "Uganda",
|
||||
"Ukraine", "United Arab Emirates", "United Kingdom",
|
||||
"United States", "United States Minor Outlying Islands", "Uruguay", "Uzbekistan",
|
||||
"Vanuatu", "Vatican City", "Venezuela", "Vietnam", "Wallis and Futuna", "Western Sahara",
|
||||
"Yemen", "Yugoslavia", "Zambia", "Zimbabwe"
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user