Loading libs/rs/Android.mk +1 −0 Original line number Original line Diff line number Diff line Loading @@ -76,6 +76,7 @@ ifneq ($(TARGET_SIMULATOR),true) LOCAL_SRC_FILES:= \ LOCAL_SRC_FILES:= \ rsAdapter.cpp \ rsAdapter.cpp \ rsAllocation.cpp \ rsAllocation.cpp \ rsAnimation.cpp \ rsComponent.cpp \ rsComponent.cpp \ rsContext.cpp \ rsContext.cpp \ rsDevice.cpp \ rsDevice.cpp \ Loading libs/rs/RenderScript.h +22 −1 Original line number Original line Diff line number Diff line Loading @@ -30,6 +30,7 @@ extern "C" { typedef void * RsAdapter1D; typedef void * RsAdapter1D; typedef void * RsAdapter2D; typedef void * RsAdapter2D; typedef void * RsAllocation; typedef void * RsAllocation; typedef void * RsAnimation; typedef void * RsContext; typedef void * RsContext; typedef void * RsDevice; typedef void * RsDevice; typedef void * RsElement; typedef void * RsElement; Loading Loading @@ -205,7 +206,27 @@ enum RsPrimitive { enum RsError { enum RsError { RS_ERROR_NONE, RS_ERROR_NONE, RS_ERROR_BAD_SHADER, RS_ERROR_BAD_SHADER, RS_ERROR_BAD_SCRIPT RS_ERROR_BAD_SCRIPT, RS_ERROR_BAD_VALUE, RS_ERROR_OUT_OF_MEMORY }; enum RsAnimationInterpolation { RS_ANIMATION_INTERPOLATION_STEP, RS_ANIMATION_INTERPOLATION_LINEAR, RS_ANIMATION_INTERPOLATION_BEZIER, RS_ANIMATION_INTERPOLATION_CARDINAL, RS_ANIMATION_INTERPOLATION_HERMITE, RS_ANIMATION_INTERPOLATION_BSPLINE }; enum RsAnimationEdge { RS_ANIMATION_EDGE_UNDEFINED, RS_ANIMATION_EDGE_CONSTANT, RS_ANIMATION_EDGE_GRADIENT, RS_ANIMATION_EDGE_CYCLE, RS_ANIMATION_EDGE_OSCILLATE, RS_ANIMATION_EDGE_CYLE_RELATIVE }; }; #ifndef NO_RS_FUNCS #ifndef NO_RS_FUNCS Loading libs/rs/rs.spec +10 −0 Original line number Original line Diff line number Diff line Loading @@ -480,3 +480,13 @@ SimpleMeshBindVertex { param uint32_t slot param uint32_t slot } } AnimationCreate { param const float *inValues param const float *outValues param uint32_t valueCount param RsAnimationInterpolation interp param RsAnimationEdge pre param RsAnimationEdge post ret RsAnimation } libs/rs/rsAllocation.cpp +2 −0 Original line number Original line Diff line number Diff line Loading @@ -170,6 +170,7 @@ void Allocation::uploadToTexture(const Context *rsc) glGenerateMipmap(GL_TEXTURE_2D); glGenerateMipmap(GL_TEXTURE_2D); } } rsc->checkError("Allocation::uploadToTexture"); } } void Allocation::deferedUploadToBufferObject(const Context *rsc) void Allocation::deferedUploadToBufferObject(const Context *rsc) Loading Loading @@ -201,6 +202,7 @@ void Allocation::uploadToBufferObject(const Context *rsc) glBindBuffer(GL_ARRAY_BUFFER, mBufferID); glBindBuffer(GL_ARRAY_BUFFER, mBufferID); glBufferData(GL_ARRAY_BUFFER, mType->getSizeBytes(), getPtr(), GL_DYNAMIC_DRAW); glBufferData(GL_ARRAY_BUFFER, mType->getSizeBytes(), getPtr(), GL_DYNAMIC_DRAW); glBindBuffer(GL_ARRAY_BUFFER, 0); glBindBuffer(GL_ARRAY_BUFFER, 0); rsc->checkError("Allocation::uploadToBufferObject"); } } void Allocation::uploadCheck(const Context *rsc) void Allocation::uploadCheck(const Context *rsc) Loading libs/rs/rsAnimation.cpp 0 → 100644 +134 −0 Original line number Original line Diff line number Diff line /* * Copyright (C) 2009 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "rsContext.h" #include "rsAnimation.h" using namespace android; using namespace android::renderscript; /* Animation::Animation(Context *rsc) : ObjectBase(rsc) { mAllocFile = __FILE__; mAllocLine = __LINE__; mValuesInput = NULL; mValuesOutput = NULL; mValueCount = 0; mInterpolation = RS_ANIMATION_INTERPOLATION_STEP; mEdgePre = RS_ANIMATION_EDGE_UNDEFINED; mEdgePost = RS_ANIMATION_EDGE_UNDEFINED; mInputMin = 0; mInputMax = 0; } Animation * Animation::create(Context *rsc, const float *inValues, const float *outValues, uint32_t valueCount, RsAnimationInterpolation interp, RsAnimationEdge pre, RsAnimationEdge post) { if (valueCount < 2) { rsc->setError(RS_ERROR_BAD_VALUE, "Animations require more than 2 values."); return NULL; } Animation *a = new Animation(rsc); if (!a) { rsc->setError(RS_ERROR_OUT_OF_MEMORY); return NULL; } float *vin = (float *)malloc(valueCount * sizeof(float)); float *vout = (float *)malloc(valueCount * sizeof(float)); a->mValuesInput = vin; a->mValuesOutput = vout; if (a->mValuesInput == NULL || a->mValuesOutput == NULL) { delete a; rsc->setError(RS_ERROR_OUT_OF_MEMORY); return NULL; } a->mEdgePre = pre; a->mEdgePost = post; a->mInterpolation = interp; a->mValueCount = valueCount; memcpy(vin, inValues, valueCount * sizeof(float)); memcpy(vout, outValues, valueCount * sizeof(float)); a->mInputMin = inValues[0]; a->mInputMax = inValues[0]; bool needSort = false; for (uint32_t ct=1; ct < valueCount; ct++) { if (a->mInputMin > vin[ct]) { needSort = true; a->mInputMin = vin[ct]; } if (a->mInputMax < vin[ct]) { a->mInputMax = vin[ct]; } else { needSort = true; } } while (1) { bool changed = false; for (uint32_t ct=1; ct < valueCount; ct++) { if (vin[ct-1] > vin[ct]) { float t = vin[ct-1]; vin[ct-1] = vin[ct]; vin[ct] = t; t = vout[ct-1]; vout[ct-1] = vout[ct]; vout[ct] = t; changed = true; } } if (!changed) break; } return a; } */ ///////////////////////////////////////// // namespace android { namespace renderscript { RsAnimation rsi_AnimationCreate(Context *rsc, const float *inValues, const float *outValues, uint32_t valueCount, RsAnimationInterpolation interp, RsAnimationEdge pre, RsAnimationEdge post) { //LOGE("rsi_ElementCreate %i %i %i %i", dt, dk, norm, vecSize); Animation *a = NULL;//Animation::create(rsc, inValues, outValues, valueCount, interp, pre, post); if (a != NULL) { a->incUserRef(); } return (RsAnimation)a; } } } Loading
libs/rs/Android.mk +1 −0 Original line number Original line Diff line number Diff line Loading @@ -76,6 +76,7 @@ ifneq ($(TARGET_SIMULATOR),true) LOCAL_SRC_FILES:= \ LOCAL_SRC_FILES:= \ rsAdapter.cpp \ rsAdapter.cpp \ rsAllocation.cpp \ rsAllocation.cpp \ rsAnimation.cpp \ rsComponent.cpp \ rsComponent.cpp \ rsContext.cpp \ rsContext.cpp \ rsDevice.cpp \ rsDevice.cpp \ Loading
libs/rs/RenderScript.h +22 −1 Original line number Original line Diff line number Diff line Loading @@ -30,6 +30,7 @@ extern "C" { typedef void * RsAdapter1D; typedef void * RsAdapter1D; typedef void * RsAdapter2D; typedef void * RsAdapter2D; typedef void * RsAllocation; typedef void * RsAllocation; typedef void * RsAnimation; typedef void * RsContext; typedef void * RsContext; typedef void * RsDevice; typedef void * RsDevice; typedef void * RsElement; typedef void * RsElement; Loading Loading @@ -205,7 +206,27 @@ enum RsPrimitive { enum RsError { enum RsError { RS_ERROR_NONE, RS_ERROR_NONE, RS_ERROR_BAD_SHADER, RS_ERROR_BAD_SHADER, RS_ERROR_BAD_SCRIPT RS_ERROR_BAD_SCRIPT, RS_ERROR_BAD_VALUE, RS_ERROR_OUT_OF_MEMORY }; enum RsAnimationInterpolation { RS_ANIMATION_INTERPOLATION_STEP, RS_ANIMATION_INTERPOLATION_LINEAR, RS_ANIMATION_INTERPOLATION_BEZIER, RS_ANIMATION_INTERPOLATION_CARDINAL, RS_ANIMATION_INTERPOLATION_HERMITE, RS_ANIMATION_INTERPOLATION_BSPLINE }; enum RsAnimationEdge { RS_ANIMATION_EDGE_UNDEFINED, RS_ANIMATION_EDGE_CONSTANT, RS_ANIMATION_EDGE_GRADIENT, RS_ANIMATION_EDGE_CYCLE, RS_ANIMATION_EDGE_OSCILLATE, RS_ANIMATION_EDGE_CYLE_RELATIVE }; }; #ifndef NO_RS_FUNCS #ifndef NO_RS_FUNCS Loading
libs/rs/rs.spec +10 −0 Original line number Original line Diff line number Diff line Loading @@ -480,3 +480,13 @@ SimpleMeshBindVertex { param uint32_t slot param uint32_t slot } } AnimationCreate { param const float *inValues param const float *outValues param uint32_t valueCount param RsAnimationInterpolation interp param RsAnimationEdge pre param RsAnimationEdge post ret RsAnimation }
libs/rs/rsAllocation.cpp +2 −0 Original line number Original line Diff line number Diff line Loading @@ -170,6 +170,7 @@ void Allocation::uploadToTexture(const Context *rsc) glGenerateMipmap(GL_TEXTURE_2D); glGenerateMipmap(GL_TEXTURE_2D); } } rsc->checkError("Allocation::uploadToTexture"); } } void Allocation::deferedUploadToBufferObject(const Context *rsc) void Allocation::deferedUploadToBufferObject(const Context *rsc) Loading Loading @@ -201,6 +202,7 @@ void Allocation::uploadToBufferObject(const Context *rsc) glBindBuffer(GL_ARRAY_BUFFER, mBufferID); glBindBuffer(GL_ARRAY_BUFFER, mBufferID); glBufferData(GL_ARRAY_BUFFER, mType->getSizeBytes(), getPtr(), GL_DYNAMIC_DRAW); glBufferData(GL_ARRAY_BUFFER, mType->getSizeBytes(), getPtr(), GL_DYNAMIC_DRAW); glBindBuffer(GL_ARRAY_BUFFER, 0); glBindBuffer(GL_ARRAY_BUFFER, 0); rsc->checkError("Allocation::uploadToBufferObject"); } } void Allocation::uploadCheck(const Context *rsc) void Allocation::uploadCheck(const Context *rsc) Loading
libs/rs/rsAnimation.cpp 0 → 100644 +134 −0 Original line number Original line Diff line number Diff line /* * Copyright (C) 2009 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "rsContext.h" #include "rsAnimation.h" using namespace android; using namespace android::renderscript; /* Animation::Animation(Context *rsc) : ObjectBase(rsc) { mAllocFile = __FILE__; mAllocLine = __LINE__; mValuesInput = NULL; mValuesOutput = NULL; mValueCount = 0; mInterpolation = RS_ANIMATION_INTERPOLATION_STEP; mEdgePre = RS_ANIMATION_EDGE_UNDEFINED; mEdgePost = RS_ANIMATION_EDGE_UNDEFINED; mInputMin = 0; mInputMax = 0; } Animation * Animation::create(Context *rsc, const float *inValues, const float *outValues, uint32_t valueCount, RsAnimationInterpolation interp, RsAnimationEdge pre, RsAnimationEdge post) { if (valueCount < 2) { rsc->setError(RS_ERROR_BAD_VALUE, "Animations require more than 2 values."); return NULL; } Animation *a = new Animation(rsc); if (!a) { rsc->setError(RS_ERROR_OUT_OF_MEMORY); return NULL; } float *vin = (float *)malloc(valueCount * sizeof(float)); float *vout = (float *)malloc(valueCount * sizeof(float)); a->mValuesInput = vin; a->mValuesOutput = vout; if (a->mValuesInput == NULL || a->mValuesOutput == NULL) { delete a; rsc->setError(RS_ERROR_OUT_OF_MEMORY); return NULL; } a->mEdgePre = pre; a->mEdgePost = post; a->mInterpolation = interp; a->mValueCount = valueCount; memcpy(vin, inValues, valueCount * sizeof(float)); memcpy(vout, outValues, valueCount * sizeof(float)); a->mInputMin = inValues[0]; a->mInputMax = inValues[0]; bool needSort = false; for (uint32_t ct=1; ct < valueCount; ct++) { if (a->mInputMin > vin[ct]) { needSort = true; a->mInputMin = vin[ct]; } if (a->mInputMax < vin[ct]) { a->mInputMax = vin[ct]; } else { needSort = true; } } while (1) { bool changed = false; for (uint32_t ct=1; ct < valueCount; ct++) { if (vin[ct-1] > vin[ct]) { float t = vin[ct-1]; vin[ct-1] = vin[ct]; vin[ct] = t; t = vout[ct-1]; vout[ct-1] = vout[ct]; vout[ct] = t; changed = true; } } if (!changed) break; } return a; } */ ///////////////////////////////////////// // namespace android { namespace renderscript { RsAnimation rsi_AnimationCreate(Context *rsc, const float *inValues, const float *outValues, uint32_t valueCount, RsAnimationInterpolation interp, RsAnimationEdge pre, RsAnimationEdge post) { //LOGE("rsi_ElementCreate %i %i %i %i", dt, dk, norm, vecSize); Animation *a = NULL;//Animation::create(rsc, inValues, outValues, valueCount, interp, pre, post); if (a != NULL) { a->incUserRef(); } return (RsAnimation)a; } } }