亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? spritetextrenderer.java

?? Android Source Code. An gallary program.
?? JAVA
字號:
/* * 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.spritetext;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Paint;import android.opengl.GLU;import android.opengl.GLUtils;import android.os.SystemClock;import com.example.android.apis.R;import com.example.android.apis.graphics.GLSurfaceView;import java.io.IOException;import java.io.InputStream;import java.nio.ByteBuffer;import java.nio.ByteOrder;import java.nio.FloatBuffer;import java.nio.ShortBuffer;import javax.microedition.khronos.egl.EGL10;import javax.microedition.khronos.opengles.GL10;public class SpriteTextRenderer implements GLSurfaceView.Renderer{    public SpriteTextRenderer(Context context) {        mContext = context;        mTriangle = new Triangle();        mProjector = new Projector();        mLabelPaint = new Paint();        mLabelPaint.setTextSize(32);        mLabelPaint.setAntiAlias(true);        mLabelPaint.setARGB(0xff, 0x00, 0x00, 0x00);    }    public int[] getConfigSpec() {        // We don't need a depth buffer, and don't care about our        // color depth.        int[] configSpec = {                EGL10.EGL_DEPTH_SIZE, 0,                EGL10.EGL_NONE        };        return configSpec;    }    public void surfaceCreated(GL10 gl) {        /*         * By default, OpenGL enables features that improve quality         * but reduce performance. One might want to tweak that         * especially on software renderer.         */        gl.glDisable(GL10.GL_DITHER);        /*         * Some one-time OpenGL initialization can be made here         * probably based on features of this particular context         */        gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT,                GL10.GL_FASTEST);        gl.glClearColor(.5f, .5f, .5f, 1);        gl.glShadeModel(GL10.GL_SMOOTH);        gl.glEnable(GL10.GL_DEPTH_TEST);        gl.glEnable(GL10.GL_TEXTURE_2D);        /*         * Create our texture. This has to be done each time the         * surface is created.         */        int[] textures = new int[1];        gl.glGenTextures(1, textures, 0);        mTextureID = textures[0];        gl.glBindTexture(GL10.GL_TEXTURE_2D, mTextureID);        gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,                GL10.GL_NEAREST);        gl.glTexParameterf(GL10.GL_TEXTURE_2D,                GL10.GL_TEXTURE_MAG_FILTER,                GL10.GL_LINEAR);        gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S,                GL10.GL_CLAMP_TO_EDGE);        gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T,                GL10.GL_CLAMP_TO_EDGE);        gl.glTexEnvf(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE,                GL10.GL_REPLACE);        InputStream is = mContext.getResources()                .openRawResource(R.drawable.robot);        Bitmap bitmap;        try {            bitmap = BitmapFactory.decodeStream(is);        } finally {            try {                is.close();            } catch(IOException e) {                // Ignore.            }        }        GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);        bitmap.recycle();        if (mLabels != null) {            mLabels.shutdown(gl);        } else {            mLabels = new LabelMaker(true, 256, 64);        }        mLabels.initialize(gl);        mLabels.beginAdding(gl);        mLabelA = mLabels.add(gl, "A", mLabelPaint);        mLabelB = mLabels.add(gl, "B", mLabelPaint);        mLabelC = mLabels.add(gl, "C", mLabelPaint);        mLabelMsPF = mLabels.add(gl, "ms/f", mLabelPaint);        mLabels.endAdding(gl);        if (mNumericSprite != null) {            mNumericSprite.shutdown(gl);        } else {            mNumericSprite = new NumericSprite();        }        mNumericSprite.initialize(gl, mLabelPaint);    }    public void drawFrame(GL10 gl) {        /*         * By default, OpenGL enables features that improve quality         * but reduce performance. One might want to tweak that         * especially on software renderer.         */        gl.glDisable(GL10.GL_DITHER);        gl.glTexEnvx(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE,                GL10.GL_MODULATE);        /*         * Usually, the first thing one might want to do is to clear         * the screen. The most efficient way of doing this is to use         * glClear().         */        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);        /*         * Now we're ready to draw some 3D objects         */        gl.glMatrixMode(GL10.GL_MODELVIEW);        gl.glLoadIdentity();        GLU.gluLookAt(gl, 0.0f, 0.0f, -2.5f,                0.0f, 0.0f, 0.0f,                0.0f, 1.0f, 0.0f);        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);        gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);        gl.glActiveTexture(GL10.GL_TEXTURE0);        gl.glBindTexture(GL10.GL_TEXTURE_2D, mTextureID);        gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S,                GL10.GL_REPEAT);        gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T,                GL10.GL_REPEAT);        long time = SystemClock.uptimeMillis() % 4000L;        float angle = 0.090f * ((int) time);        gl.glRotatef(angle, 0, 0, 1.0f);        gl.glScalef(2.0f, 2.0f, 2.0f);        mTriangle.draw(gl);        mProjector.getCurrentModelView(gl);        mLabels.beginDrawing(gl, mWidth, mHeight);        drawLabel(gl, 0, mLabelA);        drawLabel(gl, 1, mLabelB);        drawLabel(gl, 2, mLabelC);        float msPFX = mWidth - mLabels.getWidth(mLabelMsPF) - 1;        mLabels.draw(gl, msPFX, 0, mLabelMsPF);        mLabels.endDrawing(gl);        drawMsPF(gl, msPFX);    }    private void drawMsPF(GL10 gl, float rightMargin) {        long time = SystemClock.uptimeMillis();        if (mStartTime == 0) {            mStartTime = time;        }        if (mFrames++ == SAMPLE_PERIOD_FRAMES) {            mFrames = 0;            long delta = time - mStartTime;            mStartTime = time;            mMsPerFrame = (int) (delta * SAMPLE_FACTOR);        }        if (mMsPerFrame > 0) {            mNumericSprite.setValue(mMsPerFrame);            float numWidth = mNumericSprite.width();            float x = rightMargin - numWidth;            mNumericSprite.draw(gl, x, 0, mWidth, mHeight);        }    }    private void drawLabel(GL10 gl, int triangleVertex, int labelId) {        float x = mTriangle.getX(triangleVertex);        float y = mTriangle.getY(triangleVertex);        mScratch[0] = x;        mScratch[1] = y;        mScratch[2] = 0.0f;        mScratch[3] = 1.0f;        mProjector.project(mScratch, 0, mScratch, 4);        float sx = mScratch[4];        float sy = mScratch[5];        float height = mLabels.getHeight(labelId);        float width = mLabels.getWidth(labelId);        float tx = sx - width * 0.5f;        float ty = sy - height * 0.5f;        mLabels.draw(gl, tx, ty, labelId);    }    public void sizeChanged(GL10 gl, int w, int h) {        mWidth = w;        mHeight = h;        gl.glViewport(0, 0, w, h);        mProjector.setCurrentView(0, 0, w, h);        /*        * Set our projection matrix. This doesn't have to be done        * each time we draw, but usually a new projection needs to        * be set when the viewport is resized.        */        float ratio = (float) w / h;        gl.glMatrixMode(GL10.GL_PROJECTION);        gl.glLoadIdentity();        gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);        mProjector.getCurrentProjection(gl);    }    private int mWidth;    private int mHeight;    private Context mContext;    private Triangle mTriangle;    private int mTextureID;    private int mFrames;    private int mMsPerFrame;    private final static int SAMPLE_PERIOD_FRAMES = 12;    private final static float SAMPLE_FACTOR = 1.0f / SAMPLE_PERIOD_FRAMES;    private long mStartTime;    private LabelMaker mLabels;    private Paint mLabelPaint;    private int mLabelA;    private int mLabelB;    private int mLabelC;    private int mLabelMsPF;    private Projector mProjector;    private NumericSprite mNumericSprite;    private float[] mScratch = new float[8];}class Triangle {    public Triangle() {        // Buffers to be passed to gl*Pointer() functions        // must be direct, i.e., they must be placed on the        // native heap where the garbage collector cannot        // move them.        //        // Buffers with multi-byte datatypes (e.g., short, int, float)        // must have their byte order set to native order        ByteBuffer vbb = ByteBuffer.allocateDirect(VERTS * 3 * 4);        vbb.order(ByteOrder.nativeOrder());        mFVertexBuffer = vbb.asFloatBuffer();        ByteBuffer tbb = ByteBuffer.allocateDirect(VERTS * 2 * 4);        tbb.order(ByteOrder.nativeOrder());        mTexBuffer = tbb.asFloatBuffer();        ByteBuffer ibb = ByteBuffer.allocateDirect(VERTS * 2);        ibb.order(ByteOrder.nativeOrder());        mIndexBuffer = ibb.asShortBuffer();        for (int i = 0; i < VERTS; i++) {            for(int j = 0; j < 3; j++) {                mFVertexBuffer.put(sCoords[i*3+j]);            }        }        for (int i = 0; i < VERTS; i++) {            for(int j = 0; j < 2; j++) {                mTexBuffer.put(sCoords[i*3+j] * 2.0f + 0.5f);            }        }        for(int i = 0; i < VERTS; i++) {            mIndexBuffer.put((short) i);        }        mFVertexBuffer.position(0);        mTexBuffer.position(0);        mIndexBuffer.position(0);    }    public void draw(GL10 gl) {        gl.glFrontFace(GL10.GL_CCW);        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mFVertexBuffer);        gl.glEnable(GL10.GL_TEXTURE_2D);        gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, mTexBuffer);        gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, VERTS,                GL10.GL_UNSIGNED_SHORT, mIndexBuffer);    }    public float getX(int vertex) {        return sCoords[3*vertex];    }    public float getY(int vertex) {        return sCoords[3*vertex+1];    }    private final static int VERTS = 3;    private FloatBuffer mFVertexBuffer;    private FloatBuffer mTexBuffer;    private ShortBuffer mIndexBuffer;    // A unit-sided equalateral triangle centered on the origin.    private final static float[] sCoords = {            // X, Y, Z            -0.5f, -0.25f, 0,             0.5f, -0.25f, 0,             0.0f,  0.559016994f, 0    };}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区在线不卡| 亚洲视频一二三区| 在线观看欧美黄色| jlzzjlzz国产精品久久| 成人毛片老司机大片| 国产不卡高清在线观看视频| 久久精品国产亚洲高清剧情介绍| 午夜久久久影院| 日韩av在线发布| 久久99久久99| 国产在线乱码一区二区三区| 国产毛片精品视频| 国产精品1区2区| 91小视频免费观看| 日本韩国精品一区二区在线观看| 欧洲一区二区三区在线| 欧美日韩五月天| 日韩欧美国产小视频| 久久精品亚洲精品国产欧美| 欧美国产视频在线| 亚洲综合一区二区| 奇米四色…亚洲| 国产成人av自拍| 一本大道av一区二区在线播放| 91久久精品一区二区| 欧美夫妻性生活| 久久久久久免费网| 一区二区三区视频在线观看| 美女精品自拍一二三四| 国产麻豆成人传媒免费观看| 91在线你懂得| 欧美成人三级在线| 亚洲免费观看视频| 美女免费视频一区| 色婷婷久久综合| 欧美电影免费观看高清完整版在| 中文字幕的久久| 日产国产欧美视频一区精品| 国产麻豆91精品| 精品婷婷伊人一区三区三| 精品少妇一区二区三区免费观看| 国产精品视频看| 青青草国产成人av片免费| 丁香天五香天堂综合| 欧美日韩精品久久久| 国产亚洲综合在线| 日韩高清在线一区| 色综合久久久久| 久久久国产综合精品女国产盗摄| 亚洲国产成人精品视频| 国产91富婆露脸刺激对白| 91精品国产麻豆国产自产在线| 国产欧美精品一区aⅴ影院| 日韩精品电影在线观看| 91一区二区三区在线观看| 欧美大黄免费观看| 亚洲成人动漫在线免费观看| 91视视频在线观看入口直接观看www | 亚洲国产va精品久久久不卡综合| 久久99久久99精品免视看婷婷| 色综合天天综合网国产成人综合天 | 91精品国产91久久久久久最新毛片| 欧美极品xxx| 另类中文字幕网| 欧美福利电影网| 性做久久久久久久免费看| 91麻豆国产自产在线观看| 亚洲精品在线网站| 免费看精品久久片| 欧美久久婷婷综合色| 亚洲一区二区三区自拍| 99热99精品| 中文字幕一区免费在线观看| 成人国产精品免费网站| 久久精品日产第一区二区三区高清版 | 午夜久久久影院| 欧美日韩亚洲综合一区二区三区| 亚洲一线二线三线视频| 成人黄色电影在线| 国产精品高潮久久久久无| 91在线一区二区| 一区二区三区日本| 欧美视频自拍偷拍| 亚洲国产精品精华液网站| 欧美日韩国产综合草草| 日韩av成人高清| 久久―日本道色综合久久| 韩国毛片一区二区三区| 久久精品夜色噜噜亚洲a∨| 高清不卡一区二区在线| 国产精品久久久久久久久果冻传媒| 成人国产电影网| 亚洲色图另类专区| 欧美日韩国产高清一区二区| 蜜臀久久99精品久久久久宅男| 精品欧美一区二区三区精品久久| 国产精品中文字幕日韩精品 | 99国产精品久久久久久久久久| 一区二区成人在线| 在线这里只有精品| 免费观看在线色综合| 久久久精品日韩欧美| 99久久久精品| 日本少妇一区二区| 亚洲国产精品成人久久综合一区| 91美女片黄在线观看91美女| 性欧美大战久久久久久久久| 久久中文娱乐网| 色偷偷一区二区三区| 免费不卡在线视频| 国产精品久久久久毛片软件| 在线看国产一区二区| 精品午夜一区二区三区在线观看 | eeuss鲁一区二区三区| 亚洲国产精品一区二区尤物区| 精品国产一二三| 91国产免费观看| 成人一区在线观看| 免费人成黄页网站在线一区二区| 国产精品久久影院| 日韩欧美在线综合网| 色婷婷久久一区二区三区麻豆| 激情成人综合网| 亚洲福利视频导航| 国产精品毛片无遮挡高清| 日韩精品一区在线观看| 色狠狠色噜噜噜综合网| 国产一区二区中文字幕| 五月天一区二区三区| 自拍偷拍亚洲综合| 国产日韩在线不卡| 日韩亚洲欧美中文三级| 欧美午夜精品免费| 一本到三区不卡视频| 成人免费视频视频| 国产精品资源网| 国产一区二区视频在线| 日韩av成人高清| 午夜成人在线视频| 亚洲一区二区美女| 一区二区三区四区在线播放| 国产精品国产三级国产普通话99| 久久久久久久久一| 久久久影视传媒| 久久亚洲捆绑美女| 久久久99精品免费观看| 欧美变态tickle挠乳网站| 欧美一区二区大片| 欧美一区二区三区免费视频| 777欧美精品| 欧美高清你懂得| 欧美一区二区久久| 欧美精品一卡二卡| 日韩一级黄色大片| 精品日韩av一区二区| 欧美电影免费观看高清完整版在| 日韩视频在线永久播放| 日韩免费福利电影在线观看| 精品国产乱子伦一区| 精品日韩欧美在线| 国产喂奶挤奶一区二区三区| 国产亚洲成av人在线观看导航| 久久婷婷久久一区二区三区| 久久精品男人天堂av| 亚洲精品一区二区三区影院| 久久午夜羞羞影院免费观看| 久久精品亚洲一区二区三区浴池 | 91蜜桃婷婷狠狠久久综合9色| 99麻豆久久久国产精品免费| 一本色道久久综合精品竹菊| 91九色最新地址| 欧美精品aⅴ在线视频| 日韩西西人体444www| 久久影院视频免费| 亚洲乱码一区二区三区在线观看| 一区二区三区高清| 日本欧美一区二区三区乱码 | 99国产欧美另类久久久精品| 欧美丝袜自拍制服另类| 欧美一区二区三区啪啪| 国产视频在线观看一区二区三区| 日韩一区在线播放| 天堂一区二区在线| 国产高清在线观看免费不卡| 91一区一区三区| 欧美草草影院在线视频| 国产精品免费久久| 五月天激情综合网| 成人黄色片在线观看| 91.com视频| 中文字幕一区二区三区在线不卡| 无吗不卡中文字幕| 99国产精品国产精品毛片| 日韩一级欧美一级| 亚洲欧美日韩国产中文在线| 久久不见久久见中文字幕免费| 日本久久一区二区| 中国av一区二区三区| 日本sm残虐另类| 色偷偷一区二区三区|