blob: 5f8c4ba3cf279718d6b35fe9b035f632c8817a0e [file] [log] [blame]
Jason Sams5fd09d82009-09-23 13:57:02 -07001/*
2 * Copyright (C) 2009 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
Alex Sakhartchoukfb6b6142010-05-21 12:53:13 -070017#ifndef ANDROID_RS_BUILD_FOR_HOST
Jason Sams5fd09d82009-09-23 13:57:02 -070018#include "rsContext.h"
Jason Sams5fd09d82009-09-23 13:57:02 -070019#include <GLES/gl.h>
20#include <GLES/glext.h>
Alex Sakhartchoukfb6b6142010-05-21 12:53:13 -070021#else
22#include "rsContextHostStub.h"
23#include <OpenGL/gl.h>
24#include <OpenGl/glext.h>
25#endif //ANDROID_RS_BUILD_FOR_HOST
26
27#include "rsProgramRaster.h"
Jason Sams5fd09d82009-09-23 13:57:02 -070028
29using namespace android;
30using namespace android::renderscript;
31
32
Jason Samse514b452009-09-25 14:51:22 -070033ProgramRaster::ProgramRaster(Context *rsc,
Jason Sams5fd09d82009-09-23 13:57:02 -070034 bool pointSmooth,
35 bool lineSmooth,
36 bool pointSprite) :
Jason Sams4815c0d2009-12-15 12:58:36 -080037 Program(rsc)
Jason Sams5fd09d82009-09-23 13:57:02 -070038{
39 mPointSmooth = pointSmooth;
40 mLineSmooth = lineSmooth;
41 mPointSprite = pointSprite;
Jason Sams5fd09d82009-09-23 13:57:02 -070042 mLineWidth = 1.0f;
Alex Sakhartchoukd18c7442010-07-12 15:50:32 -070043 mCull = RS_CULL_BACK;
Jason Sams5fd09d82009-09-23 13:57:02 -070044}
45
46ProgramRaster::~ProgramRaster()
47{
48}
49
50void ProgramRaster::setLineWidth(float s)
51{
52 mLineWidth = s;
Alex Sakhartchoukd18c7442010-07-12 15:50:32 -070053 mDirty = true;
54}
55
56void ProgramRaster::setCullMode(RsCullMode mode)
57{
58 mCull = mode;
59 mDirty = true;
Jason Sams5fd09d82009-09-23 13:57:02 -070060}
61
Jason Samsc460e552009-11-25 13:22:07 -080062void ProgramRaster::setupGL2(const Context *rsc, ProgramRasterState *state)
63{
Alex Sakhartchoukd18c7442010-07-12 15:50:32 -070064 if (state->mLast.get() == this && !mDirty) {
Jason Samsc460e552009-11-25 13:22:07 -080065 return;
66 }
67 state->mLast.set(this);
Alex Sakhartchoukd18c7442010-07-12 15:50:32 -070068 mDirty = false;
69
70 switch(mCull) {
71 case RS_CULL_BACK:
72 glEnable(GL_CULL_FACE);
73 glCullFace(GL_BACK);
74 break;
75 case RS_CULL_FRONT:
76 glEnable(GL_CULL_FACE);
77 glCullFace(GL_FRONT);
78 break;
79 case RS_CULL_NONE:
80 glDisable(GL_CULL_FACE);
81 break;
82 }
Jason Samsc460e552009-11-25 13:22:07 -080083}
84
Alex Sakhartchoukfb6b6142010-05-21 12:53:13 -070085void ProgramRaster::serialize(OStream *stream) const
86{
Jason Sams479e2922010-07-09 15:34:32 -070087
Alex Sakhartchoukfb6b6142010-05-21 12:53:13 -070088}
Jason Sams5fd09d82009-09-23 13:57:02 -070089
Alex Sakhartchoukfb6b6142010-05-21 12:53:13 -070090ProgramRaster *ProgramRaster::createFromStream(Context *rsc, IStream *stream)
91{
92 return NULL;
93}
Jason Sams5fd09d82009-09-23 13:57:02 -070094
95ProgramRasterState::ProgramRasterState()
96{
97}
98
99ProgramRasterState::~ProgramRasterState()
100{
101}
102
Jason Sams771565f2010-05-14 15:30:29 -0700103void ProgramRasterState::init(Context *rsc)
Jason Sams5fd09d82009-09-23 13:57:02 -0700104{
Jason Sams4815c0d2009-12-15 12:58:36 -0800105 ProgramRaster *pr = new ProgramRaster(rsc, false, false, false);
Jason Sams5fd09d82009-09-23 13:57:02 -0700106 mDefault.set(pr);
107}
108
Jason Samsf2649a92009-09-25 16:37:33 -0700109void ProgramRasterState::deinit(Context *rsc)
110{
111 mDefault.clear();
112 mLast.clear();
113}
114
Jason Sams5fd09d82009-09-23 13:57:02 -0700115
116namespace android {
117namespace renderscript {
118
Alex Sakhartchoukd18c7442010-07-12 15:50:32 -0700119RsProgramRaster rsi_ProgramRasterCreate(Context * rsc,
Jason Sams5fd09d82009-09-23 13:57:02 -0700120 bool pointSmooth,
121 bool lineSmooth,
122 bool pointSprite)
123{
Jason Samse514b452009-09-25 14:51:22 -0700124 ProgramRaster *pr = new ProgramRaster(rsc,
Jason Sams5fd09d82009-09-23 13:57:02 -0700125 pointSmooth,
126 lineSmooth,
127 pointSprite);
128 pr->incUserRef();
129 return pr;
130}
131
Jason Sams5fd09d82009-09-23 13:57:02 -0700132void rsi_ProgramRasterSetLineWidth(Context * rsc, RsProgramRaster vpr, float s)
133{
134 ProgramRaster *pr = static_cast<ProgramRaster *>(vpr);
135 pr->setLineWidth(s);
136}
137
Alex Sakhartchoukd18c7442010-07-12 15:50:32 -0700138void rsi_ProgramRasterSetCullMode(Context * rsc, RsProgramRaster vpr, RsCullMode mode)
139{
140 ProgramRaster *pr = static_cast<ProgramRaster *>(vpr);
141 pr->setCullMode(mode);
142}
143
Jason Sams5fd09d82009-09-23 13:57:02 -0700144
145}
146}
147