14fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk/*
24fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk * Copyright (C) 2011 The Android Open Source Project
34fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk *
44fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk * Licensed under the Apache License, Version 2.0 (the "License");
54fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk * you may not use this file except in compliance with the License.
64fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk * You may obtain a copy of the License at
74fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk *
84fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk *      http://www.apache.org/licenses/LICENSE-2.0
94fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk *
104fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk * Unless required by applicable law or agreed to in writing, software
114fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk * distributed under the License is distributed on an "AS IS" BASIS,
124fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk * See the License for the specific language governing permissions and
144fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk * limitations under the License.
154fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk */
164fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk
174fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchoukpackage com.android.scenegraph;
184fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk
194fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchoukimport java.lang.Math;
204fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk
214fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchoukimport com.android.scenegraph.SceneManager;
224fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchoukimport com.android.scenegraph.TextureBase;
234fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk
244fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchoukimport android.content.res.Resources;
254fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchoukimport android.renderscript.*;
264fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchoukimport android.util.Log;
274fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk
284fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk/**
294fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk * @hide
304fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk */
314fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchoukpublic class TextureCube extends TextureBase {
324fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk    String mFileName;
334fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk    String mFileDir;
34d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk    int mResourceID;
354fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk
364fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk    public TextureCube() {
37e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk        super(ScriptC_export.const_TextureType_TEXTURE_CUBE);
384fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk    }
394fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk
404fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk    public TextureCube(Allocation tex) {
41e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk        super(ScriptC_export.const_TextureType_TEXTURE_CUBE);
424fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk        setTexture(tex);
434fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk    }
444fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk
4599b93819f12f18b8559f702d7a303c31fe05205aAlex Sakhartchouk    public TextureCube(String dir, String file) {
46e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk        super(ScriptC_export.const_TextureType_TEXTURE_CUBE);
4799b93819f12f18b8559f702d7a303c31fe05205aAlex Sakhartchouk        setFileDir(dir);
4899b93819f12f18b8559f702d7a303c31fe05205aAlex Sakhartchouk        setFileName(file);
4999b93819f12f18b8559f702d7a303c31fe05205aAlex Sakhartchouk    }
5099b93819f12f18b8559f702d7a303c31fe05205aAlex Sakhartchouk
51d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk    public TextureCube(int resourceID) {
52d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk        super(ScriptC_export.const_TextureType_TEXTURE_2D);
53d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk        mResourceID = resourceID;
54d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk    }
55d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk
564fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk    public void setFileDir(String dir) {
574fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk        mFileDir = dir;
584fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk    }
594fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk
604fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk    public void setFileName(String file) {
614fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk        mFileName = file;
624fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk    }
634fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk
644fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk    public String getFileName() {
654fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk        return mFileName;
664fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk    }
674fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk
684fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk    public void setTexture(Allocation tex) {
69a9eb319965da1f2d59c06135d0d8d4631312bfffAlex Sakhartchouk        mData.texture = tex != null ? tex : SceneManager.getDefaultTexCube();
70e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk        if (mField != null) {
71e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk            mField.set_texture(0, mData.texture, true);
72e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk        }
734fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk    }
744fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk
75e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk    void load() {
76e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk        RenderScriptGL rs = SceneManager.getRS();
77e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk        Resources res = SceneManager.getRes();
78d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk        if (mFileName != null && mFileName.length() > 0) {
79d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk            String shortName = mFileName.substring(mFileName.lastIndexOf('/') + 1);
80d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk            setTexture(SceneManager.loadCubemap(mFileDir + shortName, rs, res));
81d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk        } else if (mResourceID != 0) {
82d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk            setTexture(SceneManager.loadCubemap(mResourceID , rs, res));
83d2dc9838961f945c402e5d810bc715196240be6fAlex Sakhartchouk        }
84e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk    }
85e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk
86e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk    ScriptField_Texture_s getRsData(boolean loadNow) {
87e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk        if (mField != null) {
88e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk            return mField;
894fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk        }
904fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk
91e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk        RenderScriptGL rs = SceneManager.getRS();
92e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk        Resources res = SceneManager.getRes();
93e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk        if (rs == null || res == null) {
94e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk            return null;
95e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk        }
96e93db17a143ff560f92d94b68ce1e76f79db7902Alex Sakhartchouk
97e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk        mField = new ScriptField_Texture_s(rs, 1);
98e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk
99e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk        if (loadNow) {
100e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk            load();
101e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk        } else {
102e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk            mData.texture = SceneManager.getDefaultTexCube();
103e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk            new SingleImageLoaderTask().execute(this);
104e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk        }
1054fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk
106e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk        mField.set(mData, 0, true);
107e8bb420a687598be9801e7ff4a0d114fa72ac5bcAlex Sakhartchouk        return mField;
1084fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk    }
1094fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk}
1104fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk
1114fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk
1124fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk
1134fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk
1144fd35d8f49dbed174828da60b70c37e7a77a0d13Alex Sakhartchouk
115