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
20ebfb436a49673693b98469683451bd9ede797557Jason Samsimport android.util.Log;
21ebfb436a49673693b98469683451bd9ede797557Jason Sams
22ebfb436a49673693b98469683451bd9ede797557Jason Sams
239c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines/**
24a90842283e322b1210e2bea5850b05177e3d87afTim Murray * @hide
25d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams * @deprecated in API 16
2611518acc8c416023d8c2192b441a1767205676d9Robert Ly * Program raster is primarily used to specify whether point sprites are enabled and to control
2711518acc8c416023d8c2192b441a1767205676d9Robert Ly * the culling mode. By default, back faces are culled.
28ebfb436a49673693b98469683451bd9ede797557Jason Sams **/
29ebfb436a49673693b98469683451bd9ede797557Jason Samspublic class ProgramRaster extends BaseObj {
3080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
31d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams    /**
32d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
33d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     **/
3480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    public enum CullMode {
35d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams        /**
36d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         * @deprecated in API 16
37d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         **/
3880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        BACK (0),
39d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams        /**
40d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         * @deprecated in API 16
41d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         **/
4280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        FRONT (1),
43d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams        /**
44d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         * @deprecated in API 16
45d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         **/
4680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        NONE (2);
4780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
4880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        int mID;
4980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        CullMode(int id) {
5080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk            mID = id;
5180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        }
5280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    }
5380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
54ebfb436a49673693b98469683451bd9ede797557Jason Sams    boolean mPointSprite;
5580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    CullMode mCullMode;
56ebfb436a49673693b98469683451bd9ede797557Jason Sams
57ebfb436a49673693b98469683451bd9ede797557Jason Sams    ProgramRaster(int id, RenderScript rs) {
580de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk        super(id, rs);
59ebfb436a49673693b98469683451bd9ede797557Jason Sams
60ebfb436a49673693b98469683451bd9ede797557Jason Sams        mPointSprite = false;
6180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        mCullMode = CullMode.BACK;
62ebfb436a49673693b98469683451bd9ede797557Jason Sams    }
63ebfb436a49673693b98469683451bd9ede797557Jason Sams
649c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
65d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
66918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk     * Specifies whether vertices are rendered as screen aligned
67918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk     * elements of a specified size
687d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk     * @return whether point sprites are enabled
697d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk     */
70918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk    public boolean isPointSpriteEnabled() {
717d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk        return mPointSprite;
727d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    }
737d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk
749c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
75d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
76918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk     * Specifies how triangles are culled based on their orientation
777d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk     * @return cull mode
787d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk     */
797d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    public CullMode getCullMode() {
807d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk        return mCullMode;
817d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    }
827d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk
83d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams    /**
84d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
85d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     */
86d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    public static ProgramRaster CULL_BACK(RenderScript rs) {
87d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk        if(rs.mProgramRaster_CULL_BACK == null) {
88d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk            ProgramRaster.Builder builder = new ProgramRaster.Builder(rs);
89d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk            builder.setCullMode(CullMode.BACK);
90d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk            rs.mProgramRaster_CULL_BACK = builder.create();
91d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk        }
92d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk        return rs.mProgramRaster_CULL_BACK;
93d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    }
94d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk
95d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams    /**
96d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
97d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     */
98d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    public static ProgramRaster CULL_FRONT(RenderScript rs) {
99d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk        if(rs.mProgramRaster_CULL_FRONT == null) {
100d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk            ProgramRaster.Builder builder = new ProgramRaster.Builder(rs);
101d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk            builder.setCullMode(CullMode.FRONT);
102d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk            rs.mProgramRaster_CULL_FRONT = builder.create();
103d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk        }
104d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk        return rs.mProgramRaster_CULL_FRONT;
105d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    }
106d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk
107d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams    /**
108d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
109d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     */
110d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    public static ProgramRaster CULL_NONE(RenderScript rs) {
111d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk        if(rs.mProgramRaster_CULL_NONE == null) {
112d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk            ProgramRaster.Builder builder = new ProgramRaster.Builder(rs);
113d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk            builder.setCullMode(CullMode.NONE);
114d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk            rs.mProgramRaster_CULL_NONE = builder.create();
115d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk        }
116d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk        return rs.mProgramRaster_CULL_NONE;
117d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    }
118d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk
119d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams    /**
120d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     * @deprecated in API 16
121d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams     */
122ebfb436a49673693b98469683451bd9ede797557Jason Sams    public static class Builder {
123ebfb436a49673693b98469683451bd9ede797557Jason Sams        RenderScript mRS;
12480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        boolean mPointSprite;
125d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk        CullMode mCullMode;
126ebfb436a49673693b98469683451bd9ede797557Jason Sams
127d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams        /**
128d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         * @deprecated in API 16
129d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         */
13080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        public Builder(RenderScript rs) {
13180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk            mRS = rs;
13280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk            mPointSprite = false;
133d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk            mCullMode = CullMode.BACK;
134ebfb436a49673693b98469683451bd9ede797557Jason Sams        }
135ebfb436a49673693b98469683451bd9ede797557Jason Sams
136d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams        /**
137d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         * @deprecated in API 16
138d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         */
139b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk        public Builder setPointSpriteEnabled(boolean enable) {
14080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk            mPointSprite = enable;
141288c8711a64893acb3f4a31caf69153be9809d17Jim Shuma            return this;
142ebfb436a49673693b98469683451bd9ede797557Jason Sams        }
143ebfb436a49673693b98469683451bd9ede797557Jason Sams
144d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams        /**
145d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         * @deprecated in API 16
146d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         */
147d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk        public Builder setCullMode(CullMode m) {
148d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk            mCullMode = m;
149d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk            return this;
150d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk        }
151d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk
152d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams        /**
153d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         * @deprecated in API 16
154d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams         */
155ebfb436a49673693b98469683451bd9ede797557Jason Sams        public ProgramRaster create() {
156771bebb94054d06f97284379c93a2620613513c3Jason Sams            mRS.validate();
15794aaed38467c71a6c804f0e18b41346a4013c25bJason Sams            int id = mRS.nProgramRasterCreate(mPointSprite, mCullMode.mID);
1587d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            ProgramRaster programRaster = new ProgramRaster(id, mRS);
1597d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            programRaster.mPointSprite = mPointSprite;
1607d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            programRaster.mCullMode = mCullMode;
1617d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            return programRaster;
162ebfb436a49673693b98469683451bd9ede797557Jason Sams        }
163ebfb436a49673693b98469683451bd9ede797557Jason Sams    }
164ebfb436a49673693b98469683451bd9ede797557Jason Sams
165ebfb436a49673693b98469683451bd9ede797557Jason Sams}
166ebfb436a49673693b98469683451bd9ede797557Jason Sams
167ebfb436a49673693b98469683451bd9ede797557Jason Sams
168ebfb436a49673693b98469683451bd9ede797557Jason Sams
169ebfb436a49673693b98469683451bd9ede797557Jason Sams
170ebfb436a49673693b98469683451bd9ede797557Jason Sams
17180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
172