static void test_mipmap(int maxlevels, int w, int h, unsigned filt) { RD_START("mipmap", "maxlevels=%d, texsize=%dx%d", maxlevels, w, h); display = get_display(); /* get an appropriate EGL frame buffer configuration */ ECHK(eglChooseConfig(display, config_attribute_list, &config, 1, &num_config)); DEBUG_MSG("num_config: %d", num_config); /* create an EGL rendering context */ ECHK(context = eglCreateContext(display, config, EGL_NO_CONTEXT, context_attribute_list)); surface = make_window(display, config, 400, 240); ECHK(eglQuerySurface(display, surface, EGL_WIDTH, &width)); ECHK(eglQuerySurface(display, surface, EGL_HEIGHT, &height)); DEBUG_MSG("Buffer: %dx%d", width, height); /* connect the context to the surface */ ECHK(eglMakeCurrent(display, surface, surface, context)); programObject = get_program(vShaderStr, fShaderStr); link_program(programObject); // Get the attribute locations GCHK(positionLoc = glGetAttribLocation(programObject, "a_position")); GCHK(texCoordLoc = glGetAttribLocation(programObject, "a_texCoord")); // Get the sampler location GCHK(samplerLoc = glGetUniformLocation(programObject, "s_texture")); // Get the offset location GCHK(offsetLoc = glGetUniformLocation(programObject, "u_offset")); // Load the texture GCHK(textureId = CreateMipMappedTexture2D(maxlevels, w, h, filt)); GCHK(glClearColor(0.0f, 0.0f, 0.0f, 0.0f)); GCHK(Draw()); ECHK(eglSwapBuffers(display, surface)); GCHK(glFlush()); #ifndef BIONIC sleep(5); #endif ECHK(eglDestroySurface(display, surface)); #ifdef BIONIC ECHK(eglTerminate(display)); #endif RD_END(); }
bool initialize() override { constexpr char kVS[] = R"(uniform float u_offset; attribute vec4 a_position; attribute vec2 a_texCoord; varying vec2 v_texCoord; void main() { gl_Position = a_position; gl_Position.x += u_offset; v_texCoord = a_texCoord; })"; constexpr char kFS[] = R"(precision mediump float; varying vec2 v_texCoord; uniform sampler2D s_texture; void main() { gl_FragColor = texture2D(s_texture, v_texCoord); })"; mProgram = CompileProgram(kVS, kFS); if (!mProgram) { return false; } // Get the attribute locations mPositionLoc = glGetAttribLocation(mProgram, "a_position"); mTexCoordLoc = glGetAttribLocation(mProgram, "a_texCoord"); // Get the sampler location mSamplerLoc = glGetUniformLocation(mProgram, "s_texture"); // Get the offset location mOffsetLoc = glGetUniformLocation(mProgram, "u_offset"); // Load the texture mTextureID = CreateMipMappedTexture2D(); // Check Anisotropy limits glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &mMaxAnisotropy); glClearColor(0.0f, 0.0f, 0.0f, 0.0f); return true; }
/// // Initialize the shader and program object // int Init ( ESContext *esContext ) { UserData *userData = esContext->userData; GLbyte vShaderStr[] = "uniform float u_offset; \n" "attribute vec4 a_position; \n" "attribute vec2 a_texCoord; \n" "varying vec2 v_texCoord; \n" "void main() \n" "{ \n" " gl_Position = a_position; \n" " gl_Position.x += u_offset;\n" " v_texCoord = a_texCoord; \n" "} \n"; GLbyte fShaderStr[] = "precision mediump float; \n" "varying vec2 v_texCoord; \n" "uniform sampler2D s_texture; \n" "void main() \n" "{ \n" " gl_FragColor = texture2D( s_texture, v_texCoord );\n" "} \n"; // Load the shaders and get a linked program object userData->programObject = esLoadProgram ( vShaderStr, fShaderStr ); // Get the attribute locations userData->positionLoc = glGetAttribLocation ( userData->programObject, "a_position" ); userData->texCoordLoc = glGetAttribLocation ( userData->programObject, "a_texCoord" ); // Get the sampler location userData->samplerLoc = glGetUniformLocation ( userData->programObject, "s_texture" ); // Get the offset location userData->offsetLoc = glGetUniformLocation( userData->programObject, "u_offset" ); // Load the texture userData->textureId = CreateMipMappedTexture2D (); glClearColor ( 0.0f, 0.0f, 0.0f, 0.0f ); return TRUE; }
/// // Initialize the shader and program object // int Init ( ESContext *esContext ) { UserData *userData = esContext->userData; char vShaderStr[] = "#version 300 es \n" "uniform float u_offset; \n" "layout(location = 0) in vec4 a_position; \n" "layout(location = 1) in vec2 a_texCoord; \n" "out vec2 v_texCoord; \n" "void main() \n" "{ \n" " gl_Position = a_position; \n" " gl_Position.x += u_offset; \n" " v_texCoord = a_texCoord; \n" "} \n"; char fShaderStr[] = "#version 300 es \n" "precision mediump float; \n" "in vec2 v_texCoord; \n" "layout(location = 0) out vec4 outColor; \n" "uniform sampler2D s_texture; \n" "void main() \n" "{ \n" " outColor = texture( s_texture, v_texCoord ); \n" "} \n"; // Load the shaders and get a linked program object userData->programObject = esLoadProgram ( vShaderStr, fShaderStr ); // Get the sampler location userData->samplerLoc = glGetUniformLocation ( userData->programObject, "s_texture" ); // Get the offset location userData->offsetLoc = glGetUniformLocation ( userData->programObject, "u_offset" ); // Load the texture userData->textureId = CreateMipMappedTexture2D (); glClearColor ( 1.0f, 1.0f, 1.0f, 0.0f ); return TRUE; }