blob: f0039f75251ba3c2b09a59ffffa69ff7fbb5a76c [file] [log] [blame]
Jason Samsebfb4362009-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"
18#include "rsProgramRaster.h"
19
20#include <GLES/gl.h>
21#include <GLES/glext.h>
22
23using namespace android;
24using namespace android::renderscript;
25
26
Jason Samsa9e7a052009-09-25 14:51:22 -070027ProgramRaster::ProgramRaster(Context *rsc,
28 Element *in,
Jason Samsebfb4362009-09-23 13:57:02 -070029 Element *out,
30 bool pointSmooth,
31 bool lineSmooth,
32 bool pointSprite) :
Jason Samsa9e7a052009-09-25 14:51:22 -070033 Program(rsc, in, out)
Jason Samsebfb4362009-09-23 13:57:02 -070034{
Jason Sams61f08d62009-09-25 16:37:33 -070035 mAllocFile = __FILE__;
36 mAllocLine = __LINE__;
Jason Samsebfb4362009-09-23 13:57:02 -070037 mPointSmooth = pointSmooth;
38 mLineSmooth = lineSmooth;
39 mPointSprite = pointSprite;
40
41 mPointSize = 1.0f;
42 mLineWidth = 1.0f;
43}
44
45ProgramRaster::~ProgramRaster()
46{
47}
48
49void ProgramRaster::setLineWidth(float s)
50{
51 mLineWidth = s;
52}
53
54void ProgramRaster::setPointSize(float s)
55{
56 mPointSize = s;
57}
58
59void ProgramRaster::setupGL(const Context *rsc, ProgramRasterState *state)
60{
61 if (state->mLast.get() == this) {
62 return;
63 }
64 state->mLast.set(this);
65
Jason Samsebfb4362009-09-23 13:57:02 -070066 glPointSize(mPointSize);
67 if (mPointSmooth) {
68 glEnable(GL_POINT_SMOOTH);
69 } else {
70 glDisable(GL_POINT_SMOOTH);
71 }
72
73 glLineWidth(mLineWidth);
74 if (mLineSmooth) {
75 glEnable(GL_LINE_SMOOTH);
76 } else {
Jason Samsc7412b32009-10-14 15:43:53 -070077 glDisable(GL_LINE_SMOOTH);
Jason Samsebfb4362009-09-23 13:57:02 -070078 }
79
80 if (rsc->checkVersion1_1()) {
81 if (mPointSprite) {
82 glEnable(GL_POINT_SPRITE_OES);
83 } else {
84 glDisable(GL_POINT_SPRITE_OES);
85 }
86 }
87}
88
Jason Samsbb51c402009-11-25 13:22:07 -080089void ProgramRaster::setupGL2(const Context *rsc, ProgramRasterState *state)
90{
91 if (state->mLast.get() == this) {
92 return;
93 }
94 state->mLast.set(this);
95}
96
Jason Samsebfb4362009-09-23 13:57:02 -070097
98
99ProgramRasterState::ProgramRasterState()
100{
101}
102
103ProgramRasterState::~ProgramRasterState()
104{
105}
106
107void ProgramRasterState::init(Context *rsc, int32_t w, int32_t h)
108{
Jason Samsa9e7a052009-09-25 14:51:22 -0700109 ProgramRaster *pr = new ProgramRaster(rsc, NULL, NULL, false, false, false);
Jason Samsebfb4362009-09-23 13:57:02 -0700110 mDefault.set(pr);
111}
112
Jason Sams61f08d62009-09-25 16:37:33 -0700113void ProgramRasterState::deinit(Context *rsc)
114{
115 mDefault.clear();
116 mLast.clear();
117}
118
Jason Samsebfb4362009-09-23 13:57:02 -0700119
120namespace android {
121namespace renderscript {
122
123RsProgramRaster rsi_ProgramRasterCreate(Context * rsc, RsElement in, RsElement out,
124 bool pointSmooth,
125 bool lineSmooth,
126 bool pointSprite)
127{
Jason Samsa9e7a052009-09-25 14:51:22 -0700128 ProgramRaster *pr = new ProgramRaster(rsc,
129 static_cast<Element *>(in),
Jason Samsebfb4362009-09-23 13:57:02 -0700130 static_cast<Element *>(out),
131 pointSmooth,
132 lineSmooth,
133 pointSprite);
134 pr->incUserRef();
135 return pr;
136}
137
138void rsi_ProgramRasterSetPointSize(Context * rsc, RsProgramRaster vpr, float s)
139{
140 ProgramRaster *pr = static_cast<ProgramRaster *>(vpr);
141 pr->setPointSize(s);
142}
143
144void rsi_ProgramRasterSetLineWidth(Context * rsc, RsProgramRaster vpr, float s)
145{
146 ProgramRaster *pr = static_cast<ProgramRaster *>(vpr);
147 pr->setLineWidth(s);
148}
149
150
151}
152}
153