blob: 435561d7308a17138461cf10308dfaad4cfd0b65 [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 Sakhartchoukfb6b6142010-05-21 12:53:13 -070018#include "rsProgramRaster.h"
Jason Sams5fd09d82009-09-23 13:57:02 -070019
20using namespace android;
21using namespace android::renderscript;
22
23
Alex Sakhartchoukafb743a2010-11-09 17:00:54 -080024ProgramRaster::ProgramRaster(Context *rsc, bool pointSmooth,
Jason Sams721acc42011-04-06 11:23:54 -070025 bool lineSmooth, bool pointSprite,
26 float lineWidth, RsCullMode cull)
Alex Sakhartchouk7f126c72011-05-05 16:56:27 -070027 : ProgramBase(rsc) {
Alex Sakhartchoukafb743a2010-11-09 17:00:54 -080028
Jason Sams721acc42011-04-06 11:23:54 -070029 memset(&mHal, 0, sizeof(mHal));
30
31 mHal.state.pointSmooth = pointSmooth;
32 mHal.state.lineSmooth = lineSmooth;
33 mHal.state.pointSprite = pointSprite;
34 mHal.state.lineWidth = lineWidth;
35 mHal.state.cull = cull;
36
37 rsc->mHal.funcs.raster.init(rsc, this);
Jason Sams5fd09d82009-09-23 13:57:02 -070038}
39
Alex Sakhartchoukafb743a2010-11-09 17:00:54 -080040ProgramRaster::~ProgramRaster() {
Jason Sams721acc42011-04-06 11:23:54 -070041 mRSC->mHal.funcs.raster.destroy(mRSC, this);
Jason Sams5fd09d82009-09-23 13:57:02 -070042}
43
Jason Sams721acc42011-04-06 11:23:54 -070044void ProgramRaster::setup(const Context *rsc, ProgramRasterState *state) {
Alex Sakhartchoukd18c7442010-07-12 15:50:32 -070045 if (state->mLast.get() == this && !mDirty) {
Jason Samsc460e552009-11-25 13:22:07 -080046 return;
47 }
48 state->mLast.set(this);
Alex Sakhartchoukd18c7442010-07-12 15:50:32 -070049 mDirty = false;
50
Jason Sams721acc42011-04-06 11:23:54 -070051 rsc->mHal.funcs.raster.setActive(rsc, this);
Jason Samsc460e552009-11-25 13:22:07 -080052}
53
Alex Sakhartchoukafb743a2010-11-09 17:00:54 -080054void ProgramRaster::serialize(OStream *stream) const {
Alex Sakhartchoukfb6b6142010-05-21 12:53:13 -070055}
Jason Sams5fd09d82009-09-23 13:57:02 -070056
Alex Sakhartchoukafb743a2010-11-09 17:00:54 -080057ProgramRaster *ProgramRaster::createFromStream(Context *rsc, IStream *stream) {
Alex Sakhartchoukfb6b6142010-05-21 12:53:13 -070058 return NULL;
59}
Jason Sams5fd09d82009-09-23 13:57:02 -070060
Alex Sakhartchoukafb743a2010-11-09 17:00:54 -080061ProgramRasterState::ProgramRasterState() {
Jason Sams5fd09d82009-09-23 13:57:02 -070062}
63
Alex Sakhartchoukafb743a2010-11-09 17:00:54 -080064ProgramRasterState::~ProgramRasterState() {
Jason Sams5fd09d82009-09-23 13:57:02 -070065}
66
Alex Sakhartchoukafb743a2010-11-09 17:00:54 -080067void ProgramRasterState::init(Context *rsc) {
Jason Sams721acc42011-04-06 11:23:54 -070068 ProgramRaster *pr = new ProgramRaster(rsc, false, false, false, 1.f, RS_CULL_BACK);
Jason Sams5fd09d82009-09-23 13:57:02 -070069 mDefault.set(pr);
70}
71
Alex Sakhartchoukafb743a2010-11-09 17:00:54 -080072void ProgramRasterState::deinit(Context *rsc) {
Jason Samsf2649a92009-09-25 16:37:33 -070073 mDefault.clear();
74 mLast.clear();
75}
76
Jason Sams5fd09d82009-09-23 13:57:02 -070077namespace android {
78namespace renderscript {
79
Alex Sakhartchoukd18c7442010-07-12 15:50:32 -070080RsProgramRaster rsi_ProgramRasterCreate(Context * rsc,
Jason Sams5fd09d82009-09-23 13:57:02 -070081 bool pointSmooth,
82 bool lineSmooth,
Jason Sams721acc42011-04-06 11:23:54 -070083 bool pointSprite,
84 float lineWidth,
85 RsCullMode cull) {
Alex Sakhartchoukafb743a2010-11-09 17:00:54 -080086 ProgramRaster *pr = new ProgramRaster(rsc, pointSmooth,
Jason Sams721acc42011-04-06 11:23:54 -070087 lineSmooth, pointSprite, lineWidth, cull);
Jason Sams5fd09d82009-09-23 13:57:02 -070088 pr->incUserRef();
89 return pr;
90}
91
Jason Sams5fd09d82009-09-23 13:57:02 -070092}
93}
94