`
老七的米店
  • 浏览: 46696 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Api Demo - .graphics(20)>>CompressedTextureActivity

阅读更多
/*
 * Copyright (C) 2008 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.example.android.apis.graphics;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;

import javax.microedition.khronos.opengles.GL10;

import android.app.Activity;
import android.opengl.ETC1Util;
import android.opengl.GLES10;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
import android.util.Log;

import com.example.android.apis.R;

/**
 * Demonstrate how to use ETC1 format compressed textures.
 * This sample can be recompiled to use either resource-based
 * textures (compressed offline using the etc1tool), or
 * textures created on the fly by compressing images.
 *
 */
public class CompressedTextureActivity extends Activity {
    private final static String TAG = "CompressedTextureActivity";
    /**
     * Choose between creating a compressed texture on the fly or
     * loading a compressed texture from a resource.
     */
    private final static boolean TEST_CREATE_TEXTURE = false;
    /**
     * When creating a compressed texture on the fly, choose
     * whether or not to use the i/o stream APIs.
     */
    private final static boolean USE_STREAM_IO = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mGLView = new GLSurfaceView(this);
        mGLView.setEGLConfigChooser(false);
        StaticTriangleRenderer.TextureLoader loader;//纹理装载器
        if (TEST_CREATE_TEXTURE) {
            loader = new SyntheticCompressedTextureLoader();//运行时创建资源。
        } else {
            loader = new CompressedTextureLoader();//压缩从资源文件中获得的纹理
        }
        mGLView.setRenderer(new StaticTriangleRenderer(this, loader));//设置渲染
        setContentView(mGLView);
    }

    @Override
    protected void onPause() {
        super.onPause();
        mGLView.onPause();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mGLView.onResume();
    }

    /**
     * Demonstrate how to load a compressed texture from an APK resource.
     *
     */
    private class CompressedTextureLoader implements StaticTriangleRenderer.TextureLoader {
        public void load(GL10 gl) {
            Log.w(TAG, "ETC1 texture support: " + ETC1Util.isETC1Supported());
            InputStream input = getResources().openRawResource(R.raw.androids);//从raw资源获取输入流
            try {
                ETC1Util.loadTexture(GLES10.GL_TEXTURE_2D, 0, 0,
                        GLES10.GL_RGB, GLES10.GL_UNSIGNED_SHORT_5_6_5, input);//通过输入流设置纹理
            } catch (IOException e) {
                Log.w(TAG, "Could not load texture: " + e);
            } finally {
                try {
                    input.close();
                } catch (IOException e) {
                    // ignore exception thrown from close.
                }
            }
        }
    }

    /**
     * Demonstrate how to create a compressed texture on the fly.
     */
    private class SyntheticCompressedTextureLoader implements StaticTriangleRenderer.TextureLoader {
        public void load(GL10 gl) {
            int width = 128;
            int height = 128;
            Buffer image = createImage(width, height);//创建纹理缓存
            /*
             * 将Buffer封装成ETC1Texture
             */
            ETC1Util.ETC1Texture etc1Texture = ETC1Util.compressTexture(image, width, height, 3, 3 * width);
            if (USE_STREAM_IO) {
                // Test the ETC1Util APIs for reading and writing compressed textures to I/O streams.
                try {
                    ByteArrayOutputStream bos = new ByteArrayOutputStream();
                    ETC1Util.writeTexture(etc1Texture, bos);//将ETC1Texture写入输出流
                    ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());//将输入流转换成Byte输入流
                    ETC1Util.loadTexture(GLES10.GL_TEXTURE_2D, 0, 0,
                            GLES10.GL_RGB, GLES10.GL_UNSIGNED_SHORT_5_6_5, bis);//通过输入流设置纹理
                } catch (IOException e) {
                    Log.w(TAG, "Could not load texture: " + e);
                }
            } else {
                ETC1Util.loadTexture(GLES10.GL_TEXTURE_2D, 0, 0,
                        GLES10.GL_RGB, GLES10.GL_UNSIGNED_SHORT_5_6_5, etc1Texture);
            }
        }

        private Buffer createImage(int width, int height) {//快速创建纹理
            int stride = 3 * width;
            ByteBuffer image = ByteBuffer.allocateDirect(height * stride)
                .order(ByteOrder.nativeOrder());

            // Fill with a pretty "munching squares" pattern:
            for (int t = 0; t < height; t++) {
                byte red = (byte)(255-2*t);
                byte green = (byte)(2*t);
                byte blue = 0;
                for (int x = 0; x < width; x++) {
                    int y = x ^ t;
                    image.position(stride*y+x*3);
                    image.put(red);
                    image.put(green);
                    image.put(blue);
                }
            }
            image.position(0);
            return image;
        }
    }
    private GLSurfaceView mGLView;
}

 

分享到:
评论

相关推荐

    esapi-2.1.0.1_esapi-2.1.0.1_

    提供ESAPI jar包下载 esapi-2.1.0.1.jar

    spring4 mvc + jpa demo

    &lt;project.build.sourceEncoding&gt;UTF-8&lt;/project.build.sourceEncoding&gt; &lt;jdk.version&gt;1.7&lt;/jdk.version&gt; &lt;spring.version&gt;4.0.1.RELEASE&lt;/spring.version&gt; &lt;spring-data-jpa.version&gt;1.6.2.RELEASE&lt;/spring-...

    ProCamera2D

    - Camera Window &gt;&gt;DEMO - Cinematics &gt;&gt;DEMO - Content Fitter &gt;&gt;DEMO - Forward Focus &gt;&gt;DEMO - Geometry Boundaries - Limit Distance &gt;&gt;DEMO - Limit Speed &gt;&gt;DEMO - Numeric Boundaries &gt;&gt;DEMO - Pan ...

    Face-api.js静态页面版Demo

    JavaScript人脸识别库Face-api.js的示例,无需安装nodejs,iis本地直接看效果。注意调用摄像头不能用IP访问,只能localhost,远程预览需要HTTPS;iis无扩展名文件若出现404,需在mime类型中添加扩展名【.】类型...

    demo-0.0.1-SNAPSHOT.jar

    返回json数组的科技头条的api数据jar包

    Api-dawn-api-demo.zip

    Api-dawn-api-demo.zip,道恩API解调API,一个api可以被认为是多个软件设备之间通信的指导手册。例如,api可用于web应用程序之间的数据库通信。通过提取实现并将数据放弃到对象中,api简化了编程。

    可keil编译sam3x_ek_bertos_http_demo

    根据atmel官方例程sam3x_ek_bertos_http_demo,自己...在keil-&gt;Project-&gt;Manage-&gt;Components,Environment,Books...-&gt;Folders/Externsions的 Use GCC的GNU-Tool Folder中指定arm-2012.03-56-arm-none-eabi.exe的安装目录

    Api-demo.zip

    Api-demo.zip,API平台的演示应用程序框架API平台演示,一个api可以被认为是多个软件设备之间通信的指导手册。例如,api可用于web应用程序之间的数据库通信。通过提取实现并将数据放弃到对象中,api简化了编程。

    autoconfig-demo.zip

    &lt;description&gt;Demo project for Spring Boot&lt;/description&gt; &lt;properties&gt; &lt;java.version&gt;1.8&lt;/java.version&gt; &lt;/properties&gt; &lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.boot...

    oss-sdk-demo 阿里云开放云存储服务Demo

    阿里云青岛节点oss服务报错解决方式 The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint. endpoint 根据自己选择的节点...

    jquery日历控件

    &lt;div class="demo-description"&gt; &lt;p&gt;The datepicker is tied to a standard form input field. Focus on the input (click, or use the tab key) to open an interactive calendar in a small overlay. Choose a ...

    open-api-sdk-2.0和jackson,京东宙斯开发jar包,宙斯API包

    open-api-sdk-2.0和jackson,京东宙斯开发jar包,宙斯API包,本人开发使用,open-api-sdk-2.0.jar,jackson-core-asl-1.9.8.jar,jackson-mapper-asl-1.9.8.jar,需要朋友可自行下载

    service-api-demo.rar

    此工程集成了nexus私服,配合我的“nexus搭建和基于spring boot2.x的配置,centos7"博客,可以使用spring boot集成nexus

    mybatis-3.2.7.jar-lib-source code API settings Timeout MyBatisDemo 常用例子

    mybatis-3.2.7.jar source code API configuration.xml settings defaultStatementTimeout 的设置 MyBatisDemo 常用例子 使用3种方法,编写mapper,操作数据库

    脚手架-ncpub-multipage-demo.zip

    为了便于NCC开发,前端需在Visual Studio Code中部署脚手架,脚手架里封装了与NCC后端关联的配置,实现前后端分离开发。

    android-serialport-api 串口demo.zip

    这是很据android-serialport-api 自己简化的一个demo ,可以使用。原来android-serial-api的程序很多人反映都不能使用,所以自己写了这个,只有一个activity,可以做为你的学习参考。

    MapReduce Java API实例-统计单次出现频率示例代码-MapReduceDemo.rar

    MapReduce Java API实例-统计单次出现频率示例代码-MapReduceDemo.rar MapReduce Java API实例-统计单次出现频率示例代码-MapReduceDemo.rar MapReduce Java API实例-统计单次出现频率示例代码-MapReduceDemo.rar

    GCD常用和不常用API说明GCD-Demo-master.zip

    GCD常用和不常用API说明GCD_Demo-master.zip

    org.springframework.web.servlet-3.0.1.RELEASE-A.jar

    nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'error_view' of bean class [com.demo.controller.action.AuthorAction]: Bean property 'error_view' is not ...

    javascript marquee

    &lt;td id=demo1 valign=top&gt; &lt;a href='images/logo_1.gif'&gt; &lt;img src="images/logo_1.gif"&gt; &lt;/a&gt; &lt;!--后面的链接自己加上--&gt; &lt;img src="images/logo/flashempire.gif"&gt; &lt;img src="images/logo.gif"&gt; ...

Global site tag (gtag.js) - Google Analytics