rsProgramRaster.cpp revision c460e55d78cbe8bee95c5c947dfe541218142a5b
1/* 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 27ProgramRaster::ProgramRaster(Context *rsc, 28 Element *in, 29 Element *out, 30 bool pointSmooth, 31 bool lineSmooth, 32 bool pointSprite) : 33 Program(rsc, in, out) 34{ 35 mAllocFile = __FILE__; 36 mAllocLine = __LINE__; 37 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 66 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 { 77 glDisable(GL_LINE_SMOOTH); 78 } 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 89void ProgramRaster::setupGL2(const Context *rsc, ProgramRasterState *state) 90{ 91 if (state->mLast.get() == this) { 92 return; 93 } 94 state->mLast.set(this); 95} 96 97 98 99ProgramRasterState::ProgramRasterState() 100{ 101} 102 103ProgramRasterState::~ProgramRasterState() 104{ 105} 106 107void ProgramRasterState::init(Context *rsc, int32_t w, int32_t h) 108{ 109 ProgramRaster *pr = new ProgramRaster(rsc, NULL, NULL, false, false, false); 110 mDefault.set(pr); 111} 112 113void ProgramRasterState::deinit(Context *rsc) 114{ 115 mDefault.clear(); 116 mLast.clear(); 117} 118 119 120namespace android { 121namespace renderscript { 122 123RsProgramRaster rsi_ProgramRasterCreate(Context * rsc, RsElement in, RsElement out, 124 bool pointSmooth, 125 bool lineSmooth, 126 bool pointSprite) 127{ 128 ProgramRaster *pr = new ProgramRaster(rsc, 129 static_cast<Element *>(in), 130 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 154