gl_code.cpp revision 965b95468d8325388557003eec24bd70fd22640a
1eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich// OpenGL ES 2.0 code 2eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 3eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich#include <nativehelper/jni.h> 4eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich#define LOG_TAG "GLPerf gl_code.cpp" 5eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich#include <utils/Log.h> 6eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 7eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich#include <EGL/egl.h> 8eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich#include <GLES2/gl2.h> 9eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich#include <GLES2/gl2ext.h> 10eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich#include <utils/Timers.h> 11eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 12eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich#include <stdio.h> 13eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich#include <stdlib.h> 14eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich#include <math.h> 15eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 16eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichstatic void printGLString(const char *name, GLenum s) { 17eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich const char *v = (const char *) glGetString(s); 18eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich LOGI("GL %s = %s\n", name, v); 19eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich} 20eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 21eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichstatic void checkGlError(const char* op) { 22eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich for (GLint error = glGetError(); error; error 23eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich = glGetError()) { 24eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich LOGI("after %s() glError (0x%x)\n", op, error); 25eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 26eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich} 27eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 28eb69d2ae19c89553c142a7b716fe2ac72e32080aJack PalevichGLuint loadShader(GLenum shaderType, const char* pSource) { 29eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich GLuint shader = glCreateShader(shaderType); 30eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (shader) { 31eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glShaderSource(shader, 1, &pSource, NULL); 32eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glCompileShader(shader); 33eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich GLint compiled = 0; 34eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glGetShaderiv(shader, GL_COMPILE_STATUS, &compiled); 35eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (!compiled) { 36eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich GLint infoLen = 0; 37eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLen); 38eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (infoLen) { 39eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich char* buf = (char*) malloc(infoLen); 40eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (buf) { 41eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glGetShaderInfoLog(shader, infoLen, NULL, buf); 42eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich LOGE("Could not compile shader %d:\n%s\n", 43eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich shaderType, buf); 44eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich free(buf); 45eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 46eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glDeleteShader(shader); 47eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich shader = 0; 48eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 49eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 50eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 51eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich return shader; 52eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich} 53eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 54eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichenum { 55eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich A_POS, 56eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich A_COLOR, 57eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich A_TEX0, 58eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich A_TEX1 59eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich}; 60eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 61eb69d2ae19c89553c142a7b716fe2ac72e32080aJack PalevichGLuint createProgram(const char* pVertexSource, const char* pFragmentSource) { 62eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich GLuint vertexShader = loadShader(GL_VERTEX_SHADER, pVertexSource); 63eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (!vertexShader) { 64eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich return 0; 65eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 66eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 67eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich GLuint pixelShader = loadShader(GL_FRAGMENT_SHADER, pFragmentSource); 68eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (!pixelShader) { 69eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich return 0; 70eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 71eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 72eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich GLuint program = glCreateProgram(); 73eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (program) { 74eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glAttachShader(program, vertexShader); 75eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich checkGlError("glAttachShader v"); 76eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glAttachShader(program, pixelShader); 77eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich checkGlError("glAttachShader p"); 78eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 79eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glBindAttribLocation(program, A_POS, "a_pos"); 80eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glBindAttribLocation(program, A_COLOR, "a_color"); 81eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glBindAttribLocation(program, A_TEX0, "a_tex0"); 82eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glBindAttribLocation(program, A_TEX1, "a_tex1"); 83eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glLinkProgram(program); 84eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich GLint linkStatus = GL_FALSE; 85eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glGetProgramiv(program, GL_LINK_STATUS, &linkStatus); 86eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (linkStatus != GL_TRUE) { 87eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich GLint bufLength = 0; 88eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glGetProgramiv(program, GL_INFO_LOG_LENGTH, &bufLength); 89eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (bufLength) { 90eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich char* buf = (char*) malloc(bufLength); 91eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (buf) { 92eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glGetProgramInfoLog(program, bufLength, NULL, buf); 93eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich LOGE("Could not link program:\n%s\n", buf); 94eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich free(buf); 95eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 96eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 97eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glDeleteProgram(program); 98eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich program = 0; 99eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 100eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 101eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich checkGlError("createProgram"); 102eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glUseProgram(program); 103eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich return program; 104eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich} 105eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 106eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichuint64_t getTime() { 107eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich struct timespec t; 108eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich clock_gettime(CLOCK_MONOTONIC, &t); 109eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich return t.tv_nsec + ((uint64_t)t.tv_sec * 1000 * 1000 * 1000); 110eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich} 111eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 112eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichuint64_t gTime; 113eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichvoid startTimer() { 114eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich gTime = getTime(); 115eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich} 116eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 117eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichvoid endTimer(const char *str, int w, int h, double dc, int count) { 118eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich uint64_t t2 = getTime(); 119eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich double delta = ((double)(t2 - gTime)) / 1000000000; 120eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich double pixels = dc * (w * h) * count; 121eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich double mpps = pixels / delta / 1000000; 122eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich double dc60 = pixels / delta / (w * h) / 60; 123eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 124eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich LOGI("%s, %f, %f\n", str, mpps, dc60); 125eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich} 126eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 127eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichstatic const char gVertexShader[] = 128eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "attribute vec4 a_pos;\n" 129eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "attribute vec4 a_color;\n" 130eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "attribute vec2 a_tex0;\n" 131eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "attribute vec2 a_tex1;\n" 132eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "varying vec4 v_color;\n" 133eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "varying vec2 v_tex0;\n" 134eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "varying vec2 v_tex1;\n" 135eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 136eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "void main() {\n" 137eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich " v_color = a_color;\n" 138eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich " v_tex0 = a_tex0;\n" 139eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich " v_tex1 = a_tex1;\n" 140eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich " gl_Position = a_pos;\n" 141eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "}\n"; 142eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 143eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichstatic const char gShaderPrefix[] = 144eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "precision mediump float;\n" 145eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "uniform vec4 u_color;\n" 146eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "uniform vec4 u_0;\n" 147eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "uniform vec4 u_1;\n" 148eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "uniform vec4 u_2;\n" 149eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "uniform vec4 u_3;\n" 150eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "varying vec4 v_color;\n" 151eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "varying vec2 v_tex0;\n" 152eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "varying vec2 v_tex1;\n" 153eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "uniform sampler2D u_tex0;\n" 154eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "uniform sampler2D u_tex1;\n" 155eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "void main() {\n"; 156eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 157eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichstatic const char gShaderPostfix[] = 158eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich " gl_FragColor = c;\n" 159eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "}\n"; 160eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 161eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 162eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichstatic char * append(char *d, const char *s) { 163eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich size_t len = strlen(s); 164eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich memcpy(d, s, len); 165eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich return d + len; 166eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich} 167eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 168eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichstatic char * genShader( 169eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich bool useVarColor, 170eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich int texCount, 171eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich bool modulateFirstTex, 172eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich int extraMath) 173eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich{ 174eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich char *str = (char *)calloc(16 * 1024, 1); 175eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich char *tmp = append(str, gShaderPrefix); 176eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 177eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (modulateFirstTex || !texCount) { 178eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (useVarColor) { 179eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich tmp = append(tmp, " vec4 c = v_color;\n"); 180eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } else { 181eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich tmp = append(tmp, " vec4 c = u_color;\n"); 182eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 183eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } else { 184eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich tmp = append(tmp, " vec4 c = texture2D(u_tex0, v_tex0);\n"); 185eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 186eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 187eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (modulateFirstTex && texCount) { 188eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich tmp = append(tmp, " c *= texture2D(u_tex0, v_tex0);\n"); 189eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 190eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (texCount > 1) { 191eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich tmp = append(tmp, " c *= texture2D(u_tex1, v_tex1);\n"); 192eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 193eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 194eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (extraMath > 0) { 195eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich tmp = append(tmp, " c *= u_0;\n"); 196eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 197eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (extraMath > 1) { 198eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich tmp = append(tmp, " c *= u_1;\n"); 199eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 200eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (extraMath > 2) { 201eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich tmp = append(tmp, " c *= u_2;\n"); 202eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 203eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (extraMath > 3) { 204eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich tmp = append(tmp, " c *= u_3;\n"); 205eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 206eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 207eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 208eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich tmp = append(tmp, gShaderPostfix); 209eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich tmp[0] = 0; 210eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 211eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich //LOGI("%s", str); 212eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich return str; 213eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich} 214eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 215eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichstatic void setupVA() { 216eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich static const float vtx[] = { 217eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich -2.0f,-1.0f, 218eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 1.0f,-1.0f, 219eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich -2.0f, 1.0f, 220eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 1.0f, 1.0f }; 221eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich static const float color[] = { 222eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 1.0f,0.0f,1.0f,1.0f, 223eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 0.0f,0.0f,1.0f,1.0f, 224eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 1.0f,1.0f,0.0f,1.0f, 225eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 1.0f,1.0f,1.0f,1.0f }; 226eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich static const float tex0[] = { 227eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 0.0f,0.0f, 228eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 1.0f,0.0f, 229eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 1.0f,1.0f, 230eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 0.0f,1.0f }; 231eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich static const float tex1[] = { 232eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 1.0f,0.0f, 233eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 1.0f,1.0f, 234eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 0.0f,1.0f, 235eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 0.0f,0.0f }; 236eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 237eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glEnableVertexAttribArray(A_POS); 238eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glEnableVertexAttribArray(A_COLOR); 239eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glEnableVertexAttribArray(A_TEX0); 240eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glEnableVertexAttribArray(A_TEX1); 241eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 242eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glVertexAttribPointer(A_POS, 2, GL_FLOAT, false, 8, vtx); 243eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glVertexAttribPointer(A_COLOR, 4, GL_FLOAT, false, 16, color); 244eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glVertexAttribPointer(A_TEX0, 2, GL_FLOAT, false, 8, tex0); 245eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glVertexAttribPointer(A_TEX1, 2, GL_FLOAT, false, 8, tex1); 246eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich} 247eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 248eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich////////////////////////// 249eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 250eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich// Tells us what to draw next 251eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 252eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichuint32_t w; 253eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichuint32_t h; 254eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 255eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich// The stateClock starts at zero and increments by 1 every time we draw a frame. It is used to control which phase of the test we are in. 256eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 257eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichint stateClock; 258eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichconst int doLoopStates = 2; 259eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichconst int doSingleTestStates = 2; 260eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichbool done; 261eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 262eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichchar saveBuf[1024]; 263eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 264eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichstatic void doLoop(uint32_t w, uint32_t h, const char *str) { 265965b95468d8325388557003eec24bd70fd22640aJack Palevich int doLoopState = stateClock % doLoopStates; 266965b95468d8325388557003eec24bd70fd22640aJack Palevich // LOGI("doLoop %d\n", doLoopState); 267965b95468d8325388557003eec24bd70fd22640aJack Palevich switch(doLoopState) { 268eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich case 0: 269eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); 270eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 271eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich break; 272eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich case 1: 273eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich strcpy(saveBuf, str); 274eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich startTimer(); 275eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); 276eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich for (int ct=0; ct < 100; ct++) { 277eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 278eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 279eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich break; 280eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 281eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich} 282eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 283eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichstatic void doSingleTest(uint32_t w, uint32_t h, 284eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich bool useVarColor, 285eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich int texCount, 286eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich bool modulateFirstTex, 287eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich int extraMath, 288eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich int tex0, int tex1) { 289965b95468d8325388557003eec24bd70fd22640aJack Palevich int doSingleTestState = (stateClock / doLoopStates) % doSingleTestStates; 290965b95468d8325388557003eec24bd70fd22640aJack Palevich // LOGI("doSingleTest %d\n", doSingleTestState); 291965b95468d8325388557003eec24bd70fd22640aJack Palevich switch (doSingleTestState) { 292eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich case 0: { 293eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich char *pgmTxt = genShader(useVarColor, texCount, modulateFirstTex, extraMath); 294eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich int pgm = createProgram(gVertexShader, pgmTxt); 295eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (!pgm) { 296eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich LOGE("error running test\n"); 297eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich return; 298eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 299eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich int loc = glGetUniformLocation(pgm, "u_tex0"); 300eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich //LOGI("loc = %i \n", loc); 301eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (loc >= 0) glUniform1i(loc, 0); 302eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich loc = glGetUniformLocation(pgm, "u_tex1"); 303eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (loc >= 0) glUniform1i(loc, 1); 304eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 305eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich loc = glGetUniformLocation(pgm, "u_color"); 306eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (loc >= 0) glUniform4f(loc, 1.f, 0.4f, 0.6f, 0.8f); 307eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 308eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich loc = glGetUniformLocation(pgm, "u_0"); 309eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (loc >= 0) glUniform4f(loc, 1.f, 0.4f, 0.6f, 0.8f); 310eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 311eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich loc = glGetUniformLocation(pgm, "u_1"); 312eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (loc >= 0) glUniform4f(loc, 0.7f, 0.8f, 0.6f, 0.8f); 313eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 314eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich loc = glGetUniformLocation(pgm, "u_2"); 315eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (loc >= 0) glUniform4f(loc, 0.9f, 0.6f, 0.7f, 1.0f); 316eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 317eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich loc = glGetUniformLocation(pgm, "u_3"); 318eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (loc >= 0) glUniform4f(loc, 0.88f, 0.2f, 0.4f, 0.2f); 319eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 320eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glActiveTexture(GL_TEXTURE0); 321eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glBindTexture(GL_TEXTURE_2D, tex0); 322eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glActiveTexture(GL_TEXTURE1); 323eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glBindTexture(GL_TEXTURE_2D, tex1); 324eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glActiveTexture(GL_TEXTURE0); 325eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 326eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 327eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glBlendFunc(GL_ONE, GL_ONE); 328eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glDisable(GL_BLEND); 329eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich char str2[1024]; 330eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich sprintf(str2, "%i, %i, %i, %i, %i, 0", 331eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich useVarColor, texCount, modulateFirstTex, extraMath, tex0); 332eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich doLoop(w, h, str2); 333eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 334eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich break; 335eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich case 1: { 336eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich char str2[1024]; 337eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glEnable(GL_BLEND); 338eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich sprintf(str2, "%i, %i, %i, %i, %i, 1", 339eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich useVarColor, texCount, modulateFirstTex, extraMath, tex0); 340eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich doLoop(w, h, str2); 341eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 342eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich break; 343eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 344eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich} 345eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 346eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichvoid genTextures() { 347eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich uint32_t *m = (uint32_t *)malloc(1024*1024*4); 348eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich for (int y=0; y < 1024; y++){ 349eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich for (int x=0; x < 1024; x++){ 350eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich m[y*1024 + x] = 0xff0000ff | ((x & 0xff) << 8) | (y << 16); 351eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 352eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 353eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glBindTexture(GL_TEXTURE_2D, 1); 354eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1024, 1024, 0, GL_RGBA, GL_UNSIGNED_BYTE, m); 355eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 356eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 357eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 358eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 359eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 360eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich for (int y=0; y < 16; y++){ 361eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich for (int x=0; x < 16; x++){ 362eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich m[y*16 + x] = 0xff0000ff | (x<<12) | (y<<20); 363eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 364eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 365eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glBindTexture(GL_TEXTURE_2D, 2); 366eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, m); 367eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 368eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 369eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 370eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 371eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 372eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich} 373eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 374eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichvoid doTest(uint32_t w, uint32_t h) { 375eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich int testState = stateClock / (doLoopStates * doSingleTestStates); 376eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich int texCount; 377eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich int extraMath; 378eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich int testSubState; 379eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if ( testState < 5 * 2) { 380eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich texCount = 0; // Only 10 tests for texCout 0 381eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich extraMath = testState / 2; 382eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich testSubState = testState % 2; 383eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } else { 384eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich texCount = 1 + (testState - 10) / (5 * 8); 385eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich extraMath = testState / 8; 386eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich testSubState = testState % 8; 387eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 388eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (texCount >= 3) { 389965b95468d8325388557003eec24bd70fd22640aJack Palevich // LOGI("done\n"); 390eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich done = true; 391eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich return; 392eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 393eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 394965b95468d8325388557003eec24bd70fd22640aJack Palevich 395965b95468d8325388557003eec24bd70fd22640aJack Palevich // LOGI("doTest %d %d %d\n", texCount, extraMath, testSubState); 396965b95468d8325388557003eec24bd70fd22640aJack Palevich 397eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich switch(testSubState) { 398eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich case 0: 399eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich doSingleTest(w, h, false, texCount, false, extraMath, 1, 1); 400eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich break; 401eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich case 1: 402eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich doSingleTest(w, h, true, texCount, false, extraMath, 1, 1); 403eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich break; 404eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich case 2: 405eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich doSingleTest(w, h, false, texCount, true, extraMath, 1, 1); 406eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich break; 407eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich case 3: 408eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich doSingleTest(w, h, true, texCount, true, extraMath, 1, 1); 409eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich break; 410eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 411eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich case 4: 412eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich doSingleTest(w, h, false, texCount, false, extraMath, 2, 2); 413eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich break; 414eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich case 5: 415eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich doSingleTest(w, h, true, texCount, false, extraMath, 2, 2); 416eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich break; 417eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich case 6: 418eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich doSingleTest(w, h, false, texCount, true, extraMath, 2, 2); 419eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich break; 420eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich case 7: 421eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich doSingleTest(w, h, true, texCount, true, extraMath, 2, 2); 422eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich break; 423eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 424eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich} 425eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 426eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichextern "C" { 427eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich JNIEXPORT void JNICALL Java_com_android_glperf_GLPerfLib_init(JNIEnv * env, jobject obj, jint width, jint height); 428eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich JNIEXPORT void JNICALL Java_com_android_glperf_GLPerfLib_step(JNIEnv * env, jobject obj); 429eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich}; 430eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 431eb69d2ae19c89553c142a7b716fe2ac72e32080aJack PalevichJNIEXPORT void JNICALL Java_com_android_glperf_GLPerfLib_init(JNIEnv * env, jobject obj, jint width, jint height) 432eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich{ 433eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich w = width; 434eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich h = height; 435eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich stateClock = 0; 436eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich done = false; 437eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich setupVA(); 438eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich genTextures(); 439eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 440eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich LOGI("\nvarColor, texCount, modulate, extraMath, texSize, blend, Mpps, DC60\n"); 441eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich} 442eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 443eb69d2ae19c89553c142a7b716fe2ac72e32080aJack PalevichJNIEXPORT void JNICALL Java_com_android_glperf_GLPerfLib_step(JNIEnv * env, jobject obj) 444eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich{ 445eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (! done) { 446965b95468d8325388557003eec24bd70fd22640aJack Palevich if (stateClock > 0 && ((stateClock & 1) == 0)) { 447965b95468d8325388557003eec24bd70fd22640aJack Palevich endTimer(saveBuf, w, h, 1, 100); 448eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 449eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich doTest(w, h); 450eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich stateClock++; 451965b95468d8325388557003eec24bd70fd22640aJack Palevich } else { 452965b95468d8325388557003eec24bd70fd22640aJack Palevich glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); 453eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 454eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich} 455