diff options
author | 2010-12-15 09:59:58 -0800 | |
---|---|---|
committer | 2010-12-15 10:11:31 -0800 | |
commit | 0857196107d55bae312c12b72b115d25d5fee4f9 (patch) | |
tree | 2180a2809a3c945de178284fd44b8e5ed26fd42d | |
parent | 320a4beda312279e842a97d3af5b3f0b28cbe49d (diff) |
Cleanup and refactoring of an earlier cl.
Change-Id: I5e356ed88375a1620846e0c500659e3b7ead5030
-rw-r--r-- | graphics/java/android/renderscript/Sampler.java | 4 | ||||
-rw-r--r-- | libs/rs/RenderScript.h | 3 | ||||
-rw-r--r-- | libs/rs/java/Samples/AndroidManifest.xml | 6 | ||||
-rw-r--r-- | libs/rs/java/Samples/res/raw/shader2movev.glsl | 1 | ||||
-rw-r--r-- | libs/rs/java/Samples/src/com/android/samples/RsBench.java | 4 | ||||
-rw-r--r-- | libs/rs/java/Samples/src/com/android/samples/RsBenchRS.java | 24 | ||||
-rw-r--r-- | libs/rs/java/Samples/src/com/android/samples/RsBenchView.java | 9 | ||||
-rw-r--r-- | libs/rs/java/Samples/src/com/android/samples/rsbench.rs | 228 | ||||
-rw-r--r-- | libs/rs/java/Samples/src/com/android/samples/rsrenderstates.rs | 36 | ||||
-rw-r--r-- | libs/rs/rsAllocation.cpp | 7 | ||||
-rw-r--r-- | libs/rs/rsAllocation.h | 3 | ||||
-rw-r--r-- | libs/rs/rsSampler.cpp | 2 |
12 files changed, 140 insertions, 187 deletions
diff --git a/graphics/java/android/renderscript/Sampler.java b/graphics/java/android/renderscript/Sampler.java index 9fbc09ac287c..45a3949a2b34 100644 --- a/graphics/java/android/renderscript/Sampler.java +++ b/graphics/java/android/renderscript/Sampler.java @@ -40,6 +40,7 @@ public class Sampler extends BaseObj { NEAREST (0), LINEAR (1), LINEAR_MIP_LINEAR (2), + LINEAR_MIP_NEAREST (5), WRAP (3), CLAMP (4); @@ -201,7 +202,8 @@ public class Sampler extends BaseObj { public void setMin(Value v) { if (v == Value.NEAREST || v == Value.LINEAR || - v == Value.LINEAR_MIP_LINEAR) { + v == Value.LINEAR_MIP_LINEAR || + v == Value.LINEAR_MIP_NEAREST) { mMin = v; } else { throw new IllegalArgumentException("Invalid value"); diff --git a/libs/rs/RenderScript.h b/libs/rs/RenderScript.h index 43d4291cfec9..3ad453f4fa4f 100644 --- a/libs/rs/RenderScript.h +++ b/libs/rs/RenderScript.h @@ -171,7 +171,8 @@ enum RsSamplerValue { RS_SAMPLER_LINEAR, RS_SAMPLER_LINEAR_MIP_LINEAR, RS_SAMPLER_WRAP, - RS_SAMPLER_CLAMP + RS_SAMPLER_CLAMP, + RS_SAMPLER_LINEAR_MIP_NEAREST, }; enum RsTextureTarget { diff --git a/libs/rs/java/Samples/AndroidManifest.xml b/libs/rs/java/Samples/AndroidManifest.xml index 6f35e2a7b382..9646a77790fe 100644 --- a/libs/rs/java/Samples/AndroidManifest.xml +++ b/libs/rs/java/Samples/AndroidManifest.xml @@ -4,7 +4,7 @@ <application android:label="Samples" android:icon="@drawable/test_pattern"> <activity android:name="RsList" - android:label="RsList" + android:label="RsList" android:theme="@android:style/Theme.Black.NoTitleBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> @@ -13,7 +13,7 @@ </activity> <activity android:name="RsRenderStates" - android:label="RsStates" + android:label="RsStates" android:theme="@android:style/Theme.Black.NoTitleBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> @@ -22,7 +22,7 @@ </activity> <activity android:name="RsBench" - android:label="RsBenchmark" + android:label="RsBenchmark" android:theme="@android:style/Theme.Black.NoTitleBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> diff --git a/libs/rs/java/Samples/res/raw/shader2movev.glsl b/libs/rs/java/Samples/res/raw/shader2movev.glsl index 68712e67b6c7..a2c807e838cc 100644 --- a/libs/rs/java/Samples/res/raw/shader2movev.glsl +++ b/libs/rs/java/Samples/res/raw/shader2movev.glsl @@ -14,7 +14,6 @@ void main() { mat3 model3 = mat3(UNI_model[0].xyz, UNI_model[1].xyz, UNI_model[2].xyz); vec3 worldNorm = model3 * (ATTRIB_normal + oldPos - objPos.xyz); - //vec3 worldNorm = model3 * ATTRIB_normal; varWorldPos = worldPos.xyz; varWorldNormal = worldNorm; diff --git a/libs/rs/java/Samples/src/com/android/samples/RsBench.java b/libs/rs/java/Samples/src/com/android/samples/RsBench.java index 5b9af6fc8a4b..a29dddcf3390 100644 --- a/libs/rs/java/Samples/src/com/android/samples/RsBench.java +++ b/libs/rs/java/Samples/src/com/android/samples/RsBench.java @@ -54,7 +54,7 @@ public class RsBench extends Activity { @Override protected void onResume() { // Ideally a game should implement onResume() and onPause() - // to take appropriate action when the activity looses focus + // to take appropriate action when the activity loses focus super.onResume(); mView.resume(); } @@ -62,7 +62,7 @@ public class RsBench extends Activity { @Override protected void onPause() { // Ideally a game should implement onResume() and onPause() - // to take appropriate action when the activity looses focus + // to take appropriate action when the activity loses focus super.onPause(); mView.pause(); } diff --git a/libs/rs/java/Samples/src/com/android/samples/RsBenchRS.java b/libs/rs/java/Samples/src/com/android/samples/RsBenchRS.java index a47c308a8c93..ddb05b38b1c5 100644 --- a/libs/rs/java/Samples/src/com/android/samples/RsBenchRS.java +++ b/libs/rs/java/Samples/src/com/android/samples/RsBenchRS.java @@ -216,7 +216,7 @@ public class RsBenchRS { ProgramVertex.ShaderBuilder pvbCustom = new ProgramVertex.ShaderBuilder(mRS); // Specify the resource that contains the shader string pvbCustom.setShader(mRes, R.raw.shaderv); - // Use a script field to spcify the input layout + // Use a script field to specify the input layout pvbCustom.addInput(ScriptField_VertexShaderInputs_s.createElement(mRS)); // Define the constant input layout pvbCustom.addConstant(mVSConst.getAllocation().getType()); @@ -227,7 +227,7 @@ public class RsBenchRS { ProgramFragment.ShaderBuilder pfbCustom = new ProgramFragment.ShaderBuilder(mRS); // Specify the resource that contains the shader string pfbCustom.setShader(mRes, R.raw.shaderf); - //Tell the builder how many textures we have + // Tell the builder how many textures we have pfbCustom.addTexture(Program.TextureType.TEXTURE_2D); // Define the constant input layout pfbCustom.addConstant(mFSConst.getAllocation().getType()); @@ -315,16 +315,22 @@ public class RsBenchRS { private void initFonts() { // Sans font by family name - mFontSans = Font.createFromFamily(mRS, mRes, "sans-serif", Font.Style.NORMAL, 8); + mFontSans = Font.createFromFamily(mRS, mRes, "sans-serif", + Font.Style.NORMAL, 8); // Create font by file name mFontSerif = Font.create(mRS, mRes, "DroidSerif-Regular.ttf", 8); // Create fonts by family and style - mFontSerifBold = Font.createFromFamily(mRS, mRes, "serif", Font.Style.BOLD, 8); - mFontSerifItalic = Font.createFromFamily(mRS, mRes, "serif", Font.Style.ITALIC, 8); - mFontSerifBoldItalic = Font.createFromFamily(mRS, mRes, "serif", Font.Style.BOLD_ITALIC, 8); - mFontMono = Font.createFromFamily(mRS, mRes, "mono", Font.Style.NORMAL, 8); - - mTextAlloc = Allocation.createFromString(mRS, "String from allocation", Allocation.USAGE_SCRIPT); + mFontSerifBold = Font.createFromFamily(mRS, mRes, "serif", + Font.Style.BOLD, 8); + mFontSerifItalic = Font.createFromFamily(mRS, mRes, "serif", + Font.Style.ITALIC, 8); + mFontSerifBoldItalic = Font.createFromFamily(mRS, mRes, "serif", + Font.Style.BOLD_ITALIC, 8); + mFontMono = Font.createFromFamily(mRS, mRes, "mono", + Font.Style.NORMAL, 8); + + mTextAlloc = Allocation.createFromString(mRS, "String from allocation", + Allocation.USAGE_SCRIPT); mScript.set_gFontSans(mFontSans); mScript.set_gFontSerif(mFontSerif); diff --git a/libs/rs/java/Samples/src/com/android/samples/RsBenchView.java b/libs/rs/java/Samples/src/com/android/samples/RsBenchView.java index 4283a42b91db..0a566682ea56 100644 --- a/libs/rs/java/Samples/src/com/android/samples/RsBenchView.java +++ b/libs/rs/java/Samples/src/com/android/samples/RsBenchView.java @@ -43,7 +43,6 @@ public class RsBenchView extends RSSurfaceView { public RsBenchView(Context context) { super(context); - //setFocusable(true); } private RenderScriptGL mRS; @@ -71,17 +70,13 @@ public class RsBenchView extends RSSurfaceView { } @Override - public boolean onKeyDown(int keyCode, KeyEvent event) - { - // break point at here - // this method doesn't work when 'extends View' include 'extends ScrollView'. + public boolean onKeyDown(int keyCode, KeyEvent event) { return super.onKeyDown(keyCode, event); } @Override - public boolean onTouchEvent(MotionEvent ev) - { + public boolean onTouchEvent(MotionEvent ev) { boolean ret = false; int act = ev.getAction(); if (act == ev.ACTION_DOWN) { diff --git a/libs/rs/java/Samples/src/com/android/samples/rsbench.rs b/libs/rs/java/Samples/src/com/android/samples/rsbench.rs index 87f2f294ad7d..905f34b8a24a 100644 --- a/libs/rs/java/Samples/src/com/android/samples/rsbench.rs +++ b/libs/rs/java/Samples/src/com/android/samples/rsbench.rs @@ -19,7 +19,7 @@ #include "rs_graphics.rsh" #include "shader_def.rsh" -const int gMaxModes = 23; +const int gMaxModes = 26; rs_program_vertex gProgVertex; rs_program_fragment gProgFragmentColor; @@ -94,7 +94,14 @@ static float textColors[] = {1.0f, 1.0f, 1.0f, 1.0f, 0.5f, 0.6f, 0.7f, 1.0f, }; -void displayFontSamples(int fillNum) { +static void displayFontSamples(int fillNum) { + + rs_font fonts[5]; + rsSetObject(&fonts[0], gFontSans); + rsSetObject(&fonts[1], gFontSerif); + rsSetObject(&fonts[2], gFontSerifBold); + rsSetObject(&fonts[3], gFontSerifBoldItalic); + rsSetObject(&fonts[4], gFontSans); uint width = rsgGetWidth(); uint height = rsgGetHeight(); @@ -107,9 +114,8 @@ void displayFontSamples(int fillNum) { int yPos = top; int xOffset = 0, yOffset = 0; - rsgBindFont(gFontSans); //rsgBindFont(gFontSerif); rsgBindFont(gFontSerifBold); rsgBindFont(gFontSerifBoldItalic); rsgBindFont(gFontSans); - for(int fillI = 0; fillI < fillNum; fillI ++) { + rsgBindFont(fonts[fillI]); xOffset = textOffsets[fillI * 2]; yOffset = textOffsets[fillI * 2 + 1]; float *colPtr = textColors + fillI * 4; @@ -122,18 +128,22 @@ void displayFontSamples(int fillNum) { } } } + + for (int i = 0; i < 5; i ++) { + rsClearObject(&fonts[i]); + } } -void bindProgramVertexOrtho() { +static void bindProgramVertexOrtho() { // Default vertex sahder rsgBindProgramVertex(gProgVertex); - // Setup the projectioni matrix + // Setup the projection matrix rs_matrix4x4 proj; rsMatrixLoadOrtho(&proj, 0, rsgGetWidth(), rsgGetHeight(), 0, -500, 500); rsgProgramVertexLoadProjectionMatrix(&proj); } -void displaySingletexFill(bool blend, int quadCount) { +static void displaySingletexFill(bool blend, int quadCount) { bindProgramVertexOrtho(); rs_matrix4x4 matrix; rsMatrixLoadIdentity(&matrix); @@ -159,7 +169,7 @@ void displaySingletexFill(bool blend, int quadCount) { } } -void displayBlendingSamples() { +static void displayBlendingSamples() { int i; bindProgramVertexOrtho(); @@ -205,7 +215,7 @@ void displayBlendingSamples() { } -void displayMeshSamples(int meshNum) { +static void displayMeshSamples(int meshNum) { bindProgramVertexOrtho(); rs_matrix4x4 matrix; @@ -227,7 +237,7 @@ void displayMeshSamples(int meshNum) { } } -void displayTextureSamplers() { +static void displayTextureSamplers() { bindProgramVertexOrtho(); rs_matrix4x4 matrix; @@ -282,27 +292,34 @@ void displayTextureSamplers() { rsgDrawText("Filtering: miplinear wrap", 310, 590); } -float gTorusRotation = 0; -static void drawToruses(int numMeshes) { - rs_matrix4x4 matrix; +static float gTorusRotation = 0; +static void updateModelMatrix(rs_matrix4x4 *matrix, void *buffer) { + if (buffer == 0) { + rsgProgramVertexLoadModelMatrix(matrix); + } else { + rsAllocationMarkDirty(rsGetAllocation(buffer)); + } +} + +static void drawToruses(int numMeshes, rs_matrix4x4 *matrix, void *buffer) { if (numMeshes == 1) { - rsMatrixLoadTranslate(&matrix, 0.0f, 0.0f, -7.5f); - rsMatrixRotate(&matrix, gTorusRotation, 1.0f, 0.0f, 0.0f); - rsgProgramVertexLoadModelMatrix(&matrix); + rsMatrixLoadTranslate(matrix, 0.0f, 0.0f, -7.5f); + rsMatrixRotate(matrix, gTorusRotation, 1.0f, 0.0f, 0.0f); + updateModelMatrix(matrix, buffer); rsgDrawMesh(gTorusMesh); return; } if (numMeshes == 2) { - rsMatrixLoadTranslate(&matrix, -1.6f, 0.0f, -7.5f); - rsMatrixRotate(&matrix, gTorusRotation, 1.0f, 0.0f, 0.0f); - rsgProgramVertexLoadModelMatrix(&matrix); + rsMatrixLoadTranslate(matrix, -1.6f, 0.0f, -7.5f); + rsMatrixRotate(matrix, gTorusRotation, 1.0f, 0.0f, 0.0f); + updateModelMatrix(matrix, buffer); rsgDrawMesh(gTorusMesh); - rsMatrixLoadTranslate(&matrix, 1.6f, 0.0f, -7.5f); - rsMatrixRotate(&matrix, gTorusRotation, 1.0f, 0.0f, 0.0f); - rsgProgramVertexLoadModelMatrix(&matrix); + rsMatrixLoadTranslate(matrix, 1.6f, 0.0f, -7.5f); + rsMatrixRotate(matrix, gTorusRotation, 1.0f, 0.0f, 0.0f); + updateModelMatrix(matrix, buffer); rsgDrawMesh(gTorusMesh); return; } @@ -315,9 +332,9 @@ static void drawToruses(int numMeshes) { for (int h = 0; h < 4; h ++) { for (int v = 0; v < 2; v ++) { // Position our model on the screen - rsMatrixLoadTranslate(&matrix, startX + dist * h, startY + dist * v, startZ); - rsMatrixRotate(&matrix, gTorusRotation, 1.0f, 0.0f, 0.0f); - rsgProgramVertexLoadModelMatrix(&matrix); + rsMatrixLoadTranslate(matrix, startX + dist * h, startY + dist * v, startZ); + rsMatrixRotate(matrix, gTorusRotation, 1.0f, 0.0f, 0.0f); + updateModelMatrix(matrix, buffer); rsgDrawMesh(gTorusMesh); } } @@ -325,10 +342,10 @@ static void drawToruses(int numMeshes) { // Quick hack to get some geometry numbers -void displaySimpleGeoSamples(bool useTexture, int numMeshes) { +static void displaySimpleGeoSamples(bool useTexture, int numMeshes) { rsgBindProgramVertex(gProgVertex); rsgBindProgramRaster(gCullBack); - // Setup the projectioni matrix with 60 degree field of view + // Setup the projection matrix with 30 degree field of view rs_matrix4x4 proj; float aspect = (float)rsgGetWidth() / (float)rsgGetHeight(); rsMatrixLoadPerspective(&proj, 30.0f, aspect, 0.1f, 100.0f); @@ -345,19 +362,20 @@ void displaySimpleGeoSamples(bool useTexture, int numMeshes) { rsgBindSampler(gProgFragmentTexture, 0, gLinearClamp); rsgBindTexture(gProgFragmentTexture, 0, gTexTorus); - // Aplly a rotation to our mesh + // Apply a rotation to our mesh gTorusRotation += 50.0f * gDt; if (gTorusRotation > 360.0f) { gTorusRotation -= 360.0f; } - drawToruses(numMeshes); + rs_matrix4x4 matrix; + drawToruses(numMeshes, &matrix, 0); } float gLight0Rotation = 0; float gLight1Rotation = 0; -void setupCustomShaderLights() { +static void setupCustomShaderLights() { float4 light0Pos = {-5.0f, 5.0f, -10.0f, 1.0f}; float4 light1Pos = {2.0f, 5.0f, 15.0f, 1.0f}; float4 light0DiffCol = {0.9f, 0.7f, 0.7f, 1.0f}; @@ -393,7 +411,7 @@ void setupCustomShaderLights() { gVSConstants->light1_CosinePower = 25.0f; rsAllocationMarkDirty(rsGetAllocation(gVSConstants)); - // Update fragmetn shader constants + // Update fragment shader constants // Set light 0 colors gFSConstants->light0_DiffuseColor = light0DiffCol; gFSConstants->light0_SpecularColor = light0SpecCol; @@ -419,17 +437,17 @@ void setupCustomShaderLights() { rsAllocationMarkDirty(rsGetAllocation(gFSConstPixel)); } -void displayCustomShaderSamples(int numMeshes) { +static void displayCustomShaderSamples(int numMeshes) { // Update vertex shader constants // Load model matrix - // Aplly a rotation to our mesh + // Apply a rotation to our mesh gTorusRotation += 50.0f * gDt; if (gTorusRotation > 360.0f) { gTorusRotation -= 360.0f; } - // Setup the projectioni matrix + // Setup the projection matrix float aspect = (float)rsgGetWidth() / (float)rsgGetHeight(); rsMatrixLoadPerspective(&gVSConstants->proj, 30.0f, aspect, 0.1f, 100.0f); setupCustomShaderLights(); @@ -445,70 +463,31 @@ void displayCustomShaderSamples(int numMeshes) { // Use back face culling rsgBindProgramRaster(gCullBack); - rs_matrix4x4 matrix; - - if (numMeshes == 1) { - rsMatrixLoadTranslate(&gVSConstants->model, 0.0f, 0.0f, -7.5f); - rsMatrixRotate(&gVSConstants->model, gTorusRotation, 1.0f, 0.0f, 0.0f); - rsMatrixRotate(&gVSConstants->model, gTorusRotation, 0.0f, 0.0f, 1.0f); - rsAllocationMarkDirty(rsGetAllocation(gVSConstants)); - - rsgDrawMesh(gTorusMesh); - return; - } - - if (numMeshes == 2) { - rsMatrixLoadTranslate(&gVSConstants->model, -1.6f, 0.0f, -7.5f); - rsMatrixRotate(&gVSConstants->model, gTorusRotation, 1.0f, 0.0f, 0.0f); - rsMatrixRotate(&gVSConstants->model, gTorusRotation, 0.0f, 0.0f, 1.0f); - rsAllocationMarkDirty(rsGetAllocation(gVSConstants)); - rsgDrawMesh(gTorusMesh); - - rsMatrixLoadTranslate(&gVSConstants->model, 1.6f, 0.0f, -7.5f); - rsMatrixRotate(&gVSConstants->model, gTorusRotation, 1.0f, 0.0f, 0.0f); - rsMatrixRotate(&gVSConstants->model, gTorusRotation, 0.0f, 0.0f, 1.0f); - rsAllocationMarkDirty(rsGetAllocation(gVSConstants)); - rsgDrawMesh(gTorusMesh); - return; - } - - float startX = -5.0f; - float startY = -1.5f; - float startZ = -15.0f; - float dist = 3.2f; - - for (int h = 0; h < 4; h ++) { - for (int v = 0; v < 2; v ++) { - // Position our model on the screen - rsMatrixLoadTranslate(&gVSConstants->model, startX + dist * h, startY + dist * v, startZ); - rsMatrixRotate(&gVSConstants->model, gTorusRotation, 1.0f, 0.0f, 0.0f); - rsMatrixRotate(&gVSConstants->model, gTorusRotation, 0.0f, 0.0f, 1.0f); - rsAllocationMarkDirty(rsGetAllocation(gVSConstants)); - rsgDrawMesh(gTorusMesh); - } - } + drawToruses(numMeshes, &gVSConstants->model, gVSConstants); } -void displayPixelLightSamples(int numMeshes) { +static void displayPixelLightSamples(int numMeshes, bool heavyVertex) { // Update vertex shader constants // Load model matrix - // Aplly a rotation to our mesh - gTorusRotation += 20.0f * gDt; + // Apply a rotation to our mesh + gTorusRotation += 30.0f * gDt; if (gTorusRotation > 360.0f) { gTorusRotation -= 360.0f; } - //gTorusRotation = 45.0f; - gVSConstPixel->time = rsUptimeMillis()*0.005; - // Setup the projectioni matrix + // Setup the projection matrix float aspect = (float)rsgGetWidth() / (float)rsgGetHeight(); rsMatrixLoadPerspective(&gVSConstPixel->proj, 30.0f, aspect, 0.1f, 100.0f); setupCustomShaderLights(); - rsgBindProgramVertex(gProgVertexPixelLight); + if (heavyVertex) { + rsgBindProgramVertex(gProgVertexPixelLightMove); + } else { + rsgBindProgramVertex(gProgVertexPixelLight); + } // Fragment shader with texture rsgBindProgramStore(gProgStoreBlendNoneDepth); @@ -519,51 +498,10 @@ void displayPixelLightSamples(int numMeshes) { // Use back face culling rsgBindProgramRaster(gCullBack); - rs_matrix4x4 matrix; - - if (numMeshes == 1) { - rsMatrixLoadTranslate(&gVSConstPixel->model, 0.0f, 0.0f, -7.5f); - rsMatrixRotate(&gVSConstPixel->model, gTorusRotation, 1.0f, 0.0f, 0.0f); - rsMatrixRotate(&gVSConstPixel->model, gTorusRotation, 0.0f, 0.0f, 1.0f); - rsAllocationMarkDirty(rsGetAllocation(gVSConstPixel)); - - rsgDrawMesh(gTorusMesh); - return; - } - - if (numMeshes == 2) { - rsMatrixLoadTranslate(&gVSConstPixel->model, -1.6f, 0.0f, -7.5f); - rsMatrixRotate(&gVSConstPixel->model, gTorusRotation, 1.0f, 0.0f, 0.0f); - rsMatrixRotate(&gVSConstPixel->model, gTorusRotation, 0.0f, 0.0f, 1.0f); - rsAllocationMarkDirty(rsGetAllocation(gVSConstPixel)); - rsgDrawMesh(gTorusMesh); - - rsMatrixLoadTranslate(&gVSConstPixel->model, 1.6f, 0.0f, -7.5f); - rsMatrixRotate(&gVSConstPixel->model, gTorusRotation, 1.0f, 0.0f, 0.0f); - rsMatrixRotate(&gVSConstPixel->model, gTorusRotation, 0.0f, 0.0f, 1.0f); - rsAllocationMarkDirty(rsGetAllocation(gVSConstPixel)); - rsgDrawMesh(gTorusMesh); - return; - } - - float startX = -5.0f; - float startY = -1.5f; - float startZ = -15.0f; - float dist = 3.2f; - - for (int h = 0; h < 4; h ++) { - for (int v = 0; v < 2; v ++) { - // Position our model on the screen - rsMatrixLoadTranslate(&gVSConstPixel->model, startX + dist * h, startY + dist * v, startZ); - rsMatrixRotate(&gVSConstPixel->model, gTorusRotation, 1.0f, 0.0f, 0.0f); - rsMatrixRotate(&gVSConstPixel->model, gTorusRotation, 0.0f, 0.0f, 1.0f); - rsAllocationMarkDirty(rsGetAllocation(gVSConstPixel)); - rsgDrawMesh(gTorusMesh); - } - } + drawToruses(numMeshes, &gVSConstPixel->model, gVSConstPixel); } -void displayMultitextureSample(bool blend, int quadCount) { +static void displayMultitextureSample(bool blend, int quadCount) { bindProgramVertexOrtho(); rs_matrix4x4 matrix; rsMatrixLoadIdentity(&matrix); @@ -593,9 +531,9 @@ void displayMultitextureSample(bool blend, int quadCount) { } } -float gAnisoTime = 0.0f; -uint anisoMode = 0; -void displayAnisoSample() { +static float gAnisoTime = 0.0f; +static uint anisoMode = 0; +static void displayAnisoSample() { gAnisoTime += gDt; @@ -672,6 +610,8 @@ static bool checkInit() { displayTextureSamplers(); displayMultitextureSample(true, 5); displayAnisoSample(); + displayPixelLightSamples(1, false); + displayPixelLightSamples(1, true); countdown --; rsgClearColor(0.2f, 0.2f, 0.2f, 0.0f); @@ -699,7 +639,7 @@ static int frameCount = 0; static int totalFramesRendered = 0; static int benchMode = 0; -#define testTime 10.0f +#define testTime 5.0f static float curTestTime = testTime; static const char *testNames[] = { @@ -727,12 +667,9 @@ static const char *testNames[] = { "Finished 25.6k geo heavy fragment", "Finished 51.2k geo heavy fragment", "Finished 204.8k geo raster load heavy fragment", - "Finished simpleGeo", - "Finished simpleGeo", - "Finished simpleGeo", - "Finished simpleGeo", - "Finished simpleGeo", - "Finished simpleGeo", + "Finished 25.6k geo heavy fragment, heavy vertex", + "Finished 51.2k geo heavy fragment, heavy vertex", + "Finished 204.8k geo raster load heavy fragment, heavy vertex", }; int root(int launchID) { @@ -746,9 +683,6 @@ int root(int launchID) { return 1; } - /*displayPixelLightSamples(1); - return 1;*/ - curTestTime -= gDt; if(curTestTime < 0.0f) { float fps = (float)(frameCount) / (testTime - curTestTime); @@ -829,14 +763,24 @@ int root(int launchID) { displayMultitextureSample(true, 5); break; case 21: - displayPixelLightSamples(1); + displayPixelLightSamples(1, false); break; case 22: - displayPixelLightSamples(2); + displayPixelLightSamples(2, false); break; case 23: - displayPixelLightSamples(8); + displayPixelLightSamples(8, false); break; + case 24: + displayPixelLightSamples(1, true); + break; + case 25: + displayPixelLightSamples(2, true); + break; + case 26: + displayPixelLightSamples(8, true); + break; + } frameCount ++; diff --git a/libs/rs/java/Samples/src/com/android/samples/rsrenderstates.rs b/libs/rs/java/Samples/src/com/android/samples/rsrenderstates.rs index 39b0834b1796..a973167ed845 100644 --- a/libs/rs/java/Samples/src/com/android/samples/rsrenderstates.rs +++ b/libs/rs/java/Samples/src/com/android/samples/rsrenderstates.rs @@ -81,7 +81,7 @@ float gDt = 0; void init() { } -void displayFontSamples() { +static void displayFontSamples() { rsgFontColor(1.0f, 1.0f, 1.0f, 1.0f); int yPos = 100; rsgBindFont(gFontSans); @@ -148,7 +148,7 @@ void displayFontSamples() { } -void bindProgramVertexOrtho() { +static void bindProgramVertexOrtho() { // Default vertex sahder rsgBindProgramVertex(gProgVertex); // Setup the projectioni matrix @@ -157,7 +157,7 @@ void bindProgramVertexOrtho() { rsgProgramVertexLoadProjectionMatrix(&proj); } -void displayShaderSamples() { +static void displayShaderSamples() { bindProgramVertexOrtho(); rs_matrix4x4 matrix; rsMatrixLoadIdentity(&matrix); @@ -206,7 +206,7 @@ void displayShaderSamples() { rsgDrawText("Flat color shader", 100, 450); } -void displayBlendingSamples() { +static void displayBlendingSamples() { int i; bindProgramVertexOrtho(); @@ -252,7 +252,7 @@ void displayBlendingSamples() { } -void displayMeshSamples() { +static void displayMeshSamples() { bindProgramVertexOrtho(); rs_matrix4x4 matrix; @@ -272,7 +272,7 @@ void displayMeshSamples() { rsgDrawText("User gen 10 by 10 grid mesh", 10, 250); } -void displayTextureSamplers() { +static void displayTextureSamplers() { bindProgramVertexOrtho(); rs_matrix4x4 matrix; @@ -327,9 +327,9 @@ void displayTextureSamplers() { rsgDrawText("Filtering: miplinear wrap", 310, 590); } -float gTorusRotation = 0; +static float gTorusRotation = 0; -void displayCullingSamples() { +static void displayCullingSamples() { rsgBindProgramVertex(gProgVertex); // Setup the projectioni matrix with 60 degree field of view rs_matrix4x4 proj; @@ -370,10 +370,10 @@ void displayCullingSamples() { rsgDrawText("Displaying mesh front/back face culling", 10, rsgGetHeight() - 10); } -float gLight0Rotation = 0; -float gLight1Rotation = 0; +static float gLight0Rotation = 0; +static float gLight1Rotation = 0; -void setupCustomShaderLights() { +static void setupCustomShaderLights() { float4 light0Pos = {-5.0f, 5.0f, -10.0f, 1.0f}; float4 light1Pos = {2.0f, 5.0f, 15.0f, 1.0f}; float4 light0DiffCol = {0.9f, 0.7f, 0.7f, 1.0f}; @@ -436,7 +436,7 @@ void setupCustomShaderLights() { rsAllocationMarkDirty(rsGetAllocation(gFSConstants2)); } -void displayCustomShaderSamples() { +static void displayCustomShaderSamples() { // Update vertex shader constants // Load model matrix @@ -472,7 +472,7 @@ void displayCustomShaderSamples() { rsgDrawText("Custom shader sample", 10, rsgGetHeight() - 10); } -void displayCustomShaderSamples2() { +static void displayCustomShaderSamples2() { // Update vertex shader constants // Load model matrix @@ -509,7 +509,7 @@ void displayCustomShaderSamples2() { rsgDrawText("Custom shader sample with array uniforms", 10, rsgGetHeight() - 10); } -void displayCubemapShaderSample() { +static void displayCubemapShaderSample() { // Update vertex shader constants // Load model matrix // Aplly a rotation to our mesh @@ -545,7 +545,7 @@ void displayCubemapShaderSample() { rsgDrawText("Cubemap shader sample", 10, rsgGetHeight() - 10); } -void displayMultitextureSample() { +static void displayMultitextureSample() { bindProgramVertexOrtho(); rs_matrix4x4 matrix; rsMatrixLoadIdentity(&matrix); @@ -573,9 +573,9 @@ void displayMultitextureSample() { rsgDrawText("Custom shader with multitexturing", 10, 280); } -float gAnisoTime = 0.0f; -uint anisoMode = 0; -void displayAnisoSample() { +static float gAnisoTime = 0.0f; +static uint anisoMode = 0; +static void displayAnisoSample() { gAnisoTime += gDt; diff --git a/libs/rs/rsAllocation.cpp b/libs/rs/rsAllocation.cpp index cb0022377bc5..77e80320b372 100644 --- a/libs/rs/rsAllocation.cpp +++ b/libs/rs/rsAllocation.cpp @@ -31,10 +31,13 @@ using namespace android; using namespace android::renderscript; -Allocation::Allocation(Context *rsc, const Type *type, uint32_t usages) : ObjectBase(rsc) { +Allocation::Allocation(Context *rsc, const Type *type, uint32_t usages, + RsAllocationMipmapControl mc) + : ObjectBase(rsc) { init(rsc, type); mUsageFlags = usages; + mMipmapControl = mc; allocScriptMemory(); if (mType->getElement()->getHasReferences()) { @@ -795,7 +798,7 @@ RsAllocation rsaAllocationCreateTyped(RsContext con, RsType vtype, RsAllocationMipmapControl mips, uint32_t usages) { Context *rsc = static_cast<Context *>(con); - Allocation * alloc = new Allocation(rsc, static_cast<Type *>(vtype), usages); + Allocation * alloc = new Allocation(rsc, static_cast<Type *>(vtype), usages, mips); alloc->incUserRef(); return alloc; } diff --git a/libs/rs/rsAllocation.h b/libs/rs/rsAllocation.h index 4a5f3daa62c3..44dce0dcb1c3 100644 --- a/libs/rs/rsAllocation.h +++ b/libs/rs/rsAllocation.h @@ -29,7 +29,8 @@ class Allocation : public ObjectBase { // The graphics equilivent of malloc. The allocation contains a structure of elements. public: - Allocation(Context *rsc, const Type *, uint32_t usages); + Allocation(Context *rsc, const Type *, uint32_t usages, + RsAllocationMipmapControl mc = RS_ALLOCATION_MIPMAP_NONE); virtual ~Allocation(); diff --git a/libs/rs/rsSampler.cpp b/libs/rs/rsSampler.cpp index 54282a8dd8cb..e2757df10831 100644 --- a/libs/rs/rsSampler.cpp +++ b/libs/rs/rsSampler.cpp @@ -61,6 +61,7 @@ void Sampler::setupGL(const Context *rsc, const Allocation *tex) { GL_LINEAR_MIPMAP_LINEAR, //RS_SAMPLER_LINEAR_MIP_LINEAR, GL_REPEAT, //RS_SAMPLER_WRAP, GL_CLAMP_TO_EDGE, //RS_SAMPLER_CLAMP + GL_LINEAR_MIPMAP_NEAREST, //RS_SAMPLER_LINEAR_MIP_NEAREST }; GLenum transNP[] = { @@ -69,6 +70,7 @@ void Sampler::setupGL(const Context *rsc, const Allocation *tex) { GL_LINEAR, //RS_SAMPLER_LINEAR_MIP_LINEAR, GL_CLAMP_TO_EDGE, //RS_SAMPLER_WRAP, GL_CLAMP_TO_EDGE, //RS_SAMPLER_CLAMP + GL_LINEAR, //RS_SAMPLER_LINEAR_MIP_NEAREST, }; // This tells us the correct texture type |