blob: ace1572f401078f19b8ce2ce2b9a59450cb503f6 [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
17#include "rsContext.h"
Alex Sakhartchouk77d9f4b2011-01-31 14:53:24 -080018#ifndef ANDROID_RS_SERIALIZE
Jason Sams5fd09d82009-09-23 13:57:02 -070019#include <GLES/gl.h>
20#include <GLES/glext.h>
Alex Sakhartchouk77d9f4b2011-01-31 14:53:24 -080021#endif //ANDROID_RS_SERIALIZE
Alex Sakhartchoukfb6b6142010-05-21 12:53:13 -070022
23#include "rsProgramRaster.h"
Jason Sams5fd09d82009-09-23 13:57:02 -070024
25using namespace android;
26using namespace android::renderscript;
27
28
Alex Sakhartchoukafb743a2010-11-09 17:00:54 -080029ProgramRaster::ProgramRaster(Context *rsc, bool pointSmooth,
30 bool lineSmooth, bool pointSprite)
31 : Program(rsc) {
32
Jason Sams5fd09d82009-09-23 13:57:02 -070033 mPointSmooth = pointSmooth;
34 mLineSmooth = lineSmooth;
35 mPointSprite = pointSprite;
Jason Sams5fd09d82009-09-23 13:57:02 -070036 mLineWidth = 1.0f;
Alex Sakhartchoukd18c7442010-07-12 15:50:32 -070037 mCull = RS_CULL_BACK;
Jason Sams5fd09d82009-09-23 13:57:02 -070038}
39
Alex Sakhartchoukafb743a2010-11-09 17:00:54 -080040ProgramRaster::~ProgramRaster() {
Jason Sams5fd09d82009-09-23 13:57:02 -070041}
42
Alex Sakhartchoukafb743a2010-11-09 17:00:54 -080043void ProgramRaster::setLineWidth(float s) {
Jason Sams5fd09d82009-09-23 13:57:02 -070044 mLineWidth = s;
Alex Sakhartchoukd18c7442010-07-12 15:50:32 -070045 mDirty = true;
46}
47
Alex Sakhartchoukafb743a2010-11-09 17:00:54 -080048void ProgramRaster::setCullMode(RsCullMode mode) {
Alex Sakhartchoukd18c7442010-07-12 15:50:32 -070049 mCull = mode;
50 mDirty = true;
Jason Sams5fd09d82009-09-23 13:57:02 -070051}
52
Alex Sakhartchoukafb743a2010-11-09 17:00:54 -080053void ProgramRaster::setupGL2(const Context *rsc, ProgramRasterState *state) {
Alex Sakhartchoukd18c7442010-07-12 15:50:32 -070054 if (state->mLast.get() == this && !mDirty) {
Jason Samsc460e552009-11-25 13:22:07 -080055 return;
56 }
57 state->mLast.set(this);
Alex Sakhartchoukd18c7442010-07-12 15:50:32 -070058 mDirty = false;
59
Alex Sakhartchoukafb743a2010-11-09 17:00:54 -080060 switch (mCull) {
Alex Sakhartchoukd18c7442010-07-12 15:50:32 -070061 case RS_CULL_BACK:
62 glEnable(GL_CULL_FACE);
63 glCullFace(GL_BACK);
64 break;
65 case RS_CULL_FRONT:
66 glEnable(GL_CULL_FACE);
67 glCullFace(GL_FRONT);
68 break;
69 case RS_CULL_NONE:
70 glDisable(GL_CULL_FACE);
71 break;
72 }
Jason Samsc460e552009-11-25 13:22:07 -080073}
74
Alex Sakhartchoukafb743a2010-11-09 17:00:54 -080075void ProgramRaster::serialize(OStream *stream) const {
Alex Sakhartchoukfb6b6142010-05-21 12:53:13 -070076}
Jason Sams5fd09d82009-09-23 13:57:02 -070077
Alex Sakhartchoukafb743a2010-11-09 17:00:54 -080078ProgramRaster *ProgramRaster::createFromStream(Context *rsc, IStream *stream) {
Alex Sakhartchoukfb6b6142010-05-21 12:53:13 -070079 return NULL;
80}
Jason Sams5fd09d82009-09-23 13:57:02 -070081
Alex Sakhartchoukafb743a2010-11-09 17:00:54 -080082ProgramRasterState::ProgramRasterState() {
Jason Sams5fd09d82009-09-23 13:57:02 -070083}
84
Alex Sakhartchoukafb743a2010-11-09 17:00:54 -080085ProgramRasterState::~ProgramRasterState() {
Jason Sams5fd09d82009-09-23 13:57:02 -070086}
87
Alex Sakhartchoukafb743a2010-11-09 17:00:54 -080088void ProgramRasterState::init(Context *rsc) {
Jason Sams4815c0d2009-12-15 12:58:36 -080089 ProgramRaster *pr = new ProgramRaster(rsc, false, false, false);
Jason Sams5fd09d82009-09-23 13:57:02 -070090 mDefault.set(pr);
91}
92
Alex Sakhartchoukafb743a2010-11-09 17:00:54 -080093void ProgramRasterState::deinit(Context *rsc) {
Jason Samsf2649a92009-09-25 16:37:33 -070094 mDefault.clear();
95 mLast.clear();
96}
97
Jason Sams5fd09d82009-09-23 13:57:02 -070098namespace android {
99namespace renderscript {
100
Alex Sakhartchoukd18c7442010-07-12 15:50:32 -0700101RsProgramRaster rsi_ProgramRasterCreate(Context * rsc,
Jason Sams5fd09d82009-09-23 13:57:02 -0700102 bool pointSmooth,
103 bool lineSmooth,
Alex Sakhartchoukafb743a2010-11-09 17:00:54 -0800104 bool pointSprite) {
105 ProgramRaster *pr = new ProgramRaster(rsc, pointSmooth,
106 lineSmooth, pointSprite);
Jason Sams5fd09d82009-09-23 13:57:02 -0700107 pr->incUserRef();
108 return pr;
109}
110
Alex Sakhartchoukafb743a2010-11-09 17:00:54 -0800111void rsi_ProgramRasterSetLineWidth(Context * rsc,
112 RsProgramRaster vpr,
113 float s) {
Jason Sams5fd09d82009-09-23 13:57:02 -0700114 ProgramRaster *pr = static_cast<ProgramRaster *>(vpr);
115 pr->setLineWidth(s);
116}
117
Alex Sakhartchoukafb743a2010-11-09 17:00:54 -0800118void rsi_ProgramRasterSetCullMode(Context * rsc,
119 RsProgramRaster vpr,
120 RsCullMode mode) {
Alex Sakhartchoukd18c7442010-07-12 15:50:32 -0700121 ProgramRaster *pr = static_cast<ProgramRaster *>(vpr);
122 pr->setCullMode(mode);
123}
124
Jason Sams5fd09d82009-09-23 13:57:02 -0700125}
126}
127