Merge "Move ImageProcessing and ModelViewer to reflected files. Implement boolean support."
This commit is contained in:
@@ -47,20 +47,22 @@ public class Element extends BaseObj {
|
||||
UNSIGNED_32 (10, 4),
|
||||
//UNSIGNED_64 (11, 8),
|
||||
|
||||
UNSIGNED_5_6_5 (12, 2),
|
||||
UNSIGNED_5_5_5_1 (13, 2),
|
||||
UNSIGNED_4_4_4_4 (14, 2),
|
||||
BOOLEAN(12, 1),
|
||||
|
||||
RS_ELEMENT (15, 4),
|
||||
RS_TYPE (16, 4),
|
||||
RS_ALLOCATION (17, 4),
|
||||
RS_SAMPLER (18, 4),
|
||||
RS_SCRIPT (19, 4),
|
||||
RS_MESH (20, 4),
|
||||
RS_PROGRAM_FRAGMENT (21, 4),
|
||||
RS_PROGRAM_VERTEX (22, 4),
|
||||
RS_PROGRAM_RASTER (23, 4),
|
||||
RS_PROGRAM_STORE (24, 4);
|
||||
UNSIGNED_5_6_5 (13, 2),
|
||||
UNSIGNED_5_5_5_1 (14, 2),
|
||||
UNSIGNED_4_4_4_4 (15, 2),
|
||||
|
||||
RS_ELEMENT (16, 4),
|
||||
RS_TYPE (17, 4),
|
||||
RS_ALLOCATION (18, 4),
|
||||
RS_SAMPLER (19, 4),
|
||||
RS_SCRIPT (20, 4),
|
||||
RS_MESH (21, 4),
|
||||
RS_PROGRAM_FRAGMENT (22, 4),
|
||||
RS_PROGRAM_VERTEX (23, 4),
|
||||
RS_PROGRAM_RASTER (24, 4),
|
||||
RS_PROGRAM_STORE (25, 4);
|
||||
|
||||
int mID;
|
||||
int mSize;
|
||||
@@ -85,6 +87,13 @@ public class Element extends BaseObj {
|
||||
}
|
||||
}
|
||||
|
||||
public static Element BOOLEAN(RenderScript rs) {
|
||||
if(rs.mElement_BOOLEAN == null) {
|
||||
rs.mElement_BOOLEAN = createUser(rs, DataType.BOOLEAN);
|
||||
}
|
||||
return rs.mElement_BOOLEAN;
|
||||
}
|
||||
|
||||
public static Element U8(RenderScript rs) {
|
||||
if(rs.mElement_U8 == null) {
|
||||
rs.mElement_U8 = createUser(rs, DataType.UNSIGNED_8);
|
||||
|
||||
@@ -244,6 +244,10 @@ public class FieldPacker {
|
||||
addU32(v.w);
|
||||
}
|
||||
|
||||
public void addBoolean(Boolean v) {
|
||||
addI8(v ? 1 : 0);
|
||||
}
|
||||
|
||||
public final byte[] getData() {
|
||||
return mData;
|
||||
}
|
||||
|
||||
@@ -204,6 +204,7 @@ public class RenderScript {
|
||||
Element mElement_U32;
|
||||
Element mElement_I32;
|
||||
Element mElement_F32;
|
||||
Element mElement_BOOLEAN;
|
||||
|
||||
Element mElement_ELEMENT;
|
||||
Element mElement_TYPE;
|
||||
|
||||
@@ -85,6 +85,8 @@ enum RsDataType {
|
||||
RS_TYPE_UNSIGNED_32,
|
||||
RS_TYPE_UNSIGNED_64,
|
||||
|
||||
RS_TYPE_BOOLEAN,
|
||||
|
||||
RS_TYPE_UNSIGNED_5_6_5,
|
||||
RS_TYPE_UNSIGNED_5_5_5_1,
|
||||
RS_TYPE_UNSIGNED_4_4_4_4,
|
||||
|
||||
@@ -10,13 +10,9 @@ int height;
|
||||
int width;
|
||||
int radius;
|
||||
|
||||
typedef struct c4u_s {
|
||||
uint8_t r, g, b, a;
|
||||
} c4u_t;
|
||||
|
||||
c4u_t * InPixel;
|
||||
c4u_t * OutPixel;
|
||||
c4u_t * ScratchPixel;
|
||||
uchar4 * InPixel;
|
||||
uchar4 * OutPixel;
|
||||
uchar4 * ScratchPixel;
|
||||
|
||||
float inBlack;
|
||||
float outBlack;
|
||||
@@ -31,7 +27,7 @@ static float outWMinOutB;
|
||||
static float overInWMinInB;
|
||||
//static float3 gammaV;
|
||||
|
||||
#pragma rs export_var(height, width, radius, InPixel, OutPixel, ScratchPixel, inBlack, outBlack, inWhite, outWhite, gamma, saturation)
|
||||
#pragma rs export_var(height, width, radius, InPixel, OutPixel, ScratchPixel, inBlack, outBlack, inWhite, outWhite, gamma, saturation, InPixel, OutPixel, ScratchPixel)
|
||||
#pragma rs export_func(filter, filterBenchmark);
|
||||
|
||||
// Store our coefficients here
|
||||
@@ -166,19 +162,21 @@ static void processNoBlur() {
|
||||
|
||||
for(h = 0; h < height; h ++) {
|
||||
for(w = 0; w < width; w ++) {
|
||||
c4u_t *input = InPixel + h*width + w;
|
||||
uchar4 *input = InPixel + h*width + w;
|
||||
|
||||
currentPixel.x = (float)(input->r);
|
||||
currentPixel.y = (float)(input->g);
|
||||
currentPixel.z = (float)(input->b);
|
||||
//currentPixel.xyz = convert_float3(input.xyz);
|
||||
currentPixel.x = (float)(input->x);
|
||||
currentPixel.y = (float)(input->y);
|
||||
currentPixel.z = (float)(input->z);
|
||||
|
||||
currentPixel = levelsSaturation(currentPixel);
|
||||
|
||||
c4u_t *output = OutPixel + h*width + w;
|
||||
output->r = (uint8_t)currentPixel.x;
|
||||
output->g = (uint8_t)currentPixel.y;
|
||||
output->b = (uint8_t)currentPixel.z;
|
||||
output->a = input->a;
|
||||
uchar4 *output = OutPixel + h*width + w;
|
||||
//output.xyz = convert_uchar3(currentPixel.xyz);
|
||||
output->x = (uint8_t)currentPixel.x;
|
||||
output->y = (uint8_t)currentPixel.y;
|
||||
output->z = (uint8_t)currentPixel.z;
|
||||
output->w = input->w;
|
||||
}
|
||||
}
|
||||
rsSendToClient(&count, 1, 4, 0);
|
||||
@@ -205,21 +203,21 @@ static void horizontalBlur() {
|
||||
validW = width - 1;
|
||||
}
|
||||
|
||||
c4u_t *input = InPixel + h*width + validW;
|
||||
uchar4 *input = InPixel + h*width + validW;
|
||||
|
||||
float weight = gaussian[r + radius];
|
||||
currentPixel.x = (float)(input->r);
|
||||
currentPixel.y = (float)(input->g);
|
||||
currentPixel.z = (float)(input->b);
|
||||
currentPixel.x = (float)(input->x);
|
||||
currentPixel.y = (float)(input->y);
|
||||
currentPixel.z = (float)(input->z);
|
||||
//currentPixel.w = (float)(input->a);
|
||||
|
||||
blurredPixel += currentPixel*weight;
|
||||
}
|
||||
|
||||
c4u_t *output = ScratchPixel + h*width + w;
|
||||
output->r = (uint8_t)blurredPixel.x;
|
||||
output->g = (uint8_t)blurredPixel.y;
|
||||
output->b = (uint8_t)blurredPixel.z;
|
||||
uchar4 *output = ScratchPixel + h*width + w;
|
||||
output->x = (uint8_t)blurredPixel.x;
|
||||
output->y = (uint8_t)blurredPixel.y;
|
||||
output->z = (uint8_t)blurredPixel.z;
|
||||
//output->a = (uint8_t)blurredPixel.w;
|
||||
}
|
||||
}
|
||||
@@ -246,12 +244,12 @@ static void horizontalBlurLevels() {
|
||||
validW = width - 1;
|
||||
}
|
||||
|
||||
c4u_t *input = InPixel + h*width + validW;
|
||||
uchar4 *input = InPixel + h*width + validW;
|
||||
|
||||
float weight = gaussian[r + radius];
|
||||
currentPixel.x = (float)(input->r);
|
||||
currentPixel.y = (float)(input->g);
|
||||
currentPixel.z = (float)(input->b);
|
||||
currentPixel.x = (float)(input->x);
|
||||
currentPixel.y = (float)(input->y);
|
||||
currentPixel.z = (float)(input->z);
|
||||
//currentPixel.w = (float)(input->a);
|
||||
|
||||
blurredPixel += currentPixel*weight;
|
||||
@@ -259,10 +257,10 @@ static void horizontalBlurLevels() {
|
||||
|
||||
blurredPixel = levelsSaturation(blurredPixel);
|
||||
|
||||
c4u_t *output = ScratchPixel + h*width + w;
|
||||
output->r = (uint8_t)blurredPixel.x;
|
||||
output->g = (uint8_t)blurredPixel.y;
|
||||
output->b = (uint8_t)blurredPixel.z;
|
||||
uchar4 *output = ScratchPixel + h*width + w;
|
||||
output->x = (uint8_t)blurredPixel.x;
|
||||
output->y = (uint8_t)blurredPixel.y;
|
||||
output->z = (uint8_t)blurredPixel.z;
|
||||
//output->a = (uint8_t)blurredPixel.w;
|
||||
}
|
||||
}
|
||||
@@ -287,23 +285,23 @@ static void verticalBlur() {
|
||||
validH = height - 1;
|
||||
}
|
||||
|
||||
c4u_t *input = ScratchPixel + validH*width + w;
|
||||
uchar4 *input = ScratchPixel + validH*width + w;
|
||||
|
||||
float weight = gaussian[r + radius];
|
||||
|
||||
currentPixel.x = (float)(input->r);
|
||||
currentPixel.y = (float)(input->g);
|
||||
currentPixel.z = (float)(input->b);
|
||||
currentPixel.x = (float)(input->x);
|
||||
currentPixel.y = (float)(input->y);
|
||||
currentPixel.z = (float)(input->z);
|
||||
//currentPixel.w = (float)(input->a);
|
||||
|
||||
blurredPixel += currentPixel*weight;
|
||||
}
|
||||
|
||||
c4u_t *output = OutPixel + h*width + w;
|
||||
uchar4 *output = OutPixel + h*width + w;
|
||||
|
||||
output->r = (uint8_t)blurredPixel.x;
|
||||
output->g = (uint8_t)blurredPixel.y;
|
||||
output->b = (uint8_t)blurredPixel.z;
|
||||
output->x = (uint8_t)blurredPixel.x;
|
||||
output->y = (uint8_t)blurredPixel.y;
|
||||
output->z = (uint8_t)blurredPixel.z;
|
||||
//output->a = (uint8_t)blurredPixel.w;
|
||||
}
|
||||
}
|
||||
|
||||
Binary file not shown.
@@ -285,7 +285,7 @@ public class ImageProcessingActivity extends Activity
|
||||
|
||||
long t = java.lang.System.currentTimeMillis();
|
||||
if (true) {
|
||||
mScript.invokable_Filter();
|
||||
mScript.invoke_filter();
|
||||
mRS.finish();
|
||||
} else {
|
||||
javaFilter();
|
||||
@@ -355,7 +355,7 @@ public class ImageProcessingActivity extends Activity
|
||||
|
||||
public void surfaceCreated(SurfaceHolder holder) {
|
||||
createScript();
|
||||
mScript.invokable_Filter();
|
||||
mScript.invoke_filter();
|
||||
mRS.finish();
|
||||
}
|
||||
|
||||
@@ -373,7 +373,7 @@ public class ImageProcessingActivity extends Activity
|
||||
mOutPixelsAllocation = Allocation.createBitmapRef(mRS, mBitmapOut);
|
||||
mScratchPixelsAllocation = Allocation.createBitmapRef(mRS, mBitmapScratch);
|
||||
|
||||
mScript = new ScriptC_Threshold(mRS, getResources(), false);
|
||||
mScript = new ScriptC_Threshold(mRS, getResources(), R.raw.threshold_bc, false);
|
||||
mScript.set_width(mBitmapIn.getWidth());
|
||||
mScript.set_height(mBitmapIn.getHeight());
|
||||
mScript.set_radius(mRadius);
|
||||
@@ -413,7 +413,7 @@ public class ImageProcessingActivity extends Activity
|
||||
|
||||
long t = java.lang.System.currentTimeMillis();
|
||||
|
||||
mScript.invokable_FilterBenchmark();
|
||||
mScript.invoke_filterBenchmark();
|
||||
mRS.finish();
|
||||
|
||||
t = java.lang.System.currentTimeMillis() - t;
|
||||
@@ -426,7 +426,7 @@ public class ImageProcessingActivity extends Activity
|
||||
mRadius = oldRadius;
|
||||
mScript.set_radius(mRadius);
|
||||
|
||||
mScript.invokable_Filter();
|
||||
mScript.invoke_filter();
|
||||
mRS.finish();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,115 +1,175 @@
|
||||
/*
|
||||
* Copyright (C) 2010 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.
|
||||
*/
|
||||
|
||||
package com.android.rs.image;
|
||||
|
||||
import android.content.res.Resources;
|
||||
import android.renderscript.*;
|
||||
import android.content.res.Resources;
|
||||
import android.util.Log;
|
||||
|
||||
public class ScriptC_Threshold
|
||||
extends android.renderscript.ScriptC
|
||||
{
|
||||
private final static int mFieldIndex_height = 0;
|
||||
private final static int mFieldIndex_width = 1;
|
||||
private final static int mFieldIndex_radius = 2;
|
||||
private final static int mFieldIndex_InPixel = 3;
|
||||
private final static int mFieldIndex_OutPixel = 4;
|
||||
private final static int mFieldIndex_ScratchPixel = 5;
|
||||
|
||||
private final static int mFieldIndex_inBlack = 6;
|
||||
private final static int mFieldIndex_outBlack = 7;
|
||||
private final static int mFieldIndex_inWhite = 8;
|
||||
private final static int mFieldIndex_outWhite = 9;
|
||||
private final static int mFieldIndex_gamma = 10;
|
||||
|
||||
private final static int mFieldIndex_saturation = 11;
|
||||
private final static int mFieldIndex_hue = 12;
|
||||
|
||||
private Allocation mField_InPixel;
|
||||
private Allocation mField_OutPixel;
|
||||
private Allocation mField_ScratchPixel;
|
||||
|
||||
public ScriptC_Threshold(RenderScript rs, Resources resources, boolean isRoot) {
|
||||
super(rs, resources, R.raw.threshold_bc, isRoot);
|
||||
}
|
||||
|
||||
public void bind_InPixel(Allocation f) {
|
||||
if (f != null) {
|
||||
//if (f.getType().getElement() != Element.ATTRIB_COLOR_U8_4(mRS)) {
|
||||
//throw new IllegalArgumentException("Element type mismatch.");
|
||||
//}
|
||||
}
|
||||
bindAllocation(f, mFieldIndex_InPixel);
|
||||
mField_InPixel = f;
|
||||
}
|
||||
public Allocation get_InPixel() {
|
||||
return mField_InPixel;
|
||||
}
|
||||
|
||||
public void bind_OutPixel(Allocation f) {
|
||||
if (f != null) {
|
||||
//if (f.getType().getElement() != Element.ATTRIB_COLOR_U8_4(mRS)) {
|
||||
//throw new IllegalArgumentException("Element type mismatch.");
|
||||
//}
|
||||
}
|
||||
bindAllocation(f, mFieldIndex_OutPixel);
|
||||
mField_OutPixel = f;
|
||||
}
|
||||
public void bind_ScratchPixel(Allocation f) {
|
||||
if (f != null) {
|
||||
//if (f.getType().getElement() != Element.ATTRIB_COLOR_U8_4(mRS)) {
|
||||
//throw new IllegalArgumentException("Element type mismatch.");
|
||||
//}
|
||||
}
|
||||
bindAllocation(f, mFieldIndex_ScratchPixel);
|
||||
mField_ScratchPixel = f;
|
||||
}
|
||||
public Allocation get_OutPixel() {
|
||||
return mField_OutPixel;
|
||||
public class ScriptC_Threshold extends ScriptC {
|
||||
// Constructor
|
||||
public ScriptC_Threshold(RenderScript rs, Resources resources, int id, boolean isRoot) {
|
||||
super(rs, resources, id, isRoot);
|
||||
}
|
||||
|
||||
private final static int mExportVarIdx_height = 0;
|
||||
private int mExportVar_height;
|
||||
public void set_height(int v) {
|
||||
setVar(mFieldIndex_height, v);
|
||||
mExportVar_height = v;
|
||||
setVar(mExportVarIdx_height, v);
|
||||
}
|
||||
|
||||
public int get_height() {
|
||||
return mExportVar_height;
|
||||
}
|
||||
|
||||
private final static int mExportVarIdx_width = 1;
|
||||
private int mExportVar_width;
|
||||
public void set_width(int v) {
|
||||
setVar(mFieldIndex_width, v);
|
||||
mExportVar_width = v;
|
||||
setVar(mExportVarIdx_width, v);
|
||||
}
|
||||
|
||||
public int get_width() {
|
||||
return mExportVar_width;
|
||||
}
|
||||
|
||||
private final static int mExportVarIdx_radius = 2;
|
||||
private int mExportVar_radius;
|
||||
public void set_radius(int v) {
|
||||
setVar(mFieldIndex_radius, v);
|
||||
mExportVar_radius = v;
|
||||
setVar(mExportVarIdx_radius, v);
|
||||
}
|
||||
|
||||
public int get_radius() {
|
||||
return mExportVar_radius;
|
||||
}
|
||||
|
||||
private final static int mExportVarIdx_InPixel = 3;
|
||||
private Allocation mExportVar_InPixel;
|
||||
public void bind_InPixel(Allocation v) {
|
||||
mExportVar_InPixel = v;
|
||||
if(v == null) bindAllocation(null, mExportVarIdx_InPixel);
|
||||
else bindAllocation(v, mExportVarIdx_InPixel);
|
||||
}
|
||||
|
||||
public Allocation get_InPixel() {
|
||||
return mExportVar_InPixel;
|
||||
}
|
||||
|
||||
private final static int mExportVarIdx_OutPixel = 4;
|
||||
private Allocation mExportVar_OutPixel;
|
||||
public void bind_OutPixel(Allocation v) {
|
||||
mExportVar_OutPixel = v;
|
||||
if(v == null) bindAllocation(null, mExportVarIdx_OutPixel);
|
||||
else bindAllocation(v, mExportVarIdx_OutPixel);
|
||||
}
|
||||
|
||||
public Allocation get_OutPixel() {
|
||||
return mExportVar_OutPixel;
|
||||
}
|
||||
|
||||
private final static int mExportVarIdx_ScratchPixel = 5;
|
||||
private Allocation mExportVar_ScratchPixel;
|
||||
public void bind_ScratchPixel(Allocation v) {
|
||||
mExportVar_ScratchPixel = v;
|
||||
if(v == null) bindAllocation(null, mExportVarIdx_ScratchPixel);
|
||||
else bindAllocation(v, mExportVarIdx_ScratchPixel);
|
||||
}
|
||||
|
||||
public Allocation get_ScratchPixel() {
|
||||
return mExportVar_ScratchPixel;
|
||||
}
|
||||
|
||||
private final static int mExportVarIdx_inBlack = 6;
|
||||
private float mExportVar_inBlack;
|
||||
public void set_inBlack(float v) {
|
||||
setVar(mFieldIndex_inBlack, v);
|
||||
mExportVar_inBlack = v;
|
||||
setVar(mExportVarIdx_inBlack, v);
|
||||
}
|
||||
|
||||
public float get_inBlack() {
|
||||
return mExportVar_inBlack;
|
||||
}
|
||||
|
||||
private final static int mExportVarIdx_outBlack = 7;
|
||||
private float mExportVar_outBlack;
|
||||
public void set_outBlack(float v) {
|
||||
setVar(mFieldIndex_outBlack, v);
|
||||
mExportVar_outBlack = v;
|
||||
setVar(mExportVarIdx_outBlack, v);
|
||||
}
|
||||
|
||||
public float get_outBlack() {
|
||||
return mExportVar_outBlack;
|
||||
}
|
||||
|
||||
private final static int mExportVarIdx_inWhite = 8;
|
||||
private float mExportVar_inWhite;
|
||||
public void set_inWhite(float v) {
|
||||
setVar(mFieldIndex_inWhite, v);
|
||||
mExportVar_inWhite = v;
|
||||
setVar(mExportVarIdx_inWhite, v);
|
||||
}
|
||||
|
||||
public float get_inWhite() {
|
||||
return mExportVar_inWhite;
|
||||
}
|
||||
|
||||
private final static int mExportVarIdx_outWhite = 9;
|
||||
private float mExportVar_outWhite;
|
||||
public void set_outWhite(float v) {
|
||||
setVar(mFieldIndex_outWhite, v);
|
||||
mExportVar_outWhite = v;
|
||||
setVar(mExportVarIdx_outWhite, v);
|
||||
}
|
||||
|
||||
public float get_outWhite() {
|
||||
return mExportVar_outWhite;
|
||||
}
|
||||
|
||||
private final static int mExportVarIdx_gamma = 10;
|
||||
private float mExportVar_gamma;
|
||||
public void set_gamma(float v) {
|
||||
setVar(mFieldIndex_gamma, v);
|
||||
mExportVar_gamma = v;
|
||||
setVar(mExportVarIdx_gamma, v);
|
||||
}
|
||||
|
||||
public float get_gamma() {
|
||||
return mExportVar_gamma;
|
||||
}
|
||||
|
||||
private final static int mExportVarIdx_saturation = 11;
|
||||
private float mExportVar_saturation;
|
||||
public void set_saturation(float v) {
|
||||
setVar(mFieldIndex_saturation, v);
|
||||
}
|
||||
public void set_hue(float v) {
|
||||
setVar(mFieldIndex_hue, v);
|
||||
mExportVar_saturation = v;
|
||||
setVar(mExportVarIdx_saturation, v);
|
||||
}
|
||||
|
||||
private final static int mInvokableIndex_Filter = 4;
|
||||
public void invokable_Filter() {
|
||||
invoke(mInvokableIndex_Filter);
|
||||
public float get_saturation() {
|
||||
return mExportVar_saturation;
|
||||
}
|
||||
|
||||
private final static int mInvokableIndex_FilterBenchmark = 5;
|
||||
public void invokable_FilterBenchmark() {
|
||||
invoke(mInvokableIndex_FilterBenchmark);
|
||||
private final static int mExportFuncIdx_filter = 0;
|
||||
public void invoke_filter() {
|
||||
invoke(mExportFuncIdx_filter);
|
||||
}
|
||||
|
||||
private final static int mExportFuncIdx_filterBenchmark = 1;
|
||||
public void invoke_filterBenchmark() {
|
||||
invoke(mExportFuncIdx_filterBenchmark);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
Binary file not shown.
@@ -57,7 +57,7 @@ public class ModelViewerRS {
|
||||
|
||||
private SimpleMesh mMesh;
|
||||
|
||||
private ScriptC_ModelViewer mScript;
|
||||
private ScriptC_Modelviewer mScript;
|
||||
|
||||
int mLastX;
|
||||
int mLastY;
|
||||
@@ -130,7 +130,7 @@ public class ModelViewerRS {
|
||||
|
||||
private void initRS() {
|
||||
|
||||
mScript = new ScriptC_ModelViewer(mRS, mRes, true);
|
||||
mScript = new ScriptC_Modelviewer(mRS, mRes, R.raw.modelviewer_bc, true);
|
||||
|
||||
initPFS();
|
||||
initPF();
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
|
||||
package com.android.modelviewer;
|
||||
|
||||
import android.content.res.Resources;
|
||||
import android.renderscript.*;
|
||||
import android.util.Log;
|
||||
|
||||
|
||||
|
||||
public class ScriptC_ModelViewer
|
||||
extends android.renderscript.ScriptC
|
||||
{
|
||||
public ScriptC_ModelViewer(RenderScript rs, Resources resources, boolean isRoot) {
|
||||
super(rs, resources, R.raw.modelviewer_bc, isRoot);
|
||||
}
|
||||
|
||||
public void set_gPVBackground(ProgramVertex v) {
|
||||
setVar(0, v.getID());
|
||||
}
|
||||
|
||||
public void set_gPFBackground(ProgramFragment v) {
|
||||
setVar(1, v.getID());
|
||||
}
|
||||
|
||||
public void set_gTGrid(Allocation v) {
|
||||
setVar(2, v.getID());
|
||||
}
|
||||
|
||||
public void set_gTestMesh(SimpleMesh v) {
|
||||
setVar(3, v.getID());
|
||||
}
|
||||
|
||||
public void set_gPFSBackground(ProgramStore v) {
|
||||
setVar(4, v.getID());
|
||||
}
|
||||
|
||||
public void set_gRotate(float v) {
|
||||
setVar(5, v);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
/*
|
||||
* Copyright (C) 2010 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.
|
||||
*/
|
||||
|
||||
package com.android.modelviewer;
|
||||
|
||||
import android.renderscript.*;
|
||||
import android.content.res.Resources;
|
||||
import android.util.Log;
|
||||
|
||||
public class ScriptC_Modelviewer extends ScriptC {
|
||||
// Constructor
|
||||
public ScriptC_Modelviewer(RenderScript rs, Resources resources, int id, boolean isRoot) {
|
||||
super(rs, resources, id, isRoot);
|
||||
}
|
||||
|
||||
private final static int mExportVarIdx_gPVBackground = 0;
|
||||
private ProgramVertex mExportVar_gPVBackground;
|
||||
public void set_gPVBackground(ProgramVertex v) {
|
||||
mExportVar_gPVBackground = v;
|
||||
setVar(mExportVarIdx_gPVBackground, (v == null) ? 0 : v.getID());
|
||||
}
|
||||
|
||||
public ProgramVertex get_gPVBackground() {
|
||||
return mExportVar_gPVBackground;
|
||||
}
|
||||
|
||||
private final static int mExportVarIdx_gPFBackground = 1;
|
||||
private ProgramFragment mExportVar_gPFBackground;
|
||||
public void set_gPFBackground(ProgramFragment v) {
|
||||
mExportVar_gPFBackground = v;
|
||||
setVar(mExportVarIdx_gPFBackground, (v == null) ? 0 : v.getID());
|
||||
}
|
||||
|
||||
public ProgramFragment get_gPFBackground() {
|
||||
return mExportVar_gPFBackground;
|
||||
}
|
||||
|
||||
private final static int mExportVarIdx_gTGrid = 2;
|
||||
private Allocation mExportVar_gTGrid;
|
||||
public void set_gTGrid(Allocation v) {
|
||||
mExportVar_gTGrid = v;
|
||||
setVar(mExportVarIdx_gTGrid, (v == null) ? 0 : v.getID());
|
||||
}
|
||||
|
||||
public Allocation get_gTGrid() {
|
||||
return mExportVar_gTGrid;
|
||||
}
|
||||
|
||||
private final static int mExportVarIdx_gTestMesh = 3;
|
||||
private SimpleMesh mExportVar_gTestMesh;
|
||||
public void set_gTestMesh(SimpleMesh v) {
|
||||
mExportVar_gTestMesh = v;
|
||||
setVar(mExportVarIdx_gTestMesh, (v == null) ? 0 : v.getID());
|
||||
}
|
||||
|
||||
public SimpleMesh get_gTestMesh() {
|
||||
return mExportVar_gTestMesh;
|
||||
}
|
||||
|
||||
private final static int mExportVarIdx_gPFSBackground = 4;
|
||||
private ProgramStore mExportVar_gPFSBackground;
|
||||
public void set_gPFSBackground(ProgramStore v) {
|
||||
mExportVar_gPFSBackground = v;
|
||||
setVar(mExportVarIdx_gPFSBackground, (v == null) ? 0 : v.getID());
|
||||
}
|
||||
|
||||
public ProgramStore get_gPFSBackground() {
|
||||
return mExportVar_gPFSBackground;
|
||||
}
|
||||
|
||||
private final static int mExportVarIdx_gRotate = 5;
|
||||
private float mExportVar_gRotate;
|
||||
public void set_gRotate(float v) {
|
||||
mExportVar_gRotate = v;
|
||||
setVar(mExportVarIdx_gRotate, v);
|
||||
}
|
||||
|
||||
public float get_gRotate() {
|
||||
return mExportVar_gRotate;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -152,6 +152,10 @@ void Component::set(RsDataType dt, RsDataKind dk, bool norm, uint32_t vecSize)
|
||||
case RS_TYPE_UNSIGNED_64:
|
||||
mTypeBits = 64;
|
||||
break;
|
||||
|
||||
case RS_TYPE_BOOLEAN:
|
||||
mTypeBits = 8;
|
||||
break;
|
||||
}
|
||||
|
||||
mBits = mTypeBits * mVectorSize;
|
||||
@@ -192,82 +196,6 @@ uint32_t Component::getGLFormat() const
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const char * gCTypeStrings[] = {
|
||||
0,
|
||||
0,//"F16",
|
||||
"float",
|
||||
"double",
|
||||
"char",
|
||||
"short",
|
||||
"int",
|
||||
0,//"S64",
|
||||
"char",//U8",
|
||||
"short",//U16",
|
||||
"int",//U32",
|
||||
0,//"U64",
|
||||
0,//"UP_565",
|
||||
0,//"UP_5551",
|
||||
0,//"UP_4444",
|
||||
0,//"ELEMENT",
|
||||
0,//"TYPE",
|
||||
0,//"ALLOCATION",
|
||||
0,//"SAMPLER",
|
||||
0,//"SCRIPT",
|
||||
0,//"MESH",
|
||||
0,//"PROGRAM_FRAGMENT",
|
||||
0,//"PROGRAM_VERTEX",
|
||||
0,//"PROGRAM_RASTER",
|
||||
0,//"PROGRAM_STORE",
|
||||
};
|
||||
|
||||
static const char * gCVecTypeStrings[] = {
|
||||
0,
|
||||
0,//"F16",
|
||||
"vecF32",
|
||||
"vecF64",
|
||||
"vecI8",
|
||||
"vecI16",
|
||||
"vecI32",
|
||||
0,//"S64",
|
||||
"vecU8",//U8",
|
||||
"vecU16",//U16",
|
||||
"vecU32",//U32",
|
||||
0,//"U64",
|
||||
0,//"UP_565",
|
||||
0,//"UP_5551",
|
||||
0,//"UP_4444",
|
||||
0,//"ELEMENT",
|
||||
0,//"TYPE",
|
||||
0,//"ALLOCATION",
|
||||
0,//"SAMPLER",
|
||||
0,//"SCRIPT",
|
||||
0,//"MESH",
|
||||
0,//"PROGRAM_FRAGMENT",
|
||||
0,//"PROGRAM_VERTEX",
|
||||
0,//"PROGRAM_RASTER",
|
||||
0,//"PROGRAM_STORE",
|
||||
};
|
||||
|
||||
String8 Component::getCType() const
|
||||
{
|
||||
char buf[64];
|
||||
if (mVectorSize == 1) {
|
||||
return String8(gCTypeStrings[mType]);
|
||||
}
|
||||
|
||||
// Yuck, acc WAR
|
||||
// Appears to have problems packing chars
|
||||
if (mVectorSize == 4 && mType == RS_TYPE_UNSIGNED_8) {
|
||||
return String8("int");
|
||||
}
|
||||
|
||||
|
||||
String8 s(gCVecTypeStrings[mType]);
|
||||
sprintf(buf, "_%i_t", mVectorSize);
|
||||
s.append(buf);
|
||||
return s;
|
||||
}
|
||||
|
||||
String8 Component::getGLSLType() const
|
||||
{
|
||||
if (mType == RS_TYPE_SIGNED_32) {
|
||||
@@ -302,6 +230,7 @@ static const char * gTypeStrings[] = {
|
||||
"U16",
|
||||
"U32",
|
||||
"U64",
|
||||
"BOOLEAN",
|
||||
"UP_565",
|
||||
"UP_5551",
|
||||
"UP_4444",
|
||||
|
||||
@@ -35,7 +35,6 @@ public:
|
||||
|
||||
uint32_t getGLType() const;
|
||||
uint32_t getGLFormat() const;
|
||||
String8 getCType() const;
|
||||
String8 getGLSLType() const;
|
||||
void dumpLOGV(const char *prefix) const;
|
||||
|
||||
|
||||
@@ -232,45 +232,6 @@ const Element * Element::create(Context *rsc, size_t count, const Element **ein,
|
||||
return e;
|
||||
}
|
||||
|
||||
String8 Element::getCStructBody(uint32_t indent) const
|
||||
{
|
||||
String8 si;
|
||||
for (uint32_t ct=0; ct < indent; ct++) {
|
||||
si.append(" ");
|
||||
}
|
||||
|
||||
String8 s(si);
|
||||
s.append("{\n");
|
||||
for (uint32_t ct = 0; ct < mFieldCount; ct++) {
|
||||
s.append(si);
|
||||
s.append(mFields[ct].e->getCType(indent+4));
|
||||
s.append(" ");
|
||||
s.append(mFields[ct].name);
|
||||
s.append(";\n");
|
||||
}
|
||||
s.append(si);
|
||||
s.append("}");
|
||||
return s;
|
||||
}
|
||||
|
||||
String8 Element::getCType(uint32_t indent) const
|
||||
{
|
||||
String8 s;
|
||||
for (uint32_t ct=0; ct < indent; ct++) {
|
||||
s.append(" ");
|
||||
}
|
||||
|
||||
if (!mFieldCount) {
|
||||
// Basic component.
|
||||
s.append(mComponent.getCType());
|
||||
} else {
|
||||
s.append("struct ");
|
||||
s.append(getCStructBody(indent));
|
||||
}
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
String8 Element::getGLSLType(uint32_t indent) const
|
||||
{
|
||||
String8 s;
|
||||
|
||||
@@ -54,8 +54,6 @@ public:
|
||||
RsDataKind getKind() const {return mComponent.getKind();}
|
||||
uint32_t getBits() const {return mBits;}
|
||||
|
||||
String8 getCType(uint32_t indent=0) const;
|
||||
String8 getCStructBody(uint32_t indent=0) const;
|
||||
String8 getGLSLType(uint32_t indent=0) const;
|
||||
|
||||
void dumpLOGV(const char *prefix) const;
|
||||
|
||||
@@ -138,6 +138,11 @@ void ProgramVertex::createShader()
|
||||
const Element *e = mConstantTypes[ct]->getElement();
|
||||
for (uint32_t field=0; field < e->getFieldCount(); field++) {
|
||||
const Element *f = e->getField(field);
|
||||
const char *fn = e->getFieldName(field);
|
||||
|
||||
if (fn[0] == '#') {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Cannot be complex
|
||||
rsAssert(!f->getFieldCount());
|
||||
@@ -150,7 +155,7 @@ void ProgramVertex::createShader()
|
||||
rsAssert(0);
|
||||
}
|
||||
|
||||
mShader.append(e->getFieldName(field));
|
||||
mShader.append(fn);
|
||||
mShader.append(";\n");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,15 +7,15 @@
|
||||
// Conversions
|
||||
#define CVT_FUNC_2(typeout, typein) \
|
||||
static typeout##2 __attribute__((overloadable)) convert_##typeout##2(typein##2 v) { \
|
||||
typeout##2 r = {v.x, v.y}; \
|
||||
typeout##2 r = {(typeout)v.x, (typeout)v.y}; \
|
||||
return r; \
|
||||
} \
|
||||
static typeout##3 __attribute__((overloadable)) convert_##typeout##3(typein##3 v) { \
|
||||
typeout##3 r = {v.x, v.y, v.z}; \
|
||||
typeout##3 r = {(typeout)v.x, (typeout)v.y, (typeout)v.z}; \
|
||||
return r; \
|
||||
} \
|
||||
static typeout##4 __attribute__((overloadable)) convert_##typeout##4(typein##4 v) { \
|
||||
typeout##4 r = {v.x, v.y, v.z, v.w}; \
|
||||
typeout##4 r = {(typeout)v.x, (typeout)v.y, (typeout)v.z, (typeout)v.w}; \
|
||||
return r; \
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user