1ebfb436a49673693b98469683451bd9ede797557Jason Sams/*
2ebfb436a49673693b98469683451bd9ede797557Jason Sams * Copyright (C) 2008 The Android Open Source Project
3ebfb436a49673693b98469683451bd9ede797557Jason Sams *
4ebfb436a49673693b98469683451bd9ede797557Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5ebfb436a49673693b98469683451bd9ede797557Jason Sams * you may not use this file except in compliance with the License.
6ebfb436a49673693b98469683451bd9ede797557Jason Sams * You may obtain a copy of the License at
7ebfb436a49673693b98469683451bd9ede797557Jason Sams *
8ebfb436a49673693b98469683451bd9ede797557Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9ebfb436a49673693b98469683451bd9ede797557Jason Sams *
10ebfb436a49673693b98469683451bd9ede797557Jason Sams * Unless required by applicable law or agreed to in writing, software
11ebfb436a49673693b98469683451bd9ede797557Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12ebfb436a49673693b98469683451bd9ede797557Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ebfb436a49673693b98469683451bd9ede797557Jason Sams * See the License for the specific language governing permissions and
14ebfb436a49673693b98469683451bd9ede797557Jason Sams * limitations under the License.
15ebfb436a49673693b98469683451bd9ede797557Jason Sams */
16ebfb436a49673693b98469683451bd9ede797557Jason Sams
17ebfb436a49673693b98469683451bd9ede797557Jason Samspackage android.renderscript;
18ebfb436a49673693b98469683451bd9ede797557Jason Sams
19ebfb436a49673693b98469683451bd9ede797557Jason Sams
209c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines/**
21a90842283e322b1210e2bea5850b05177e3d87afTim Murray * @hide
22d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams * @deprecated in API 16
2311518acc8c416023d8c2192b441a1767205676d9Robert Ly * Program raster is primarily used to specify whether point sprites are enabled and to control
2411518acc8c416023d8c2192b441a1767205676d9Robert Ly * the culling mode. By default, back faces are culled.
25ebfb436a49673693b98469683451bd9ede797557Jason Sams **/
26ebfb436a49673693b98469683451bd9ede797557Jason Samspublic class ProgramRaster extends BaseObj {
2780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
28d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams    /**
29d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
30d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     **/
3180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    public enum CullMode {
32d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams        /**
33d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         * @deprecated in API 16
34d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         **/
3580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        BACK (0),
36d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams        /**
37d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         * @deprecated in API 16
38d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         **/
3980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        FRONT (1),
40d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams        /**
41d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         * @deprecated in API 16
42d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         **/
4380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        NONE (2);
4480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
4580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        int mID;
4680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        CullMode(int id) {
4780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk            mID = id;
4880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        }
4980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    }
5080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
51ebfb436a49673693b98469683451bd9ede797557Jason Sams    boolean mPointSprite;
5280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    CullMode mCullMode;
53ebfb436a49673693b98469683451bd9ede797557Jason Sams
54460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray    ProgramRaster(long id, RenderScript rs) {
550de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk        super(id, rs);
56ebfb436a49673693b98469683451bd9ede797557Jason Sams
57ebfb436a49673693b98469683451bd9ede797557Jason Sams        mPointSprite = false;
5880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        mCullMode = CullMode.BACK;
59ebfb436a49673693b98469683451bd9ede797557Jason Sams    }
60ebfb436a49673693b98469683451bd9ede797557Jason Sams
619c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
62d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
63918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk     * Specifies whether vertices are rendered as screen aligned
64918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk     * elements of a specified size
657d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk     * @return whether point sprites are enabled
667d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk     */
67918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk    public boolean isPointSpriteEnabled() {
687d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk        return mPointSprite;
697d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    }
707d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk
719c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
72d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
73918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk     * Specifies how triangles are culled based on their orientation
747d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk     * @return cull mode
757d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk     */
767d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    public CullMode getCullMode() {
777d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk        return mCullMode;
787d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    }
797d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk
80d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams    /**
81d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
82d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     */
83d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    public static ProgramRaster CULL_BACK(RenderScript rs) {
84d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk        if(rs.mProgramRaster_CULL_BACK == null) {
85d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk            ProgramRaster.Builder builder = new ProgramRaster.Builder(rs);
86d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk            builder.setCullMode(CullMode.BACK);
87d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk            rs.mProgramRaster_CULL_BACK = builder.create();
88d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk        }
89d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk        return rs.mProgramRaster_CULL_BACK;
90d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    }
91d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk
92d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams    /**
93d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
94d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     */
95d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    public static ProgramRaster CULL_FRONT(RenderScript rs) {
96d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk        if(rs.mProgramRaster_CULL_FRONT == null) {
97d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk            ProgramRaster.Builder builder = new ProgramRaster.Builder(rs);
98d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk            builder.setCullMode(CullMode.FRONT);
99d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk            rs.mProgramRaster_CULL_FRONT = builder.create();
100d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk        }
101d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk        return rs.mProgramRaster_CULL_FRONT;
102d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    }
103d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk
104d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams    /**
105d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
106d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     */
107d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    public static ProgramRaster CULL_NONE(RenderScript rs) {
108d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk        if(rs.mProgramRaster_CULL_NONE == null) {
109d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk            ProgramRaster.Builder builder = new ProgramRaster.Builder(rs);
110d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk            builder.setCullMode(CullMode.NONE);
111d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk            rs.mProgramRaster_CULL_NONE = builder.create();
112d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk        }
113d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk        return rs.mProgramRaster_CULL_NONE;
114d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    }
115d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk
116d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams    /**
117d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
118d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     */
119ebfb436a49673693b98469683451bd9ede797557Jason Sams    public static class Builder {
120ebfb436a49673693b98469683451bd9ede797557Jason Sams        RenderScript mRS;
12180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        boolean mPointSprite;
122d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk        CullMode mCullMode;
123ebfb436a49673693b98469683451bd9ede797557Jason Sams
124d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams        /**
125d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         * @deprecated in API 16
126d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         */
12780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        public Builder(RenderScript rs) {
12880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk            mRS = rs;
12980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk            mPointSprite = false;
130d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk            mCullMode = CullMode.BACK;
131ebfb436a49673693b98469683451bd9ede797557Jason Sams        }
132ebfb436a49673693b98469683451bd9ede797557Jason Sams
133d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams        /**
134d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         * @deprecated in API 16
135d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         */
136b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk        public Builder setPointSpriteEnabled(boolean enable) {
13780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk            mPointSprite = enable;
138288c8711a64893acb3f4a31caf69153be9809d17Jim Shuma            return this;
139ebfb436a49673693b98469683451bd9ede797557Jason Sams        }
140ebfb436a49673693b98469683451bd9ede797557Jason Sams
141d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams        /**
142d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         * @deprecated in API 16
143d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         */
144d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk        public Builder setCullMode(CullMode m) {
145d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk            mCullMode = m;
146d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk            return this;
147d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk        }
148d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk
149d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams        /**
150d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         * @deprecated in API 16
151d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         */
152ebfb436a49673693b98469683451bd9ede797557Jason Sams        public ProgramRaster create() {
153771bebb94054d06f97284379c93a2620613513c3Jason Sams            mRS.validate();
154460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray            long id = mRS.nProgramRasterCreate(mPointSprite, mCullMode.mID);
1557d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            ProgramRaster programRaster = new ProgramRaster(id, mRS);
1567d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            programRaster.mPointSprite = mPointSprite;
1577d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            programRaster.mCullMode = mCullMode;
1587d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            return programRaster;
159ebfb436a49673693b98469683451bd9ede797557Jason Sams        }
160ebfb436a49673693b98469683451bd9ede797557Jason Sams    }
161ebfb436a49673693b98469683451bd9ede797557Jason Sams
162ebfb436a49673693b98469683451bd9ede797557Jason Sams}
163ebfb436a49673693b98469683451bd9ede797557Jason Sams
164ebfb436a49673693b98469683451bd9ede797557Jason Sams
165ebfb436a49673693b98469683451bd9ede797557Jason Sams
166ebfb436a49673693b98469683451bd9ede797557Jason Sams
167ebfb436a49673693b98469683451bd9ede797557Jason Sams
16880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
169