rsProgramRaster.cpp revision 8cfdd24fec22080b72266d33f61befc4a98b77c6
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 89 90 91ProgramRasterState::ProgramRasterState() 92{ 93} 94 95ProgramRasterState::~ProgramRasterState() 96{ 97} 98 99void ProgramRasterState::init(Context *rsc, int32_t w, int32_t h) 100{ 101 ProgramRaster *pr = new ProgramRaster(rsc, NULL, NULL, false, false, false); 102 mDefault.set(pr); 103} 104 105void ProgramRasterState::deinit(Context *rsc) 106{ 107 mDefault.clear(); 108 mLast.clear(); 109} 110 111 112namespace android { 113namespace renderscript { 114 115RsProgramRaster rsi_ProgramRasterCreate(Context * rsc, RsElement in, RsElement out, 116 bool pointSmooth, 117 bool lineSmooth, 118 bool pointSprite) 119{ 120 ProgramRaster *pr = new ProgramRaster(rsc, 121 static_cast<Element *>(in), 122 static_cast<Element *>(out), 123 pointSmooth, 124 lineSmooth, 125 pointSprite); 126 pr->incUserRef(); 127 return pr; 128} 129 130void rsi_ProgramRasterSetPointSize(Context * rsc, RsProgramRaster vpr, float s) 131{ 132 ProgramRaster *pr = static_cast<ProgramRaster *>(vpr); 133 pr->setPointSize(s); 134} 135 136void rsi_ProgramRasterSetLineWidth(Context * rsc, RsProgramRaster vpr, float s) 137{ 138 ProgramRaster *pr = static_cast<ProgramRaster *>(vpr); 139 pr->setLineWidth(s); 140} 141 142 143} 144} 145 146