Merge change 26897 into eclair
* changes: Removed last bits of predefined element types from native code. Predefined types are now constructed at the java layer from standard building blocks.
This commit is contained in:
@@ -90,32 +90,6 @@ enum RsDataKind {
|
|||||||
RS_KIND_POINT_SIZE
|
RS_KIND_POINT_SIZE
|
||||||
};
|
};
|
||||||
|
|
||||||
enum RsElementPredefined {
|
|
||||||
RS_ELEMENT_USER_U8,
|
|
||||||
RS_ELEMENT_USER_I8,
|
|
||||||
RS_ELEMENT_USER_U16,
|
|
||||||
RS_ELEMENT_USER_I16,
|
|
||||||
RS_ELEMENT_USER_U32,
|
|
||||||
RS_ELEMENT_USER_I32,
|
|
||||||
RS_ELEMENT_USER_FLOAT,
|
|
||||||
|
|
||||||
RS_ELEMENT_A_8, // 7
|
|
||||||
RS_ELEMENT_RGB_565, // 8
|
|
||||||
RS_ELEMENT_RGBA_5551, // 9
|
|
||||||
RS_ELEMENT_RGBA_4444, // 10
|
|
||||||
RS_ELEMENT_RGB_888, // 11
|
|
||||||
RS_ELEMENT_RGBA_8888, // 12
|
|
||||||
|
|
||||||
RS_ELEMENT_INDEX_16, //13
|
|
||||||
RS_ELEMENT_INDEX_32,
|
|
||||||
RS_ELEMENT_XY_F32,
|
|
||||||
RS_ELEMENT_XYZ_F32,
|
|
||||||
RS_ELEMENT_ST_XY_F32,
|
|
||||||
RS_ELEMENT_ST_XYZ_F32,
|
|
||||||
RS_ELEMENT_NORM_XYZ_F32,
|
|
||||||
RS_ELEMENT_NORM_ST_XYZ_F32,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum RsSamplerParam {
|
enum RsSamplerParam {
|
||||||
RS_SAMPLER_MIN_FILTER,
|
RS_SAMPLER_MIN_FILTER,
|
||||||
RS_SAMPLER_MAG_FILTER,
|
RS_SAMPLER_MAG_FILTER,
|
||||||
|
|||||||
@@ -55,11 +55,6 @@ ElementCreate {
|
|||||||
ret RsElement
|
ret RsElement
|
||||||
}
|
}
|
||||||
|
|
||||||
ElementGetPredefined {
|
|
||||||
param RsElementPredefined predef
|
|
||||||
ret RsElement
|
|
||||||
}
|
|
||||||
|
|
||||||
TypeBegin {
|
TypeBegin {
|
||||||
param RsElement type
|
param RsElement type
|
||||||
}
|
}
|
||||||
@@ -78,24 +73,12 @@ AllocationCreateTyped {
|
|||||||
ret RsAllocation
|
ret RsAllocation
|
||||||
}
|
}
|
||||||
|
|
||||||
AllocationCreatePredefSized {
|
|
||||||
param RsElementPredefined predef
|
|
||||||
param size_t count
|
|
||||||
ret RsAllocation
|
|
||||||
}
|
|
||||||
|
|
||||||
AllocationCreateSized {
|
AllocationCreateSized {
|
||||||
param RsElement e
|
param RsElement e
|
||||||
param size_t count
|
param size_t count
|
||||||
ret RsAllocation
|
ret RsAllocation
|
||||||
}
|
}
|
||||||
|
|
||||||
AllocationCreateFromFile {
|
|
||||||
param const char *file
|
|
||||||
param bool genMips
|
|
||||||
ret RsAllocation
|
|
||||||
}
|
|
||||||
|
|
||||||
AllocationCreateFromBitmap {
|
AllocationCreateFromBitmap {
|
||||||
param uint32_t width
|
param uint32_t width
|
||||||
param uint32_t height
|
param uint32_t height
|
||||||
|
|||||||
@@ -191,12 +191,6 @@ RsAllocation rsi_AllocationCreateTyped(Context *rsc, RsType vtype)
|
|||||||
return alloc;
|
return alloc;
|
||||||
}
|
}
|
||||||
|
|
||||||
RsAllocation rsi_AllocationCreatePredefSized(Context *rsc, RsElementPredefined t, size_t count)
|
|
||||||
{
|
|
||||||
RsElement e = rsi_ElementGetPredefined(rsc, t);
|
|
||||||
return rsi_AllocationCreateSized(rsc, e, count);
|
|
||||||
}
|
|
||||||
|
|
||||||
RsAllocation rsi_AllocationCreateSized(Context *rsc, RsElement e, size_t count)
|
RsAllocation rsi_AllocationCreateSized(Context *rsc, RsElement e, size_t count)
|
||||||
{
|
{
|
||||||
Type * type = new Type();
|
Type * type = new Type();
|
||||||
@@ -421,116 +415,6 @@ RsAllocation rsi_AllocationCreateFromBitmapBoxed(Context *rsc, uint32_t w, uint3
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
RsAllocation rsi_AllocationCreateFromFile(Context *rsc, const char *file, bool genMips)
|
|
||||||
{
|
|
||||||
bool use32bpp = false;
|
|
||||||
|
|
||||||
typedef struct _Win3xBitmapHeader
|
|
||||||
{
|
|
||||||
uint16_t type;
|
|
||||||
uint32_t totalSize;
|
|
||||||
uint32_t reserved;
|
|
||||||
uint32_t offset;
|
|
||||||
int32_t hdrSize; /* Size of this header in bytes */
|
|
||||||
int32_t width; /* Image width in pixels */
|
|
||||||
int32_t height; /* Image height in pixels */
|
|
||||||
int16_t planes; /* Number of color planes */
|
|
||||||
int16_t bpp; /* Number of bits per pixel */
|
|
||||||
/* Fields added for Windows 3.x follow this line */
|
|
||||||
int32_t compression; /* Compression methods used */
|
|
||||||
int32_t sizeOfBitmap; /* Size of bitmap in bytes */
|
|
||||||
int32_t horzResolution; /* Horizontal resolution in pixels per meter */
|
|
||||||
int32_t vertResolution; /* Vertical resolution in pixels per meter */
|
|
||||||
int32_t colorsUsed; /* Number of colors in the image */
|
|
||||||
int32_t colorsImportant; /* Minimum number of important colors */
|
|
||||||
} __attribute__((__packed__)) WIN3XBITMAPHEADER;
|
|
||||||
|
|
||||||
_Win3xBitmapHeader hdr;
|
|
||||||
|
|
||||||
FILE *f = fopen(file, "rb");
|
|
||||||
if (f == NULL) {
|
|
||||||
LOGE("rsAllocationCreateFromBitmap failed to open file %s", file);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
memset(&hdr, 0, sizeof(hdr));
|
|
||||||
fread(&hdr, sizeof(hdr), 1, f);
|
|
||||||
|
|
||||||
if (hdr.bpp != 24) {
|
|
||||||
LOGE("Unsuported BMP type");
|
|
||||||
fclose(f);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t texWidth = rsHigherPow2(hdr.width);
|
|
||||||
int32_t texHeight = rsHigherPow2(hdr.height);
|
|
||||||
|
|
||||||
if (use32bpp) {
|
|
||||||
rsi_TypeBegin(rsc, rsi_ElementGetPredefined(rsc, RS_ELEMENT_RGBA_8888));
|
|
||||||
} else {
|
|
||||||
rsi_TypeBegin(rsc, rsi_ElementGetPredefined(rsc, RS_ELEMENT_RGB_565));
|
|
||||||
}
|
|
||||||
rsi_TypeAdd(rsc, RS_DIMENSION_X, texWidth);
|
|
||||||
rsi_TypeAdd(rsc, RS_DIMENSION_Y, texHeight);
|
|
||||||
if (genMips) {
|
|
||||||
rsi_TypeAdd(rsc, RS_DIMENSION_LOD, 1);
|
|
||||||
}
|
|
||||||
RsType type = rsi_TypeCreate(rsc);
|
|
||||||
|
|
||||||
RsAllocation vTexAlloc = rsi_AllocationCreateTyped(rsc, type);
|
|
||||||
Allocation *texAlloc = static_cast<Allocation *>(vTexAlloc);
|
|
||||||
texAlloc->incUserRef();
|
|
||||||
if (texAlloc == NULL) {
|
|
||||||
LOGE("Memory allocation failure");
|
|
||||||
fclose(f);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// offset to letterbox if height is not pow2
|
|
||||||
Adapter2D adapt(texAlloc);
|
|
||||||
uint8_t * fileInBuf = new uint8_t[texWidth * 3];
|
|
||||||
uint32_t yOffset = (hdr.width - hdr.height) / 2;
|
|
||||||
|
|
||||||
if (use32bpp) {
|
|
||||||
uint8_t *tmp = static_cast<uint8_t *>(adapt.getElement(0, yOffset));
|
|
||||||
for (int y=0; y < hdr.height; y++) {
|
|
||||||
fseek(f, hdr.offset + (y*hdr.width*3), SEEK_SET);
|
|
||||||
fread(fileInBuf, 1, hdr.width * 3, f);
|
|
||||||
for(int x=0; x < hdr.width; x++) {
|
|
||||||
tmp[0] = fileInBuf[x*3 + 2];
|
|
||||||
tmp[1] = fileInBuf[x*3 + 1];
|
|
||||||
tmp[2] = fileInBuf[x*3];
|
|
||||||
tmp[3] = 0xff;
|
|
||||||
tmp += 4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
uint16_t *tmp = static_cast<uint16_t *>(adapt.getElement(0, yOffset));
|
|
||||||
for (int y=0; y < hdr.height; y++) {
|
|
||||||
fseek(f, hdr.offset + (y*hdr.width*3), SEEK_SET);
|
|
||||||
fread(fileInBuf, 1, hdr.width * 3, f);
|
|
||||||
for(int x=0; x < hdr.width; x++) {
|
|
||||||
*tmp = rs888to565(fileInBuf[x*3 + 2], fileInBuf[x*3 + 1], fileInBuf[x*3]);
|
|
||||||
tmp++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fclose(f);
|
|
||||||
delete [] fileInBuf;
|
|
||||||
|
|
||||||
if (genMips) {
|
|
||||||
Adapter2D adapt2(texAlloc);
|
|
||||||
for(uint32_t lod=0; lod < (texAlloc->getType()->getLODCount() -1); lod++) {
|
|
||||||
adapt.setLOD(lod);
|
|
||||||
adapt2.setLOD(lod + 1);
|
|
||||||
mip(adapt2, adapt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return texAlloc;
|
|
||||||
}
|
|
||||||
|
|
||||||
void rsi_AllocationData(Context *rsc, RsAllocation va, const void *data, uint32_t sizeBytes)
|
void rsi_AllocationData(Context *rsc, RsAllocation va, const void *data, uint32_t sizeBytes)
|
||||||
{
|
{
|
||||||
Allocation *a = static_cast<Allocation *>(va);
|
Allocation *a = static_cast<Allocation *>(va);
|
||||||
|
|||||||
@@ -21,170 +21,6 @@
|
|||||||
using namespace android;
|
using namespace android;
|
||||||
using namespace android::renderscript;
|
using namespace android::renderscript;
|
||||||
|
|
||||||
void ElementState::initPredefined()
|
|
||||||
{
|
|
||||||
Component * u_8 = new Component(Component::USER, Component::UNSIGNED, true, 8, 0);
|
|
||||||
Component * i_8 = new Component(Component::USER, Component::SIGNED, true, 8, 0);
|
|
||||||
Component * u_16 = new Component(Component::USER, Component::UNSIGNED, true, 16, 0);
|
|
||||||
Component * i_16 = new Component(Component::USER, Component::SIGNED, true, 16, 0);
|
|
||||||
Component * u_32 = new Component(Component::USER, Component::UNSIGNED, true, 32, 0);
|
|
||||||
Component * i_32 = new Component(Component::USER, Component::SIGNED, true, 32, 0);
|
|
||||||
Component * f_32 = new Component(Component::USER, Component::FLOAT, true, 32, 0);
|
|
||||||
|
|
||||||
|
|
||||||
Component * r_4 = new Component(Component::RED, Component::UNSIGNED, true, 4, 0);
|
|
||||||
Component * r_5 = new Component(Component::RED, Component::UNSIGNED, true, 5, 0);
|
|
||||||
Component * r_8 = new Component(Component::RED, Component::UNSIGNED, true, 8, 0);
|
|
||||||
|
|
||||||
Component * g_4 = new Component(Component::GREEN, Component::UNSIGNED, true, 4, 0);
|
|
||||||
Component * g_5 = new Component(Component::GREEN, Component::UNSIGNED, true, 5, 0);
|
|
||||||
Component * g_6 = new Component(Component::GREEN, Component::UNSIGNED, true, 6, 0);
|
|
||||||
Component * g_8 = new Component(Component::GREEN, Component::UNSIGNED, true, 8, 0);
|
|
||||||
|
|
||||||
Component * b_4 = new Component(Component::BLUE, Component::UNSIGNED, true, 4, 0);
|
|
||||||
Component * b_5 = new Component(Component::BLUE, Component::UNSIGNED, true, 5, 0);
|
|
||||||
Component * b_8 = new Component(Component::BLUE, Component::UNSIGNED, true, 8, 0);
|
|
||||||
|
|
||||||
Component * a_1 = new Component(Component::ALPHA, Component::UNSIGNED, true, 1, 0);
|
|
||||||
Component * a_4 = new Component(Component::ALPHA, Component::UNSIGNED, true, 4, 0);
|
|
||||||
Component * a_8 = new Component(Component::ALPHA, Component::UNSIGNED, true, 8, 0);
|
|
||||||
|
|
||||||
Component * idx_16 = new Component(Component::INDEX, Component::UNSIGNED, false, 16, 0);
|
|
||||||
Component * idx_32 = new Component(Component::INDEX, Component::UNSIGNED, false, 32, 0);
|
|
||||||
|
|
||||||
Component * x = new Component(Component::X, Component::FLOAT, false, 32, 0);
|
|
||||||
Component * y = new Component(Component::Y, Component::FLOAT, false, 32, 0);
|
|
||||||
Component * z = new Component(Component::Z, Component::FLOAT, false, 32, 0);
|
|
||||||
|
|
||||||
Component * nx = new Component(Component::NX, Component::FLOAT, false, 32, 0);
|
|
||||||
Component * ny = new Component(Component::NY, Component::FLOAT, false, 32, 0);
|
|
||||||
Component * nz = new Component(Component::NZ, Component::FLOAT, false, 32, 0);
|
|
||||||
|
|
||||||
Component * s = new Component(Component::S, Component::FLOAT, false, 32, 0);
|
|
||||||
Component * t = new Component(Component::T, Component::FLOAT, false, 32, 0);
|
|
||||||
|
|
||||||
Element * e;
|
|
||||||
|
|
||||||
e = new Element(1);
|
|
||||||
e->setComponent(0, u_8);
|
|
||||||
mPredefinedList.add(Predefined(RS_ELEMENT_USER_U8, e));
|
|
||||||
|
|
||||||
e = new Element(1);
|
|
||||||
e->setComponent(0, i_8);
|
|
||||||
mPredefinedList.add(Predefined(RS_ELEMENT_USER_I8, e));
|
|
||||||
|
|
||||||
e = new Element(1);
|
|
||||||
e->setComponent(0, u_16);
|
|
||||||
mPredefinedList.add(Predefined(RS_ELEMENT_USER_U16, e));
|
|
||||||
|
|
||||||
e = new Element(1);
|
|
||||||
e->setComponent(0, i_16);
|
|
||||||
mPredefinedList.add(Predefined(RS_ELEMENT_USER_I16, e));
|
|
||||||
|
|
||||||
e = new Element(1);
|
|
||||||
e->setComponent(0, u_32);
|
|
||||||
mPredefinedList.add(Predefined(RS_ELEMENT_USER_U32, e));
|
|
||||||
|
|
||||||
e = new Element(1);
|
|
||||||
e->setComponent(0, i_32);
|
|
||||||
mPredefinedList.add(Predefined(RS_ELEMENT_USER_I32, e));
|
|
||||||
|
|
||||||
e = new Element(1);
|
|
||||||
e->setComponent(0, f_32);
|
|
||||||
mPredefinedList.add(Predefined(RS_ELEMENT_USER_FLOAT, e));
|
|
||||||
|
|
||||||
e = new Element(1);
|
|
||||||
e->setComponent(0, a_8);
|
|
||||||
mPredefinedList.add(Predefined(RS_ELEMENT_A_8, e));
|
|
||||||
|
|
||||||
e = new Element(3);
|
|
||||||
e->setComponent(0, r_5);
|
|
||||||
e->setComponent(1, g_6);
|
|
||||||
e->setComponent(2, b_5);
|
|
||||||
mPredefinedList.add(Predefined(RS_ELEMENT_RGB_565, e));
|
|
||||||
|
|
||||||
e = new Element(4);
|
|
||||||
e->setComponent(0, r_5);
|
|
||||||
e->setComponent(1, g_5);
|
|
||||||
e->setComponent(2, b_5);
|
|
||||||
e->setComponent(3, a_1);
|
|
||||||
mPredefinedList.add(Predefined(RS_ELEMENT_RGBA_5551, e));
|
|
||||||
|
|
||||||
e = new Element(4);
|
|
||||||
e->setComponent(0, r_4);
|
|
||||||
e->setComponent(1, g_4);
|
|
||||||
e->setComponent(2, b_4);
|
|
||||||
e->setComponent(3, a_4);
|
|
||||||
mPredefinedList.add(Predefined(RS_ELEMENT_RGBA_4444, e));
|
|
||||||
|
|
||||||
e = new Element(3);
|
|
||||||
e->setComponent(0, r_8);
|
|
||||||
e->setComponent(1, g_8);
|
|
||||||
e->setComponent(2, b_8);
|
|
||||||
mPredefinedList.add(Predefined(RS_ELEMENT_RGB_888, e));
|
|
||||||
|
|
||||||
e = new Element(4);
|
|
||||||
e->setComponent(0, r_8);
|
|
||||||
e->setComponent(1, g_8);
|
|
||||||
e->setComponent(2, b_8);
|
|
||||||
e->setComponent(3, a_8);
|
|
||||||
mPredefinedList.add(Predefined(RS_ELEMENT_RGBA_8888, e));
|
|
||||||
|
|
||||||
e = new Element(1);
|
|
||||||
e->setComponent(0, idx_16);
|
|
||||||
mPredefinedList.add(Predefined(RS_ELEMENT_INDEX_16, e));
|
|
||||||
|
|
||||||
e = new Element(1);
|
|
||||||
e->setComponent(0, idx_32);
|
|
||||||
mPredefinedList.add(Predefined(RS_ELEMENT_INDEX_32, e));
|
|
||||||
|
|
||||||
e = new Element(2);
|
|
||||||
e->setComponent(0, x);
|
|
||||||
e->setComponent(1, y);
|
|
||||||
mPredefinedList.add(Predefined(RS_ELEMENT_XY_F32, e));
|
|
||||||
|
|
||||||
e = new Element(3);
|
|
||||||
e->setComponent(0, x);
|
|
||||||
e->setComponent(1, y);
|
|
||||||
e->setComponent(2, z);
|
|
||||||
mPredefinedList.add(Predefined(RS_ELEMENT_XYZ_F32, e));
|
|
||||||
|
|
||||||
e = new Element(4);
|
|
||||||
e->setComponent(0, s);
|
|
||||||
e->setComponent(1, t);
|
|
||||||
e->setComponent(2, x);
|
|
||||||
e->setComponent(3, y);
|
|
||||||
mPredefinedList.add(Predefined(RS_ELEMENT_ST_XY_F32, e));
|
|
||||||
|
|
||||||
e = new Element(5);
|
|
||||||
e->setComponent(0, s);
|
|
||||||
e->setComponent(1, t);
|
|
||||||
e->setComponent(2, x);
|
|
||||||
e->setComponent(3, y);
|
|
||||||
e->setComponent(4, z);
|
|
||||||
mPredefinedList.add(Predefined(RS_ELEMENT_ST_XYZ_F32, e));
|
|
||||||
|
|
||||||
e = new Element(6);
|
|
||||||
e->setComponent(0, nx);
|
|
||||||
e->setComponent(1, ny);
|
|
||||||
e->setComponent(2, nz);
|
|
||||||
e->setComponent(3, x);
|
|
||||||
e->setComponent(4, y);
|
|
||||||
e->setComponent(5, z);
|
|
||||||
mPredefinedList.add(Predefined(RS_ELEMENT_NORM_XYZ_F32, e));
|
|
||||||
|
|
||||||
e = new Element(8);
|
|
||||||
e->setComponent(0, nx);
|
|
||||||
e->setComponent(1, ny);
|
|
||||||
e->setComponent(2, nz);
|
|
||||||
e->setComponent(3, s);
|
|
||||||
e->setComponent(4, t);
|
|
||||||
e->setComponent(5, x);
|
|
||||||
e->setComponent(6, y);
|
|
||||||
e->setComponent(7, z);
|
|
||||||
mPredefinedList.add(Predefined(RS_ELEMENT_NORM_ST_XYZ_F32, e));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Element::Element()
|
Element::Element()
|
||||||
{
|
{
|
||||||
@@ -358,39 +194,6 @@ void rsi_ElementBegin(Context *rsc)
|
|||||||
rsc->mStateElement.mComponentBuildList.clear();
|
rsc->mStateElement.mComponentBuildList.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void rsi_ElementAddPredefined(Context *rsc, RsElementPredefined predef)
|
|
||||||
{
|
|
||||||
ElementState * sec = &rsc->mStateElement;
|
|
||||||
|
|
||||||
RsElement ve = rsi_ElementGetPredefined(rsc, predef);
|
|
||||||
const Element *e = static_cast<const Element *>(ve);
|
|
||||||
|
|
||||||
for(size_t ct = 0; ct < sec->mPredefinedList[predef].mElement->getComponentCount(); ct++) {
|
|
||||||
sec->mComponentBuildList.add(sec->mPredefinedList[predef].mElement->getComponent(ct));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
RsElement rsi_ElementGetPredefined(Context *rsc, RsElementPredefined predef)
|
|
||||||
{
|
|
||||||
ElementState * sec = &rsc->mStateElement;
|
|
||||||
|
|
||||||
if (!sec->mPredefinedList.size()) {
|
|
||||||
sec->initPredefined();
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((predef < 0) ||
|
|
||||||
(static_cast<uint32_t>(predef) >= sec->mPredefinedList.size())) {
|
|
||||||
LOGE("rsElementGetPredefined: Request for bad predefined type");
|
|
||||||
// error
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
rsAssert(sec->mPredefinedList[predef].mEnum == predef);
|
|
||||||
Element * e = sec->mPredefinedList[predef].mElement;
|
|
||||||
e->incUserRef();
|
|
||||||
return e;
|
|
||||||
}
|
|
||||||
|
|
||||||
void rsi_ElementAdd(Context *rsc, RsDataKind dk, RsDataType dt, bool isNormalized, size_t bits, const char *name)
|
void rsi_ElementAdd(Context *rsc, RsDataKind dk, RsDataType dt, bool isNormalized, size_t bits, const char *name)
|
||||||
{
|
{
|
||||||
ElementState * sec = &rsc->mStateElement;
|
ElementState * sec = &rsc->mStateElement;
|
||||||
|
|||||||
@@ -69,24 +69,6 @@ public:
|
|||||||
~ElementState();
|
~ElementState();
|
||||||
|
|
||||||
Vector<Component *> mComponentBuildList;
|
Vector<Component *> mComponentBuildList;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
struct Predefined {
|
|
||||||
Predefined() {
|
|
||||||
mElement = NULL;
|
|
||||||
}
|
|
||||||
Predefined(RsElementPredefined en, Element *e) {
|
|
||||||
mEnum = en;
|
|
||||||
mElement = e;
|
|
||||||
}
|
|
||||||
RsElementPredefined mEnum;
|
|
||||||
Element * mElement;
|
|
||||||
};
|
|
||||||
Vector<Predefined> mPredefinedList;
|
|
||||||
|
|
||||||
void initPredefined();
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -133,9 +133,16 @@ ProgramVertexState::~ProgramVertexState()
|
|||||||
|
|
||||||
void ProgramVertexState::init(Context *rsc, int32_t w, int32_t h)
|
void ProgramVertexState::init(Context *rsc, int32_t w, int32_t h)
|
||||||
{
|
{
|
||||||
|
rsi_ElementBegin(rsc);
|
||||||
|
rsi_ElementAdd(rsc, RS_KIND_USER, RS_TYPE_FLOAT, false, 32, NULL);
|
||||||
|
RsElement e = rsi_ElementCreate(rsc);
|
||||||
|
|
||||||
|
rsi_TypeBegin(rsc, e);
|
||||||
|
rsi_TypeAdd(rsc, RS_DIMENSION_X, 48);
|
||||||
|
mAllocType = rsi_TypeCreate(rsc);
|
||||||
|
|
||||||
ProgramVertex *pv = new ProgramVertex(NULL, NULL);
|
ProgramVertex *pv = new ProgramVertex(NULL, NULL);
|
||||||
Allocation *alloc = (Allocation *)
|
Allocation *alloc = (Allocation *)rsi_AllocationCreateTyped(rsc, mAllocType);
|
||||||
rsi_AllocationCreatePredefSized(rsc, RS_ELEMENT_USER_FLOAT, 48);
|
|
||||||
mDefaultAlloc.set(alloc);
|
mDefaultAlloc.set(alloc);
|
||||||
mDefault.set(pv);
|
mDefault.set(pv);
|
||||||
|
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ public:
|
|||||||
ObjectBaseRef<ProgramVertex> mLast;
|
ObjectBaseRef<ProgramVertex> mLast;
|
||||||
ObjectBaseRef<Allocation> mDefaultAlloc;
|
ObjectBaseRef<Allocation> mDefaultAlloc;
|
||||||
|
|
||||||
|
RsType mAllocType;
|
||||||
|
|
||||||
ProgramVertex *mPV;
|
ProgramVertex *mPV;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user