| Jason Sams | 326e0dd | 2009-05-22 14:03:28 -0700 | [diff] [blame] | 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 |  | 
| Alex Sakhartchouk | fb6b614 | 2010-05-21 12:53:13 -0700 | [diff] [blame] | 17 | #ifndef ANDROID_RS_BUILD_FOR_HOST | 
| Jason Sams | 326e0dd | 2009-05-22 14:03:28 -0700 | [diff] [blame] | 18 | #include "rsContext.h" | 
| Jason Sams | 1aa5a4e | 2009-06-22 17:15:15 -0700 | [diff] [blame] | 19 | #include <GLES/gl.h> | 
 | 20 | #include <GLES/glext.h> | 
| Jason Sams | c460e55 | 2009-11-25 13:22:07 -0800 | [diff] [blame] | 21 | #include <GLES2/gl2.h> | 
 | 22 | #include <GLES2/gl2ext.h> | 
| Alex Sakhartchouk | fb6b614 | 2010-05-21 12:53:13 -0700 | [diff] [blame] | 23 | #else | 
 | 24 | #include "rsContextHostStub.h" | 
 | 25 | #include <OpenGL/gl.h> | 
 | 26 | #include <OpenGL/glext.h> | 
 | 27 | #endif //ANDROID_RS_BUILD_FOR_HOST | 
 | 28 |  | 
 | 29 | #include "rsProgramFragment.h" | 
| Jason Sams | 1aa5a4e | 2009-06-22 17:15:15 -0700 | [diff] [blame] | 30 |  | 
| Jason Sams | 326e0dd | 2009-05-22 14:03:28 -0700 | [diff] [blame] | 31 | using namespace android; | 
 | 32 | using namespace android::renderscript; | 
 | 33 |  | 
 | 34 |  | 
| Jason Sams | 7dad9c3 | 2009-12-17 16:55:08 -0800 | [diff] [blame] | 35 | ProgramFragment::ProgramFragment(Context *rsc, const uint32_t * params, | 
 | 36 |                                  uint32_t paramLength) : | 
| Jason Sams | 4815c0d | 2009-12-15 12:58:36 -0800 | [diff] [blame] | 37 |     Program(rsc) | 
| Jason Sams | 326e0dd | 2009-05-22 14:03:28 -0700 | [diff] [blame] | 38 | { | 
| Jason Sams | f2649a9 | 2009-09-25 16:37:33 -0700 | [diff] [blame] | 39 |     mAllocFile = __FILE__; | 
 | 40 |     mAllocLine = __LINE__; | 
| Jason Sams | 6445e52 | 2010-08-04 17:50:20 -0700 | [diff] [blame] | 41 |     rsAssert(paramLength == 6); | 
 | 42 |  | 
 | 43 |     mConstantColor[0] = 1.f; | 
 | 44 |     mConstantColor[1] = 1.f; | 
 | 45 |     mConstantColor[2] = 1.f; | 
 | 46 |     mConstantColor[3] = 1.f; | 
| Jason Sams | 7dad9c3 | 2009-12-17 16:55:08 -0800 | [diff] [blame] | 47 |  | 
 | 48 |     mEnvModes[0] = (RsTexEnvMode)params[0]; | 
 | 49 |     mTextureFormats[0] = params[1]; | 
 | 50 |     mEnvModes[1] = (RsTexEnvMode)params[2]; | 
 | 51 |     mTextureFormats[1] = params[3]; | 
 | 52 |     mPointSpriteEnable = params[4] != 0; | 
| Jason Sams | 6445e52 | 2010-08-04 17:50:20 -0700 | [diff] [blame] | 53 |     mVaryingColor = false; | 
 | 54 |     if (paramLength > 5) | 
 | 55 |         mVaryingColor = params[5] != 0; | 
| Jason Sams | 7dad9c3 | 2009-12-17 16:55:08 -0800 | [diff] [blame] | 56 |  | 
| Jason Sams | 326e0dd | 2009-05-22 14:03:28 -0700 | [diff] [blame] | 57 |     mTextureEnableMask = 0; | 
| Jason Sams | 7dad9c3 | 2009-12-17 16:55:08 -0800 | [diff] [blame] | 58 |     if (mEnvModes[0]) { | 
 | 59 |         mTextureEnableMask |= 1; | 
 | 60 |     } | 
 | 61 |     if (mEnvModes[1]) { | 
 | 62 |         mTextureEnableMask |= 2; | 
 | 63 |     } | 
| Jason Sams | 6445e52 | 2010-08-04 17:50:20 -0700 | [diff] [blame] | 64 |  | 
 | 65 |     mUniformCount = 0; | 
 | 66 |     mUniformNames[mUniformCount++].setTo("uni_Tex0"); | 
 | 67 |     mUniformNames[mUniformCount++].setTo("uni_Tex1"); | 
 | 68 |  | 
 | 69 |     mConstantColorUniformIndex = -1; | 
 | 70 |     //if (!mVaryingColor) { | 
 | 71 |         mConstantColorUniformIndex = mUniformCount; | 
 | 72 |         mUniformNames[mUniformCount++].setTo("uni_Color"); | 
 | 73 |     //} | 
 | 74 |     createShader(); | 
| Jason Sams | 326e0dd | 2009-05-22 14:03:28 -0700 | [diff] [blame] | 75 | } | 
 | 76 |  | 
| Jason Sams | f2e4fa2 | 2009-12-15 13:27:04 -0800 | [diff] [blame] | 77 | ProgramFragment::ProgramFragment(Context *rsc, const char * shaderText, | 
 | 78 |                                  uint32_t shaderLength, const uint32_t * params, | 
 | 79 |                                  uint32_t paramLength) : | 
 | 80 |     Program(rsc, shaderText, shaderLength, params, paramLength) | 
 | 81 | { | 
 | 82 |     mAllocFile = __FILE__; | 
 | 83 |     mAllocLine = __LINE__; | 
 | 84 |  | 
| Jason Sams | 6445e52 | 2010-08-04 17:50:20 -0700 | [diff] [blame] | 85 |     mConstantColor[0] = 1.f; | 
 | 86 |     mConstantColor[1] = 1.f; | 
 | 87 |     mConstantColor[2] = 1.f; | 
 | 88 |     mConstantColor[3] = 1.f; | 
 | 89 |  | 
 | 90 |     LOGE("Custom FP"); | 
 | 91 |  | 
 | 92 |     mUniformCount = 2; | 
 | 93 |     mUniformNames[0].setTo("uni_Tex0"); | 
 | 94 |     mUniformNames[1].setTo("uni_Tex1"); | 
 | 95 |  | 
 | 96 |     createShader(); | 
 | 97 |  | 
| Jason Sams | f2e4fa2 | 2009-12-15 13:27:04 -0800 | [diff] [blame] | 98 |     mTextureEnableMask = (1 << mTextureCount) -1; | 
 | 99 | } | 
 | 100 |  | 
 | 101 |  | 
| Jason Sams | 326e0dd | 2009-05-22 14:03:28 -0700 | [diff] [blame] | 102 | ProgramFragment::~ProgramFragment() | 
 | 103 | { | 
 | 104 | } | 
 | 105 |  | 
| Jason Sams | 6445e52 | 2010-08-04 17:50:20 -0700 | [diff] [blame] | 106 | void ProgramFragment::setConstantColor(float r, float g, float b, float a) | 
 | 107 | { | 
 | 108 |     mConstantColor[0] = r; | 
 | 109 |     mConstantColor[1] = g; | 
 | 110 |     mConstantColor[2] = b; | 
 | 111 |     mConstantColor[3] = a; | 
 | 112 |     mDirty = true; | 
 | 113 | } | 
 | 114 |  | 
| Jason Sams | afcb25c | 2009-08-25 11:34:49 -0700 | [diff] [blame] | 115 | void ProgramFragment::setupGL(const Context *rsc, ProgramFragmentState *state) | 
| Jason Sams | 326e0dd | 2009-05-22 14:03:28 -0700 | [diff] [blame] | 116 | { | 
| Jason Sams | 326e0dd | 2009-05-22 14:03:28 -0700 | [diff] [blame] | 117 | } | 
 | 118 |  | 
| Jason Sams | c460e55 | 2009-11-25 13:22:07 -0800 | [diff] [blame] | 119 | void ProgramFragment::setupGL2(const Context *rsc, ProgramFragmentState *state, ShaderCache *sc) | 
 | 120 | { | 
| Jason Sams | 3eb28f0 | 2010-01-27 14:41:43 -0800 | [diff] [blame] | 121 |  | 
| Jason Sams | c460e55 | 2009-11-25 13:22:07 -0800 | [diff] [blame] | 122 |     //LOGE("sgl2 frag1 %x", glGetError()); | 
 | 123 |     if ((state->mLast.get() == this) && !mDirty) { | 
| Jason Sams | e64c2f1 | 2010-06-22 17:22:13 -0700 | [diff] [blame] | 124 |         return; | 
| Jason Sams | c460e55 | 2009-11-25 13:22:07 -0800 | [diff] [blame] | 125 |     } | 
 | 126 |     state->mLast.set(this); | 
 | 127 |  | 
| Jason Sams | 3eb28f0 | 2010-01-27 14:41:43 -0800 | [diff] [blame] | 128 |     rsc->checkError("ProgramFragment::setupGL2 start"); | 
| Jason Sams | 6445e52 | 2010-08-04 17:50:20 -0700 | [diff] [blame] | 129 |  | 
 | 130 |     if (!mVaryingColor && | 
 | 131 |         (sc->fragUniformSlot(mConstantColorUniformIndex) >= 0)) { | 
 | 132 |         //LOGE("mConstantColorUniformIndex %i %i", mConstantColorUniformIndex, sc->fragUniformSlot(mConstantColorUniformIndex)); | 
 | 133 |         glUniform4fv(sc->fragUniformSlot(mConstantColorUniformIndex), 1, mConstantColor); | 
 | 134 |         rsc->checkError("ProgramFragment::color setup"); | 
 | 135 |     } | 
 | 136 |  | 
| Jason Sams | c460e55 | 2009-11-25 13:22:07 -0800 | [diff] [blame] | 137 |     for (uint32_t ct=0; ct < MAX_TEXTURE; ct++) { | 
 | 138 |         glActiveTexture(GL_TEXTURE0 + ct); | 
 | 139 |         if (!(mTextureEnableMask & (1 << ct)) || !mTextures[ct].get()) { | 
| Jason Sams | c460e55 | 2009-11-25 13:22:07 -0800 | [diff] [blame] | 140 |             continue; | 
 | 141 |         } | 
 | 142 |  | 
| Jason Sams | cf4c7c9 | 2009-12-14 12:57:40 -0800 | [diff] [blame] | 143 |         mTextures[ct]->uploadCheck(rsc); | 
| Jason Sams | c460e55 | 2009-11-25 13:22:07 -0800 | [diff] [blame] | 144 |         glBindTexture(GL_TEXTURE_2D, mTextures[ct]->getTextureID()); | 
| Jason Sams | 3eb28f0 | 2010-01-27 14:41:43 -0800 | [diff] [blame] | 145 |         rsc->checkError("ProgramFragment::setupGL2 tex bind"); | 
| Jason Sams | c460e55 | 2009-11-25 13:22:07 -0800 | [diff] [blame] | 146 |         if (mSamplers[ct].get()) { | 
| Jason Sams | ef21edc | 2010-02-22 15:37:51 -0800 | [diff] [blame] | 147 |             mSamplers[ct]->setupGL(rsc, mTextures[ct]->getType()->getIsNp2()); | 
| Jason Sams | c460e55 | 2009-11-25 13:22:07 -0800 | [diff] [blame] | 148 |         } else { | 
 | 149 |             glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); | 
 | 150 |             glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); | 
 | 151 |             glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); | 
 | 152 |             glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); | 
| Jason Sams | 3eb28f0 | 2010-01-27 14:41:43 -0800 | [diff] [blame] | 153 |             rsc->checkError("ProgramFragment::setupGL2 tex env"); | 
| Jason Sams | c460e55 | 2009-11-25 13:22:07 -0800 | [diff] [blame] | 154 |         } | 
 | 155 |  | 
| Jason Sams | c460e55 | 2009-11-25 13:22:07 -0800 | [diff] [blame] | 156 |         glUniform1i(sc->fragUniformSlot(ct), ct); | 
| Jason Sams | 3eb28f0 | 2010-01-27 14:41:43 -0800 | [diff] [blame] | 157 |         rsc->checkError("ProgramFragment::setupGL2 uniforms"); | 
| Jason Sams | c460e55 | 2009-11-25 13:22:07 -0800 | [diff] [blame] | 158 |     } | 
 | 159 |  | 
 | 160 |     glActiveTexture(GL_TEXTURE0); | 
 | 161 |     mDirty = false; | 
| Jason Sams | 433eca3 | 2010-01-06 11:57:52 -0800 | [diff] [blame] | 162 |     rsc->checkError("ProgramFragment::setupGL2"); | 
| Jason Sams | c460e55 | 2009-11-25 13:22:07 -0800 | [diff] [blame] | 163 | } | 
 | 164 |  | 
| Jason Sams | cd50653 | 2009-12-15 19:10:11 -0800 | [diff] [blame] | 165 | void ProgramFragment::loadShader(Context *rsc) { | 
 | 166 |     Program::loadShader(rsc, GL_FRAGMENT_SHADER); | 
| Jason Sams | c460e55 | 2009-11-25 13:22:07 -0800 | [diff] [blame] | 167 | } | 
 | 168 |  | 
 | 169 | void ProgramFragment::createShader() | 
 | 170 | { | 
 | 171 |     mShader.setTo("precision mediump float;\n"); | 
| Jason Sams | 0002a17 | 2010-08-05 17:38:29 -0700 | [diff] [blame] | 172 |     mShader.append("varying lowp vec4 varColor;\n"); | 
| Jason Sams | c460e55 | 2009-11-25 13:22:07 -0800 | [diff] [blame] | 173 |     mShader.append("varying vec4 varTex0;\n"); | 
| Jason Sams | 6445e52 | 2010-08-04 17:50:20 -0700 | [diff] [blame] | 174 |     mShader.append("uniform vec4 uni_Color;\n"); | 
| Jason Sams | c460e55 | 2009-11-25 13:22:07 -0800 | [diff] [blame] | 175 |  | 
| Jason Sams | f2e4fa2 | 2009-12-15 13:27:04 -0800 | [diff] [blame] | 176 |     if (mUserShader.length() > 1) { | 
 | 177 |         for (uint32_t ct=0; ct < mTextureCount; ct++) { | 
 | 178 |             char buf[256]; | 
 | 179 |             sprintf(buf, "uniform sampler2D uni_Tex%i;\n", ct); | 
| Jason Sams | c460e55 | 2009-11-25 13:22:07 -0800 | [diff] [blame] | 180 |             mShader.append(buf); | 
| Jason Sams | c460e55 | 2009-11-25 13:22:07 -0800 | [diff] [blame] | 181 |         } | 
| Jason Sams | c460e55 | 2009-11-25 13:22:07 -0800 | [diff] [blame] | 182 |  | 
| Jason Sams | f2e4fa2 | 2009-12-15 13:27:04 -0800 | [diff] [blame] | 183 |         mShader.append(mUserShader); | 
 | 184 |     } else { | 
 | 185 |         uint32_t mask = mTextureEnableMask; | 
 | 186 |         uint32_t texNum = 0; | 
 | 187 |         while (mask) { | 
 | 188 |             if (mask & 1) { | 
 | 189 |                 char buf[64]; | 
 | 190 |                 mShader.append("uniform sampler2D uni_Tex"); | 
 | 191 |                 sprintf(buf, "%i", texNum); | 
 | 192 |                 mShader.append(buf); | 
 | 193 |                 mShader.append(";\n"); | 
| Jason Sams | c460e55 | 2009-11-25 13:22:07 -0800 | [diff] [blame] | 194 |             } | 
| Jason Sams | f2e4fa2 | 2009-12-15 13:27:04 -0800 | [diff] [blame] | 195 |             mask >>= 1; | 
 | 196 |             texNum++; | 
| Jason Sams | c460e55 | 2009-11-25 13:22:07 -0800 | [diff] [blame] | 197 |         } | 
| Jason Sams | f2e4fa2 | 2009-12-15 13:27:04 -0800 | [diff] [blame] | 198 |  | 
 | 199 |  | 
 | 200 |         mShader.append("void main() {\n"); | 
| Jason Sams | 6445e52 | 2010-08-04 17:50:20 -0700 | [diff] [blame] | 201 |         if (mVaryingColor) { | 
| Jason Sams | 0002a17 | 2010-08-05 17:38:29 -0700 | [diff] [blame] | 202 |             mShader.append("  lowp vec4 col = varColor;\n"); | 
| Jason Sams | 6445e52 | 2010-08-04 17:50:20 -0700 | [diff] [blame] | 203 |         } else { | 
| Jason Sams | 0002a17 | 2010-08-05 17:38:29 -0700 | [diff] [blame] | 204 |             mShader.append("  lowp vec4 col = uni_Color;\n"); | 
| Jason Sams | 6445e52 | 2010-08-04 17:50:20 -0700 | [diff] [blame] | 205 |         } | 
| Jason Sams | f2e4fa2 | 2009-12-15 13:27:04 -0800 | [diff] [blame] | 206 |  | 
 | 207 |         if (mTextureEnableMask) { | 
 | 208 |             if (mPointSpriteEnable) { | 
| Jason Sams | d01d970 | 2009-12-23 14:35:29 -0800 | [diff] [blame] | 209 |                 mShader.append("  vec2 t0 = gl_PointCoord;\n"); | 
| Jason Sams | f2e4fa2 | 2009-12-15 13:27:04 -0800 | [diff] [blame] | 210 |             } else { | 
| Jason Sams | d01d970 | 2009-12-23 14:35:29 -0800 | [diff] [blame] | 211 |                 mShader.append("  vec2 t0 = varTex0.xy;\n"); | 
| Jason Sams | f2e4fa2 | 2009-12-15 13:27:04 -0800 | [diff] [blame] | 212 |             } | 
 | 213 |         } | 
 | 214 |  | 
 | 215 |         mask = mTextureEnableMask; | 
 | 216 |         texNum = 0; | 
 | 217 |         while (mask) { | 
 | 218 |             if (mask & 1) { | 
 | 219 |                 switch(mEnvModes[texNum]) { | 
| Jason Sams | 7dad9c3 | 2009-12-17 16:55:08 -0800 | [diff] [blame] | 220 |                 case RS_TEX_ENV_MODE_NONE: | 
 | 221 |                     rsAssert(0); | 
 | 222 |                     break; | 
| Jason Sams | f2e4fa2 | 2009-12-15 13:27:04 -0800 | [diff] [blame] | 223 |                 case RS_TEX_ENV_MODE_REPLACE: | 
| Jason Sams | d01d970 | 2009-12-23 14:35:29 -0800 | [diff] [blame] | 224 |                     switch(mTextureFormats[texNum]) { | 
 | 225 |                     case 1: | 
 | 226 |                         mShader.append("  col.a = texture2D(uni_Tex0, t0).a;\n"); | 
 | 227 |                         break; | 
 | 228 |                     case 2: | 
 | 229 |                         mShader.append("  col.rgba = texture2D(uni_Tex0, t0).rgba;\n"); | 
 | 230 |                         break; | 
 | 231 |                     case 3: | 
 | 232 |                         mShader.append("  col.rgb = texture2D(uni_Tex0, t0).rgb;\n"); | 
 | 233 |                         break; | 
 | 234 |                     case 4: | 
 | 235 |                         mShader.append("  col.rgba = texture2D(uni_Tex0, t0).rgba;\n"); | 
 | 236 |                         break; | 
 | 237 |                     } | 
| Jason Sams | f2e4fa2 | 2009-12-15 13:27:04 -0800 | [diff] [blame] | 238 |                     break; | 
 | 239 |                 case RS_TEX_ENV_MODE_MODULATE: | 
| Jason Sams | d01d970 | 2009-12-23 14:35:29 -0800 | [diff] [blame] | 240 |                     switch(mTextureFormats[texNum]) { | 
 | 241 |                     case 1: | 
 | 242 |                         mShader.append("  col.a *= texture2D(uni_Tex0, t0).a;\n"); | 
 | 243 |                         break; | 
 | 244 |                     case 2: | 
 | 245 |                         mShader.append("  col.rgba *= texture2D(uni_Tex0, t0).rgba;\n"); | 
 | 246 |                         break; | 
 | 247 |                     case 3: | 
 | 248 |                         mShader.append("  col.rgb *= texture2D(uni_Tex0, t0).rgb;\n"); | 
 | 249 |                         break; | 
 | 250 |                     case 4: | 
 | 251 |                         mShader.append("  col.rgba *= texture2D(uni_Tex0, t0).rgba;\n"); | 
 | 252 |                         break; | 
 | 253 |                     } | 
| Jason Sams | f2e4fa2 | 2009-12-15 13:27:04 -0800 | [diff] [blame] | 254 |                     break; | 
 | 255 |                 case RS_TEX_ENV_MODE_DECAL: | 
| Jason Sams | d01d970 | 2009-12-23 14:35:29 -0800 | [diff] [blame] | 256 |                     mShader.append("  col = texture2D(uni_Tex0, t0);\n"); | 
| Jason Sams | f2e4fa2 | 2009-12-15 13:27:04 -0800 | [diff] [blame] | 257 |                     break; | 
 | 258 |                 } | 
 | 259 |  | 
 | 260 |             } | 
 | 261 |             mask >>= 1; | 
 | 262 |             texNum++; | 
 | 263 |         } | 
 | 264 |  | 
 | 265 |         //mShader.append("  col.a = 1.0;\n"); | 
 | 266 |         //mShader.append("  col.r = 0.5;\n"); | 
 | 267 |  | 
 | 268 |         mShader.append("  gl_FragColor = col;\n"); | 
 | 269 |         mShader.append("}\n"); | 
| Jason Sams | c460e55 | 2009-11-25 13:22:07 -0800 | [diff] [blame] | 270 |     } | 
| Jason Sams | c460e55 | 2009-11-25 13:22:07 -0800 | [diff] [blame] | 271 | } | 
| Jason Sams | 326e0dd | 2009-05-22 14:03:28 -0700 | [diff] [blame] | 272 |  | 
| Jason Sams | c460e55 | 2009-11-25 13:22:07 -0800 | [diff] [blame] | 273 | void ProgramFragment::init(Context *rsc) | 
 | 274 | { | 
| Jason Sams | c460e55 | 2009-11-25 13:22:07 -0800 | [diff] [blame] | 275 | } | 
| Jason Sams | 326e0dd | 2009-05-22 14:03:28 -0700 | [diff] [blame] | 276 |  | 
| Alex Sakhartchouk | fb6b614 | 2010-05-21 12:53:13 -0700 | [diff] [blame] | 277 | void ProgramFragment::serialize(OStream *stream) const | 
 | 278 | { | 
| Jason Sams | e64c2f1 | 2010-06-22 17:22:13 -0700 | [diff] [blame] | 279 |  | 
| Alex Sakhartchouk | fb6b614 | 2010-05-21 12:53:13 -0700 | [diff] [blame] | 280 | } | 
 | 281 |  | 
 | 282 | ProgramFragment *ProgramFragment::createFromStream(Context *rsc, IStream *stream) | 
 | 283 | { | 
 | 284 |     return NULL; | 
 | 285 | } | 
 | 286 |  | 
| Jason Sams | 326e0dd | 2009-05-22 14:03:28 -0700 | [diff] [blame] | 287 | ProgramFragmentState::ProgramFragmentState() | 
 | 288 | { | 
 | 289 |     mPF = NULL; | 
 | 290 | } | 
 | 291 |  | 
 | 292 | ProgramFragmentState::~ProgramFragmentState() | 
 | 293 | { | 
 | 294 |     delete mPF; | 
 | 295 |  | 
 | 296 | } | 
 | 297 |  | 
| Jason Sams | 771565f | 2010-05-14 15:30:29 -0700 | [diff] [blame] | 298 | void ProgramFragmentState::init(Context *rsc) | 
| Jason Sams | 8ce125b | 2009-06-17 16:52:59 -0700 | [diff] [blame] | 299 | { | 
| Jason Sams | 6445e52 | 2010-08-04 17:50:20 -0700 | [diff] [blame] | 300 |     uint32_t tmp[] = { | 
| Jason Sams | 7dad9c3 | 2009-12-17 16:55:08 -0800 | [diff] [blame] | 301 |         RS_TEX_ENV_MODE_NONE, 0, | 
 | 302 |         RS_TEX_ENV_MODE_NONE, 0, | 
| Jason Sams | 6445e52 | 2010-08-04 17:50:20 -0700 | [diff] [blame] | 303 |         0, 0 | 
| Jason Sams | 7dad9c3 | 2009-12-17 16:55:08 -0800 | [diff] [blame] | 304 |     }; | 
| Jason Sams | 6445e52 | 2010-08-04 17:50:20 -0700 | [diff] [blame] | 305 |     ProgramFragment *pf = new ProgramFragment(rsc, tmp, 6); | 
| Jason Sams | 8ce125b | 2009-06-17 16:52:59 -0700 | [diff] [blame] | 306 |     mDefault.set(pf); | 
| Jason Sams | c460e55 | 2009-11-25 13:22:07 -0800 | [diff] [blame] | 307 |     pf->init(rsc); | 
| Jason Sams | 8ce125b | 2009-06-17 16:52:59 -0700 | [diff] [blame] | 308 | } | 
| Jason Sams | 326e0dd | 2009-05-22 14:03:28 -0700 | [diff] [blame] | 309 |  | 
| Jason Sams | f2649a9 | 2009-09-25 16:37:33 -0700 | [diff] [blame] | 310 | void ProgramFragmentState::deinit(Context *rsc) | 
 | 311 | { | 
 | 312 |     mDefault.clear(); | 
 | 313 |     mLast.clear(); | 
 | 314 | } | 
 | 315 |  | 
| Jason Sams | 326e0dd | 2009-05-22 14:03:28 -0700 | [diff] [blame] | 316 |  | 
 | 317 | namespace android { | 
 | 318 | namespace renderscript { | 
 | 319 |  | 
| Jason Sams | 7dad9c3 | 2009-12-17 16:55:08 -0800 | [diff] [blame] | 320 | RsProgramFragment rsi_ProgramFragmentCreate(Context *rsc, | 
 | 321 |                                             const uint32_t * params, | 
 | 322 |                                             uint32_t paramLength) | 
| Jason Sams | 326e0dd | 2009-05-22 14:03:28 -0700 | [diff] [blame] | 323 | { | 
| Jason Sams | 7dad9c3 | 2009-12-17 16:55:08 -0800 | [diff] [blame] | 324 |     ProgramFragment *pf = new ProgramFragment(rsc, params, paramLength); | 
| Jason Sams | 9397e30 | 2009-08-27 20:23:34 -0700 | [diff] [blame] | 325 |     pf->incUserRef(); | 
| Jason Sams | 5a27917 | 2010-05-17 17:28:12 -0700 | [diff] [blame] | 326 |     //LOGE("rsi_ProgramFragmentCreate %p", pf); | 
| Jason Sams | 326e0dd | 2009-05-22 14:03:28 -0700 | [diff] [blame] | 327 |     return pf; | 
 | 328 | } | 
 | 329 |  | 
| Jason Sams | f2e4fa2 | 2009-12-15 13:27:04 -0800 | [diff] [blame] | 330 | RsProgramFragment rsi_ProgramFragmentCreate2(Context *rsc, const char * shaderText, | 
 | 331 |                              uint32_t shaderLength, const uint32_t * params, | 
 | 332 |                              uint32_t paramLength) | 
 | 333 | { | 
 | 334 |     ProgramFragment *pf = new ProgramFragment(rsc, shaderText, shaderLength, params, paramLength); | 
 | 335 |     pf->incUserRef(); | 
| Jason Sams | 5a27917 | 2010-05-17 17:28:12 -0700 | [diff] [blame] | 336 |     //LOGE("rsi_ProgramFragmentCreate2 %p", pf); | 
| Jason Sams | f2e4fa2 | 2009-12-15 13:27:04 -0800 | [diff] [blame] | 337 |     return pf; | 
 | 338 | } | 
| Jason Sams | 326e0dd | 2009-05-22 14:03:28 -0700 | [diff] [blame] | 339 |  | 
 | 340 | } | 
 | 341 | } | 
 | 342 |  |