blob: e40751f43dc2e11476ae52d77384641f4a413d0c [file] [log] [blame]
Jason Samsebfb4362009-09-23 13:57:02 -07001/*
2 * Copyright (C) 2008 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.renderscript;
18
19
Jason Samsebfb4362009-09-23 13:57:02 -070020import android.util.Log;
21
22
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -070023/**
Robert Ly11518ac2011-02-09 13:57:06 -080024 * Program raster is primarily used to specify whether point sprites are enabled and to control
25 * the culling mode. By default, back faces are culled.
Jason Samsebfb4362009-09-23 13:57:02 -070026 **/
27public class ProgramRaster extends BaseObj {
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -070028
29 public enum CullMode {
30 BACK (0),
31 FRONT (1),
32 NONE (2);
33
34 int mID;
35 CullMode(int id) {
36 mID = id;
37 }
38 }
39
Jason Samsebfb4362009-09-23 13:57:02 -070040 boolean mPointSprite;
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -070041 CullMode mCullMode;
Jason Samsebfb4362009-09-23 13:57:02 -070042
43 ProgramRaster(int id, RenderScript rs) {
Alex Sakhartchouk0de94442010-08-11 14:41:28 -070044 super(id, rs);
Jason Samsebfb4362009-09-23 13:57:02 -070045
Jason Samsebfb4362009-09-23 13:57:02 -070046 mPointSprite = false;
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -070047 mCullMode = CullMode.BACK;
Jason Samsebfb4362009-09-23 13:57:02 -070048 }
49
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -070050 /**
Alex Sakhartchouk918e8402012-04-11 14:04:23 -070051 * Specifies whether vertices are rendered as screen aligned
52 * elements of a specified size
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -070053 * @return whether point sprites are enabled
54 */
Alex Sakhartchouk918e8402012-04-11 14:04:23 -070055 public boolean isPointSpriteEnabled() {
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -070056 return mPointSprite;
57 }
58
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -070059 /**
Alex Sakhartchouk918e8402012-04-11 14:04:23 -070060 * Specifies how triangles are culled based on their orientation
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -070061 * @return cull mode
62 */
63 public CullMode getCullMode() {
64 return mCullMode;
65 }
66
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -070067 public static ProgramRaster CULL_BACK(RenderScript rs) {
68 if(rs.mProgramRaster_CULL_BACK == null) {
69 ProgramRaster.Builder builder = new ProgramRaster.Builder(rs);
70 builder.setCullMode(CullMode.BACK);
71 rs.mProgramRaster_CULL_BACK = builder.create();
72 }
73 return rs.mProgramRaster_CULL_BACK;
74 }
75
76 public static ProgramRaster CULL_FRONT(RenderScript rs) {
77 if(rs.mProgramRaster_CULL_FRONT == null) {
78 ProgramRaster.Builder builder = new ProgramRaster.Builder(rs);
79 builder.setCullMode(CullMode.FRONT);
80 rs.mProgramRaster_CULL_FRONT = builder.create();
81 }
82 return rs.mProgramRaster_CULL_FRONT;
83 }
84
85 public static ProgramRaster CULL_NONE(RenderScript rs) {
86 if(rs.mProgramRaster_CULL_NONE == null) {
87 ProgramRaster.Builder builder = new ProgramRaster.Builder(rs);
88 builder.setCullMode(CullMode.NONE);
89 rs.mProgramRaster_CULL_NONE = builder.create();
90 }
91 return rs.mProgramRaster_CULL_NONE;
92 }
93
Jason Samsebfb4362009-09-23 13:57:02 -070094 public static class Builder {
95 RenderScript mRS;
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -070096 boolean mPointSprite;
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -070097 CullMode mCullMode;
Jason Samsebfb4362009-09-23 13:57:02 -070098
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -070099 public Builder(RenderScript rs) {
100 mRS = rs;
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -0700101 mPointSprite = false;
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700102 mCullMode = CullMode.BACK;
Jason Samsebfb4362009-09-23 13:57:02 -0700103 }
104
Alex Sakhartchoukb4d7bb62010-12-21 14:42:26 -0800105 public Builder setPointSpriteEnabled(boolean enable) {
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -0700106 mPointSprite = enable;
Jim Shuma288c8712010-07-07 14:24:21 -0700107 return this;
Jason Samsebfb4362009-09-23 13:57:02 -0700108 }
109
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700110 public Builder setCullMode(CullMode m) {
111 mCullMode = m;
112 return this;
113 }
114
Jason Samsebfb4362009-09-23 13:57:02 -0700115 public ProgramRaster create() {
Jason Sams771bebb2009-12-07 12:40:12 -0800116 mRS.validate();
Jason Sams94aaed32011-09-23 14:18:53 -0700117 int id = mRS.nProgramRasterCreate(mPointSprite, mCullMode.mID);
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700118 ProgramRaster programRaster = new ProgramRaster(id, mRS);
119 programRaster.mPointSprite = mPointSprite;
120 programRaster.mCullMode = mCullMode;
121 return programRaster;
Jason Samsebfb4362009-09-23 13:57:02 -0700122 }
123 }
124
125}
126
127
128
129
130
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -0700131