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