rsProgramRaster.cpp revision 771565f47fc44608444c00aa8fa3bda769ceaece
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 bool pointSmooth, 29 bool lineSmooth, 30 bool pointSprite) : 31 Program(rsc) 32{ 33 mAllocFile = __FILE__; 34 mAllocLine = __LINE__; 35 mPointSmooth = pointSmooth; 36 mLineSmooth = lineSmooth; 37 mPointSprite = pointSprite; 38 39 mPointSize = 1.0f; 40 mLineWidth = 1.0f; 41} 42 43ProgramRaster::~ProgramRaster() 44{ 45} 46 47void ProgramRaster::setLineWidth(float s) 48{ 49 mLineWidth = s; 50} 51 52void ProgramRaster::setPointSize(float s) 53{ 54 mPointSize = s; 55} 56 57void ProgramRaster::setupGL(const Context *rsc, ProgramRasterState *state) 58{ 59 if (state->mLast.get() == this) { 60 return; 61 } 62 state->mLast.set(this); 63 64 glPointSize(mPointSize); 65 if (mPointSmooth) { 66 glEnable(GL_POINT_SMOOTH); 67 } else { 68 glDisable(GL_POINT_SMOOTH); 69 } 70 71 glLineWidth(mLineWidth); 72 if (mLineSmooth) { 73 glEnable(GL_LINE_SMOOTH); 74 } else { 75 glDisable(GL_LINE_SMOOTH); 76 } 77 78 if (rsc->checkVersion1_1()) { 79 if (mPointSprite) { 80 glEnable(GL_POINT_SPRITE_OES); 81 } else { 82 glDisable(GL_POINT_SPRITE_OES); 83 } 84 } 85} 86 87void ProgramRaster::setupGL2(const Context *rsc, ProgramRasterState *state) 88{ 89 if (state->mLast.get() == this) { 90 return; 91 } 92 state->mLast.set(this); 93} 94 95 96 97ProgramRasterState::ProgramRasterState() 98{ 99} 100 101ProgramRasterState::~ProgramRasterState() 102{ 103} 104 105void ProgramRasterState::init(Context *rsc) 106{ 107 ProgramRaster *pr = new ProgramRaster(rsc, false, false, false); 108 mDefault.set(pr); 109} 110 111void ProgramRasterState::deinit(Context *rsc) 112{ 113 mDefault.clear(); 114 mLast.clear(); 115} 116 117 118namespace android { 119namespace renderscript { 120 121RsProgramRaster rsi_ProgramRasterCreate(Context * rsc, RsElement in, RsElement out, 122 bool pointSmooth, 123 bool lineSmooth, 124 bool pointSprite) 125{ 126 ProgramRaster *pr = new ProgramRaster(rsc, 127 pointSmooth, 128 lineSmooth, 129 pointSprite); 130 pr->incUserRef(); 131 return pr; 132} 133 134void rsi_ProgramRasterSetPointSize(Context * rsc, RsProgramRaster vpr, float s) 135{ 136 ProgramRaster *pr = static_cast<ProgramRaster *>(vpr); 137 pr->setPointSize(s); 138} 139 140void rsi_ProgramRasterSetLineWidth(Context * rsc, RsProgramRaster vpr, float s) 141{ 142 ProgramRaster *pr = static_cast<ProgramRaster *>(vpr); 143 pr->setLineWidth(s); 144} 145 146 147} 148} 149 150