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