rsProgramStore.cpp revision 6b8552a4f6a44848255d77222e66aa92dd21b1b5
1326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams/* 2326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Copyright (C) 2009 The Android Open Source Project 3326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 4326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * you may not use this file except in compliance with the License. 6326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * You may obtain a copy of the License at 7326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 8326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 10326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Unless required by applicable law or agreed to in writing, software 11326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * See the License for the specific language governing permissions and 14326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * limitations under the License. 15326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams */ 16326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 17fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk#ifndef ANDROID_RS_BUILD_FOR_HOST 18326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include "rsContext.h" 191aa5a4eb81b8b88aeb5d2b6f4c47356fd0a62923Jason Sams#include <GLES/gl.h> 201aa5a4eb81b8b88aeb5d2b6f4c47356fd0a62923Jason Sams#include <GLES/glext.h> 21fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk#else 22fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk#include "rsContextHostStub.h" 23fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk#include <OpenGL/gl.h> 24fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk#include <OpenGl/glext.h> 25fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk#endif //ANDROID_RS_BUILD_FOR_HOST 26fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk 27fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk#include "rsProgramStore.h" 281aa5a4eb81b8b88aeb5d2b6f4c47356fd0a62923Jason Sams 29326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android; 30326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android::renderscript; 31326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 32326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 33ccc010bb7c0f89e162bf60033968a20be90a903aJason SamsProgramStore::ProgramStore(Context *rsc) : 344815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams Program(rsc) 35326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 36f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams mAllocFile = __FILE__; 37f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams mAllocLine = __LINE__; 38326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mDitherEnable = true; 39326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mBlendEnable = false; 40326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mColorRWriteEnable = true; 41326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mColorGWriteEnable = true; 42326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mColorBWriteEnable = true; 43326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mColorAWriteEnable = true; 44326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mBlendSrc = GL_ONE; 45326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mBlendDst = GL_ZERO; 46326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 47326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 48326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mDepthTestEnable = false; 49326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mDepthWriteEnable = true; 50326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mDepthFunc = GL_LESS; 51326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 52326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 53326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 54326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 55ccc010bb7c0f89e162bf60033968a20be90a903aJason SamsProgramStore::~ProgramStore() 56326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 57326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 58326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 59ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid ProgramStore::setupGL2(const Context *rsc, ProgramStoreState *state) 60c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams{ 61c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams if (state->mLast.get() == this) { 62c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams return; 63c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams } 64c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams state->mLast.set(this); 65c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams 66c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams glColorMask(mColorRWriteEnable, 67c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams mColorGWriteEnable, 68c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams mColorBWriteEnable, 69c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams mColorAWriteEnable); 70c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams if (mBlendEnable) { 71c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams glEnable(GL_BLEND); 72c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams glBlendFunc(mBlendSrc, mBlendDst); 73c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams } else { 74c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams glDisable(GL_BLEND); 75c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams } 76326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 77c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams //LOGE("pfs %i, %i, %x", mDepthWriteEnable, mDepthTestEnable, mDepthFunc); 78c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams 796b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams if (rsc->mUserSurfaceConfig.depthMin > 0) { 806b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams glDepthMask(mDepthWriteEnable); 816b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams if(mDepthTestEnable || mDepthWriteEnable) { 826b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams glEnable(GL_DEPTH_TEST); 836b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams glDepthFunc(mDepthFunc); 846b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams } else { 856b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams glDisable(GL_DEPTH_TEST); 866b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams } 87c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams } else { 886b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams glDepthMask(false); 89c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams glDisable(GL_DEPTH_TEST); 90c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams } 91c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams 926b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams if (rsc->mUserSurfaceConfig.stencilMin > 0) { 936b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams } else { 946b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams glStencilMask(0); 956b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams glDisable(GL_STENCIL_TEST); 966b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams } 976b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams 98c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams if (mDitherEnable) { 99c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams glEnable(GL_DITHER); 100c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams } else { 101c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams glDisable(GL_DITHER); 102c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams } 103326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 104326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 105c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams 106ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid ProgramStore::setDitherEnable(bool enable) 107326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 108326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mDitherEnable = enable; 109326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 110326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 111fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchoukvoid ProgramStore::serialize(OStream *stream) const 112fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk{ 113fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk 114fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk} 115fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk 116fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex SakhartchoukProgramStore *ProgramStore::createFromStream(Context *rsc, IStream *stream) 117fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk{ 118fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk return NULL; 119fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk} 120fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk 121fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk 122ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid ProgramStore::setDepthFunc(RsDepthFunc func) 123326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 124326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mDepthTestEnable = true; 125326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 126326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams switch(func) { 127326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case RS_DEPTH_FUNC_ALWAYS: 128326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mDepthTestEnable = false; 129326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mDepthFunc = GL_ALWAYS; 130326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 131326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case RS_DEPTH_FUNC_LESS: 132326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mDepthFunc = GL_LESS; 133326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 134326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case RS_DEPTH_FUNC_LEQUAL: 135326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mDepthFunc = GL_LEQUAL; 136326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 137326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case RS_DEPTH_FUNC_GREATER: 138326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mDepthFunc = GL_GREATER; 139326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 140326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case RS_DEPTH_FUNC_GEQUAL: 141326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mDepthFunc = GL_GEQUAL; 142326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 143326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case RS_DEPTH_FUNC_EQUAL: 144326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mDepthFunc = GL_EQUAL; 145326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 146326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case RS_DEPTH_FUNC_NOTEQUAL: 147326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mDepthFunc = GL_NOTEQUAL; 148326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 149326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 150326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 151326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 152ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid ProgramStore::setDepthMask(bool mask) 153326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 154326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mDepthWriteEnable = mask; 155326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 156326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 157ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid ProgramStore::setBlendFunc(RsBlendSrcFunc src, RsBlendDstFunc dst) 158326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 159326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mBlendEnable = true; 160cfb1d11ce6826fce7241d316d8b7dcab661f63a6Jason Sams if ((src == RS_BLEND_SRC_ONE) && 161326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams (dst == RS_BLEND_DST_ZERO)) { 162326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mBlendEnable = false; 163326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 164326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 165326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams switch(src) { 166326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case RS_BLEND_SRC_ZERO: 167326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mBlendSrc = GL_ZERO; 168326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 169326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case RS_BLEND_SRC_ONE: 170326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mBlendSrc = GL_ONE; 171326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 172326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case RS_BLEND_SRC_DST_COLOR: 173326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mBlendSrc = GL_DST_COLOR; 174326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 175326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case RS_BLEND_SRC_ONE_MINUS_DST_COLOR: 176326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mBlendSrc = GL_ONE_MINUS_DST_COLOR; 177326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 178326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case RS_BLEND_SRC_SRC_ALPHA: 179326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mBlendSrc = GL_SRC_ALPHA; 180326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 181326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case RS_BLEND_SRC_ONE_MINUS_SRC_ALPHA: 182326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mBlendSrc = GL_ONE_MINUS_SRC_ALPHA; 183326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 184326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case RS_BLEND_SRC_DST_ALPHA: 185326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mBlendSrc = GL_DST_ALPHA; 186326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 187326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case RS_BLEND_SRC_ONE_MINUS_DST_ALPHA: 188326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mBlendSrc = GL_ONE_MINUS_DST_ALPHA; 189326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 190326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case RS_BLEND_SRC_SRC_ALPHA_SATURATE: 191326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mBlendSrc = GL_SRC_ALPHA_SATURATE; 192326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 193326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 194326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 195326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams switch(dst) { 196326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case RS_BLEND_DST_ZERO: 197326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mBlendDst = GL_ZERO; 198326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 199326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case RS_BLEND_DST_ONE: 200326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mBlendDst = GL_ONE; 201326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 202326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case RS_BLEND_DST_SRC_COLOR: 203326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mBlendDst = GL_SRC_COLOR; 204326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 205326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case RS_BLEND_DST_ONE_MINUS_SRC_COLOR: 206326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mBlendDst = GL_ONE_MINUS_SRC_COLOR; 207326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 208326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case RS_BLEND_DST_SRC_ALPHA: 209326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mBlendDst = GL_SRC_ALPHA; 210326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 211326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case RS_BLEND_DST_ONE_MINUS_SRC_ALPHA: 212326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mBlendDst = GL_ONE_MINUS_SRC_ALPHA; 213326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 214326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case RS_BLEND_DST_DST_ALPHA: 215326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mBlendDst = GL_DST_ALPHA; 216326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 217326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case RS_BLEND_DST_ONE_MINUS_DST_ALPHA: 218326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mBlendDst = GL_ONE_MINUS_DST_ALPHA; 219326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams break; 220326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 221326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 222326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 223ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid ProgramStore::setColorMask(bool r, bool g, bool b, bool a) 224326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 225326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mColorRWriteEnable = r; 226326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mColorGWriteEnable = g; 227326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mColorBWriteEnable = b; 228326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mColorAWriteEnable = a; 229326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 230326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 231326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 232ccc010bb7c0f89e162bf60033968a20be90a903aJason SamsProgramStoreState::ProgramStoreState() 233326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 234326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mPFS = NULL; 235326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 236326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 237ccc010bb7c0f89e162bf60033968a20be90a903aJason SamsProgramStoreState::~ProgramStoreState() 238326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 239326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams delete mPFS; 240326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 241326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 242326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 243771565f47fc44608444c00aa8fa3bda769ceaeceJason Samsvoid ProgramStoreState::init(Context *rsc) 2448ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams{ 245ccc010bb7c0f89e162bf60033968a20be90a903aJason Sams ProgramStore *pfs = new ProgramStore(rsc); 2468ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams mDefault.set(pfs); 2478ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams} 2488ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams 249ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid ProgramStoreState::deinit(Context *rsc) 250f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams{ 251f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams mDefault.clear(); 252f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams mLast.clear(); 253f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams} 254f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams 255326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 256326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android { 257326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript { 258326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 259ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid rsi_ProgramStoreBegin(Context * rsc, RsElement in, RsElement out) 260326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 261326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams delete rsc->mStateFragmentStore.mPFS; 262ccc010bb7c0f89e162bf60033968a20be90a903aJason Sams rsc->mStateFragmentStore.mPFS = new ProgramStore(rsc); 263326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 264326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 265326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 266ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid rsi_ProgramStoreDepthFunc(Context *rsc, RsDepthFunc func) 267326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 268326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->mStateFragmentStore.mPFS->setDepthFunc(func); 269326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 270326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 271ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid rsi_ProgramStoreDepthMask(Context *rsc, bool mask) 272326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 273326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->mStateFragmentStore.mPFS->setDepthMask(mask); 274326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 275326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 276ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid rsi_ProgramStoreColorMask(Context *rsc, bool r, bool g, bool b, bool a) 277326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 278326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->mStateFragmentStore.mPFS->setColorMask(r, g, b, a); 279326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 280326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 281ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid rsi_ProgramStoreBlendFunc(Context *rsc, RsBlendSrcFunc src, RsBlendDstFunc dst) 282326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 283326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->mStateFragmentStore.mPFS->setBlendFunc(src, dst); 284326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 285326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 286ccc010bb7c0f89e162bf60033968a20be90a903aJason SamsRsProgramStore rsi_ProgramStoreCreate(Context *rsc) 287326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 288ccc010bb7c0f89e162bf60033968a20be90a903aJason Sams ProgramStore *pfs = rsc->mStateFragmentStore.mPFS; 2899397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams pfs->incUserRef(); 290326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->mStateFragmentStore.mPFS = 0; 291326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return pfs; 292326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 293326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 294ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid rsi_ProgramStoreDither(Context *rsc, bool enable) 295326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 296326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->mStateFragmentStore.mPFS->setDitherEnable(enable); 297326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 298326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 299326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 300326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 301326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 302