1a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk/* 2a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * Copyright (C) 2011 The Android Open Source Project 3a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * 4a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * Licensed under the Apache License, Version 2.0 (the "License"); 5a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * you may not use this file except in compliance with the License. 6a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * You may obtain a copy of the License at 7a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * 8a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * http://www.apache.org/licenses/LICENSE-2.0 9a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * 10a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * Unless required by applicable law or agreed to in writing, software 11a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * distributed under the License is distributed on an "AS IS" BASIS, 12a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * See the License for the specific language governing permissions and 14a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * limitations under the License. 15a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk */ 16a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 17a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukpackage com.android.scenegraph; 18a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 19a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport java.lang.Math; 20e57b34155269cc030b4b241f556207f7012a0f07Alex Sakhartchouk 21e57b34155269cc030b4b241f556207f7012a0f07Alex Sakhartchoukimport com.android.scenegraph.SceneManager; 22a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 23a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.content.res.Resources; 24a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.renderscript.*; 25a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.util.Log; 26a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 27a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk/** 28a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * @hide 29a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk */ 304fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchoukpublic class Texture2D extends TextureBase { 31a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk String mFileName; 321168868e766f0696c30f644292a5a833ee3983e4Alex Sakhartchouk String mFileDir; 33d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk int mResourceID; 34a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 35a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public Texture2D() { 36e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk super(ScriptC_export.const_TextureType_TEXTURE_2D); 371168868e766f0696c30f644292a5a833ee3983e4Alex Sakhartchouk } 381168868e766f0696c30f644292a5a833ee3983e4Alex Sakhartchouk 39ce047cb47b761f00593f247a3901fe8155371d47Alex Sakhartchouk public Texture2D(Allocation tex) { 40e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk super(ScriptC_export.const_TextureType_TEXTURE_2D); 41ce047cb47b761f00593f247a3901fe8155371d47Alex Sakhartchouk setTexture(tex); 42ce047cb47b761f00593f247a3901fe8155371d47Alex Sakhartchouk } 43ce047cb47b761f00593f247a3901fe8155371d47Alex Sakhartchouk 44d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk public Texture2D(String dir, String file) { 45d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk super(ScriptC_export.const_TextureType_TEXTURE_CUBE); 46d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk setFileDir(dir); 47d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk setFileName(file); 48d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk } 49d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk 50d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk public Texture2D(int resourceID) { 51d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk super(ScriptC_export.const_TextureType_TEXTURE_2D); 52d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk mResourceID = resourceID; 53d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk } 54d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk 551168868e766f0696c30f644292a5a833ee3983e4Alex Sakhartchouk public void setFileDir(String dir) { 561168868e766f0696c30f644292a5a833ee3983e4Alex Sakhartchouk mFileDir = dir; 57a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 58a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 59a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void setFileName(String file) { 60a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mFileName = file; 61a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 62a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 63a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public String getFileName() { 64a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk return mFileName; 65a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 66a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 67ce047cb47b761f00593f247a3901fe8155371d47Alex Sakhartchouk public void setTexture(Allocation tex) { 68a9eb319965da1f2d59c06135d0d8d4631312bfffAlex Sakhartchouk mData.texture = tex != null ? tex : SceneManager.getDefaultTex2D(); 69e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk if (mField != null) { 70e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk mField.set_texture(0, mData.texture, true); 71e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk } 72ce047cb47b761f00593f247a3901fe8155371d47Alex Sakhartchouk } 73ce047cb47b761f00593f247a3901fe8155371d47Alex Sakhartchouk 74e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk void load() { 75e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk RenderScriptGL rs = SceneManager.getRS(); 76e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk Resources res = SceneManager.getRes(); 77d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk if (mFileName != null && mFileName.length() > 0) { 78d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk String shortName = mFileName.substring(mFileName.lastIndexOf('/') + 1); 79d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk setTexture(SceneManager.loadTexture2D(mFileDir + shortName, rs, res)); 80d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk } else if (mResourceID != 0) { 81d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk setTexture(SceneManager.loadTexture2D(mResourceID, rs, res)); 82d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk } 83e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk } 84e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk 85e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk ScriptField_Texture_s getRsData(boolean loadNow) { 86e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk if (mField != null) { 87e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk return mField; 88a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 89a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 90e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk RenderScriptGL rs = SceneManager.getRS(); 91e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk Resources res = SceneManager.getRes(); 92e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk if (rs == null || res == null) { 93e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk return null; 94e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk } 95e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk 96e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk mField = new ScriptField_Texture_s(rs, 1); 97e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk 98e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk if (loadNow) { 99e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk load(); 100e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk } else { 101e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk mData.texture = SceneManager.getDefaultTex2D(); 102e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk new SingleImageLoaderTask().execute(this); 103e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk } 104a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 105e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk mField.set(mData, 0, true); 106e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk return mField; 107a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 108a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk} 109a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 110a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 111a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 112a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 113a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 114