Merge "checkpoint animations"
This commit is contained in:
@@ -76,6 +76,7 @@ ifneq ($(TARGET_SIMULATOR),true)
|
||||
LOCAL_SRC_FILES:= \
|
||||
rsAdapter.cpp \
|
||||
rsAllocation.cpp \
|
||||
rsAnimation.cpp \
|
||||
rsComponent.cpp \
|
||||
rsContext.cpp \
|
||||
rsDevice.cpp \
|
||||
|
||||
@@ -30,6 +30,7 @@ extern "C" {
|
||||
typedef void * RsAdapter1D;
|
||||
typedef void * RsAdapter2D;
|
||||
typedef void * RsAllocation;
|
||||
typedef void * RsAnimation;
|
||||
typedef void * RsContext;
|
||||
typedef void * RsDevice;
|
||||
typedef void * RsElement;
|
||||
@@ -205,7 +206,27 @@ enum RsPrimitive {
|
||||
enum RsError {
|
||||
RS_ERROR_NONE,
|
||||
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
|
||||
|
||||
@@ -480,3 +480,13 @@ SimpleMeshBindVertex {
|
||||
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
|
||||
}
|
||||
|
||||
|
||||
@@ -170,6 +170,7 @@ void Allocation::uploadToTexture(const Context *rsc)
|
||||
glGenerateMipmap(GL_TEXTURE_2D);
|
||||
}
|
||||
|
||||
rsc->checkError("Allocation::uploadToTexture");
|
||||
}
|
||||
|
||||
void Allocation::deferedUploadToBufferObject(const Context *rsc)
|
||||
@@ -201,6 +202,7 @@ void Allocation::uploadToBufferObject(const Context *rsc)
|
||||
glBindBuffer(GL_ARRAY_BUFFER, mBufferID);
|
||||
glBufferData(GL_ARRAY_BUFFER, mType->getSizeBytes(), getPtr(), GL_DYNAMIC_DRAW);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||
rsc->checkError("Allocation::uploadToBufferObject");
|
||||
}
|
||||
|
||||
void Allocation::uploadCheck(const Context *rsc)
|
||||
|
||||
134
libs/rs/rsAnimation.cpp
Normal file
134
libs/rs/rsAnimation.cpp
Normal file
@@ -0,0 +1,134 @@
|
||||
/*
|
||||
* 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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
68
libs/rs/rsAnimation.h
Normal file
68
libs/rs/rsAnimation.h
Normal file
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef ANDROID_RS_ANIMATION_H
|
||||
#define ANDROID_RS_ANIMATION_H
|
||||
|
||||
#include "rsUtils.h"
|
||||
#include "rsObjectBase.h"
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
namespace android {
|
||||
namespace renderscript {
|
||||
|
||||
|
||||
class Animation : public ObjectBase
|
||||
{
|
||||
public:
|
||||
~Animation();
|
||||
|
||||
static Animation * create(Context *rsc,
|
||||
const float *inValues, const float *outValues,
|
||||
uint32_t valueCount, RsAnimationInterpolation,
|
||||
RsAnimationEdge pre, RsAnimationEdge post);
|
||||
|
||||
float eval(float) const;
|
||||
|
||||
|
||||
protected:
|
||||
Animation(Context *rsc);
|
||||
|
||||
|
||||
|
||||
float evalInRange(float) const;
|
||||
|
||||
|
||||
|
||||
const float *mValuesInput;
|
||||
const float *mValuesOutput;
|
||||
uint32_t mValueCount;
|
||||
RsAnimationInterpolation mInterpolation;
|
||||
RsAnimationEdge mEdgePre;
|
||||
RsAnimationEdge mEdgePost;
|
||||
|
||||
// derived
|
||||
float mInputMin;
|
||||
float mInputMax;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
#endif //ANDROID_STRUCTURED_ELEMENT_H
|
||||
|
||||
@@ -161,7 +161,7 @@ public:
|
||||
void dumpDebug() const;
|
||||
void checkError(const char *) const;
|
||||
const char * getError(RsError *);
|
||||
void setError(RsError e, const char *msg);
|
||||
void setError(RsError e, const char *msg = NULL);
|
||||
|
||||
mutable const ObjectBase * mObjHead;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user