| // Copyright (C) 2011 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. |
| |
| #pragma version(1) |
| |
| #pragma rs java_package_name(com.android.perftest) |
| |
| #include "rs_graphics.rsh" |
| #include "shader_def.rsh" |
| #include "subtest_def.rsh" |
| |
| rs_program_vertex gProgVertex; |
| rs_program_fragment gProgFragmentTexture; |
| |
| rs_program_store gProgStoreBlendNone; |
| |
| rs_allocation gTexOpaque; |
| |
| rs_mesh g10by10Mesh; |
| rs_mesh g100by100Mesh; |
| rs_mesh gWbyHMesh; |
| |
| rs_sampler gLinearClamp; |
| static int gRenderSurfaceW; |
| static int gRenderSurfaceH; |
| |
| static float gDt = 0; |
| |
| typedef struct MeshTestData_s { |
| int meshNum; |
| } MeshTestData; |
| MeshTestData *gData; |
| |
| void init() { |
| } |
| |
| static void bindProgramVertexOrtho() { |
| // Default vertex shader |
| rsgBindProgramVertex(gProgVertex); |
| // Setup the projection matrix |
| rs_matrix4x4 proj; |
| rsMatrixLoadOrtho(&proj, 0, gRenderSurfaceW, gRenderSurfaceH, 0, -500, 500); |
| rsgProgramVertexLoadProjectionMatrix(&proj); |
| } |
| |
| static void displayMeshSamples(int meshNum) { |
| |
| bindProgramVertexOrtho(); |
| rs_matrix4x4 matrix; |
| rsMatrixLoadTranslate(&matrix, gRenderSurfaceW/2, gRenderSurfaceH/2, 0); |
| rsgProgramVertexLoadModelMatrix(&matrix); |
| |
| // Fragment shader with texture |
| rsgBindProgramStore(gProgStoreBlendNone); |
| rsgBindProgramFragment(gProgFragmentTexture); |
| rsgBindSampler(gProgFragmentTexture, 0, gLinearClamp); |
| |
| rsgBindTexture(gProgFragmentTexture, 0, gTexOpaque); |
| |
| if (meshNum == 0) { |
| rsgDrawMesh(g10by10Mesh); |
| } else if (meshNum == 1) { |
| rsgDrawMesh(g100by100Mesh); |
| } else if (meshNum == 2) { |
| rsgDrawMesh(gWbyHMesh); |
| } |
| } |
| |
| void root(const void *v_in, void *v_out, const void *usrData, uint32_t x, uint32_t y) { |
| TestData *testData = (TestData*)usrData; |
| gRenderSurfaceW = testData->renderSurfaceW; |
| gRenderSurfaceH = testData->renderSurfaceH; |
| gDt = testData->dt; |
| |
| gData = (MeshTestData*)v_in; |
| |
| displayMeshSamples(gData->meshNum); |
| } |