rsProgramVertex.cpp revision 326e0ddf89e8df2837752fbfd7a014814b32082c
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 "rsProgramVertex.h" 19 20using namespace android; 21using namespace android::renderscript; 22 23 24ProgramVertex::ProgramVertex(Element *in, Element *out) : 25 Program(in, out) 26{ 27 mTextureMatrixEnable = false; 28 mProjectionEnable = false; 29 mTransformEnable = false; 30} 31 32ProgramVertex::~ProgramVertex() 33{ 34} 35 36void ProgramVertex::setupGL() 37{ 38 const float *f = static_cast<const float *>(mConstants[0]->getPtr()); 39 40 glMatrixMode(GL_TEXTURE); 41 if (mTextureMatrixEnable) { 42 glLoadMatrixf(&f[RS_PROGRAM_VERTEX_TEXTURE_OFFSET]); 43 } else { 44 glLoadIdentity(); 45 } 46 47 48 glMatrixMode(GL_PROJECTION); 49 if (mProjectionEnable) { 50 //glLoadMatrixf(&f[OFFSET_PROJECTION]); 51 } else { 52 } 53 54 glMatrixMode(GL_MODELVIEW); 55 if (mTransformEnable) { 56 glLoadMatrixf(&f[RS_PROGRAM_VERTEX_MODELVIEW_OFFSET]); 57 } else { 58 glLoadIdentity(); 59 } 60 61} 62 63void ProgramVertex::setConstantType(uint32_t slot, const Type *t) 64{ 65 mConstantTypes[slot].set(t); 66} 67 68void ProgramVertex::bindAllocation(uint32_t slot, Allocation *a) 69{ 70 mConstants[slot].set(a); 71} 72 73 74ProgramVertexState::ProgramVertexState() 75{ 76 mPV = NULL; 77} 78 79ProgramVertexState::~ProgramVertexState() 80{ 81 delete mPV; 82} 83 84 85 86namespace android { 87namespace renderscript { 88 89void rsi_ProgramVertexBegin(Context *rsc, RsElement in, RsElement out) 90{ 91 delete rsc->mStateVertex.mPV; 92 rsc->mStateVertex.mPV = new ProgramVertex((Element *)in, (Element *)out); 93} 94 95RsProgramVertex rsi_ProgramVertexCreate(Context *rsc) 96{ 97 ProgramVertex *pv = rsc->mStateVertex.mPV; 98 pv->incRef(); 99 rsc->mStateVertex.mPV = 0; 100 101 return pv; 102} 103 104void rsi_ProgramVertexBindAllocation(Context *rsc, RsProgramVertex vpgm, uint32_t slot, RsAllocation constants) 105{ 106 ProgramVertex *pv = static_cast<ProgramVertex *>(vpgm); 107 pv->bindAllocation(slot, static_cast<Allocation *>(constants)); 108} 109 110void rsi_ProgramVertexSetType(Context *rsc, uint32_t slot, RsType constants) 111{ 112 rsc->mStateVertex.mPV->setConstantType(slot, static_cast<const Type *>(constants)); 113} 114 115void rsi_ProgramVertexSetCameraMode(Context *rsc, bool ortho) 116{ 117 rsc->mStateVertex.mPV->setProjectionEnabled(!ortho); 118} 119 120void rsi_ProgramVertexSetTextureMatrixEnable(Context *rsc, bool enable) 121{ 122 rsc->mStateVertex.mPV->setTextureMatrixEnable(enable); 123} 124 125void rsi_ProgramVertexSetModelMatrixEnable(Context *rsc, bool enable) 126{ 127 rsc->mStateVertex.mPV->setTransformEnable(enable); 128} 129 130 131 132} 133} 134