1/* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.gallery3d.ui; 18 19import android.graphics.RectF; 20 21import javax.microedition.khronos.opengles.GL11; 22 23// 24// GLCanvas gives a convenient interface to draw using OpenGL. 25// 26// When a rectangle is specified in this interface, it means the region 27// [x, x+width) * [y, y+height) 28// 29public interface GLCanvas { 30 // Tells GLCanvas the size of the underlying GL surface. This should be 31 // called before first drawing and when the size of GL surface is changed. 32 // This is called by GLRoot and should not be called by the clients 33 // who only want to draw on the GLCanvas. Both width and height must be 34 // nonnegative. 35 public void setSize(int width, int height); 36 37 // Clear the drawing buffers. This should only be used by GLRoot. 38 public void clearBuffer(); 39 public void clearBuffer(float[] argb); 40 41 // Sets and gets the current alpha, alpha must be in [0, 1]. 42 public void setAlpha(float alpha); 43 public float getAlpha(); 44 45 // (current alpha) = (current alpha) * alpha 46 public void multiplyAlpha(float alpha); 47 48 // Change the current transform matrix. 49 public void translate(float x, float y, float z); 50 public void translate(float x, float y); 51 public void scale(float sx, float sy, float sz); 52 public void rotate(float angle, float x, float y, float z); 53 public void multiplyMatrix(float[] mMatrix, int offset); 54 55 // Pushes the configuration state (matrix, and alpha) onto 56 // a private stack. 57 public void save(); 58 59 // Same as save(), but only save those specified in saveFlags. 60 public void save(int saveFlags); 61 62 public static final int SAVE_FLAG_ALL = 0xFFFFFFFF; 63 public static final int SAVE_FLAG_ALPHA = 0x01; 64 public static final int SAVE_FLAG_MATRIX = 0x02; 65 66 // Pops from the top of the stack as current configuration state (matrix, 67 // alpha, and clip). This call balances a previous call to save(), and is 68 // used to remove all modifications to the configuration state since the 69 // last save call. 70 public void restore(); 71 72 // Draws a line using the specified paint from (x1, y1) to (x2, y2). 73 // (Both end points are included). 74 public void drawLine(float x1, float y1, float x2, float y2, GLPaint paint); 75 76 // Draws a rectangle using the specified paint from (x1, y1) to (x2, y2). 77 // (Both end points are included). 78 public void drawRect(float x1, float y1, float x2, float y2, GLPaint paint); 79 80 // Fills the specified rectangle with the specified color. 81 public void fillRect(float x, float y, float width, float height, int color); 82 83 // Draws a texture to the specified rectangle. 84 public void drawTexture( 85 BasicTexture texture, int x, int y, int width, int height); 86 public void drawMesh(BasicTexture tex, int x, int y, int xyBuffer, 87 int uvBuffer, int indexBuffer, int indexCount); 88 89 // Draws the source rectangle part of the texture to the target rectangle. 90 public void drawTexture(BasicTexture texture, RectF source, RectF target); 91 92 // Draw a texture with a specified texture transform. 93 public void drawTexture(BasicTexture texture, float[] mTextureTransform, 94 int x, int y, int w, int h); 95 96 // Draw two textures to the specified rectangle. The actual texture used is 97 // from * (1 - ratio) + to * ratio 98 // The two textures must have the same size. 99 public void drawMixed(BasicTexture from, int toColor, 100 float ratio, int x, int y, int w, int h); 101 102 // Draw a region of a texture and a specified color to the specified 103 // rectangle. The actual color used is from * (1 - ratio) + to * ratio. 104 // The region of the texture is defined by parameter "src". The target 105 // rectangle is specified by parameter "target". 106 public void drawMixed(BasicTexture from, int toColor, 107 float ratio, RectF src, RectF target); 108 109 // Gets the underlying GL instance. This is used only when direct access to 110 // GL is needed. 111 public GL11 getGLInstance(); 112 113 // Unloads the specified texture from the canvas. The resource allocated 114 // to draw the texture will be released. The specified texture will return 115 // to the unloaded state. This function should be called only from 116 // BasicTexture or its descendant 117 public boolean unloadTexture(BasicTexture texture); 118 119 // Delete the specified buffer object, similar to unloadTexture. 120 public void deleteBuffer(int bufferId); 121 122 // Delete the textures and buffers in GL side. This function should only be 123 // called in the GL thread. 124 public void deleteRecycledResources(); 125 126 // Dump statistics information and clear the counters. For debug only. 127 public void dumpStatisticsAndClear(); 128 129 public void beginRenderTarget(RawTexture texture); 130 131 public void endRenderTarget(); 132} 133